Internal link count per page: too few and too many
A page with no internal links leads nowhere and a page with hundreds dilutes each one. squirrel counts internal links against a configurable range.
What the internal link count measures
This is a count of the internal links a page carries, judged against a floor and a ceiling. It is a shape check rather than a quality one: it says nothing about where the links go or what they say.
The floor catches pages that lead nowhere. The ceiling catches the opposite, usually a page rendering an entire category tree or a mega-menu with several hundred entries, where any individual link is a small fraction of what the page is pointing at.
What squirrel checks
The rule runs on every crawled page and counts links the parser marked as internal, including navigation and footer links. It emits a single check named internal-links:
- Warn below
min_internal_links, default 1. Message:Too few internal links (0, min 1), with the count as the value and the threshold as the expected value. - Warn above
max_internal_links, default 100. Message:Too many internal links (240, max 100). - Pass otherwise. Message:
42 internal link(s), with the count as the value.
Severity warning, weight 4. Every internal link on the page counts, so a large sitewide navigation pushes every page toward the ceiling. Raise the ceiling rather than removing navigation if that is the shape of the site.
How to fix it
[rule_options."links/internal-links"]
max_internal_links = 200For the floor, add links to related content from the body copy. For the ceiling, decide whether the page really needs to expose the whole tree, or whether a hub page per section would serve a reader better.
Set the ceiling to match the site. A documentation site with a full sidebar will exceed 100 on every page by design.
| Rule ID | links/internal-links |
| Category | Links |
| Scope | Per-page |
| Severity | warning |
| Weight | 4/10 |
Options
| Option | Type | Default | Description |
|---|---|---|---|
min_internal_links | number | 1 | Minimum internal links |
max_internal_links | number | 100 | Maximum internal links |
Configuration example
[rule_options."links/internal-links"]
min_internal_links = 3
max_internal_links = 200Enable / disable
Disable this rule
[rules]
disable = ["links/internal-links"]Disable all Links rules
[rules]
disable = ["links/*"]Enable only this rule
[rules]
enable = ["links/internal-links"]enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.
Related rules
- links/dead-end-pages: the floor, with exclusions for pages meant to be terminal.
- links/external-links: the same count for links leaving the site.
- links/orphan-pages: the inbound side of the same structure.
- links/anchor-text: what those links say.
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. Each page is reported with its internal link count. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.