Internal link architecture skill

- Why Internal Links Matter

by AgriciDaniel·MIT license·★ 2,219 Stars on the repo·GitHub ↗

Use now

Files of Internal link architecture

AgriciDaniel/main1 file
internal-linking.md
Show the full text340 lines

Contents

Internal links are the primary mechanism for distributing page authority across a site. They tell search engines and AI systems which pages are important, how content relates, and what the site's topical structure looks like.

John Mueller (Google): Internal linking is "supercritical for SEO": it helps Google understand site structure and page importance.

seoClarity case study: 23% organic traffic increase from internal link optimization alone, with no new content published.


The number of internal links per post should scale with content length.

Post Length Internal Links Notes
< 1,000 words 3-5 Short posts, fewer natural insertion points
1,000-2,000 words 5-7 Standard blog posts
2,000-3,000 words 7-10 Detailed guides
3,000+ words (pillar) 8-12 Comprehensive pillar pages
Hard Rules
  • Minimum: 3 contextual internal links per post (no exceptions)
  • Maximum: 10 links per post for standard content, 12 for pillar pages
  • No orphan posts: Every published post must be linked from at least one other page on the site
  • No dead ends: Every post must link out to at least 3 other pages

Anchor Text Distribution

Anchor text is the visible, clickable text of a hyperlink. Its optimization is critical but overuse of exact-match anchors triggers spam signals.

Anchor Type Target Share Example for "technical SEO"
Exact match 5-10% "technical SEO"
Partial match 20-30% "technical SEO best practices", "guide to technical SEO"
Semantic/related 30-40% "site architecture optimization", "crawlability improvements"
Branded 10-15% "our SEO guide", "[Brand] technical audit"
Natural/contextual 15-25% "the framework we outlined earlier", "as we discussed"
Anchor Text Rules
  • Descriptive: The anchor text should tell the reader what they will find at the destination
  • Natural: Must read naturally in the sentence: if removing the link leaves awkward phrasing, rewrite
  • Varied: Vary anchors naturally and avoid manipulative repetition; exact repeats are acceptable when they are the clearest wording
  • Relevant: Anchor text must relate to the destination page's topic
  • Reasonable length: 2-6 words is ideal, never an entire sentence
Anchor Text Anti-Patterns: NEVER Use
Pattern Problem Fix
"click here" Zero topical signal "Read our [technical SEO checklist]"
"this article" No descriptive value "Our [guide to crawl budget optimization]"
"read more" Generic, no context "[How structured data improves AI visibility]"
"learn more" Generic, no context "Learn [how to audit your internal links]"
Naked URLs Unreadable, no context Replace with descriptive text
Full sentence as anchor Looks spammy, dilutes signal Reduce to 2-6 key words
Same exact anchor everywhere Over-optimization signal Vary anchor text across pages

Where a link appears on the page affects how much weight it carries. Links higher on the page and within body content carry significantly more authority than links in footers or sidebars.

Placement Priority
Location Weight Notes
First 2-3 paragraphs Highest Most crawled, most clicked
Within body content (contextual) High Natural editorial links
After key sections (H2s) Medium-High Contextually relevant transitions
Table of contents Medium Navigation aid, passes some authority
Related posts section Medium-Low Algorithmic, less editorial signal
Sidebar Low Often templated, discounted
Footer Lowest Heavily discounted by search engines
Best Practices
  1. Place the most important internal link in the first 2-3 paragraphs
  2. Link to the pillar page early in every supporting article
  3. Distribute links naturally throughout the body: not clustered
  4. End sections with transitional links to related content
  5. Avoid placing all links in a "Related Articles" block at the bottom

Bidirectional Linking

When page A links to page B, page B should also link back to page A (where contextually relevant). This creates a strong topical relationship signal.

Implementation Process
  1. When publishing a new post that links to existing content:

    • Open each linked page
    • Find a natural place to add a link back to the new post
    • Use appropriate anchor text (not identical to the forward link)
  2. When updating an existing post:

    • Check if the linked pages reciprocate
    • Add reciprocal links where missing
