Broken Link Checker

Paste a page URL and every link on it is tested for you — dead links, 404s, redirect chains and timeouts, each with its real HTTP status code, filterable and exportable. Free, no account, up to 500 links per scan.

Broken Link Checker
Extracting links… 0%
# URL Status Code Type What it means Action

Enter a URL above and click Check Links to get started.

How to use the broken link checker

Step 1 — Paste the page URL

Enter the full address of the page you want to scan, including https://. The tool fetches that one page and extracts every link it contains — it does not crawl the rest of the site.

Step 2 — Set the scope

Choose whether to test internal links, external links or both, and whether to include rel="nofollow" links. Set a per-link timeout of 5 to 30 seconds and a ceiling of 50, 100, 250 or 500 links. If a scan returns exactly the number you capped it at, the tool warns you that the page had more and the rest were not checked.

Step 3 — Read the counters

Five counters fill in live: unique links, working, broken, redirects and “needs a look”. Unique is the important word — a URL linked five times on a page is one destination and is tested once, so this figure is normally lower than the number of links you can see. On this site’s own homepage, 343 link tags resolve to 187 distinct destinations.

Step 4 — Understand each row

Every row shows the link, its real HTTP status code, whether it is internal or external, where a redirect points, and a plain-English What it means column explaining the verdict — so a genuine 404 is never confused with a site that simply declined an automated request.

Re-check what failed

Rate limits, timeouts and briefly unavailable hosts usually clear on their own. Re-check failures re-runs only the rows that did not come back clean, rather than scanning the whole page again — faster for you, and gentler on the sites being checked.

Filter, then export

Use the tabs to isolate broken links, search for a specific URL, or sort any column. CSV opens in a spreadsheet; JSON suits a developer or a script. Both include the explanation column, so a colleague reading the file can tell a dead page from a blocked request. Fix the reds first, then re-scan.

About the broken link checker

This tool takes a single web page, reads every hyperlink on it, and tests each one to find out whether it still works. You get the real HTTP status code for every link, the destination of any redirect, and a clear split between links that are genuinely dead and links that merely refused an automated request. It is free, needs no account, and handles up to 500 links in one scan.

Testing happens on our server rather than in your browser, which matters for a reason that is easy to miss: a browser cannot check a link on another domain without that domain’s permission, so any link checker that runs purely in the page can only ever guess at external links. Ours makes a real request to every URL and reports what actually came back.

Who this is for

  • Site owners auditing a page after a redesign or a URL change.
  • SEO and content teams checking older posts, where outbound links rot fastest.
  • Agencies producing a link report for a client, with a CSV to hand over.
  • Anyone maintaining a resource page — long lists of outbound links decay quickly and quietly.

What “broken” means here — and what it deliberately does not

Status codes are grouped the way a person would group them, not the way a spec lists them. 2xx is working. 3xx is a redirect, reported with the address it points at, because the tool does not follow redirects — a link that quietly bounces through two hops is something you want to see, not something to hide. 404, 410, 500 and their neighbours are broken.

Three codes are treated differently, and this is the single most useful thing to understand about the results. 401, 403 and 429 are reported as “needs a look”, not as broken links. A 403 usually means the target server declined an automated request — Cloudflare challenges, bot filters and login walls all produce it — while the same URL opens perfectly in a browser. Marking those red would fill your report with false alarms and bury the genuine 404s. Check one by hand before you change anything.

Transport failures are separated too, and the distinction is made from the actual error the server reports. A timeout is a warning, because a slow server is not a dead one. A DNS failure, refused connection or invalid SSL certificate is broken, because those mean the destination cannot be reached at all.

Why some links are checked twice

Each link is first tested with an HTTP HEAD request, which asks only for the status line and not the page body — fast, and light on the site being checked. But a good number of servers handle HEAD badly: WordPress hosts often return a 500 to a HEAD request on a page that serves a perfectly good 200 to a normal visit, and some block HEAD outright with a 405.

So any link that comes back with a 0, a 5xx, or a 400, 403, 405 or 429 is automatically retried with a real GET request, limited to the first 4 KB of the response. If the GET succeeds, that result is trusted over the flaky HEAD. If it fails too, the failure stands. You never see this happen — it just means fewer false positives than a HEAD-only checker produces.

Why broken links matter

The direct cost is a visitor who clicks something and lands nowhere. The indirect cost is crawl budget: search engines allocate a finite number of requests to a site, and every request spent fetching a URL that returns 404 is a request not spent on a page you want indexed. On a small site this is invisible. On a large one it is the difference between new pages being found in days and being found in months.

Outbound links decay on their own schedule. Domains expire, companies rebrand, articles get pruned, and a reference that was solid when you published it in 2023 can be a parked domain by now. Nothing on your side changed — which is exactly why it goes unnoticed until someone checks.

What this tool does not do

It scans one page, not a whole site. Enter a URL and you get the links on that URL. To cover a site, run it against the pages that matter — the homepage, main category pages, your most-linked posts — rather than expecting a crawl.

It reads the HTML your server sends, and does not run JavaScript. Links injected by a script after page load are not in that HTML and will not be found. This is close to what a crawler sees on its first pass, so a page whose links are invisible here is worth a second look.

