Internal Linking
Pillar/Cluster Model
- Pillar page: broad topic, targets head keyword (e.g. "SEO Guide")
- Cluster pages: subtopics, target long-tail (e.g. "SEO meta tags", "SEO schema")
- Cluster pages link up to pillar
- Pillar links down to all cluster pages
- Cluster pages cross-link contextually
Anchor Text Rules
- ✅ Descriptive, varied, natural ("learn how to validate JSON-LD")
- ❌ Generic ("click here", "read more")
- ❌ Over-optimized exact match (looks spammy, can trigger penalties)
Local vs Global Architecture (2026)
URL structure (placeholders, no real city):
/services/[service]/ → global pillar — primary "[service]", NO city in title/H1
/zones-intervention/[region]/ → regional hub — groups the local pages, owns "[service] [region]"
/zones-intervention/[city]/ → local page — Map Pack target, owns "[service] [city]"
Link mesh:
- Global pillar
/services/[service]/ → down to each local page with a geo-specific anchor ("[service] in [city]"), and each local page → back up to the pillar.
- Regional hub
/zones-intervention/[region]/ → down to its city pages, and back up.
- Keep navigation/footer lean: link the hub, not a grid of every city (a city footer grid dilutes PageRank and triggers near-duplicate suppression).
Anti-cannibalization (local/global): the primary keyword is exclusive per page — pillar = [service] (no city), local = [service] [city]. See seo-cluster for the one-intent-one-URL rule and when to split.
Doorway pages — quality, not a number
Doorway risk is a quality judgement, not an absolute page-count threshold. One local page per documented presence/service area, each differentiable on >= 3-4 dimensions (local testimonials, local FAQ, geo context, area-specific services/hours). Risk signal: 70-90% identical content across local pages (templated city-name swap) → near-duplicate suppression.
Audits
- Orphan pages: pages with 0 internal incoming links
- Click depth: every page reachable in ≤ 3 clicks from homepage
- Link distribution: no page concentrates >10% of internal links
- Broken internal links: 404s within site
Workflow
- Crawl site (cheerio + breadth-first)
- Build link graph (page → outgoing links)
- Compute click depth from homepage
- Detect orphans and dead ends
- Suggest contextual link insertions based on topic clusters
1---2name: seo-internal-linking3description: Use when designing or auditing internal linking strategy — pillar/cluster architecture, anchors, orphan pages.4---56<objective>7Covers internal linking end to end: the pillar/cluster link model (cluster pages link up, pillar links down, cluster pages cross-link contextually), anchor text rules (descriptive/varied vs generic/over-optimized), the local vs global URL architecture and link mesh (global pillar → local pages with geo-specific anchors, regional hub → city pages), the doorway-page quality judgement (differentiate on ≥3-4 dimensions, watch for 70-90% near-duplicate content across local pages), and audits for orphan pages, click depth (≤3 clicks from homepage), link distribution (no page concentrating >10% of internal links), and broken internal links.8</objective>910# Internal Linking1112## Pillar/Cluster Model1314- **Pillar page**: broad topic, targets head keyword (e.g. "SEO Guide")15- **Cluster pages**: subtopics, target long-tail (e.g. "SEO meta tags", "SEO schema")16- Cluster pages link **up** to pillar17- Pillar links **down** to all cluster pages18- Cluster pages cross-link contextually1920## Anchor Text Rules2122- ✅ Descriptive, varied, natural ("learn how to validate JSON-LD")23- ❌ Generic ("click here", "read more")24- ❌ Over-optimized exact match (looks spammy, can trigger penalties)2526## Local vs Global Architecture (2026)2728URL structure (placeholders, no real city):2930```31/services/[service]/ → global pillar — primary "[service]", NO city in title/H132/zones-intervention/[region]/ → regional hub — groups the local pages, owns "[service] [region]"33/zones-intervention/[city]/ → local page — Map Pack target, owns "[service] [city]"34```3536Link mesh:3738- Global pillar `/services/[service]/` → down to each local page with a **geo-specific anchor** ("[service] in [city]"), and each local page → back up to the pillar.39- Regional hub `/zones-intervention/[region]/` → down to its city pages, and back up.40- Keep navigation/footer lean: link the hub, not a grid of every city (a city footer grid dilutes PageRank and triggers near-duplicate suppression).4142**Anti-cannibalization (local/global)**: the primary keyword is exclusive per page — pillar = `[service]` (no city), local = `[service] [city]`. See `seo-cluster` for the one-intent-one-URL rule and when to split.4344### Doorway pages — quality, not a number4546Doorway risk is a quality judgement, not an absolute page-count threshold. One local page per documented presence/service area, each differentiable on **>= 3-4 dimensions** (local testimonials, local FAQ, geo context, area-specific services/hours). Risk signal: **70-90% identical content** across local pages (templated city-name swap) → near-duplicate suppression.4748## Audits4950- **Orphan pages**: pages with 0 internal incoming links51- **Click depth**: every page reachable in ≤ 3 clicks from homepage52- **Link distribution**: no page concentrates >10% of internal links53- **Broken internal links**: 404s within site5455## Workflow56571. Crawl site (cheerio + breadth-first)582. Build link graph (page → outgoing links)593. Compute click depth from homepage604. Detect orphans and dead ends615. Suggest contextual link insertions based on topic clusters