Example

Post A: "Complete Guide to Technical SEO"

Post B: "Schema Markup Implementation Guide" (should link back)


Hub-and-Spoke Model

The hub-and-spoke (or pillar-cluster) model is the most effective internal linking architecture for topical authority.

Structure
                    ┌──────────────────┐
                    │   Pillar Page    │
                    │   (Hub)          │
                    │   /topic-guide   │
                    └────────┬─────────┘
                             │
           ┌─────────────────┼──────────────────┐
           │                 │                   │
    ┌──────▼──────┐   ┌─────▼──────┐   ┌───────▼──────┐
    │  Spoke #1   │   │  Spoke #2  │   │   Spoke #3   │
    │  Subtopic   │   │  Subtopic  │   │   Subtopic   │
    └──────┬──────┘   └─────┬──────┘   └───────┬──────┘
           │                │                   │
           └────────────────┼───────────────────┘
                    (cross-links between spokes)
Requirements
Element Specification
Pillar page 3,000-4,000 words, covers topic broadly
Supporting articles (spokes) 8-12 articles, each covers a subtopic in depth
Pillar → Spoke links Pillar links to ALL supporting articles
Spoke → Pillar links Every supporting article links back to pillar
Spoke ↔ Spoke links Cross-link between related subtopics (where natural)
Anchor text to pillar Varied: use different anchor text from each spoke
Example Topic Cluster: "Technical SEO"

Pillar: "The Complete Guide to Technical SEO in 2026"

Spokes:

  1. Schema Markup Implementation Guide
  2. Core Web Vitals Optimization
  3. Crawl Budget Management
  4. XML Sitemap Best Practices
  5. robots.txt Configuration Guide
  6. International SEO with hreflang
  7. Mobile-First Indexing Checklist
  8. Site Speed Optimization Techniques
  9. Structured Data Testing and Validation
  10. JavaScript SEO for Single-Page Applications

Each spoke links to the pillar and to 2-3 related spokes.


Orphan Page Detection

Orphan pages have zero internal links pointing to them. They are invisible to search crawlers navigating via internal links and will only be discovered through sitemap.xml (which carries less authority signal).

How to Find Orphan Pages
  1. Site crawl: Use a crawler (Screaming Frog, Sitebulb) to map all internal links and identify pages with zero inbound internal links.

  2. Manual check: For each published blog post URL, search the rest of the site for links pointing to it:

    # Check if any page links to a specific URL
    grep -r "/blog/your-post-slug" ./content/ --include="*.md"
    
  3. CMS/database query: Query your content database for pages not referenced in any other page's body content.

Fixing Orphan Pages

For each orphan page:

  1. Identify 2-3 topically related existing pages
  2. Add a contextual link from each related page to the orphan
  3. Ensure the orphan page links back to at least one of those pages
  4. If no related content exists, consider whether the orphan should be consolidated into another page or removed

Topic Cannibalization Detection

Topic cannibalization occurs when multiple pages target the same primary keyword, causing them to compete against each other in search results. This splits authority and often results in neither page ranking well.

Symptoms
Indicator What It Means
Two pages ranking for same keyword, both fluctuating Google is unsure which to show
One page dropped after publishing a similar new post New post cannibalized the old one
Neither page ranks in top 10 despite strong content Split authority
Search Console shows impressions split across URLs for same query Confirmed cannibalization
Detection Method
  1. In Google Search Console, filter by query and check which pages receive impressions
  2. If 2+ pages appear for the same query, cannibalization exists
  3. Review both pages' title tags, H1s, and meta descriptions for overlap
Resolution Strategies
Strategy When to Use
Merge Both pages cover the same topic; combine the best content from both into one, redirect the weaker URL
Differentiate Pages cover overlapping but distinct angles; sharpen each page's unique focus and keyword targeting
Canonical One page is clearly the primary; add rel="canonical" from secondary to primary
301 Redirect Weaker page adds no unique value; redirect to stronger page
Noindex secondary Keep both pages for users but exclude weaker from search

