Internal Links Severely Uneven — A Few Pages Get Everything

Top 10 pages have 80% of internal links; 200 pages have 0–2. Audit + body-text linking + smart related-articles widget = rebalance one of the highest-leverage SEO actions.

You crawl your site. The top 10 pages have 500+ internal inbound links each. The bottom 200 pages have 0-2. The top 10 are your homepage, main categories, and 4-5 articles that got featured. Everything else is starved — Google barely crawls them, they never rank, and you wonder why “publishing more content” isn’t moving the needle.

Internal links are how authority flows through your site. Heavy skew means 95% of your catalog is invisible to Google’s ranking algorithm — it knows the pages exist (via sitemap) but doesn’t weight them. Rebalancing is one of the highest-ROI SEO interventions because it costs no new content; you just connect what you already have. Below: how to audit + the linking patterns that actually rebalance.

Common causes

Ordered by hit rate, highest first.

Every article page has a sidebar showing the 5 newest articles. Those 5 articles get N inbound links (one per article on the site). Articles older than two weeks never appear in any widget; they’re orphaned.

How to spot it: Your highest-inbound articles are also the most recent. Inbound count correlates with publish date — that’s the widget pattern.

Authors write articles in isolation. The only internal links to/from an article come from auto-generated navigation (related widget, category page, breadcrumb). Body text doesn’t link out.

How to spot it: Open 5 random articles. Count internal links in body content (excluding nav/footer/widgets). If most have 0-2 body links, body-text linking is missing.

Your “Ultimate Guide to X” from 2024 has 80 inbound links. It still doesn’t link to the 12 newer articles you wrote in 2026 on X-related sub-topics. Authority sits in the old article without flowing down.

How to spot it: Pull top-10 articles. Check if they link to articles published after them. If not, they’re authority dead ends.

Articles in category X are linked from the category page (auto-generated). Articles in category X don’t link to the category page from their body. Authority flows one direction only.

How to spot it: Grep article body for /category/X/. If most articles in category X don’t reference the category URL in body text, the back-link is missing.

The footer has a tag cloud showing the 20 most-used tags. The 80 less-used tags get no footer links. Tag pages for those 80 are orphaned.

How to spot it: Total tags vs tags appearing in footer/sidebar. If footer shows 20 of 100 tags, 80 are getting no global link.

Author writes, publishes, moves on. No pass to add 2-3 internal links from existing articles to the new one, or 2-3 internal links from the new article to existing ones. Each new article starts orphaned.

How to spot it: Articles less than 30 days old have 0 inbound links (other than from category page). That’s “publish and forget” workflow.

Shortest path to fix

Ordered by ROI. Step 1 audits; subsequent steps rebalance.

# Use Screaming Frog, Sitebulb, or a custom crawler
# Export: URL + internal inbound link count
# Sort by inbound desc

# Or hand-roll:
# for each article: grep recursively for its URL, count matches

Output: distribution of inbound counts. Top 10%, middle 70%, bottom 20%.

Target: bottom 20% should have ≥3 inbound links. Currently they have 0-2.

For each starved article:

1. Find 5-10 existing articles on related topics (grep by topic keywords).
2. In each of those existing articles, add 1 body-text link to the starved article.
3. Use descriptive anchor text (the starved article's title or topic, not "click here").

Per starved article, you add ~5 inbound links from 5 different sources. The starved page goes from 0-2 to 5-7.

The latest-5 widget gives every article-detail page the same 5 outbound links. Replace with a per-article “related articles” widget that includes archive depth:

// related-articles.ts
function getRelated(current: Article, all: Article[]): Article[] {
  return all
    .filter(a => a.slug !== current.slug)
    .map(a => ({
      article: a,
      score:
        sharedTags(current, a) * 3 +
        sameCategory(current, a) * 5 +
        (a.inboundCount < 3 ? 2 : 0)   // boost starved
    }))
    .sort((x, y) => y.score - x.score)
    .slice(0, 6)
    .map(x => x.article);
}

Now widget includes articles by topical relevance, with a boost for under-linked pages. Distribution evens out.

For each high-inbound article:

1. List articles published *after* it on related sub-topics.
2. Add 2-3 body-text links from the strong article to the newer related ones.
3. Use descriptive anchor; embed naturally where the topic comes up.

Authority that was trapped in the strong article now flows downstream. Newer/deeper content benefits without diluting the strong article’s own ranking.

Step 5: Make body-text internal linking a publishing requirement

Editorial checklist:

Before publishing any article:
- [ ] 2-3 body-text internal links to existing related articles
- [ ] 1 reference to the parent category page in body
- [ ] At least 1 link comes from a less-trafficked area (boost starved content)
- [ ] Anchor text is descriptive, not "click here"

Block PRs missing these (or use a lint script that counts body-text internal links).

Step 6: Re-audit after 2 weeks and iterate

# Same crawl as Step 1, 2 weeks later
# Compare distribution: did the bottom 20% rise?

Internal-link rebalancing is a continuous process. The skew creeps back without ongoing attention.

Prevention

  • Every new article ships with 2-3 body-text internal links — editorial checklist enforced
  • Smart related-articles widget includes archive depth + boosts starved content; not just “latest 5”
  • Top articles deliberately link downstream to newer related content; authority flows, doesn’t trap
  • Body-text linking from articles to their category page; bidirectional flow
  • Quarterly: audit inbound distribution; bottom 20% rebalance is recurring work
  • Descriptive anchor text always; “click here” carries no topical signal

Tags: #Content ops #Site quality #Site audit #Troubleshooting #Internal link #Authority flow