Broken Link Checker

Enter a URL and the crawler follows internal links (up to 200 pages) and reports every link that fails: 404s and other 4xx, 5xx, timeouts and DNS errors — internal links found during the crawl, external links checked with a HEAD request (up to 100). Each broken link comes with the pages that point to it and the anchor text, so you can fix the link or the page, not just know that something is wrong. Download as CSV. Nothing is stored beyond 24 hours.

HEAD request per unique external URL, up to 100. Untick for a faster crawl.

The crawl runs on our server: one request per second, robots.txt obeyed, no JavaScript. Only the start URL and this summary are kept, for 24 hours.

How it works

1. Our crawler (InsighthackerzBot, one request per second, no JavaScript) fetches robots.txt and any sitemaps it declares, then starts at the URL you give and follows internal links breadth-first — same host only, www and the bare domain counted as one site
2. Limits: 50, 100 or 200 pages per run, 2 MB per page, 15 s per request, 5 redirects per URL; URLs your robots.txt disallows for our user-agent are skipped and counted, pages marked nofollow are fetched but their links are not followed
3. Every HTML page goes through the same on-page engine as the on-page SEO checker: title, description, H1, canonical, robots directives, word count, images without alt — the warnings and fails are kept per page, the HTML is not
4. Internal links found broken during the crawl (4xx, 5xx, timeouts) are listed with the pages that link to them; external links are checked with HEAD only (one GET when the server refuses HEAD), at most 100 per run, nofollow links excluded
5. The result is one job on our own server: it holds only the start URL and the summary, expires after 24 hours and is never used for anything else
6. A link counts as broken when the response is 4xx or 5xx or the request fails (timeout, DNS, TLS, connection refused). Redirects are followed for internal pages and reported in the audit tab, not here

About broken links and how the checker finds them

A broken link is a link whose target no longer answers: a 404 because the page was deleted or renamed, a 410, a 5xx because the server behind it is down, or no response at all because the domain lapsed. For visitors it is a dead end; for search engines it is wasted crawl and a signal, however small, that the site is not maintained. Internal broken links are entirely yours to fix and usually come from a URL change nobody propagated; external ones are someone else's problem to cause and yours to notice.

The checker treats the two kinds differently on purpose. Internal links are discovered while crawling — every 4xx/5xx page the crawler hits is a broken link, and the crawler already knows which pages sent it there. External links are not crawled; each unique external URL gets one HEAD request (a GET if the server refuses HEAD), one per second per host, capped at 100 per run. That is enough to catch dead domains and deleted pages without hammering other people's servers or spending your crawl budget on them.

The source pages matter more than the broken URL itself. A 404 linked from one old blog post is a five-second fix; the same 404 linked from the footer is on every page and worth a redirect. The table lists up to five source pages per link and the anchor text, which is often enough to guess what the link was supposed to point at.

Some 'broken' links are not. Sites behind bot protection answer HEAD requests from unknown crawlers with 403 or 429; a link to a page that requires login returns 401; some servers answer HEAD with 405 and GET with 200, which the checker handles by retrying with GET. A 403 on a well-known site is almost always the site refusing the crawler, not a dead page — open it in a browser before removing the link.

Frequently asked questions

Why does a working link show as 403 or 429?
The target site refused our request, not the page. Cloudflare and similar services challenge unknown crawlers with 403, and rate limits answer 429. The checker cannot solve a challenge and does not try. Open the URL in a browser: if it loads, the link is fine and the status is the site's bot policy.
What is the difference between an internal and an external broken link?
Internal links point at your own host and are found while crawling; the crawler fetched the page, got an error, and knows where the link came from. External links point elsewhere and are checked with a single lightweight request each. Fix internal ones with a redirect or by updating the link; for external ones, update the link, find an archived copy, or remove it.
Why were some external links not checked?
The run caps external checks at 100 unique URLs, one request per second per host, to stay polite to other sites and keep the job under a few minutes. The checker says how many were skipped. Links marked rel="nofollow" are not checked at all. Untick the external option to skip them entirely and crawl faster.
Does the checker follow redirects?
For internal pages, yes — a link to a URL that 301s to a working page is not broken, though the redirect is listed in the site audit so you can shorten the chain. For external links a redirect counts as working; the checker does not follow it further.
Why does the checker not find a link I know is broken?
Either the page that contains it was outside the crawl (beyond the page limit, disallowed in robots.txt, or not reachable by following links from the start URL), or the link is inserted by JavaScript — the crawler reads HTML as served and does not run scripts. The audit tab shows which pages were crawled.
How often should I check?
External links decay on their own — a few percent a year on most sites — so a quarterly run catches most of it. Internal links break when URLs change; check right after any migration, redesign or bulk rename. Sites above 200 pages need a tool that can crawl them whole; this one gives you a sample.
SEO AuditEnter a URL and the crawler checks up to 200 pages the way a search engine's first pass would: status codes, noindex and canonical directives, missing or duplicate titles and descriptions, missing H1s, thin pages, images without alt, redirect chains, broken links, orphan pages, robots.txt and sitemap coverage. Every page gets the same on-page checks as the single-page checker; the report groups them by issue and by page. No score, no fabricated priorities — findings with counts. Download as CSV. Nothing is stored beyond 24 hours.Internal Link CheckerEnter a URL and the crawler maps the internal link graph of up to 200 pages: how many pages link to each URL, how many links each page sends out, how many clicks each page sits from the start, and which pages nobody links to — orphans that only the sitemap knows about. The table sorts by incoming links so the pages your own site treats as unimportant are at the bottom. Download as CSV. Nothing is stored beyond 24 hours.Sitemap GeneratorEnter a URL and the crawler follows internal links (up to 200 pages), keeps only the pages a search engine could index — status 200, no noindex, canonical pointing at itself — and writes a plain XML sitemap you can download or copy. It also reads the sitemap the site already publishes and shows both gaps: indexable pages missing from it, and sitemap URLs the crawl never reached. No lastmod, priority or changefreq are invented. Nothing is stored beyond 24 hours.Redirect CheckerPaste up to 20 URLs and see every hop of the redirect chain: status code, target, Cache-Control and time per hop, the final URL and status, loops, chains longer than three hops, temporary 302/307 in place of 301, http→https→www double chains, meta-refresh and JavaScript redirects in the final page, a canonical that disagrees with the final URL — and, optionally, whether Googlebot is sent somewhere else than a browser. Export as CSV. Nothing stored.