Every WordPress site accumulates broken links over time. Pages get deleted, slugs change, external sites disappear, and the links pointing at them silently turn into 404 errors that hurt user experience and chip away at SEO. This guide covers why broken links happen, how to find them without slowing your site down, and how to fix them in the way that preserves the most value – update, redirect, or remove.
What "broken link" actually means#
A broken link is any hyperlink that no longer goes where it was supposed to. The browser asks for the URL, the server (yours or someone else’s) returns a 404 Not Found, a 410 Gone, a 5xx error, or a redirect chain that never resolves. Visitors see an error page instead of content, and search engines downgrade the linking page over time because the path it advertises does not work.
Broken links come in two flavours:
- Internal broken links point at pages on your own WordPress site. You control the destination, so you can usually fix these properly with a redirect or content update.
- External broken links point at other websites you do not control. The destination went down, was renamed, or the whole site disappeared. Your only options are to update, replace, or remove the link.
Why broken links happen#
A handful of root causes account for almost every broken link on a typical WordPress site.
| Cause | Internal or external | What actually broke |
|---|---|---|
| You deleted a post or page | Internal | Other posts still link to its old URL, returning 404 |
| You changed the slug without setting a redirect | Internal | Old URL stops working, new URL has no inbound links yet |
| You restructured permalinks | Internal | Every old URL pattern breaks at once |
| You moved a media file or deleted from library | Internal | Image links and document downloads return 404 |
| You migrated the site between domains | Internal | Old absolute URLs (often hardcoded) point at the wrong domain |
| External site went down or shut down | External | Destination server returns 5xx or DNS does not resolve |
| External site moved or renamed pages | External | Destination returns 404 or redirect to homepage |
| External site removed content | External | Destination returns 404 or 410 |
| Typo in the original link | Either | The URL was never right – silently broken from day one |
| HTTP to HTTPS migration on the destination | External | The
http://
link 301-redirects (working) or breaks |
The first three are the most common on long-running sites. Slug changes without redirects, in particular, are a steady source of new broken links every time someone edits a post title and lets WordPress regenerate the slug.
How to find broken links#
There are four practical ways to audit a site for broken links. Each has trade-offs – use the one that matches the size of the site and how often you want to check.
1. Google Search Console (best for ongoing monitoring)
Free, accurate, and zero performance hit on your site. Search Console reports every URL where Google encountered an error during crawling.
- Go to Search Console > Indexing > Pages.
- Look at the Why pages aren’t indexed section.
- Click Not found (404) to see every URL Google found that returns 404.
The catch: Search Console only shows broken URLs that Google has actually crawled. It does not show internal broken links inside the body of your pages, only the destinations Google tried to follow. It is the right tool for “what is search-engine-visible,” not “what is on my site.”
For finding internal broken links inside post bodies, combine Search Console with one of the options below.
2. External crawlers (best for full-site audits)
Tools like Ahrefs, Semrush, Screaming Frog, and Sitebulb crawl your site from the outside the same way Google does. They produce a complete report of every link on every page, flagged with HTTP status code.
- Ahrefs Site Audit and Semrush Site Audit are paid SaaS tools. They run weekly or monthly and email a report.
- Screaming Frog is a desktop crawler. Free up to 500 URLs, paid for unlimited. Produces a CSV you can sort and filter.
- Sitebulb is similar to Screaming Frog with more visualisation.
These are the right tools for one-off audits or for sites that have accumulated years of content. They run from outside your server, so there is no performance cost – the only cost is the tool.
3. WordPress plugins (convenient, but watch for performance)
Plugins like Broken Link Checker (originally by ManageWP, now maintained by WPMU DEV) scan your post and page content from inside WordPress and flag broken links in the dashboard.
The convenience is real – everything happens inside wp-admin, the report shows up next to each affected post, and you can edit links inline. The cost is also real:
- The plugin runs scheduled checks via WP-Cron, hammering your database and (depending on configuration) making outbound HTTP requests for every link on every page.
- On large sites, this slows down the admin and can be flagged by hosts as abusive outbound traffic.
- Some shared hosts disable or rate-limit plugins that make many outbound requests.
If you have fewer than 500 posts, Broken Link Checker is fine. Above that, switch to an external crawler. The newer Cloud version of Broken Link Checker offloads the scanning to WPMU DEV’s servers, which fixes the performance problem but requires a paid subscription.
4. Manual spot checks (for specific pages)
For a single high-value page (your homepage, a popular blog post, your contact page), the fastest check is to open the page in a browser and click every link. For a more thorough check, use a browser extension like Check My Links (Chrome) or LinkChecker (Firefox), which highlights broken links inline as you load a page.
This is impractical for a whole site but the right tool when you want to verify one page after editing it.
How to fix broken links#
Once you know what is broken, the fix depends on whether the link is internal or external, and what you want to happen when someone follows it.
Fix 1: Update the link
The simplest fix. The destination still exists, just at a different URL. Edit the linking post and replace the old URL with the new one.
This is the right fix when:
- The destination page moved to a new URL on the same site
- An external site reorganised and the new location is easy to find
- The original link had a typo
Edit the post in the WordPress block editor, click the linked text, and use the link toolbar to update the URL. For details on how WordPress handles link insertion and editing, see how to insert and edit hyperlinks in WordPress.
If many posts link to the same broken URL, doing this manually is tedious. The faster path is a database search-and-replace using Better Search Replace (a free plugin) or
wp search-replace
from the command line. This swaps every instance of the old URL for the new one across the entire database, including in serialised data. Be cautious – always run with the dry run option first to confirm what will change, and back up the database before the real run.
Fix 2: Set up a 301 redirect (best for SEO)
When you delete a page, change its slug, or restructure your permalinks, a 301 redirect from the old URL to the new one preserves the link equity. Search engines treat the new URL as the successor and pass most of the ranking signal across.
The mechanics of slug changes are covered in detail in how to change the WordPress URL slug – that article explains the WordPress-side automatic redirect that handles single slug changes, and when you need to set up the redirect manually.
For bulk redirects (after a domain change, permalink structure change, or large content reorganisation):
- Redirection is the most popular free WordPress plugin for managing redirects. It logs 404s automatically, lets you set up redirects from a clean UI, and supports regex patterns for bulk matching.
- Yoast SEO Premium and Rank Math include redirect managers as part of their broader SEO toolkits.
- Server-level redirects in nginx or Apache config are faster than plugin-driven redirects (no PHP overhead) but require host access. For nginx, a simple
return 301 https://example.com/new-url;line in the config handles a single redirect.
301 vs 302 matters for SEO. A 301 (permanent redirect) tells search engines to update the index. A 302 (temporary redirect) tells them to keep the old URL in the index because the redirect is short-term. For broken-link cleanup, you almost always want 301. The full mechanics of each redirect type are covered in HTTP 307 temporary redirect and 308 permanent redirect explained.
If your site changed its URL structure entirely (apex to www, HTTP to HTTPS, old domain to new), how to change your WordPress domain name covers the redirect setup that catches every old URL pattern in one rule.
Fix 3: Use a 410 Gone for content you deliberately removed
If you deleted content because it was outdated, low-quality, or no longer relevant – and there is no successor page to redirect to – returning a 410 Gone is the right answer. 410 tells search engines “this is permanently gone, drop it from the index.” It is faster than 404 for removal and signals intent.
Use 410 when:
- You consolidated thin posts into one larger guide and the originals should disappear from search
- You took down a campaign page or seasonal content that will never come back
- You removed content for legal or copyright reasons
The mechanics, including server-config snippets for nginx and Apache, are in HTTP 410 Gone: what it means and when to use it.
Fix 4: Remove the link
If the destination is gone and there is no good replacement, remove the link entirely. The surrounding text usually still works without it – either rephrase to drop the reference or leave the text in place without the hyperlink.
This is the right fix for:
- External links to sites that no longer exist with no successor
- Citations of content that was removed for credibility reasons
- Links to old social media profiles that have been deleted
- Links to free tools or services that shut down
Removing the link is better than leaving a broken one. A broken external link looks lazy and reflects badly on the site even if the destination’s disappearance is not your fault.
Fix 5: Replace with an archived copy
For broken external links to content you genuinely needed (a study, a key reference, a deleted blog post you cited), check the Internet Archive’s Wayback Machine at
https://web.archive.org/
. If the page was archived before it disappeared, you can link to the archived version.
This is the only option that preserves the original citation when the destination is permanently gone. It is not always available – many pages were never archived – but worth checking before you remove a load-bearing reference.
Common mistakes#
A few patterns that come up over and over.
- Redirecting every 404 to the homepage. This is technically possible with a global “redirect all 404s” rule, but it is bad for SEO and bad for users. A user who clicked a link expecting an article on memory leaks does not want to land on your homepage. Search engines treat homepage redirects from many old URLs as a signal that the redirects are not meaningful and may stop following them. Redirect to a relevant successor page or let the 404 stand.
- Leaving redirect chains. If
/oldredirects to/middlewhich redirects to/new, fix the source so/oldredirects directly to/new. Each hop adds latency and dilutes link equity. The mechanics of when chains turn into too many redirects are covered separately. - Using 302 (temporary) when you mean 301 (permanent). 302 tells search engines to keep the old URL in the index. For a permanent move – which is almost every broken-link fix – use 301.
- Fixing internal links once and never auditing again. Slug changes happen during normal editing. Add a recurring audit (Search Console weekly, full crawl quarterly) so the next batch is small.
- Trying to fix every external broken link. Some external sites disappear and there is nothing to do but remove the link. Spending hours hunting for a perfect replacement is rarely worth it.
- Forgetting to redirect after a permalink structure change. Switching from
/?p=123to/category/post-name/breaks every old URL at once. Set up a redirect rule that maps the old structure to the new one before flipping the switch. The full process is in WordPress permalinks: how to configure them for SEO. - Not testing the fix. After setting up a redirect, open the old URL in a private browser window. Confirm it lands on the right page with a 301 status (use a browser DevTools Network tab or
curl -I <url>from the command line).
When to audit and how often#
For a site that is actively growing and edited weekly, run:
- Google Search Console: check the Pages report monthly. Catch new 404s before they accumulate.
- External crawler audit: full site crawl quarterly. Catches internal broken links that Search Console misses.
- Pre-publish check: when publishing a new post, click every link before hitting publish. Most broken links in new posts are typos that a 30-second check would catch.
- Post-restructure check: after any change that touches URLs (slug edits, permalink change, domain migration), do a targeted crawl within 48 hours and add redirects for anything broken.
For a static site that rarely changes, a quarterly audit is enough. For a high-traffic site or one with active content marketing, monthly is the right cadence.
Summary#
Broken links accumulate on every WordPress site. The right approach is a combination: Google Search Console for ongoing monitoring, an external crawler for periodic audits, and a deliberate fix decision for each one – update if the destination moved, 301 redirect if you control the destination and want to preserve SEO, 410 if you removed the content deliberately, remove the link if there is nothing to point at. The plugin-based “scan from inside WordPress” approach works for small sites but slows down larger ones, so external tools are usually the better long-term answer.
Most importantly: do not redirect every broken URL to the homepage. Redirect to a relevant successor or let the 404 stand. The wrong fix is worse than no fix at all.