Dead-end page: no outgoing internal links to continue with
A page with no onward links leaves the reader and the crawler with nowhere to go. squirrel counts outgoing internal links, excluding self-links.
What a dead-end page is
A dead-end page has no internal links leading anywhere else. Whatever brought the reader here, nothing suggests what to read next, and a crawler that arrives finds no new URLs to follow.
Some pages are meant to be terminal. A thank-you page after a form submission, a download confirmation, a success screen: those have done their job and the default exclusion list covers them. Everything else usually has related content it should be pointing at.
What squirrel checks
The rule runs on every crawled page. It counts internal links whose normalised URL differs from the page’s own, so a self-link does not count. It emits a single check named dead-end:
- Skipped when the page could not be parsed. Message:
Page could not be parsed. - Skipped when the URL matches an exclusion pattern. Message:
Page excluded by pattern. - Warn when the count is below
minLinks, default 1. Message:Page has no outgoing internal links (dead-end), with the count as the value. Severity warning, weight 3. - Pass otherwise. Message:
Page has outgoing internal links, with the count as the value.
The default exclusions are /thank-you, /confirmation, /download, /success and /submitted. Same-page anchor links are ignored unless countAnchorLinks is on, which is useful for a single-page app where the in-page navigation is the navigation.
How to fix it
Add a related-content block, a breadcrumb back to the parent section, or links from the body copy to the pages this one references. One meaningful onward link is enough to clear the rule; three or four is better for a reader.
For a single-page application whose whole navigation is fragment links, turn on countAnchorLinks rather than adding links that do not belong.
| Rule ID | links/dead-end-pages |
| Category | Links |
| Scope | Per-page |
| Severity | warning |
| Weight | 3/10 |
Options
| Option | Type | Default | Description |
|---|---|---|---|
excludePatterns | array of strings | ["/thank-you", "/confirmation", "/download", "/success", "/submitted"] | URL patterns that are allowed to be dead ends |
minLinks | number | 1 | Minimum outgoing internal links before the page is a dead end |
countAnchorLinks | boolean | false | Count anchor links (#section) as valid internal links (useful for single-page apps) |
Configuration example
[rule_options."links/dead-end-pages"]
minLinks = 3
countAnchorLinks = true
excludePatterns = ["/thank-you", "/receipt"]Enable / disable
Disable this rule
[rules]
disable = ["links/dead-end-pages"]Disable all Links rules
[rules]
disable = ["links/*"]Enable only this rule
[rules]
enable = ["links/dead-end-pages"]
disable = ["*"]Related rules
- links/internal-links: the same count judged against a range rather than a floor.
- links/orphan-pages: the inbound side of the same structure.
- links/anchor-text: what the onward links should say.
- content/article-links: whether the body copy links out at all.
Links findings ship in every audit next to the SEO, performance and agent experience rules. See Fix SEO issues with AI for how an agent works through a report.
References
Check your site
Run squirrel audit https://example.com and open the Links section of the report. Every dead-end page is listed with its outgoing link count. Local audits are free.