You crawl your site. The top 10 URLs have 500+ internal inbound links each. The bottom 200 have 0-2. The top 10 are your homepage, the main category pages, and 4-5 articles that got featured. Everything else is starved, so Google barely crawls it, it never ranks, and “publishing more content” stops moving the needle.
Fastest fix: crawl in Screaming Frog, sort the Internal tab by the Unique Inlinks column ascending, take the bottom ~20% of URLs, and add 2-5 descriptive body-text links to each from older articles on the same topic. That single pass moves the starved pages from 0-2 inlinks to 5-7 without writing a word of new content. The widget swap and editorial checklist below stop the skew from creeping back.
Internal links are how authority (and crawl budget) flows through a site. A heavy skew means most of your catalog is effectively invisible to Google’s ranking: it knows the pages exist via the sitemap but assigns them almost no weight. Rebalancing is one of the highest-ROI SEO actions because it adds no new content — you connect what you already have.
Which bucket are you in
Crawl once, then match your symptom to the most likely cause. The fix for each is in the next section.
| Symptom in the crawl | Most likely cause | Primary fix |
|---|---|---|
| Highest-inlink articles are also the newest | ”Latest 5” widget repeated site-wide | Step 3 (smart related widget) |
| Most articles have 0-2 body links (nav/widgets aside) | No body-text linking at all | Step 2 + Step 5 |
| Old “ultimate guide” has 80 inlinks, links to nothing newer | Strong pages are authority dead ends | Step 4 |
| Articles in a category never link back to the category URL | One-directional category flow | Step 5 checklist |
| Tag pages orphaned; footer shows ~20 of 100 tags | Truncated tag cloud | See too many thin tag archives |
| Articles under 30 days old have 0 inbound links | ”Publish and forget” workflow | Step 5 (publishing gate) |
Common causes
Ordered by hit rate, highest first.
1. “Latest articles” widget on every page links to the same 5 newest
Every article page has a sidebar showing the 5 newest articles. Those 5 get N inbound links (one per article on the site). Articles older than two weeks never appear in any widget and become orphaned.
How to spot it: Your highest-inbound articles are also the most recent. Inbound count correlates with publish date — that is the widget pattern.
2. No body-text internal links — only navigation links
Authors write in isolation. The only internal links to and from an article come from auto-generated navigation (related widget, category page, breadcrumb). Body text links nowhere.
How to spot it: Open 5 random articles. Count internal links inside the body content (exclude nav, footer, widgets). If most have 0-2 body links, body-text linking is missing.
3. Old strong articles never link to newer related content
Your “Ultimate Guide to X” from 2024 has 80 inbound links and still does not link to the 12 newer articles you wrote in 2026 on X sub-topics. Authority sits in the old article without flowing down.
How to spot it: Pull the top 10 articles by inlinks. Check whether they link to articles published after them. If not, they are authority dead ends.
4. Category pages list articles but articles don’t link back to the category
Articles in category X are linked from the category page (auto-generated), but they don’t link to the category page from their body. Authority flows one direction only.
How to spot it: Grep article bodies for the category URL. If most articles in category X never reference /category/x/ in body text, the back-link is missing.
5. Tag cloud / footer links to a few tags only
The footer tag cloud shows the 20 most-used tags. The other 80 tags get no footer link, so those 80 tag pages are orphaned. See too many thin tag archives for the related thin-archive problem.
How to spot it: Compare total tag count against tags appearing in footer/sidebar. If the footer shows 20 of 100, 80 tags have no global link.
6. New articles published without internal-link review
Author writes, publishes, moves on. No pass adds 2-3 links from existing articles to the new one, or from the new article to existing ones. Each new article starts orphaned — the same root cause behind internal links Google never discovers.
How to spot it: Articles less than 30 days old have 0 inbound links other than the category page. That is a publish-and-forget workflow.
Shortest path to fix
Ordered by ROI. Step 1 audits; later steps rebalance.
Step 1: Audit internal inbound link counts per URL
Use a crawler that reports per-URL inlinks. The fastest path, as of June 2026:
- Crawl the site in Screaming Frog SEO Spider (free tier crawls up to 500 URLs; the paid license removes the cap).
- Open the
Internaltab. Sort ascending by theUnique Inlinkscolumn — that counts each linking source URL once, which is what you want (it ignores 10 links from one page’s nav). The% of Totalcolumn shows each URL’s share of all internal inlinks, so you can see the skew directly. - Run
Crawl Analysis > Start(or tickCrawl Analysis > Configure > Linksfirst). This populates theLink Scoremetric (a normalized 0-100 internal authority estimate) and the crawl-depth and orphan filters. - To catch true orphans — pages that get search impressions but no internal links — connect the Search Console API under
Config > API Access > Google Search Console, enable Crawl New URLs Discovered In Search Console, then after the crawl exportBulk Export > Sitemaps > Orphan URLs Inlinks(or check theSearch Console > Orphan URLsissue filter).
No license? Hand-roll it: for each article URL, grep -rl the built site for that URL and count the matching files.
# Rough inlink count from a built static site (run from the build output dir)
for url in $(cat all-urls.txt); do
count=$(grep -rl "$url" . | wc -l)
echo "$count $url"
done | sort -n
Output: a distribution of inbound counts split into top 10%, middle 70%, bottom 20%.
Target: every article that is meant to rank should have at least 3 unique internal inlinks. The bottom 20% currently sits at 0-2.
Step 2: For the bottom 20%, add 2-5 body-text links from related articles
For each starved article:
1. Find 5-10 existing articles on related topics (grep by topic keyword).
2. In each of those existing articles, add 1 body-text link to the starved article.
3. Use descriptive anchor text (the destination's topic, not "click here").
Per starved article you add ~5 inbound links from 5 different sources, moving it from 0-2 to 5-7. Google explicitly treats anchor text as a topical signal — its link best-practices doc calls for anchors that are “descriptive, reasonably concise, and relevant,” so the anchor wording is doing ranking work, not just navigation.
Keep the per-page link load sane. As of June 2026, common guidance is roughly one contextual internal link per 200-300 words and keeping total on-page links (nav included) well under ~150; far more than that dilutes the signal and reads like a link farm.
Step 3: Replace the “latest 5” widget with a “smart related” widget
The latest-5 widget gives every article-detail page the same 5 outbound links. Replace it with a per-article related-articles widget that also surfaces 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 pages
}))
.sort((x, y) => y.score - x.score)
.slice(0, 6)
.map(x => x.article);
}
Now the widget surfaces topically relevant articles and boosts under-linked ones, so the distribution evens out automatically. Watch for the failure mode in related widgets that leak duplicates — dedupe by slug before slicing.
Step 4: For the top-10 strong articles, add downstream links
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 anchors, embedded naturally where the topic comes up.
Authority that was trapped in the strong article now flows downstream. Newer and deeper content benefits without diluting the strong article’s own ranking — this is the same authority-distribution problem as a homepage that cannot distribute authority, applied one level down.
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 text
- [ ] At least 1 inbound link added from a less-trafficked area (boost starved content)
- [ ] Anchor text is descriptive, not "click here"
Block PRs missing these, or run a lint script that counts body-text internal links and fails the build under a threshold.
Step 6: Re-audit after 2 weeks and confirm the skew shrank
Re-run the exact Step 1 crawl. Compare the new Unique Inlinks distribution against the old one:
- The bottom 20% should now sit at 3+ inlinks instead of 0-2.
- The
% of Totalheld by the top 10 URLs should have dropped. - The
Bulk Export > Sitemaps > Orphan URLs Inlinksexport should be shorter (fewer true orphans).
In Search Console, a starved URL that gets newly linked should move from Discovered – currently not indexed toward indexed over the following weeks; if it stays stuck, see crawled but currently not indexed. Internal-link rebalancing is continuous — the skew creeps back as you publish, so re-audit at least quarterly.
How to confirm it’s fixed
- Crawl check: no article that is meant to rank has fewer than 3
Unique Inlinks. - Orphan check:
Bulk Export > Sitemaps > Orphan URLs Inlinksreturns an empty or near-empty list. - Distribution check: the single highest
% of Totalvalue drops noticeably between the before and after crawls (the long tail is no longer starved). - Indexing check: Search Console Pages report shows formerly starved URLs moving into Indexed over a few weeks; impressions for those URLs start appearing in Performance.
Prevention
- Every new article ships with 2-3 body-text internal links, enforced by the editorial checklist or a lint gate.
- The related-articles widget includes archive depth and boosts starved content — not just “latest 5.”
- Top articles deliberately link downstream to newer related content so authority flows rather than traps.
- Articles link to their parent category page in body text for bidirectional flow.
- Quarterly: re-audit the inbound distribution; rebalancing the bottom 20% is recurring work.
- Always use descriptive anchor text; “click here” carries no topical signal.
FAQ
How many internal links should each page have? Aim for at least 3 unique internal inlinks to every page you want indexed, and roughly one contextual link per 200-300 words of body text out of it. Keep total on-page links (navigation included) well under ~150 so the signal isn’t diluted.
Do nav, footer, and widget links count the same as body-text links? Not really. Site-wide nav/footer links are present on every page, so search engines discount their value — they help discovery but pass little distinguishing authority. Contextual body-text links inside relevant content carry the topical and ranking weight, which is why the fix above targets body links specifically.
What’s the difference between an orphan page and a starved page?
An orphan page has zero internal links pointing to it (only reachable via sitemap or direct URL). A starved page has a few (1-2) but far below the rest of the site. Screaming Frog finds true orphans via the Bulk Export > Sitemaps > Orphan URLs Inlinks report after you connect the Search Console or sitemap source; see orphan content pages for the zero-inlink case.
Will adding internal links help a page that’s indexed but not ranking? It can, by passing more authority and reinforcing topical relevance with descriptive anchors, but it is not a guaranteed fix on its own. If a page is indexed and getting zero traction, also check content quality and search intent before assuming links are the bottleneck.
How long until rebalancing shows up in rankings? Discovery and re-crawl can take days; ranking movement for the newly-linked pages typically takes a few weeks as Google re-evaluates them. Re-audit at the 2-week mark to confirm the inlink distribution changed, then watch Search Console over the following month.
Can I just generate thousands of internal links automatically? Avoid blanket auto-linking every keyword. Mass automated links create thin, repetitive anchors that look manipulative and can break navigation. A relevance-scored related widget (Step 3) plus a deliberate body-link pass (Step 2) gives you the distribution without the spam pattern.
Related
- Orphan content pages
- Homepage cannot distribute authority
- Internal links Google never discovers
- Too many thin tag archives
Tags: #Content ops #Site quality #Site audit #Troubleshooting #Internal link #Authority flow