Internal Link Checker: How to Find & Fix Broken Internal Links

Broken internal links quietly bleed traffic and rankings. Here's how to run an internal linking checker, find every dead link, and fix them for good.

Cover Image for Internal Link Checker: How to Find & Fix Broken Internal Links

Every website accumulates dead links the same way a garage accumulates junk. You don't notice it happening. You just wake up one day, open a random old post, click a link, and get a 404 page staring back at you.

Multiply that one broken link by a few hundred posts and a few years of edits, and you've got a real problem. Not a dramatic one. A slow, quiet one. The kind that doesn't set off alarms but still costs you traffic every single day.

That's why you need an internal linking checker — a way to systematically find every broken link on your site before Google, or worse, a paying customer, finds it for you. This post covers why broken internal links hurt you, how they happen, and exactly how to find and fix them, whether you're doing it by hand or with a tool.

A broken internal link seems small. It's just one link. But small problems compound, and there are three ways this one compounds against you.

It wastes crawl budget

Googlebot has a limited amount of time and resources it will spend crawling your site on any given visit. This is called crawl budget, and it matters more the bigger your site gets.

When Googlebot follows a link and hits a 404, it just burned part of that budget on nothing. If your site has a lot of dead links, you're sending the crawler down dead ends instead of toward your good, fresh content. On a small blog with 50 posts, this barely matters. On a site with 5,000 pages, it adds up fast.

It kills the user experience

Put yourself in a reader's shoes. They're three paragraphs into your article, they click a link you promised would explain something further, and they land on a 404 page instead.

That's a broken promise. Some readers will hit the back button and try another link. Most will just leave. Either way, you've spent effort writing a good article and then undone some of that goodwill with one bad link.

This is the one most people don't think about. When you link from Page A to Page B, you're passing some authority — link equity — from A to B. That's the entire point of internal linking. It's how you tell Google which pages matter most on your site.

When the link points to a dead page, that equity goes nowhere. It's like writing a check to an account that doesn't exist. You did the work of building the link, but the value evaporates.

Do this across a site with hundreds of orphaned or broken links, and you've built an internal linking structure that looks fine on the surface but leaks value everywhere underneath.

Nobody sets out to build broken links. They happen as side effects of totally normal site maintenance. Here are the usual suspects.

You delete or unpublish content

You write a post, it doesn't perform, and a year later you delete it during a content cleanup. Except you forget that six other posts linked to it. Now you've got six broken links you didn't even know you created.

You change a URL or slug

Maybe you're cleaning up your URL structure, moving from /blog/post-name to /resources/post-name. Maybe you just fixed a typo in a slug. Either way, unless you set up a redirect and update the internal links pointing to the old URL, every link to that page is now broken.

You migrate platforms or redesign your site

Site migrations are the single biggest source of broken links. Moving from one CMS to another, restructuring your site's categories, or doing a full redesign almost always changes URLs at scale. If nobody audits internal links as part of that migration, you inherit hundreds of dead links overnight.

You rely on outdated boilerplate or widgets

Sidebar widgets, "related posts" sections, and footer links often get set once and forgotten. If the target page ever moves or gets deleted, that widget keeps linking to a dead URL on every single page it appears on — which can turn one small mistake into a site-wide issue.

Sometimes it's not even you. An SEO plugin update, a permalink structure change, or a theme switch can quietly alter how URLs are generated, breaking links that used to work fine.

Manual detection methods

You don't need a specialized tool to start. If your site is small, or you just want to spot-check things, a few free, manual methods will get you most of the way there.

Google Search Console

Search Console is the most authoritative source you have, because it shows you exactly what Googlebot has run into on your site — not what a third-party crawler thinks might be broken.

Go to the Pages report under the Indexing section, and look for "Not found (404)." This lists every URL on your site that Google tried to crawl and couldn't find. Click into any of those URLs, and Search Console will show you referring pages — the pages on your site that are linking to that dead URL. That's your fix list, straight from the source.

The catch: Search Console only shows you what Google has already crawled and flagged. If a link is broken but Google hasn't gotten around to crawling it yet, it won't show up here. Treat this as a great starting point, not a complete audit.

Browser extensions

If you just want to check one page at a time, a link-checking browser extension does the job. You open a page, run the extension, and it highlights every link on that page — usually color-coded by status, so broken links stand out immediately.

This is a fine method if you're reviewing a single article before hitting publish, or double-checking a page a reader complained about. It's a bad method for auditing an entire site, because you'd have to open every single page one at a time.

The manual click-through method

