How to Find and Fix Broken Links in WordPress

A broken link is a link that points at a page that no longer resolves — it returns a 404 “not found”, a server error, or times out entirely. On a small site you might have none. On a WordPress site that’s been publishing for a few years, you almost certainly have dozens you don’t know about: a post you deleted, a product page you renamed, an external site that quietly shut down. Every one of them is a dead end for a reader who clicked expecting something to be there.
The good news is that broken links are cheap to fix and easy to find in bulk. This guide walks through why they matter, the difference between the two kinds you’ll run into, the free tools that surface them, and — the part most articles skip — how to actually fix each one properly instead of just deleting the link and moving on.
Why broken links are worth fixing
Three separate things go wrong when a link breaks, and they’re worth keeping distinct because people tend to overstate the SEO one and understate the others.
- User experience. This is the big one. A visitor clicks a link expecting an answer and lands on a 404 page. That’s a small betrayal of trust, and it happens most often on your best-performing old posts — the ones with the most links and the most traffic. Nobody bounces harder than a reader who hit a dead end.
- Crawl budget. Search engines allocate a rough budget of how many URLs they’ll crawl on your site in a given window. Every dead internal link they follow is a request spent discovering nothing. On a large site this genuinely matters; on a 40-page blog it’s a rounding error, so don’t lose sleep over it if you’re small.
- SEO, modestly. Broken internal links waste the link equity that would otherwise flow to a real page, and broken outbound links are a weak quality signal. There’s no penalty and no dramatic ranking drop — anyone telling you broken links are tanking your rankings is selling something. It’s a minor, cumulative factor, not a cliff.
Put plainly: fix broken links mainly because they annoy real people, and treat the SEO angle as a small bonus rather than the reason.
Internal vs. external broken links
Before you start scanning, it helps to know that the two kinds of broken link have very different causes and very different fixes.
| Type | What it is | Usual cause | Who can fix it |
|---|---|---|---|
| Internal | A link from one page on your site to another page on your site | You changed a permalink, deleted a post, or moved a page without a redirect | You — completely within your control |
| External | A link from your site out to someone else’s site | The other site removed the page, restructured, or went offline | You can only re-point or remove the link; you can’t fix their page |
Internal breaks are the more important ones to catch quickly, because they’re entirely your own doing and they’re the ones that leak link equity and waste crawl budget inside your site. External breaks accumulate slowly and silently as the rest of the web changes underneath you — you fix those by re-pointing or pruning, never by chasing the other webmaster.
Method 1: Free online checkers and Google Search Console
The fastest way to get a first read, with nothing to install.
Google Search Console
If your site is verified in Search Console — and it should be — open the Pages report under Indexing. The “Not found (404)” group lists internal URLs Google tried to crawl and couldn’t. This is authoritative for internal problems because it’s Google’s own crawl data, and it’s free. The catch is that it only shows URLs Google actually attempted, it updates on Google’s schedule rather than yours, and it won’t flag broken outbound links at all. Treat it as your baseline, not your complete picture.
Free web-based scanners
Standalone tools like Dr. Link Check, Broken Link Check, and the W3C Link Checker will crawl a URL you paste in and list the dead links they find, external ones included. They’re handy for a quick one-off audit of a specific page or a small site. The limitation is scale: most free scanners cap how many pages they’ll crawl per run and don’t remember previous scans, so they’re a spot-check tool rather than something you’d run monthly across a large site.
Method 2: A desktop crawler (Screaming Frog)
When you want the whole site in one view and you’re comfortable with a slightly more technical tool, a desktop crawler is the professional’s default. The Screaming Frog SEO Spider is the standard here, and its free tier crawls up to 500 URLs per crawl — plenty for most blogs and small business sites.
You point it at your homepage, let it crawl, then sort the Response Codes tab by status. Anything returning 404 (not found) or a 5xx (server error) is broken, and the Inlinks panel at the bottom tells you exactly which of your pages contains each dead link — which is the piece you need to go fix it. It checks internal and external links in the same pass.
Two honest caveats. The free tier’s 500-URL cap and inability to save crawls means very large sites need the paid licence (£199/year at the time of writing). And it runs on your computer, not a schedule — you have to remember to open it and run the crawl, which in practice means most people do it once and never again.
Method 3: A WordPress plugin that scans on a schedule
The advantage a plugin has over the other two methods is that it runs inside WordPress on a schedule and can nag you the moment a link breaks, rather than waiting for you to remember to audit. The trade-off is where the classic caveat lives.
The long-standing free option, the Broken Link Checker plugin, historically ran its scans on your own server. That’s the honest catch you should know before installing it: on a large site with tens of thousands of links, checking every one from your hosting can chew through CPU and memory — enough that some managed hosts (WP Engine and GoDaddy among them) have blocked or discouraged the plugin’s local engine. Its newer versions push scanning to a remote cloud engine to sidestep this, which is faster and lifts the load off your site but requires an external account. If you’re on shared or managed hosting and considering the local-scan mode, watch your resource usage after enabling it.
For internal broken links specifically, there’s a lighter-weight angle worth a disclosure: our own free plugin, JnK Linkweave (it’s ours; the core is free on WordPress.org), builds an index of your internal link structure and includes a broken-internal-link report as part of that — so it flags dead internal links from data it already has, without repeatedly hammering your server the way a full external crawler does. It only covers links pointing within your own site, so pair it with one of the crawlers above if you also want your outbound links checked.
How to actually fix a broken link
Finding the links is the mechanical half. Once you have a list, every broken link gets one of exactly three fixes — and picking the right one matters more than people think.
- Update the URL. The default and best fix when the content still exists somewhere. The target moved, the external article lives at a new address, or you fat-fingered the URL — so edit the link to point at the correct, live destination. Always prefer this when a genuine replacement exists.
- Redirect the old URL (301). Use this when your own page moved and other sites (or your own older posts) link to the old address. A 301 redirect sends anyone hitting the old URL — human or crawler — to the new one and passes on almost all the link equity. Set these up with a redirect plugin, or in your SEO plugin if it has a redirects module. This is the fix for internal restructures and renamed permalinks.
- Remove the link. When the destination is simply gone and no equivalent exists — an external site shut down, a resource was retired — don’t leave a dead link sitting there. Either unlink the text (keep the words, drop the hyperlink) or replace it with a link to a comparable, still-live source. Removing is the right call for dead external links with no replacement.
A quick decision rule: Does an equivalent live page exist? If yes and it’s external, update the URL. If yes and it’s your own moved page, 301 redirect it. If no, remove the link. That covers essentially every case.
One habit that prevents most future internal breaks: whenever you change a published post’s permalink, set up a 301 from the old slug to the new one in the same sitting. The break happens the instant you save the new slug — fixing it then takes ten seconds; finding it later takes a full crawl.
Fold it into a maintenance routine
Broken links aren’t a one-time cleanup; they accumulate as you edit your own site and as the rest of the web changes. A light quarterly rhythm keeps the count near zero without much effort:
- Skim the Search Console 404 report monthly — it’s already collecting the data, you just have to look.
- Run a full crawl (Screaming Frog or a plugin scan) once a quarter to catch external rot.
- Set the 301 the moment you rename or delete anything, so internal breaks never reach the report in the first place.
While you’re auditing your link structure, it’s worth checking two related things: orphaned pages (published posts with no internal links pointing at them — the opposite problem to a broken link) and whether you’re building internal links systematically as you publish rather than as an afterthought. Broken links, orphans, and thin internal linking are three symptoms of the same thing: a link structure nobody’s minding.
Related reading
- Changing WordPress permalinks without losing traffic — the slug-change workflow that prevents broken links in the first place
- Internal link checkers for WordPress — the tools that catch these breaks on a schedule
Frequently asked questions
Do broken links hurt my Google rankings?
Only modestly, and there’s no penalty. Broken internal links waste the link equity that would otherwise reach a real page and burn a little crawl budget, while broken outbound links are a weak quality signal — but none of this causes a dramatic ranking drop. The stronger reason to fix them is user experience: a reader who clicks a link and hits a 404 loses trust, and that happens most on your most-linked older posts.
What’s the fastest free way to find broken links on my WordPress site?
Check the “Not found (404)” list in Google Search Console’s Pages report first, since it’s free and uses Google’s own crawl data for your internal URLs. For a fuller picture that includes broken outbound links, run the free tier of the Screaming Frog SEO Spider, which crawls up to 500 URLs per crawl and lists every 404 alongside the page each one sits on.
Is the Broken Link Checker plugin bad for my server?
Its traditional local-scan engine checks every link from your own hosting, which on a large site can consume enough CPU and memory that some managed hosts, including WP Engine and GoDaddy, have blocked or discouraged it. Its newer cloud engine moves the scanning off your server and avoids that strain but needs an external account. If you use the local mode on shared or managed hosting, watch your resource usage after enabling it.