Linked only from the nav and footer: no editorial links
A footer link on every page looks like hundreds of inbound links and carries none of the signal. squirrel counts only links outside sitewide chrome.
What a contextual inbound link is
A contextual link sits inside the content: a sentence in an article, a description on a hub page, a related-reading list written for that page. A chrome link is one whose anchor has a nav, header, footer or aside ancestor. That is an element test rather than a repetition test, so an article’s own <header> or a per-page <aside> counts as chrome too.
Counting the two together hides a real problem. A page reachable only through the footer has a large raw inbound count and no editorial support at all: nothing on the site says what the page is about or why it matters, only that it exists. This rule counts contextual links only.
What squirrel checks
The rule is site-wide. For each crawled page it counts internal, resolvable, dofollow inbound links twice: all of them, and only those whose anchor sat outside a nav, header, footer or aside landmark. It emits a single check named no-contextual-inbound:
- Skipped when there are too few pages. Message:
Insufficient pages for contextual inbound link analysis. - Skipped when the crawl stopped at its page cap. Message:
Crawl stopped at its 10-page cap, so a contextual link may sit on a page not crawled. The finding rests on a link being absent, and a capped crawl has not seen every page that could carry one. Raisemax_pagesor use a deeper coverage profile to get a verdict. - Warn for pages with zero contextual inbound links. Message:
9 page(s) are linked only from sitewide chrome. The value lists up to five paths with a+N moresuffix, and every URL is listed as an item. Severity warning, weight 4. - Pass otherwise. Message:
All pages have at least one contextual inbound link.
A page is only considered when its raw inbound count is at or above minInboundLinks, default 2. Below that it is already reported by links/orphan-pages, and the two thresholds should be kept in sync when either is tuned. The homepage is skipped, since it is linked from every header by design, and so is the page the audit started from: the URL you gave and where its redirects landed (a root that redirects to /en/).
Legal pages are skipped too: privacy, terms and imprint pages are footer-only by design, so being linked only from chrome is expected. They are recognised by the last segment of the path, under any prefix, so /impressum, /datenschutz, /agb, /privacy-policy, /terms-of-service, /imprint, /legal, /legal-notice and /en/legal are not reported, in the languages the privacy and terms checks of eeat/privacy-policy recognise. A page whose slug only contains one of those words (/legalese-guide) is still reported.
Crawls stored before the chrome flag existed report every link as contextual, so an old crawl passes rather than producing a site-wide false alarm.
How to fix it
Link to the page from the body of the content it belongs with, using anchor text that describes it. A category page that introduces its members in prose, rather than only listing them, produces contextual links as a side effect.
A whole site that links only through chrome reports every page that is not the homepage or the page the audit started from, is not excluded, and has at least minInboundLinks raw inbound links. That is accurate rather than a false positive, and it usually means the content does not cross-reference itself.
| Rule ID | links/no-contextual-inbound |
| Category | Links |
| Scope | Site-wide |
| Severity | warning |
| Weight | 4/10 |
Options
| Option | Type | Default | Description |
|---|---|---|---|
minInboundLinks | integer, 0 or more | 2 | Raw inbound-link threshold from links/orphan-pages; only pages at or above it are considered here |
excludePatterns | array of strings | [] | URL patterns to exclude from contextual inbound link detection |
Configuration example
[rule_options."links/no-contextual-inbound"]
minInboundLinks = 2
excludePatterns = ["/lp/"]Enable / disable
Disable this rule
[rules]
disable = ["links/no-contextual-inbound"]Disable all Links rules
[rules]
disable = ["links/*"]Enable only this rule
[rules]
enable = ["links/no-contextual-inbound"]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/orphan-pages: pages below the raw inbound threshold, which this rule leaves alone.
- links/weak-internal-links: pages with exactly one dofollow internal inbound link.
- links/anchor-text: what those contextual 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 chrome-only page is listed by path. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.