Broken internal links waste crawl budget, dead-end your visitors, and quietly strand the authority that was flowing through them. Every site over a year old has some. Here is how to find yours, and which fix each type actually needs.
A broken internal link is a link on your own site pointing at a URL that no longer resolves — usually returning a 404, sometimes a 500 or a timeout. Unlike broken external links, which are somebody else’s fault and largely outside your control, every one of these is yours. You created it, you can fix it, and the fix takes minutes once you know where they are. The reason they matter is not the error page. It is what stops happening when a link breaks. Authority that was flowing through that link now goes nowhere, and the authority ceiling SEO guide covers why that distribution matters more than most site owners assume.
What breaking actually costs you
The link stops passing anything. An internal link to a 404 is a pipe to nowhere. Whatever share of authority that page was passing through it is simply lost — not redirected, not redistributed, just gone.
Crawl budget gets wasted. Search engines follow the link, hit an error, and move on. On a small site this is negligible. On a large one, hundreds of broken links means a meaningful share of every crawl spent on nothing.
Users hit a wall. The obvious cost and the one that shows in analytics rather than in any SEO tool. Someone reading an article clicks through to the thing you referenced and gets an error page. Most of them leave.
Signals accumulate. A page riddled with broken links is a page that has not been maintained, and maintenance is one of the things quality assessment looks at. One broken link is nothing. Forty across a site says something — and it undercuts the link building for beginners fundamentals before you have acquired a single external link.
Where they come from
Almost never from carelessness at the moment of writing. Six common origins:
- URL changes. Someone edits a post slug for SEO reasons and every existing internal link to the old URL breaks silently. This is the single most common cause
- Deleted content. Pruning old posts without checking what linked to them
- Migrations. Platform changes, domain changes, HTTP to HTTPS, or restructured URL patterns where the redirect map missed cases
- Typos in hand-written links. Rare but permanent, since nothing surfaces them automatically
- Category and taxonomy changes. Renaming or merging categories breaks every link to the old archive URL
- Expired media. Links to PDFs, images, or downloads that were removed from the media library
The common thread is that all of these happen after the link was created. Nothing warns you, and the page looks fine to you because you are not clicking your own links.
How to find them
Google Search Console. Pages → Not indexed → Not found (404). This lists URLs Google tried to reach and could not. Click any entry to see referring pages. This is free, it is Google’s own view, and it catches the errors that actually matter because Google found them by crawling your links. The limitation: it shows URLs Google has attempted, which lags behind reality and does not cover everything.
The manual method. Search Console tells you which URLs are broken. It does not reliably tell you every page that links to them, and that second half is the actual work — a broken URL is useless information without knowing which of your articles points at it. Getting there by hand means crawling your own site, filtering to 4xx responses, then cross-referencing each error against a list of source pages. Desktop crawlers do this and they are capable tools. They are also software you install, configure, and remember to run every quarter.
The instant version. Broken link detection in Linkexchange runs against your live WordPress install, so it already knows every link on every page. It lists each broken internal link with the page containing it — and bulk fix repairs them in one click on the paid tier rather than opening 31 posts one at a time. The analysis is free, including finding out how many you have, which most sites have never checked.
Analytics. Set up a report filtering to your 404 page title, with the previous page path as a secondary dimension. This catches broken links real users are actually hitting, which is a useful priority filter.
Fixing them properly, by type
The instinct is to redirect everything. That is wrong roughly half the time.
The target still exists at a new URL. Update the internal link to point at the new URL directly. Do not rely on a redirect to do it — redirects work, but they add a hop, lose a small amount of efficiency, and accumulate into chains. Fix the source.
The target was deleted and has a close equivalent. Update the link to the equivalent page, and separately 301 the old URL in case external sites link to it.
The target was deleted with no equivalent. Remove the link entirely and rewrite the sentence. A link to a vaguely related page is worse than no link — it frustrates the reader who clicked expecting something specific.
The URL was a typo. Correct it. No redirect needed.
The target is temporarily down. Leave it and re-check. A 500 error or timeout is not the same as a 404, and removing links to a page that comes back is wasted work.
On doing this at volume. Five broken links is an afternoon of opening posts and editing them. Thirty-one is the worked example below, and it is the point where most people stop. Linkexchange handles both halves of the repair. It fixes the broken internal links themselves — repointing them at the correct current URLs rather than leaving you to open each post — and it sets the redirects on the old URLs, which is the part that matters when external sites are still pointing at them. Bulk fix commits all of it in one click on the paid tier. The judgement in the list above still belongs to you: whether a deleted page has a genuine equivalent, or whether the link should simply come out. What the tool removes is the thirty-one repetitions of the same edit.
A worked example
A 140-page WordPress site, four years old, one migration behind it. The crawl finds 31 broken internal links pointing at 12 unique URLs. Sorted:
- 14 links to three old post URLs whose slugs were changed during an SEO cleanup eighteen months ago. The posts exist. Fix: update the 14 links to the current slugs. Twenty minutes
- 9 links to a deleted services sub-page. The service still exists on the merged page. Fix: repoint all nine, and confirm the 301 from the old URL is in place
- 5 links to a PDF removed from the media library. No replacement exists. Fix: remove the links and rewrite the surrounding sentences
- 2 typo links in a single article, both missing a character. Fix: correct them
- 1 link to an old category archive renamed two years ago. Fix: repoint to the current archive
Total time: about ninety minutes. Restoring flow through 31 existing links in an afternoon compares well against the effort of acquiring new ones, which the how to get backlinks guide costs out tactic by tactic. The instructive part is the first group. Fourteen internal links broke because someone changed three slugs, and nobody noticed for eighteen months. Slug edits are the highest-risk routine action on a WordPress site, and almost nobody checks inbound internal links before making one.
Redirect chains, the related problem
Fixing broken links by redirecting rather than repointing creates a second issue over time. A chain occurs when URL A redirects to B, which redirects to C. Each hop loses a little efficiency and adds crawl overhead. Chains of three or more are worth eliminating, and they accumulate invisibly because each individual redirect seemed reasonable when it was added. The fix is the same as for a broken link and takes the same time: update the source link to point at the final destination rather than at a URL that redirects. The report in the plugin surfaces chains alongside broken links and collapses them — repointing the source at the end of the chain and cleaning up the intermediate hops, rather than leaving you to trace each one manually. That is worth more than it sounds, because chains are the problem nobody goes looking for. They accumulate one reasonable redirect at a time and nothing ever flags them.
Preventing the next batch
- Before changing any slug, search your site for internal links to the old URL and update them in the same session. A search for the slug in your CMS usually finds them in seconds
- Before deleting any page, check what links to it. Search Console’s internal links report or a crawl will tell you
- After any migration, run a full crawl within the first week. This is when broken links appear in bulk and when they are cheapest to fix
- Audit quarterly. Broken links accumulate at a low steady rate, and a quarterly check keeps the list at ten or twenty rather than producing a two-hundred-item project every three years
- Set up a 404 report in analytics so live errors surface without you looking for them
Edge cases
Soft 404s. A page returning a 200 status while displaying “not found” content. Worse than a real 404, because nothing flags it — crawlers see a valid page. Search Console reports these separately under Soft 404.
Links broken only for logged-out users. Member-only or gated content returns fine when you are logged in and 403 or redirects when you are not. Always crawl as an anonymous user.
Parameter URLs. Links with tracking or filter parameters may resolve differently from the clean URL. Worth checking separately.
Links in templates. A broken link in a footer, sidebar, or widget appears on every page at once. One fix resolves hundreds of instances, so check the count before assuming a large number means a large job.
Anchor links to removed sections. A link to /guide/#section-name where that heading ID no longer exists resolves to the page without error but lands the reader in the wrong place. No tool catches this reliably.
Running this without configuring a crawler
Everything above requires either a crawler you set up, a plugin you vet for performance, or a Search Console report that lags behind reality. None of it is difficult, and all of it is the kind of maintenance that gets done once and then never again. Linkexchange includes internal linking intelligence free, and broken link detection is one of the built-in reports. It sits alongside orphan discovery, weak pages, dead ends, coverage, authority flow, money pages, content gaps, and cluster analysis — so the quarterly check becomes something you open rather than something you configure. The analysis costs nothing. Repairing the links by hand is the same job described above; bulk fix commits every repair in one click on the paid tier. It works independently of the exchange side of the platform. Whichever route you use, the sequence is the same: find them, identify the source pages, and pick the right fix per type rather than redirecting everything. Repairing broken internal links restores flow you already paid for, which is a better return than acquiring anything new.