Run this audit quarterly or when publishing new content.

Per-Post Checks
Check Pass Criteria Fail Action
Internal link count 3-10 links (length-dependent) Add links to related content
No orphan status At least 1 internal link points to this page Add links from 2-3 related pages
Anchor text variety No single anchor used more than twice for same destination Vary anchor text
No generic anchors Zero instances of "click here", "read more", "this article" Replace with descriptive text
Bidirectional links Linked pages reciprocate where relevant Add reciprocal links
Pillar link present If part of a topic cluster, links to/from pillar Add pillar connection
Links functional All internal links return 200 Fix broken links (301 or remove)
Link placement At least 1 link in first 3 paragraphs Move important link higher
No over-linking No paragraph has more than 2 internal links Remove least relevant link
Anchor describes destination Reader can predict what they'll find Rewrite anchor text
Site-Wide Checks
Check Pass Criteria Fail Action
Orphan page count 0 orphan pages Link to all orphans from related content
Cannibalization No two pages target same primary keyword Merge or differentiate
Pillar coverage Every topic cluster has a pillar page Create missing pillar pages
Spoke count per pillar 8-12 supporting articles Create more supporting content
Average internal links per page 5-8 Bulk-add links to under-linked pages
Max clicks from homepage Any page reachable in 3-4 clicks Restructure navigation
Broken internal links 0 broken links (404s) Fix or remove all broken links

When adding internal links to existing content, avoid bulk-updating every page at once unless you have QA coverage. Pace changes so crawl logs, broken links, and editorial relevance can be reviewed.

Action Recommended Pace
New post with links Normal: add all links at publish time
Updating existing posts 3-5 posts per week maximum
New pillar page launch Update all spokes within 1-2 weeks
Site-wide link audit fix Spread changes over 2-4 weeks
Fixing orphan pages 2-3 per day

Maintain a simple tracking mechanism to ensure link health over time.

Field Purpose
Source URL Page containing the link
Destination URL Page being linked to
Anchor text Clickable text used
Date added When the link was created
Context Why this link exists (editorial, navigation, pillar-spoke)
Status Active, broken, or removed

This tracking helps identify:

  • Over-linked pages (too many pages linking to one destination)
  • Under-linked pages (valuable content with few inbound links)
  • Stale anchor text that needs updating after content refreshes
  • Broken links after URL changes or content deletion
