onpage
Internal links on page
MetricSpot counts how many same-domain links the page contains. Too few, and pages get stranded with no crawl path and no PageRank flow.
What this check does
Counts anchor tags (<a href>) on the page that point to URLs on the same domain. Excludes nav and footer boilerplate that appears site-wide; focuses on contextual in-content links. Passes when there are at least a handful — typically 3+ on short pages, 8+ on long-form content.
Why it matters
Internal links do three jobs at once:
- Spread PageRank between pages. The original PageRank algorithm distributes ranking weight along links, internal or external. Pages with no inbound internal links from anywhere are stranded — they accrue zero authority from your homepage.
- Give crawlers paths to follow. Googlebot, GPTBot, ClaudeBot, and others discover pages by following links. A page that’s only reachable from the sitemap gets crawled less often and ranks worse.
- Help readers find related content. Time-on-site and engagement metrics improve when readers naturally move from one relevant page to the next.
A long article with zero internal links is a dead-end from every angle.
How to fix it
Add 3–10 contextual links to relevant pages on your domain. The rules:
Link anchor text matters. Use descriptive text that matches the destination page’s topic — not “click here” or “read more.” This is the same rule covered in descriptive link text.
<!-- bad -->
For more details, <a href="/docs/hsts-preload">click here</a>.
<!-- good -->
Once your HSTS header is stable, <a href="/docs/hsts-preload">add your domain to Chrome's preload list</a>.
Link to pages, not the homepage. A blog post linking back to / over and over is wasted. Link to other articles, category pages, product pages — wherever a reader’s next question lives.
Build a topic cluster. Pick a pillar page (the comprehensive guide), surround it with focused articles, and link them all to each other. Search-engine docs and SEO research are unanimous that clustered architectures outrank flat ones.
Keep links crawlable. Google’s crawlable links guidance is explicit: use <a href="...">. A <span onclick> or <button> with a JavaScript navigation will not be followed.
<!-- bad: not crawlable -->
<span onclick="location='/about'">About us</span>
<!-- good -->
<a href="/about">About us</a>
For UI links that need JS behavior, still use <a href>:
<a href="/products/widget" data-track="card-click">Widget</a>
The default browser navigation happens, your tracking fires on click, and the crawler sees a real link.
Don’t over-link. Stuffing 80 links into a 500-word post is a spam signal. Aim for one link per 100–150 words of body copy, and only when the destination is genuinely useful.
For the bigger picture see internal linking strategy — it covers cluster architectures and anchor-text diversity in depth.
Frequently asked questions
Do nav and footer links count?
We exclude them. Site-wide boilerplate provides crawlability but not contextual ranking signal. The check measures in-content links — the ones inside <article>, <main>, or prose body. If your nav is your only source of internal links, this check still fails.
Should I use nofollow on internal links?
Almost never. nofollow originated as a comment-spam tool and tells Google to not pass weight along the link. Sculpting PageRank with internal nofollow was popular in 2008 and is now actively harmful — Google stopped honoring it for internal links years ago, but the loss of crawl path remains.
What about JavaScript routers (React Router, Next.js Link)?
Both render real <a href> tags by default — good. The trap is <button onClick={() => navigate(...)}> patterns. If your “links” don’t render as <a> in view-source HTML, the crawler can’t follow them.
Sources
Last updated 2026-05-11