Internal linking at scale: hub and spoke for thousands of pages
On a site of a thousand generated pages, internal linking is not an optimisation. It is the mechanism that decides which pages get crawled, indexed and ranked. Content only counts on pages the crawler reaches.
A link carries two separate signals
An internal link transmits authority and relevance. Authority dilutes with the number of outbound links on the linking page; relevance depends on anchor text and surrounding context. A good architecture optimises each independently.
The share a page receives depends on the authority of its linking pages divided by their outbound link count. Linking everything to everything is arithmetically the same as linking nothing.
Three tiers, never more than four
| Tier | Role | Typical count | Outbound internal links |
|---|---|---|---|
| Pillar | Covers the topic whole; attracts external links | 1 per silo | 15–30 |
| Hub | Groups a family of variants | 5–15 per silo | 20–50 |
| Spoke | One precise intent; a generated page | Everything else | 4–8 |
A spoke linking to forty other spokes passes almost nothing to each. Four to eight contextual links beat a thirty-link footer block every time.
Click depth is the hard constraint
Click depth is the minimum number of clicks from the homepage. On large sites the correlation between depth and indexation rate is unambiguous: past four clicks, the indexed share collapses.
- Depth 0 — homepage
- Depth 1 — silo pillar
- Depth 2 — hub
- Depth 3 — spoke
Three tiers cover 1,000 pages comfortably: one pillar, ten hubs, a hundred spokes each. For 100,000 the same shape holds with paginated hubs — provided pagination is crawlable and paginated canonicals are self-referencing.
Anchor text distribution
One exact-match anchor repeated identically across 300 pages is a detectable pattern with little upside. A workable mix:
- Exact match — 20%. The target query as-is.
- Partial match — 60%. The query embedded in a sentence with connecting words.
- Contextual — 20%. A rephrasing that describes what the reader will find.
In all three cases the link sits in body copy, at the point where the question it answers actually arises. A link at the end of an article is clicked roughly ten times less than one mid-paragraph.
Finding and fixing orphans
An orphan page sits in the sitemap but receives no internal links. On a poorly designed batch they routinely account for 30% to 60% of the total.
orphans = sitemap_urls - urls_reachable_by_crawl
The fix is never "add a footer link". It is to identify the hub the page logically belongs to and attach it there. If no hub fits, the page should not have been generated — which loops back to the quality gate.
Computing spoke-to-spoke links
On a generated site, links between spokes must be computed rather than random. Three selection criteria, in priority order:
- Semantic proximity — same hub, related entities.
- Intent complementarity — the logical next page in the reader's journey.
- Load balancing — favour pages currently receiving few inbound internal links, so that 10% of pages do not absorb 80% of the signal.
The third criterion is the one most often skipped and the one that matters most at volume. Implementation depends on a stable identifier per page — see URL structure and slug design — and its effect on discovery is covered in crawl budget on large sites.
A monthly audit that takes ten minutes
- Inbound internal links per page: flag anything with fewer than two.
- Click depth distribution: flag anything past depth four.
- Outbound links per spoke: flag anything above twelve.
- Anchor diversity per target: flag any target where one anchor exceeds 40% of inbound links.
Frequently asked questions
How many internal links should a page have?
Four to eight contextual outbound links for a spoke page, more for a hub whose job is distribution. The count matters less than the dilution: each extra link reduces the share passed to the others.
Do footer links carry the same weight?
No. A link repeated sitewide in a navigation block passes a much weaker signal than a contextual link in body copy, and carries almost no relevance signal.
What is the maximum acceptable click depth?
Three clicks from the homepage is a good target and four is workable. Beyond that, indexation rates drop sharply on large sites.