1# Internal Link Architecture
2 
3## Contents
4 
5- [Why Internal Links Matter](#why-internal-links-matter)
6- [Link Density Targets](#link-density-targets)
7- [Anchor Text Distribution](#anchor-text-distribution)
8- [Link Placement Strategy](#link-placement-strategy)
9- [Bidirectional Linking](#bidirectional-linking)
10- [Hub-and-Spoke Model](#hub-and-spoke-model)
11- [Orphan Page Detection](#orphan-page-detection)
12- [Topic Cannibalization Detection](#topic-cannibalization-detection)
13- [Internal Link Audit Checklist](#internal-link-audit-checklist)
14- [Link Velocity Guidelines](#link-velocity-guidelines)
15- [Internal Link Tracking](#internal-link-tracking)
16 
17## Why Internal Links Matter
18 
19Internal links are the primary mechanism for distributing page authority across
20a site. They tell search engines and AI systems which pages are important, how
21content relates, and what the site's topical structure looks like.
22 
23John Mueller (Google): Internal linking is "supercritical for SEO": it helps
24Google understand site structure and page importance.
25 
26seoClarity case study: 23% organic traffic increase from internal link
27optimization alone, with no new content published.
28 
29---
30 
31## Link Density Targets
32 
33The number of internal links per post should scale with content length.
34 
35| Post Length | Internal Links | Notes |
36|-------------|---------------|-------|
37| < 1,000 words | 3-5 | Short posts, fewer natural insertion points |
38| 1,000-2,000 words | 5-7 | Standard blog posts |
39| 2,000-3,000 words | 7-10 | Detailed guides |
40| 3,000+ words (pillar) | 8-12 | Comprehensive pillar pages |
41 
42### Hard Rules
43 
44- **Minimum**: 3 contextual internal links per post (no exceptions)
45- **Maximum**: 10 links per post for standard content, 12 for pillar pages
46- **No orphan posts**: Every published post must be linked from at least one
47 other page on the site
48- **No dead ends**: Every post must link out to at least 3 other pages
49 
50---
51 
52## Anchor Text Distribution
53 
54Anchor text is the visible, clickable text of a hyperlink. Its optimization is
55critical but overuse of exact-match anchors triggers spam signals.
56 
57### Recommended Distribution
58 
59| Anchor Type | Target Share | Example for "technical SEO" |
60|-------------|-------------|----------------------------|
61| Exact match | 5-10% | "technical SEO" |
62| Partial match | 20-30% | "technical SEO best practices", "guide to technical SEO" |
63| Semantic/related | 30-40% | "site architecture optimization", "crawlability improvements" |
64| Branded | 10-15% | "our SEO guide", "[Brand] technical audit" |
65| Natural/contextual | 15-25% | "the framework we outlined earlier", "as we discussed" |
66 
67### Anchor Text Rules
68 
69- **Descriptive**: The anchor text should tell the reader what they will find
70 at the destination
71- **Natural**: Must read naturally in the sentence: if removing the link
72 leaves awkward phrasing, rewrite
73- **Varied**: Vary anchors naturally and avoid manipulative repetition; exact
74 repeats are acceptable when they are the clearest wording
75- **Relevant**: Anchor text must relate to the destination page's topic
76- **Reasonable length**: 2-6 words is ideal, never an entire sentence
77 
78### Anchor Text Anti-Patterns: NEVER Use
79 
80| Pattern | Problem | Fix |
81|---------|---------|-----|
82| "click here" | Zero topical signal | "Read our [technical SEO checklist]" |
83| "this article" | No descriptive value | "Our [guide to crawl budget optimization]" |
84| "read more" | Generic, no context | "[How structured data improves AI visibility]" |
85| "learn more" | Generic, no context | "Learn [how to audit your internal links]" |
86| Naked URLs | Unreadable, no context | Replace with descriptive text |
87| Full sentence as anchor | Looks spammy, dilutes signal | Reduce to 2-6 key words |
88| Same exact anchor everywhere | Over-optimization signal | Vary anchor text across pages |
89 
90---
91 
92## Link Placement Strategy
93 
94Where a link appears on the page affects how much weight it carries. Links
95higher on the page and within body content carry significantly more authority
96than links in footers or sidebars.
97 
98### Placement Priority
99 
100| Location | Weight | Notes |
101|----------|--------|-------|
102| First 2-3 paragraphs | Highest | Most crawled, most clicked |
103| Within body content (contextual) | High | Natural editorial links |
104| After key sections (H2s) | Medium-High | Contextually relevant transitions |
105| Table of contents | Medium | Navigation aid, passes some authority |
106| Related posts section | Medium-Low | Algorithmic, less editorial signal |
107| Sidebar | Low | Often templated, discounted |
108| Footer | Lowest | Heavily discounted by search engines |
109 
110### Best Practices
111 
1121. Place the most important internal link in the first 2-3 paragraphs
1132. Link to the pillar page early in every supporting article
1143. Distribute links naturally throughout the body: not clustered
1154. End sections with transitional links to related content
1165. Avoid placing all links in a "Related Articles" block at the bottom
117 
118---
119 
120## Bidirectional Linking
121 
122When page A links to page B, page B should also link back to page A (where
123contextually relevant). This creates a strong topical relationship signal.
124 
125### Implementation Process
126 
1271. When publishing a new post that links to existing content:
128 - Open each linked page
129 - Find a natural place to add a link back to the new post
130 - Use appropriate anchor text (not identical to the forward link)
131 
1322. When updating an existing post:
133 - Check if the linked pages reciprocate
134 - Add reciprocal links where missing
135 
136### Example
137 
138**Post A**: "Complete Guide to Technical SEO"
139- Contains: "...proper [schema markup implementation](/blog/schema-guide)
140 is essential for AI visibility."
141 
142**Post B**: "Schema Markup Implementation Guide" (should link back)
143- Add: "...schema is a critical component of [technical SEO
144 optimization](/blog/technical-seo-guide), affecting how search engines
145 interpret your content."
146 
147---
148 
149## Hub-and-Spoke Model
150 
151The hub-and-spoke (or pillar-cluster) model is the most effective internal
152linking architecture for topical authority.
153 
154### Structure
155 
156```
157 ┌──────────────────┐
158 │ Pillar Page │
159 │ (Hub) │
160 │ /topic-guide │
161 └────────┬─────────┘
162 │
163 ┌─────────────────┼──────────────────┐
164 │ │ │
165 ┌──────▼──────┐ ┌─────▼──────┐ ┌───────▼──────┐
166 │ Spoke #1 │ │ Spoke #2 │ │ Spoke #3 │
167 │ Subtopic │ │ Subtopic │ │ Subtopic │
168 └──────┬──────┘ └─────┬──────┘ └───────┬──────┘
169 │ │ │
170 └────────────────┼───────────────────┘
171 (cross-links between spokes)
172```
173 
174### Requirements
175 
176| Element | Specification |
177|---------|--------------|
178| Pillar page | 3,000-4,000 words, covers topic broadly |
179| Supporting articles (spokes) | 8-12 articles, each covers a subtopic in depth |
180| Pillar → Spoke links | Pillar links to ALL supporting articles |
181| Spoke → Pillar links | Every supporting article links back to pillar |
182| Spoke ↔ Spoke links | Cross-link between related subtopics (where natural) |
183| Anchor text to pillar | Varied: use different anchor text from each spoke |
184 
185### Example Topic Cluster: "Technical SEO"
186 
187**Pillar**: "The Complete Guide to Technical SEO in 2026"
188 
189**Spokes**:
1901. Schema Markup Implementation Guide
1912. Core Web Vitals Optimization
1923. Crawl Budget Management
1934. XML Sitemap Best Practices
1945. robots.txt Configuration Guide
1956. International SEO with hreflang
1967. Mobile-First Indexing Checklist
1978. Site Speed Optimization Techniques
1989. Structured Data Testing and Validation
19910. JavaScript SEO for Single-Page Applications
200 
201Each spoke links to the pillar and to 2-3 related spokes.
202 
203---
204 
205## Orphan Page Detection
206 
207Orphan pages have zero internal links pointing to them. They are invisible to
208search crawlers navigating via internal links and will only be discovered
209through sitemap.xml (which carries less authority signal).
210 
211### How to Find Orphan Pages
212 
2131. **Site crawl**: Use a crawler (Screaming Frog, Sitebulb) to map all internal
214 links and identify pages with zero inbound internal links.
215 
2162. **Manual check**: For each published blog post URL, search the rest of the
217 site for links pointing to it:
218 ```bash
219 # Check if any page links to a specific URL
220 grep -r "/blog/your-post-slug" ./content/ --include="*.md"
221 ```
222 
2233. **CMS/database query**: Query your content database for pages not referenced
224 in any other page's body content.
225 
226### Fixing Orphan Pages
227 
228For each orphan page:
2291. Identify 2-3 topically related existing pages
2302. Add a contextual link from each related page to the orphan
2313. Ensure the orphan page links back to at least one of those pages
2324. If no related content exists, consider whether the orphan should be
233 consolidated into another page or removed
234 
235---
236 
237## Topic Cannibalization Detection
238 
239Topic cannibalization occurs when multiple pages target the same primary keyword,
240causing them to compete against each other in search results. This splits
241authority and often results in neither page ranking well.
242 
243### Symptoms
244 
245| Indicator | What It Means |
246|-----------|---------------|
247| Two pages ranking for same keyword, both fluctuating | Google is unsure which to show |
248| One page dropped after publishing a similar new post | New post cannibalized the old one |
249| Neither page ranks in top 10 despite strong content | Split authority |
250| Search Console shows impressions split across URLs for same query | Confirmed cannibalization |
251 
252### Detection Method
253 
2541. In Google Search Console, filter by query and check which pages receive
255 impressions
2562. If 2+ pages appear for the same query, cannibalization exists
2573. Review both pages' title tags, H1s, and meta descriptions for overlap
258 
259### Resolution Strategies
260 
261| Strategy | When to Use |
262|----------|-------------|
263| **Merge** | Both pages cover the same topic; combine the best content from both into one, redirect the weaker URL |
264| **Differentiate** | Pages cover overlapping but distinct angles; sharpen each page's unique focus and keyword targeting |
265| **Canonical** | One page is clearly the primary; add `rel="canonical"` from secondary to primary |
266| **301 Redirect** | Weaker page adds no unique value; redirect to stronger page |
267| **Noindex secondary** | Keep both pages for users but exclude weaker from search |
268 
269---
270 
271## Internal Link Audit Checklist
272 
273Run this audit quarterly or when publishing new content.
274 
275### Per-Post Checks
276 
277| Check | Pass Criteria | Fail Action |
278|-------|---------------|-------------|
279| Internal link count | 3-10 links (length-dependent) | Add links to related content |
280| No orphan status | At least 1 internal link points to this page | Add links from 2-3 related pages |
281| Anchor text variety | No single anchor used more than twice for same destination | Vary anchor text |
282| No generic anchors | Zero instances of "click here", "read more", "this article" | Replace with descriptive text |
283| Bidirectional links | Linked pages reciprocate where relevant | Add reciprocal links |
284| Pillar link present | If part of a topic cluster, links to/from pillar | Add pillar connection |
285| Links functional | All internal links return 200 | Fix broken links (301 or remove) |
286| Link placement | At least 1 link in first 3 paragraphs | Move important link higher |
287| No over-linking | No paragraph has more than 2 internal links | Remove least relevant link |
288| Anchor describes destination | Reader can predict what they'll find | Rewrite anchor text |
289 
290### Site-Wide Checks
291 
292| Check | Pass Criteria | Fail Action |
293|-------|---------------|-------------|
294| Orphan page count | 0 orphan pages | Link to all orphans from related content |
295| Cannibalization | No two pages target same primary keyword | Merge or differentiate |
296| Pillar coverage | Every topic cluster has a pillar page | Create missing pillar pages |
297| Spoke count per pillar | 8-12 supporting articles | Create more supporting content |
298| Average internal links per page | 5-8 | Bulk-add links to under-linked pages |
299| Max clicks from homepage | Any page reachable in 3-4 clicks | Restructure navigation |
300| Broken internal links | 0 broken links (404s) | Fix or remove all broken links |
301 
302---
303 
304## Link Velocity Guidelines
305 
306When adding internal links to existing content, avoid bulk-updating every page
307at once unless you have QA coverage. Pace changes so crawl logs, broken links,
308and editorial relevance can be reviewed.
309 
310| Action | Recommended Pace |
311|--------|-----------------|
312| New post with links | Normal: add all links at publish time |
313| Updating existing posts | 3-5 posts per week maximum |
314| New pillar page launch | Update all spokes within 1-2 weeks |
315| Site-wide link audit fix | Spread changes over 2-4 weeks |
316| Fixing orphan pages | 2-3 per day |
317 
318---
319 
320## Internal Link Tracking
321 
322Maintain a simple tracking mechanism to ensure link health over time.
323 
324### Recommended Fields
325 
326| Field | Purpose |
327|-------|---------|
328| Source URL | Page containing the link |
329| Destination URL | Page being linked to |
330| Anchor text | Clickable text used |
331| Date added | When the link was created |
332| Context | Why this link exists (editorial, navigation, pillar-spoke) |
333| Status | Active, broken, or removed |
334 
335This tracking helps identify:
336- Over-linked pages (too many pages linking to one destination)
337- Under-linked pages (valuable content with few inbound links)
338- Stale anchor text that needs updating after content refreshes
339- Broken links after URL changes or content deletion
340 

Discussion

Alternatives