rel=nofollow on an internal link: usually a mistake
Nofollow on your own links tells search engines to ignore your site's internal structure. squirrel flags every internal link carrying it.
What nofollow does
rel="nofollow" marks a link as one you do not vouch for. It was introduced for comment spam, and Google now treats it as a hint alongside sponsored and ugc rather than a strict instruction.
On an external link it is a reasonable qualification. On an internal link it is a statement that you do not endorse your own page, which is almost never what the author meant. The pattern usually comes from an old technique called PageRank sculpting, which stopped working in 2009, or from a plugin applying it indiscriminately.
What squirrel checks
The rule runs on every crawled page over every a[href][rel]. A link counts when its rel, lowercased, contains nofollow and its resolved hostname equals the page’s hostname. Cloudflare’s email address obfuscation links (/cdn-cgi/l/email-protection) are skipped: a browser turns them into mailto: addresses, so they are not page links. It emits a single check named nofollow-internal:
- Warn when any such link exists. Message:
3 internal link(s) have nofollow, with each href listed. Severity warning, weight 5. - Pass otherwise. Message:
No internal links with nofollow.
The hostname comparison is exact, so a link to a subdomain of the same site is treated as external and is not flagged. Note that links/orphan-pages and the other inbound-count rules ignore nofollow links entirely, so a nofollowed internal link does not count toward a target page’s inbound total.
How to fix it
<a href="/pricing">Pricing</a>Remove the attribute. If the link points at something you genuinely do not want crawled, such as a faceted filter URL, the tool is a robots.txt Disallow. If you want it crawled but not indexed, the tool is noindex on the target, which only works when the crawler is allowed to fetch it. Neither job belongs to nofollow on the link.
Keep it for user-generated content, where rel="ugc nofollow" is the correct marking even on an internal profile link.
| Rule ID | links/nofollow-internal |
| Category | Links |
| Scope | Per-page |
| Severity | warning |
| Weight | 5/10 |
Enable / disable
Disable this rule
[rules]
disable = ["links/nofollow-internal"]Disable all Links rules
[rules]
disable = ["links/*"]Enable only this rule
[rules]
enable = ["links/nofollow-internal"]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: the inbound counts that skip nofollowed links.
- links/weak-internal-links: pages left with a single counted inbound link.
- crawl/robots-txt: the right tool for keeping a crawler off a URL.
- links/external-links: the links where nofollow does belong.
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 nofollowed internal link is listed with its href. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.