Broken links

Broken links, and the dead ends around them

A dead link is one of the few faults on a website that a visitor notices straight away and the owner almost never does. The check that finds them is deliberately small, and it says so plainly when it could not reach something.

What a dead link costs

Someone clicks a link you put on the page on purpose — a service, a price list, a booking form — and lands on an error instead. Most of them do not go back and hunt for another route. They go back to the search results, which is where your competitors are. The link that failed was, by definition, one you wanted them to follow.

Search engines meet the same wall. A link is how a crawler reaches the page behind it, so a link that answers with an error is a path that simply stops. That is why the report's impact ranking puts a broken link in its heaviest class, weight 3.0, described in the code as what "stops the page being found or reached at all" — the same class as a noindex tag or an expired certificate.

That weight is then multiplied by where the link sits: 1.6 on a pricing or checkout page, 1.4 on a contact page, 1.3 on the homepage, 0.5 on a privacy or terms page. A dead link in the legal column of your footer and a dead "Book now" button are not the same problem, and the report does not print them as though they were.

Bounded on purpose, not a crawl

On the page being audited, the engine reads the links in the order they appear in the HTML and checks the first 30 that point back to your own domain. Each gets a HEAD request with a five-second timeout, following redirects to wherever they end. Anything that answers 400 or above is listed with the status code it returned.

Links to other websites are skipped before the counting starts, so they never eat the budget. Page anchors, mailto: links and javascript: links are skipped as well — none of them is a page that can go missing. A link to a different host on your own domain counts as external here, and is skipped with the rest.

The limit exists because time is the thing being spent. Thirty sequential checks at five seconds each is already among the slowest parts of an audit, and one slow site holds up every audit queued behind it. The same restraint governs the rest: at most three pages are audited beside the homepage, usually a pricing or product page and a contact page, each with its own fifteen-second timeout and requests spaced three seconds apart — back-to-back fetches are what makes a host start answering 403. The code's own reasoning for the cap is that three to five pages is enough to make the evidence specific, and more turns a two-minute audit into a twenty-minute one for evidence nobody quotes.

A link we could not reach is not a dead link

This is the distinction the engine is strictest about. A link that answered 404 is a fact about your website. A link that timed out is a fact about our connection to it. The first is written up with its status code. The second is recorded as "could not check", with no status invented to fill the gap, and a person opens it by hand before the report goes anywhere. A HEAD request is not how a visitor arrives, and some servers treat it differently from a normal page load.

The same rule runs a level up. A page the audit could not fetch is recorded as unmeasured with the reason attached — HTTP 403, response was not HTML, could not be fetched — and never becomes a finding or a zero. "Your pricing page is broken" when the truth is "our request timed out" is the kind of sentence that loses a deal rather than winning one.

The rule was bought the hard way. Measured across 14 real audits, almost every failed request and console error this engine reported turned out to be tracker blocking on the machine running the audit: analytics, advertising and chat domains failing to resolve locally. One client was told their site had 87 failed requests and 51 JavaScript errors when it had approximately none — those requests succeed for real visitors, and the numbers changed depending on whose network the audit ran from. Failures of that shape are now separated out, and only requests to your own domain are reported against you.

The other kinds of dead end

A missing page should admit that it is missing. The engine asks for a randomly generated address on your domain that cannot exist, and reads what comes back. Anything other than 404 is a warning — usually a 200 with an apologetic page on it, which browsers and search engines take at their word and treat as real content. If the status is right but the page is bare, under 600 characters with no way home, back or search, that is recorded as informational: correct, just not helpful to whoever landed there.

Two more count as dead ends. A redirect chain longer than two hops is a warning, because every hop is another round trip before anything appears. A page with no navigation links anywhere is a warning too: a visitor who does not buy on that page has nowhere to go next, and a crawler finds no path onward.

Where a sitemap exists, the addresses listed in it that are not linked from the homepage are counted as a rough orphan-page figure. The report labels it as exactly what the code calls it — a shallow proxy. Only a full crawl gives the exact list, and a full crawl is not what this audit does.

What the engine checks here

Each of these is a rule in the code, not a category heading.

Questions

Is this a full crawl of my website?

No, and it is not sold as one. The engine checks the first 30 internal links on the page being audited, plus up to three further pages chosen because they are where the money and the enquiries are. That catches the links in your header, navigation and main content, which is where most dead links live. A full crawl of every page is a different job with a different cost, and if your site is large enough to need one, say so before we start.

You listed a link as broken, but it opens fine for me.

It happens, and it is why nothing goes out unread. The check sends a HEAD request rather than loading the page as a browser would, and some servers answer that differently, or rate-limit a request that does not look like a visitor. Anything flagged is opened by hand before the report is sent. A link our own check could not reach is marked "could not check" from the start and is never presented as dead.

Do you check links pointing at other people's websites?

Not in this pass. They are skipped before the count begins, so the thirty checks are spent on pages you control and can fix today. An outbound link that has rotted is worth knowing about, but it is somebody else's site changing under you rather than a defect in yours, and checking them properly means a slower audit for everyone. Ask and it can be run separately.

Sources

Public and checkable. Nothing here rests on a number we cannot point at.

This is one of fifteen categories. You can read a real report this engine produced on this very site — including the findings it raised against us — or ask for an audit of yours.