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.
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.