Every WordPress site collects dead links. Slugs get edited, posts get trashed, and that source you cited in 2019 quietly went offline.
Ahrefs puts 66.5% of links from the past nine years as already dead. Your site is not the exception.
Learning how to fix broken links in WordPress takes less time than most people assume, and the payoff lands in two places: recovered link equity, and visitors who stop hitting 404s halfway through your best content.
What this guide covers:
- Finding dead links with Search Console, Screaming Frog, and plugin scans
- Repairing internal links, broken images, and outbound citations
- Setting up 301 redirects and reclaiming backlinks from deleted URLs
- Stopping the whole thing from happening again
What Is a Broken Link in WordPress
A broken link in WordPress is a hyperlink pointing to a resource that no longer returns a 200 status code. The target responds with 404, 410, 500, or a soft 404 instead. Broken links live in post content, navigation menus, widgets, and media references.
The distinction matters because WordPress stores links differently depending on where they sit.
Post and page links are saved as raw markup inside the wpposts table, which is where WordPress pages are stored along with every URL you ever typed into the editor.
Menu links live in wppostmeta. Widget URLs sit in wpoptions as serialized arrays. Three storage locations, three different repair methods.
| Link type | Where it lives | Typical cause |
|---|---|---|
| Internal | post_content, menus, widgets | Slug edits, deleted posts |
| External | Outbound citations, comments | Third-party site removal |
| Media | img src, gallery blocks | Deleted uploads, migration paths |
What is not a broken link: a URL returning 301, a nofollow link, or a page behind a login wall. Those return valid responses.
Have you seen the latest WordPress statistics?
Discover the latest WordPress statistics: market share, security trends, performance data, and revenue insights that shape the web.
Check Them Out →Internal Broken Links Versus External Broken Links
Internal: you control both ends. The link and the target sit on your domain, so a fix takes 30 seconds in the editor.
External: you control the link, nobody controls the target. The site owner deleted the page, restructured their URLs, or let the domain expire.
Pew Research Center found in its May 2024 analysis that 25% of all webpages that existed between 2013 and 2023 are gone. Your outbound links decay whether you touch them or not.
Broken Links Versus Broken Redirect Chains
A redirect is not a broken link. A chain of them starts behaving like one.
Google’s site migration documentation states Googlebot follows up to 10 redirect hops before giving up, and recommends staying at or below 3.
Past that point Search Console flags a redirect error and drops the URL from indexing. Same practical outcome as a 404, different status code.
Why WordPress Sites Accumulate Broken Links
WordPress sites accumulate broken links through 6 recurring events: permalink structure changes, post deletions without redirects, slug edits in the editor, plugin deactivation, media file removal, and domain migrations. Each one silently invalidates URLs already published, shared, and indexed.
Permalink changes cause the most damage per action.
Switching from /?p=123 to /%postname%/ rewrites every URL on the site at once. Removing the category base does the same to your archive structure, which is why removing the category from your WordPress URLs without a redirect rule breaks every existing category link.
If the rewrite rules do not flush properly afterward, you get the classic case of WordPress permalinks not working across the whole site rather than on a handful of posts.
The other five, ranked by how often I actually find them:
- Slug edits: someone rewrites a title in Gutenberg, the slug updates, the old URL dies
- Deleted posts: trashed without checking what linked to them first
- Media deletion: files removed via FTP while the Media Library entry stays behind
- Plugin deactivation: shortcode-generated URLs vanish and leave raw text
- HTTP to HTTPS moves: hardcoded
http://links sitting in old post content
Age is the strongest predictor. Ahrefs data puts 66.5% of links from the past nine years as dead, and Pew found 2023 pages already failing at 8% less than a year after publication.
How Broken Links Affect Rankings and Crawl Budget
Broken links do not carry a direct ranking penalty. Google treats 404 and 410 responses as normal web behavior. The real cost sits in lost link equity, wasted crawl requests on large sites, and users hitting dead ends on pages that used to convert.
John Mueller stated it plainly on Reddit in January 2026: 404s and 410s are not a negative quality signal, and that is how the web is supposed to work.
He went further in a 2021 Search Central hangout, calling it perfectly natural for 30-40% of URLs in a Search Console report to return 404s on a site with high content churn.
So what actually costs you something:
- Link equity stops flowing through any internal link pointing at a dead page
- Backlinks to deleted URLs pass nothing until you redirect them
- Broken links inside menus and footers multiply across every template on the site
- Soft 404s pollute the index with pages that return 200 and contain nothing
Crawl budget is the part most people get wrong.
Google’s crawl budget documentation scopes the topic to sites above 1 million unique pages updated weekly, or 10,000 pages changing daily. Gary Illyes confirmed in 2025 that the million-page threshold has not moved since 2020.
Below that, a blog with 400 posts and 60 dead outbound links has a user experience problem, not a crawl budget problem. Fix it anyway, just stop calling it crawl waste.
Pages nobody links to internally are a separate issue worth auditing at the same time, since orphaned content in WordPress and broken internal links usually show up in the same crawl report.
How to Find Broken Links in WordPress
Broken link detection in WordPress uses 4 primary methods: Google Search Console for indexed 404s, a desktop crawler like Screaming Frog for full-site response codes, a plugin such as Broken Link Checker for in-dashboard scanning, and Ahrefs or Semrush for scheduled audits plus backlink data.
| Tool | Finds | Best for |
|---|---|---|
| Search Console | Indexed 404s, soft 404s | Free baseline, Google’s own view |
| Screaming Frog | All response codes, source pages | One-off deep audits |
| Broken Link Checker | Post, page, comment, custom field links | Non-technical site owners |
| Ahrefs Site Audit | Internal 404s plus 404s with backlinks | Recurring monitoring |
Google Search Console Method
Open the Pages report and look at two sections: Not found (404) and Soft 404.
Search Console shows you what Google found, not what exists. URLs appear here only after Googlebot has crawled them, so freshly broken links lag behind by days.
The Links report gives you internal link counts, useful for spotting which dead URL is still receiving link equity from 40 places.
Screaming Frog Crawl Method
Free version caps at 500 URLs. Paid runs unlimited at roughly $259 per year.
Run the crawl, open the Response Codes tab, filter to Client Error (4xx).
The part that saves real time is the Inlinks panel at the bottom. Click any 404 and it tells you exactly which page contains the offending link, so you are not searching the database for a URL string.
For redirect problems, Reports > Redirects > Redirect Chains maps every chain and flags loops separately.
WordPress Plugin Scanning Method
Broken Link Checker by WPMU DEV sits at over 600,000 active installations and reports finding 50,000+ broken links daily across its user base.
The plugin scans posts, pages, comments, and custom fields, then lets you edit or unlink directly from the dashboard.
Rank Math and AIOSEO bundle similar checks. Yoast handles redirects in its Premium tier.
Why Local-Scan Plugins Slow Down Servers
Local scanning fires HTTP requests from your own server, one per link, on a cron schedule.
On shared hosting with 8,000 links, that is 8,000 outbound requests competing with page loads. WPMU DEV moved the plugin to cloud-based checking for this reason and claims 20x faster detection.
How to Fix Broken Internal Links
Internal broken links are fixed 3 ways: editing the link directly in the block editor when the target moved, running a bulk find and replace across the database for sitewide URL patterns, or removing the link entirely when the destination no longer exists. Back up the database first.
Single link, target still exists: open the post, click the link, paste the corrected URL. Done in under a minute.
Hundreds of links, same pattern: bulk replace. Better Search Replace by WP Engine is the standard here, and it handles serialized data correctly.
That last part is not optional trivia.
Serialized strings store a byte count alongside the value, like s:45. Change the URL with a raw SQL query and the string length changes while the byte count does not, which corrupts every widget and theme option stored in that array.
WP-CLI handles the same job faster if you have SSH access:
wp search-replace 'old-url' 'new-url' --dry-runfirst, always- Add
--preciseto force PHP serialization handling - Target specific tables (
wpposts,wppostmeta) to cut runtime
Elementor sites need one extra step. Elementor stores layout data in its own serialized format that standard search-replace skips, so run its built-in URL replacement tool under Elementor > Tools, then regenerate CSS.
Menu items and widget URLs get fixed manually under Appearance > Menus and Appearance > Widgets. No plugin catches those reliably.
Once the broken ones are cleared, the same audit tells you where new connections belong, which is the practical case for adding internal links in WordPress to the pages that lost equity.
How to Set Up Redirects for Deleted Pages
Deleted pages need a 301 redirect to the closest relevant live page, or a 410 status if nothing equivalent exists. Redirects are managed through the Redirection plugin, Rank Math, Yoast SEO Premium, or server-level rules in .htaccess or nginx.conf.
| Status | Meaning | Use when |
|---|---|---|
| 301 | Moved permanently | Content lives at a new URL |
| 302 | Found, temporary | Short-term swap, page returns |
| 404 | Not found | Page may come back |
| 410 | Gone | Deleted for good, no replacement |
301 Redirects for Permanently Moved Content
The Redirection plugin by John Godley passes 2 million active installations and logs 404 hits automatically, which turns the plugin into a detection tool as well as a fix.
Source URL in, target URL out, regex supported for pattern matching.
Google treats 301 and 308 as canonical signals, and has confirmed permanent redirects do not lose PageRank.
410 Status for Permanently Removed Content
Use 410 when you killed the content deliberately. Spam pages you cleaned up, expired campaign URLs, thin posts you pruned.
Mueller has said repeatedly there is no SEO difference between 404 and 410 in practice. Google drops 410s from the crawl queue marginally faster because the signal removes ambiguity.
Practical rule: 404 if it might return, 410 if it never will.
Server-Level Redirects Versus Plugin Redirects
Server-level (.htaccess, nginx.conf): fires before PHP loads. Faster, no database query, survives plugin deactivation.
Plugin-based: easier to manage, gives you a UI and a 404 log, adds a small amount of PHP execution per request.
On a site with 30 redirects, nobody will measure the difference. On a site with 4,000 after three migrations, move them to the server config.
One thing to skip entirely: blanket redirects to the homepage. Google reads those as soft 404s, and the visitor who wanted a specific product page gets dumped on your hero section instead. Handling 404 errors in WordPress properly means matching each dead URL to its closest topical equivalent or letting it return 404 honestly.
How to Fix Broken Image Links and Media Library Errors
Broken image links in WordPress stem from 4 causes: incorrect src paths after migration, wrong folder permissions on wp-content/uploads, missing thumbnail sizes, and Media Library entries pointing to files deleted outside WordPress. Standard link checkers miss most of them.
Migration is the usual suspect.
Moving from staging to production leaves absolute URLs in postcontent pointing at the old domain. The images exist, the paths do not resolve, and you get WordPress images not showing across dozens of posts at once.
Fix it with the same bulk replace used for internal links, targeting wpposts and wppostmeta.
Permissions come second:
- Directories: 755
- Files: 644
- Never 777 on any directory, uploads included
WordPress developer documentation is explicit on this. If uploads sit at 644 instead of 755, the directory loses its execute bit and nothing inside it can be reached, which produces broken images and upload failures at the same time. Ownership is usually the actual culprit rather than the permission number, so check that the web server user owns the files before you fix WordPress permissions across the install.
Missing thumbnail sizes: Regenerate Thumbnails rebuilds every registered image size. Run it after theme changes that introduce new dimensions.
Ghost Media Library entries: the attachment record survives in the database after someone deletes the file over FTP. The Library shows a grey placeholder, the front end shows a broken image icon. That specific mismatch is one of the more common causes behind a WordPress Media Library error, and the fix is deleting the orphaned attachment record, not re-uploading over it.
Hotlinked external images break the same way outbound links do. Host your own copies or accept that someone else’s server decides whether your post looks finished.
How to Fix Broken External Links
Broken external links are fixed 3 ways: swapping the dead URL for an archived Wayback Machine snapshot, replacing it with a current equivalent source, or stripping the link and leaving the citation as plain text. You control the link, never the destination.
Outbound decay is not a maintenance failure. It is arithmetic.
Pew Research Center found that 54% of Wikipedia pages carry at least one dead reference link, alongside 23% of news pages and 21% of government pages. Wikipedia has thousands of volunteer editors. Your blog has you.
| Situation | Fix |
|---|---|
| Source moved, content intact | Update to the new URL |
| Source gone, still worth citing | Link the Wayback Machine capture |
| Domain expired or parked | Remove the link entirely |
| Newer research exists | Replace the citation outright |
Automattic and the Internet Archive shipped a free plugin for exactly this problem.
The Internet Archive Wayback Machine Link Fixer scans post content for outbound links, checks each against the archive, creates a snapshot when none exists, and routes visitors to the preserved copy once the original dies. It reverts to the live URL if the page comes back.
The archive it draws from crossed 1 trillion pages on October 22, 2025, and adds over 498 million more per day.
Two categories most people never audit:
- Comment links: user-submitted URLs rot faster than anything you wrote yourself, and expired domains in old comments now point at parked ad pages or worse. Once the dead-link ratio outweighs the discussion value, deleting all the comments in WordPress in bulk beats auditing them one by one
- Affiliate links: merchants kill programs and product URLs constantly. Cloakers like Pretty Links or ThirstyAffiliates route everything through
/go/slugs, so one edit updates every post at once
Expired domain risk deserves more attention than it gets. Google added expired domain abuse to its spam policies in March 2024, which tells you how routinely dead domains get bought and repurposed for low-value content.
How to Reclaim Backlinks Pointing to Broken URLs
Backlink reclamation maps dead URLs that still receive external links to the closest live equivalent, then redirects them with a 301. The work takes an hour and recovers link equity that has been sitting idle since the page was deleted.
This is the highest-return item on the entire broken link list, and most audits skip it.
| Tool | Report | Surfaces |
|---|---|---|
| Ahrefs | Best by links + 404 filter | Dead pages ranked by referring domains |
| Ahrefs | Broken backlinks | Referring page, anchor, surrounding text |
| Semrush | Backlink Audit | Target URLs returning errors |
Sort by referring domains rather than URL Rating. One dead page with 40 linking domains beats twelve with two apiece.
Then map each one:
- Dead product page to the current product, not the category
- Deleted post to the article that replaced it
- Old resource hub to the closest topical equivalent
- Nothing relevant exists? Leave the 404 and move on
Ahrefs is blunt about the cost of ignoring this: backlinks pointing at 404s waste link equity that could be flowing to live pages instead.
Redirecting an irrelevant 404 somewhere convenient passes close to nothing, and Google reads homepage dumping as a soft 404 anyway.
Outreach is the last step, worth it only when the target changed substantially. A short note to the linking editor with the corrected URL works more often than people expect, mostly because you are saving them a broken link on their own site.
How to Prevent Broken Links from Coming Back
Broken link prevention runs on 4 controls: automatic redirect creation when slugs change, scheduled crawls with email alerts, a locked permalink structure, and a content deletion policy that checks inbound links before anything gets trashed.
Turn on automatic redirects first. Rank Math and Yoast SEO Premium both generate a 301 the moment you edit a published slug. Redirection logs every 404 hit whether you configured a rule or not.
That single setting removes the most common cause of internal breakage on an active blog.
Monitoring cadence that actually holds up:
- Search Console email alerts, always on, zero effort
- Ahrefs Site Audit or Semrush Site Audit on a weekly schedule
- Screaming Frog scheduled crawl monthly for full response code coverage
- Quarterly outbound audit on cornerstone content, since Pew measured an 8% failure rate on links less than a year old
Broken Link Checker emails you when a scan finds something. If those alerts never arrive, the cause is almost always WordPress not sending email rather than a clean scan result.
Lock the permalink structure after launch. Nothing on an established site justifies rewriting every URL, and no redirect plan survives that change cleanly.
Before trashing any post, check two things: which internal pages link to it, and whether it holds backlinks. Thirty seconds in Search Console or Ahrefs prevents a redirect you will hunt for eight months later.
The Link Fixer plugin rescans posts every 3 days by default, which handles outbound links passively while you focus on internal structure.
Across a portfolio the arithmetic changes. Managing multiple WordPress sites means one crawl schedule and one alert inbox, not fifteen dashboards you check when something already broke.
What a Custom 404 Page Handles That Redirects Cannot
A custom 404 page catches every dead URL you never mapped: typos, scraped links with mangled paths, bot-generated requests, and old URLs nobody remembered. Redirects handle known losses. The 404 template handles everything else.
One rule outranks every design decision here.
The page must return an actual 404 status code. A styled “not found” screen returning 200 is a soft 404, which tells Google the URL is a valid page containing nothing.
| Element | Purpose |
|---|---|
| Plain “page not found” message | Tells the visitor what happened |
| Search box | Provides a recovery path when nothing else fits |
| Popular posts or category links | Gives a second chance at engagement |
| Site header and footer | Keeps the visitor oriented |
Classic themes read 404.php from the active theme directory. Block themes handle it through the 404 template in the Site Editor, no PHP required.
Setting up a custom WordPress 404 error page takes minutes either way, and the template file loads automatically when WordPress cannot resolve a request.
A working search field does more for recovery than any illustration. Worth adding a search bar in WordPress to the template if your theme ships without one.
Tracking: GA4 does not separate 404 hits by default. Build a custom event through a Page View trigger, which is straightforward once you install Google Tag Manager on WordPress.
ModCloth ran one of the better retail examples: casual copy explaining the error, links to major categories, and a discount offer sitting right on the error page.
Two things to leave off. Bing’s own guidance warns against automated search widgets on 404 templates, since crawled widget results can generate their own error pages and create a loop.
And skip the full sidebar with a related-posts query. That template fires on every bot request hitting a dead URL, and a heavy 404 page burns server resources on traffic that will never convert.
Empty search results, zero-post category archives, and paginated URLs past the last real page all return 200 with nothing on them. Noindex those through Rank Math, Yoast, or AIOSEO before they show up in the Soft 404 report.
FAQ on How To Fix Broken Links In WordPress
Do broken links hurt SEO in WordPress?
Not directly. John Mueller has confirmed 404s and 410s are not a negative quality signal. The damage is indirect: lost link equity on internal links, dead backlinks passing nothing, and visitors bouncing off error pages.
What is the best free plugin for finding broken links?
Broken Link Checker by WPMU DEV, with over 600,000 active installations. It scans posts, pages, comments, and custom fields, then lets you edit or unlink from the dashboard. Use cloud mode, not local scanning.
Should I redirect every 404 to my homepage?
No. Google reads homepage redirects as soft 404s, and the visitor who wanted a specific product lands somewhere useless. Redirect to the closest relevant page, or let the URL return 404 honestly.
How do I fix broken links after changing permalinks?
Flush rewrite rules by re-saving Settings > Permalinks first. Then add redirect rules covering the old structure through the Redirection plugin or .htaccess. Regex patterns handle bulk structures faster than individual entries.
Why are my images broken after migrating WordPress?
Absolute URLs pointing at the old domain stay embedded in post content after migration. Run Better Search Replace across wpposts and wppostmeta, then verify uploads sits at 755 permissions with correct file ownership.
What is the difference between a 404 and a soft 404?
A 404 returns the correct status code telling crawlers the page is gone. A soft 404 shows error content while returning 200, so Google treats an empty page as valid and indexable.
Does Broken Link Checker slow down my site?
Local scanning does. The plugin fires one outbound HTTP request per link from your own server on a cron schedule. WPMU DEV’s cloud mode moves that load off your hosting entirely.
How often should I check for broken links?
Weekly automated crawls through Ahrefs Site Audit or Semrush, monthly Screaming Frog runs for full response codes, and a quarterly outbound audit on cornerstone content. Search Console alerts cover everything between those checks.
Can I fix broken links without a plugin?
Yes. WP-CLI handles bulk replacement with wp search-replace, and server-level redirects live in .htaccess or nginx.conf. Both run faster than PHP-based plugins and survive plugin deactivation. Always dry-run first.
What happens to backlinks pointing to a deleted page?
They pass nothing until you redirect them. Find affected URLs through the Ahrefs Best by links report filtered to 404, then 301 each one to its closest live equivalent rather than a generic category.
Conclusion
Knowing how to fix broken links in WordPress matters less than deciding which ones actually deserve your afternoon.
Start with the dead URLs still holding backlinks. Then internal links buried in menus and templates, where one broken entry multiplies across every page.
Everything else can wait, and some of it should stay a 404 permanently.
Turn on automatic redirect creation for slug changes today. That single toggle prevents more link rot than any weekend cleanup session.
Then schedule the crawls and stop thinking about it. Ahrefs weekly, Screaming Frog monthly, Search Console alerts running quietly in the background.
Link rot is maintenance, not a project. Sites that treat it that way never end up staring at a 400-URL repair list.


