serps.io
All free tools

Technical

Broken Link Checker

Find the links on a page that go nowhere

In build

Give it a page URL and get every link on it with the status code each one returned, the broken ones grouped by failure type, the anchor text and position of each, and the responses that need a human to judge.

Get early access

What it returns

  • Every link found in the page HTML, internal and outbound, with the status code the destination returned and how long it took to answer.
  • Broken links grouped by what actually failed: 404, 410, a 5xx, a hostname that does not resolve, a connection that timed out, a certificate that could not be verified.
  • The anchor text and the position in the document for each failing link, so you can find it in the source without searching for the URL.
  • Responses that need a judgement call kept in their own list: 403, 405, 429, and pages that answer 200 with body text saying the content is gone.

When this matters

A resource post from three years ago is still one of the top entry pages and still links out to nine tools. Two of those companies were acquired and now 404, one domain lapsed and resells something unrelated. Nobody reports any of it: the page loads fine, analytics does not change, and the links rot one at a time over years rather than all at once. Checking the page takes a minute and produces a list short enough to fix in a single editing pass, which is cheaper than hearing about it from a reader.

How to answer this today

Site audit checks links across every page it crawls instead of one page at a time, runs the full rule set over the results, and keeps each broken URL next to the pages that contain it, so a bad link sitting in a template shows up once with the list of pages it affects. The single-page version here is for a URL you do not own, or a post you are editing right now and do not want to crawl a site to check.

Site audit

Why this is harder than it looks

False positives are the normal case

Plenty of sites return 403 to any request without a browser user agent, rate limit the second request from the same address, or refuse data centre traffic outright. Those links work perfectly for a human and fail for a checker. A report that does not separate 'the server said this is gone' from 'the server refused to talk to us' sends you editing links that were never broken.

Soft 404s answer 200

A removed page that redirects to the homepage, or renders a not-found template with a success status, is broken for a reader and healthy to a status-code check. Catching it means reading the response body and comparing it against a known missing URL, and even then the result is a strong guess rather than a fact.

The HTML has to be the page a reader sees

Links injected by JavaScript after load are absent from a plain fetch, and links inside a consent banner or a personalised block may not be present on every request. A fetch covers the common case, so the output has to say how the page was retrieved instead of implying it saw everything.

Rate limits

One page can hold hundreds of links, and checking them means hundreds of requests to other people's servers in a few seconds. The per-visitor limit exists so the tool cannot be aimed at a link-heavy page as a cheap way to generate load against every host it references.