This one's exactly what it sounds like: opening your own site and clicking every link. I'm including it because some people genuinely do this, and I want to save you the time. Don't do this. It doesn't scale past about ten pages, and you'll miss things because clicking is tedious and your attention wanders. This is precisely the kind of repetitive checking a computer should do for you.

Automated internal linking checker tools and workflows

Once your site has more than a hundred or so pages, manual methods stop being realistic. You need something that crawls your entire site, follows every link, and reports back what it finds. Here's how that workflow typically looks.

Full-site crawlers

Tools built for technical SEO audits — the kind that also check your metadata, headers, and site structure — are the standard choice here. You point the tool at your domain, it crawls every page it can find by following links the way a search engine would, and it records the HTTP status code for every single link.

Once the crawl finishes, you filter the results by client error status codes (the 4xx family — 404 Not Found being the most common). This gives you a full list of broken links across your entire site in one report, along with which pages are linking to them.

The best of these tools let you export that list as a spreadsheet with two columns that matter most: the source page (where the broken link lives) and the destination (the dead URL). That spreadsheet is your fix-it checklist.

Some SEO platforms combine site crawling with backlink data, which is useful because it lets you see both broken internal links and broken external links pointing at pages you've deleted. If someone linked to your site from an external blog and you deleted that page without a redirect, that's lost backlink value — arguably worse than a broken internal link, because you can't fix it yourself. These tools flag both problems side by side.

WordPress-specific plugins

If you're running WordPress, there are plugins purpose-built to sit inside your dashboard and continuously scan for broken links — both internal and outbound — without you needing a separate desktop tool. Some of these also double as internal linking managers, meaning they don't just find broken links, they help you build better internal links in the first place by suggesting relevant pages to link to as you write. That's a nice two-for-one: fix what's broken, and build a stronger structure going forward.

Scheduled or continuous checking

The best setups don't run a one-time crawl and call it done. They schedule recurring crawls — weekly or monthly, depending on how often you publish — so broken links get caught within days instead of sitting there for a year. If your traffic and content volume justify it, this is worth setting up once and forgetting about.

The step-by-step fix process

Finding a broken link is only half the job. Fixing it correctly matters just as much, and there are really three options for each one you find.

Option 1: Redirect

Use this when the content the link pointed to has moved, but an equivalent or updated version exists elsewhere on your site. Set up a 301 redirect from the old URL to the new one. This is the cleanest option because it preserves link equity and doesn't require you to touch every single page that links to the old URL — the redirect handles it automatically.

That said, redirects aren't free. Each one adds a small amount of latency, and stacking too many redirects in a chain (A redirects to B, which redirects to C) actively hurts both user experience and crawl efficiency. Use redirects for genuine URL changes, not as a permanent patch you never clean up.

Use this when the content is genuinely gone and there's no direct replacement, but you have a related page that serves the same reader intent. Go into each source page linking to the dead URL and update the link to point somewhere useful instead.

This takes more manual effort than a redirect because you're editing content on each source page individually, but it's often the better long-term move. It also gives you a chance to review whether the anchor text still makes sense for the new destination.

Option 3: Remove

Use this when there's no good replacement and forcing a link somewhere irrelevant would do more harm than good. Sometimes the honest fix is just to delete the link and leave the sentence to stand on its own. A missing link is a non-issue. A broken or irrelevant one is a problem.

A quick decision rule

If a direct equivalent page exists → redirect. If a related-but-different page exists → relink. If nothing relevant exists → remove the link and consider whether that anchor text implies a content gap worth filling later.

If your first crawl turns up 300 broken links, don't panic and don't try to fix all of them in one sitting. Some matter far more than others, and triaging first will save you hours.

Start with links on your highest-traffic pages. A broken link buried in a post that gets ten visits a month is a rounding error. A broken link in your top landing page, the one bringing in most of your organic traffic, is actively costing you conversions or engagement every single day it stays broken. Cross-reference your broken link report against your analytics to find the overlap.

Next, prioritize links that appear on many pages at once. If a broken link lives inside a footer, sidebar widget, or "related articles" module that renders sitewide, fixing that one link cleans up dozens or hundreds of instances in a single edit. This is usually the highest-leverage fix on the whole list.

Then look at links with real link equity behind them — pages that have a lot of internal links pointing to them, or that used to rank well before they went dark. These are worth restoring properly, either by bringing the content back or redirecting to its closest replacement, rather than just deleting the link and moving on.

Everything else — an isolated broken link in an old, low-traffic post that nobody reads anymore — can go to the bottom of the list. It's still worth fixing eventually, but it shouldn't block you from shipping the higher-impact fixes first.

