How does the broken link checker decide a link is broken?
It requests each link and looks at the HTTP status code of the response it finally gets. Anything from 200 to 399 is OK; a 4xx client error or 5xx server error is BROKEN; and if no response comes back at all (the domain doesn't resolve, the server times out or refuses the connection, the URL is malformed, or the address is blocked) the link is BROKEN (unreachable) with the reason. One bad link never stops the run: each failure is reported on its own line and the checker moves on.
The page you enter is fetched by our server, which then makes one request per link. Your browser doesn't contact any of the linked sites.
Example run
A product page with a road-shoes link, a link to a discontinued model and an affiliate link that redirects:
OK (200): https://www.example.com/shoes/road
BROKEN (404): https://www.example.com/shoes/old-model
OK (200): https://partner.example.net/sale
The affiliate link returned a 302 first, but the checker followed it and the destination answered 200, so it's OK. That same page also had #reviews and mailto: links, which were skipped. When a page has more than 15 unique links, a final line says so, for example (Checked the first 15 of 87 links found.).
Which links get checked
The checker reads <a> elements and their href attribute, the same kind of link Google says it can reliably crawl (Google: make your links crawlable). It then:
- Drops empty hrefs and in-page
#links. - Turns relative links into full URLs using the address of the page it ended up on after redirects, following the standard URL resolution rules, so
?page=2on/blog/postbecomes/blog/post?page=2and../aboutclimbs one directory. - Skips anything that isn't http or https (
mailto:,tel:,javascript:and so on, in any letter case), drops the#fragmentpart, and removes duplicates, so ten links to the homepage are checked once. - Takes the first 15 in source order. Navigation usually comes first in the HTML, so on a typical page the 15 are mostly menu links. To test links in an article body, run a page with little navigation or check the article's links in batches.
It doesn't look at <img src>, <link>, <script> or CSS URLs, and links added by JavaScript after the page loads aren't in the HTML it reads.
Reading the labels
| Label | Meaning | What to do |
|---|---|---|
OK (200) |
Link works, possibly after redirects | Nothing, unless you want to update a redirected URL to its destination |
BROKEN (404) / BROKEN (410) |
Page not found or gone | Fix the URL, link to a replacement, or remove the link |
BROKEN (403) / BROKEN (429) |
Refused or rate-limited | Open it in a browser; often a bot block, not a dead link |
BROKEN (500)–BROKEN (504) |
Server error at the target | Recheck later; persistent 5xx means a broken page |
BROKEN (unreachable): ... Could not resolve |
The domain has no DNS record | Domain probably expired; remove or replace |
BROKEN (unreachable): ... Timed out |
No answer within five seconds | Recheck later; a slow target may still work |
BROKEN (unreachable): ... Connection refused |
Nothing listening at that address | Server down or wrong port |
BROKEN (unreachable): ... Too many redirects (more than 10). |
Long chain or loop | Run it through the redirect checker |
NOT CHECKED (time limit reached) |
The run's time budget ran out first | Run the page again, or check that link on its own |
BROKEN (unreachable): ... private or reserved address |
Link points at an internal IP | Intranet links can't be tested from outside |
Google's crawling documentation describes what happens on its side: for a 404, a URL that was indexed is removed and a newly found one isn't processed, while repeated 5xx errors slow its crawling of the site (Google: HTTP status codes). Broken internal links waste crawl requests on pages that don't exist and leave readers at a dead end.
Limits of a single-page check
- 15 links per run, checked one after another. Each link gets up to five seconds to answer, and the run spends at most about 20 seconds on link checks in total. Links it didn't reach in that time are listed as
NOT CHECKED (time limit reached)rather than silently dropped. - Rate limit. The tool endpoint allows 60 runs a minute per visitor.
- GET requests only. Each link is downloaded like a normal visit, so a server that blocks bots may answer 403 even though people can open the page.
- IPv4 and IPv6. Hostnames are resolved over both, and a link is refused if any of its addresses is private or reserved.
Fixing what you find
Start with internal links, since those are entirely yours to fix. For a page you've moved, a server-side redirect from the old URL keeps old bookmarks and external links working; the redirect generator writes the .htaccess rule. Then update your own links to point at the new URL directly. Run the redirect checker on anything that looks odd to see each hop, and use open all URLs to open a list of suspect links in browser tabs for a manual look. For pages listed in your sitemap, the sitemap validator confirms the file itself still parses.
Last updated