How the check works
We fetch the page, collect every <a href> in the HTML and drop duplicates, same-page anchors and non-web links like mailto:. Then we request up to 100 unique URLs, six at a time, internal links first. Each gets a HEAD request, retried as GET if the server doesn’t handle HEAD, and we follow up to five redirects by hand. Each link has an 8-second timeout and the whole run stops at about 25 seconds.
Reading the results
- 4xx. 404 (not found) and 410 (gone) are broken. Fix the URL, point it at the replacement page, or remove the link.
- 401, 403, 429. Usually a login wall, bot protection or rate limiting, not a dead page. We report them apart from real 404s.
- 5xx. The other server failed. It may be temporary; re-run later before removing the link.
- No response. Timeouts, DNS failures or a domain that no longer exists. An expired domain is worth removing fast: someone else can register it and serve anything.
- Redirects. Working links that take a detour. Update internal ones to the final URL.
Keeping links healthy
- When you change a URL, add a 301 from the old one and update internal links in the same deploy.
- Build internal links from your routing data, not hand-typed paths, so renamed pages update everywhere.
- Re-check your most-linked pages after big content or navigation changes.
Internal-link checks are one of the quality gates in our own content pipeline: an article doesn’t ship if its links don’t resolve. See how that fits together in the Versely case study. For anchor text and nofollow on the same page, use the internal link checker.
Limits
We read server HTML, so links added by JavaScript aren’t included. We don’t check images, scripts or CSS files, only anchor links. Very slow sites may leave some links marked as skipped.