A link that points at nothing is worse than no link at all: it costs a visitor a click and a crawler part of its budget, and whatever ranking signal that link was meant to pass on goes nowhere.
What this finding means
Crawl Cove's broken-internal-link check looks at every internal link on every crawled page and flags the ones whose target was never seen in the crawl at all: not fetched, not found. On a page hosting one or more of these, it emits a single finding naming every broken target on that page.
A real finding looks like this:
3 internal link(s) to URL(s) not found in the crawl: https://example.com/old-guide, https://example.com/team/jane-smith, https://example.com/blog/2023/discontinued
This is judged purely against the crawl's own record of what exists, never by re-fetching a candidate URL to check: doing that would make the result depend on network conditions at check time rather than on what the crawl actually found, and would turn a deterministic audit into a flaky one.
Why it matters
Every one of these links wastes a click for a visitor who expected to land somewhere, and wastes part of the crawl budget a search engine spends on your site chasing a dead end instead of a real page. The internal PageRank that link was meant to pass on has nowhere to land either, so it is simply lost rather than reinforcing another page on your site.
How to fix it
- Open the page named in the finding and find each broken href using the target URLs listed in the evidence.
- Work out what happened to the target. A typo in the URL, a page that was deleted without a redirect, or a path that changed during a site restructure are the three most common causes.
- Fix the link. Correct a typo directly, point the link at wherever the content moved to, or remove the link entirely if the destination genuinely no longer exists and nothing should replace it.
- Re-crawl the site to confirm the finding clears.
False positives and edge cases
- This check reports nothing at all on a partial crawl, meaning one scoped by include/exclude rules, or cut short by a page or depth limit. On a crawl like that, a link's target being absent means only "the crawl didn't reach it yet," which is indistinguishable from a genuinely broken link, so rather than risk a false accusation the check stays silent until a full, unscoped audit can tell the two apart.
- A link to a URL your own robots.txt disallows is never flagged. A crawler honouring that instruction was never going to fetch the target, so its absence from the crawl is the block working correctly, not breakage.
- On a scoped crawl, a link outside that scope is never flagged, for the same reason: it was deliberately never a crawl candidate.
- A target that was fetched and returned an error, such as a 404, is not reported here. That page exists in the crawl's records with its own status code, so it does not read as "not found in the crawl" the way this check requires; this check only fires on a target that was never fetched at all.
- A link that resolves to a redirect is not broken. It reaches a live page eventually; see Internal Link to a Redirect for that separate, more specific case.
Related reading
For a link whose href could not be parsed as a URL at all, see Malformed Links. For a link that resolves but only via an unnecessary extra hop, see Internal Link to a Redirect.
Google documentation: SEO link best practices for Google
Frequently asked questions
- How is this different from a link to a redirect?
- A redirect resolves to a real, live page eventually, just via an extra hop; that is Internal Link to a Redirect's territory, and the fix is repointing the link. This check is for links whose target was never found in the crawl at all, so there is no live page on the other end to redirect from.
- How is this different from a malformed link?
- A malformed link is not a URL in the first place, such as a pasted street address in an href. This check only looks at hrefs that parse as valid same-site URLs and were simply never reachable in the crawl, a different mistake with a different fix.
- Does this fire on a scoped or page-capped crawl?
- No, and deliberately so. A crawl limited to part of a site, or cut off by a page or depth limit, has links pointing at pages it was never going to reach anyway, which look identical to genuinely broken ones from the crawl's point of view. Rather than guess, this check reports nothing on a partial crawl; run a full, unscoped audit to get a reliable answer.
- Does a link to a page blocked by robots.txt count as broken?
- No. If your own robots.txt disallows a path, a crawler honouring it is expected to never fetch that page, so a link to it is not treated as broken, it is the block working as intended.