Preventing recurrence

Fixing broken links once feels good. Fixing the same 200 broken links every six months because nothing changed about your process is not good. A few habits keep this from becoming a recurring chore.

Set a monitoring cadence

Decide how often you'll run a full crawl and stick to it. Monthly works well for most active blogs. If you publish daily or have a large site, consider weekly. If your site is mostly static and rarely updated, quarterly might be enough. The point isn't the exact frequency — it's having one at all, instead of only checking when something looks obviously wrong.

Add a pre-publish check

Before you delete a page or change its URL, search your own site for internal links pointing to it first. Most crawler tools let you search their existing crawl data for a specific URL, so you can see every page that links to it before you touch anything. This one habit alone prevents most of the damage, because you catch the problem before it happens instead of after.

Set up redirects as part of your workflow, not as an afterthought

Whenever you change a URL or delete a page, treat the redirect as a required step, not an optional cleanup task. Bake it into your checklist so it happens automatically instead of relying on you remembering three weeks later.

Watch your "related posts" and navigation elements

Since these appear on many pages at once, a single broken link here does outsized damage. Review these elements specifically whenever you restructure your site, rather than assuming they'll get caught in a general crawl.

Tool recommendations

For occasional manual checks on a small site, Google Search Console and a browser extension will cover you for free. For anything bigger, you want a dedicated crawler that can handle your whole site and export a clean report.

If you're on WordPress and want internal linking management built into your everyday workflow — not just link-checking, but active suggestions for where to add new internal links as you write — that's where a tool like RankHive fits in. It connects directly to your WordPress site, keeps an ongoing eye on your internal link structure, and flags broken links automatically instead of waiting for you to remember to run a manual crawl. Pairing continuous monitoring with your regular publishing habit is the difference between a link audit that happens once a year in a panic, and one that just quietly runs in the background.

FAQ

How often should I check for broken internal links?

Monthly is a reasonable default for an active site. If you publish frequently or your site is large, move to weekly. If your site rarely changes, quarterly is probably fine. The important thing is picking a cadence and actually sticking to it.

Do broken internal links actually hurt my Google rankings?

Indirectly, yes. Google hasn't confirmed a direct ranking penalty for having 404s, but broken links waste crawl budget, break the flow of link equity through your site, and hurt user experience — all of which correlate with weaker rankings over time. It's death by a thousand cuts, not one dramatic hit.

What's the difference between a broken internal link and an orphan page?

A broken internal link points to a page that no longer exists. An orphan page exists but has no internal links pointing to it at all, so it's hard for both users and search engines to find. They're different problems, but a good internal linking checker will usually flag both.

Should I redirect every broken link I find?

No. Redirects make sense when there's a genuine replacement page. If there isn't, redirecting to an unrelated page just to avoid a 404 creates a confusing experience and can look manipulative to search engines if done at scale. Sometimes removing the link is the more honest fix.

Can I automate fixing broken links, not just finding them?

Finding them is easy to automate with a crawler. Fixing them usually still needs a human decision, because choosing between redirect, relink, and remove depends on judgment about what's actually useful to the reader. Some internal linking tools can suggest replacement links automatically, which speeds up the relinking step, but you'll still want to review the suggestions before publishing.

Is a free crawler good enough, or do I need a paid tool?

For a site under a few hundred pages, free crawl limits on most desktop tools are usually enough. Once you're managing multiple sites, publishing constantly, or want scheduled recurring audits instead of manual one-off crawls, a paid tool or an integrated WordPress plugin starts paying for itself in time saved.

What HTTP status codes should an internal linking checker flag?

The main one is 404 (Not Found), which means the page simply doesn't exist anymore. You'll also want to flag 5xx server errors, which usually mean something is temporarily broken on your server rather than permanently gone, and it's worth double-checking those before assuming they're dead for good. Some checkers also flag soft 404s — pages that return a 200 OK status but actually show an error message or empty content to the visitor. Those don't show up in a simple status code filter, so you have to spot them by eye or with a tool that specifically checks for thin or empty page content.

Does it matter if the broken link is to my own domain versus an external site?

Both matter, but for different reasons. A broken internal link is entirely within your control to fix and directly affects your own crawl budget and link equity. A broken external link — one where you're linking out to someone else's now-dead page — mostly affects user trust and experience, since a reader clicking out to a 404 reflects poorly on your site even though you didn't cause the problem. Fix internal links first since they're higher leverage, then clean up external links as a secondary pass.