Paste a page below and this broken link checker checks its links on the spot, free and with no account. Sign up and we crawl your whole site, surfacing every broken internal and outbound link, redirect chain and broken redirect, with the exact source page each one lives on so you can fix them fast.
Instant free check of one page. Sign up to crawl the whole site.
Broken links waste crawl budget, leak link equity, and frustrate users. We find them all and show you where each one is referenced.
Dead links between your own pages, with the referrer pages listed for each.
External links that now return errors and quietly hurt user trust.
Links that bounce through multiple hops before resolving - slow and crawl-wasteful.
Redirects that point to dead destinations.
Internal links pointing at noindex or canonicalized-away URLs.
Missing image and JavaScript references that break pages.
Confirm ownership with DNS, a meta tag, or a file upload.
We follow every internal and outbound link and record each destination's status.
Every broken link lists the pages that reference it, so you fix once and clear many.
Broken links are the highest-return, lowest-effort technical fix. Here's the process we use on every site.
Broken links hide on deep pages you rarely open - old blog posts, paginated archives, footers. A homepage check misses 90% of them. Crawl every internal URL and record the HTTP status of each destination so nothing slips through.
One broken URL is often linked from dozens of pages. Instead of editing each page, identify the source pages that reference it and fix the link once at the template or content level. Our report lists every referrer for each broken link so you fix once and clear many.
If a page genuinely moved, don't just delete the link - add a 301 redirect from the old URL to the new one so existing links and any external backlinks keep their value. Then update the internal links to point at the new URL directly (a direct link beats a redirected one).
A link that goes A→B→C wastes crawl budget and slows the page. Update it to point straight at C. Watch especially for chains created by HTTP→HTTPS migrations layered on top of old folder-rename redirects.
Broken-link cleanup is iterative - fixing one batch often reveals more, and a bad fix (a redirect to another dead page) creates new issues. Re-crawl after each round until the report is clean, then re-check after every deploy that touches links or redirects.
Go deeper: read why broken links hurt SEO, how to fix orphan pages, and the full internal links SEO guide.
Knowing which link is broken is half the job. Here is where you change it in the most common setups.
For a link inside a post or page, open it in the editor and update or remove the link on the offending text. For a moved page, add a 301 with a redirect plugin (Redirection, or Rank Math / Yoast Premium's redirect manager) from the old URL to the new one. Links in menus are under Appearance → Menus; links baked into a theme or widget are in the template files or the widget settings, not the post.
Product and collection links in body content are edited in the admin under Products or Collections. For a deleted product or a changed handle, add a redirect under Online Store → Navigation → URL Redirects (Shopify keeps the link value with a 301). Links hard-coded in the theme live in the .liquid templates under Online Store → Themes → Edit code.
Click the element with the broken link and edit its link target in the panel that opens. Both platforms have a built-in URL-redirect manager (Wix: SEO tools; Squarespace: Settings → Advanced → URL Mappings) for pages that moved. Navigation links are edited in the site menu, not on the page.
Fix the link in the component, template, or markdown where it is written; a single template edit clears the link everywhere it renders. Handle moved pages with a redirect in your framework config or at the edge (next.config.js redirects, an nginx rule, or your CDN), so old and external links keep their value.
A broken internal link checker should separate the two, because they cost you differently and you fix them differently.
These are links between your own pages that now 404. They are fully in your control, they waste crawl budget, and they leak the link equity that should flow to your real pages. Every broken internal link is a fix you can make today, so clear these before anything else.
These point at external sites that removed or moved a page. You cannot fix the destination, so either update the link to the page's new home, point it at an archived copy, or remove it. They erode reader trust even when they do not directly cost rankings.
Internal links that point at noindex or canonicalised-away URLs are not 404s, but they still send crawlers down dead ends. Repoint them at the canonical, indexable version of the page.
A broken internal link is a link from one page on your site to another page on your site that no longer returns a working response, usually a 404 because the target was deleted, renamed, or moved without a redirect. Since both ends of the link are yours, these are entirely within your control, which is why they are the first thing to fix.
Most trace back to a small set of causes: deleted or renamed pages, URL typos, content moved without a redirect in place, and external sites taking their own pages down. Redirect chains add a second layer, often created when an HTTP to HTTPS migration is layered on top of older folder-rename redirects.
A site-wide crawl is the only reliable way to catch them all, because the majority hide on pages you rarely open: old blog posts, paginated archives, and footer links that have not been reviewed in years.
Broken internal links waste crawl budget and leak the link equity that should be flowing to your real pages. Broken outbound links do not damage rankings in the same direct way, but they erode reader trust when someone clicks through to nothing. Between the low effort and the direct effect on how your site is crawled, fixing them is one of the highest-return technical SEO tasks available.
Add and verify your site, then run a crawl. We follow every internal and outbound link, record each destination's HTTP status, and list the exact source pages that reference each broken URL, so one edit at the template or content level can clear dozens of pages at once.
The crawl also flags redirect chains, links that bounce through several hops before resolving, and redirects pointing at dead destinations. Both slow down crawling and page loads, and both are worth collapsing to a direct link.
You can check any URL instantly with no account. That free check looks at the single page you paste. Create a free account to crawl your whole site and get the complete broken internal and outbound link report with every source page listed.
Re-check after every deploy that touches URLs, redirects or navigation, and run a full crawl at least monthly. Links rot as you publish, prune and reorganise content, so a one-time cleanup drifts back out of date. Cleanup is also iterative: fixing one batch often reveals more, and a bad fix such as a redirect pointing at another dead page creates fresh issues, so re-crawl after each round until the report is clean.
A broken link checker requests every link on a site and reports the ones that fail. That is the whole idea. What separates them is scope, and scope is what the price usually reflects.
It collects the links, follows each one, records the status the server returns, and reports anything in the 4XX or 5XX range along with the page that linked it. That last part is what makes a report usable: a list of dead URLs tells you what is broken, while a list of dead URLs with their referrers tells you where to go and fix it.
Two categories need care. Redirects are not broken, though a chain of them is worth shortening. A 403 usually means the destination blocks automated requests rather than that the page is gone, so links to sites behind aggressive bot protection appear broken to every checker while working fine in a browser. A tool that reports both as failures produces a list you learn to ignore.
Checking one page is cheap, so single-page checks are widely free and need no account. Checking a whole site is a different proposition: auditing ten thousand pages means at least ten thousand requests, plus every outbound link those pages contain, and that cost scales with your site rather than with the tool.
That is why free tiers cap something, usually URLs per crawl, crawls per month, or how much history is kept. The cap that matters is whichever your site is about to hit. If you also want to prove a fix worked, history is the feature to check for, because a single snapshot cannot show that anything changed.
Work the report by destination rather than by page. A dead link in a shared footer or navigation block appears on every page that renders it, so per-page it reads as hundreds of errors and per-destination it is one fix. Sorting by how many pages reference each dead URL puts the template-level faults at the top, and clearing those collapses the total before you touch an individual article.
Then re-check after fixing. The point of the second run is not the number: it is catching fixes that did not deploy, and links that were repointed at another URL which is also broken.
Crawl-based checks across indexability, canonicals and more.
Measure load performance per page, mobile and desktop.
Validate international SEO and hreflang implementation.
Free while in beta. Create an account and start auditing.
Finding broken links is the easy half. The half that saves time is fixing them at the source, because a single dead URL is usually referenced from many pages at once.
A link is broken when its destination returns a 4XX or 5XX status, or fails to resolve at all. That definition is narrower than it sounds, and several things that look like failures are not. A 301 or 302 resolves fine for a user and passes value, so it is not broken, though a chain of them is worth shortening. A 403 often means the destination blocks automated requests rather than that the page is gone, which is why links to sites behind aggressive bot protection frequently appear broken to any crawler while working perfectly in a browser.
The genuinely damaging cases are quieter. A soft 404 returns 200 with a page saying the content no longer exists, so no status-code check will catch it. A link to a page that redirects to the homepage is technically fine and practically useless, because the user asked for something specific and got the front door instead.
The reason a broken-link report should list referrer pages rather than just dead URLs is that the ratio between them is rarely one to one. A dead link in a shared footer, navigation block or related-articles template appears on every page that renders that template. Reported per-page, that is hundreds of errors. Reported per-destination, it is one fix.
So work the list by destination, sorted by how many pages reference each one. The top of that list is almost always template-level, and clearing it collapses the total error count dramatically before you touch a single article. Only once the templates are clean does it make sense to work through links that genuinely appear on one page each.
For an internal link, the destination is yours, so you have options. If the page moved, update the link to the new URL rather than relying on a redirect, because a direct link is faster and does not depend on a redirect rule surviving future migrations. If the page is genuinely gone, either point the link at the closest surviving equivalent or remove the link and rewrite the sentence around it.
For an outbound link, the destination is not yours and will keep changing. If the target moved, update the URL. If the resource is gone entirely, decide whether the claim it supported still needs a citation: replace it with an equivalent source if it does, and remove it if it does not. Leaving a dead outbound link because "it used to work" is the most common way reference sections rot.
A chain of two redirects is a minor inefficiency, not an emergency. Each hop adds latency for the user and a request for the crawler, and long chains risk being abandoned before resolving. The practical rule is to fix chains longer than two hops and to leave single redirects alone unless you are already editing that link for another reason.
Chains matter most when they are systematic: an http to https redirect followed by a non-www to www redirect followed by a trailing-slash redirect means every link on the site pays three hops. That is a server configuration fix rather than a link-editing job, and it clears the whole class at once.
Free to start. Crawl your site and get the full broken-link report.
Check for broken links