It counts each destination once. Duplicate links to the same URL are tested a single time. That is why the count is lower than the number of links on the page, and it is deliberate rather than a miss.

It will not check private or local addresses. URLs resolving to loopback, private or reserved IP ranges are refused by design, which is what stops the tool being used to probe internal networks.

A warning is not a verdict. Anything reported as 401, 403, 429 or a timeout needs a human to open it before you act.

Fixing what you find

Broken internal links are yours to fix directly: correct the URL, or if the page has genuinely gone, redirect the old address to the closest replacement so anything still pointing at it survives. Where nothing equivalent exists, letting the URL return 404 — or 410 if it is gone for good — is the honest answer; 410 tells search engines to stop asking sooner.

Broken external links have three outcomes: find where the resource moved and update the link, replace it with a comparable source, or remove it and rewrite the sentence around it. Redirect chains are worth flattening while you are there — if a link 301s to a URL that 301s again, point it at the final destination and save every future visitor two round trips.

Then re-scan. It takes seconds, and confirming a fix actually shipped is faster than assuming it did.

Where this fits with the other tools

Link health is one slice of technical SEO. The SEO Site Audit covers the rest of the same page — indexability, meta tags, headings, structured data, security headers and speed — in one pass. Website Speed Test runs the page through Google PageSpeed Insights for genuine Core Web Vitals. XML Sitemap Generator and Robots.txt Generator help search engines find the pages you kept, and Meta Tag Generator writes the title and description tags for the ones you rewrite.

Frequently asked questions

Is this broken link checker free?

Yes — free, with no account, no email and no daily limit. Every result is shown on screen immediately and both the CSV and JSON exports are available without signing up for anything.

How many links can it check at once?

Up to 500 from a single page, selectable as 50, 100, 250 or 500 before you start. Links are tested in parallel batches, so a 100-link page usually completes in a few seconds rather than minutes. If the page holds more links than your chosen limit, the tool tells you the scan was truncated.

Why is the link count lower than the number of links on the page?

Because duplicates are counted once. Navigation menus, footers and card grids repeat the same URLs many times over — this site’s homepage has 343 link tags pointing at 187 distinct destinations. Testing each destination once is both correct and considerably kinder to the sites being checked.

Does it check the whole website or just one page?

One page per scan. It fetches the URL you enter, extracts the links on it and tests those. To cover a site, run it against your most important pages in turn — the homepage, main category pages and your most-linked articles will surface the majority of problems.

Why is a link marked “needs a look” instead of broken?

Because 401, 403 and 429 mean the server answered but declined an automated request — bot protection, a login wall or rate limiting — and the same URL very often works fine in a browser. Timeouts are warnings too, since a slow server is not a dead one. Open one yourself before changing anything.

A link works in my browser but the tool says 403. Which is right?

Both. Many sites — anything behind Cloudflare in particular — serve real visitors normally while challenging or blocking server-to-server requests. That is why 403 is reported as a warning rather than a broken link. If it opens for you, the link is fine.

Does it follow redirects?

No, deliberately. A 301 or 302 is reported as a redirect along with the address it points at, so you can see chains rather than have them hidden. If a link redirects to a URL that redirects again, point it straight at the final destination.

Can it find links added by JavaScript?

No. The tool reads the HTML your server returns and does not execute scripts, so links injected after page load are not visible to it. That is roughly what a search crawler sees on its first pass, so a page whose links are missing here is worth investigating.

What do the status codes mean?

200 the link works. 301/302 it redirects, and the destination is shown. 404 the page does not exist. 410 it was deliberately removed. 500 the target server errored. 403 access was refused to an automated request. 0 nothing answered at all — reported as broken when it was a DNS failure, refused connection or invalid certificate, and as a warning when it was simply a timeout.

What is a soft 404?

A page that returns 200 while actually displaying a “not found” message. It looks healthy to any link checker, including this one, because the server insists the request succeeded. Soft 404s can only be found by looking at the page — a status code alone is never the whole picture.

How do I export the results?

Use the CSV button for a spreadsheet, or JSON for a script or developer handover. Both contain every link, its status, HTTP code, type, redirect target and the plain-English explanation.

Do broken links really hurt SEO?

Indirectly, and the mechanism is worth being precise about. Search engines allocate a finite number of requests to a site, so every crawl spent on a URL that returns 404 is one not spent on a page you want indexed. On a small site the effect is negligible; on a large one it delays new pages being found. The more immediate cost is a visitor who clicks and lands nowhere.

How often should I check for broken links?

Quarterly for most sites, and after any migration, redesign or URL-structure change — those are when internal links break in bulk. Pages with many outbound links deserve checking more often, since you have no control over the other end.

Can I check a competitor’s page?

Yes. It only reads the HTML any visitor receives and then makes ordinary requests to the links on it. Nothing private is accessed and the site is not notified.

Why can’t it check localhost or an internal address?

URLs resolving to loopback, private or reserved IP ranges are refused by design. Without that guard a public tool could be pointed at internal networks it has no business reaching, so a staging site on a private address has to be checked from inside that network.