Home
cd ../playbooks
Marketing & ContentAdvanced

SERP-Overlap Content Clustering

Design hub-and-spoke content architecture using actual Google SERP overlap — not keyword text similarity — with a full internal link matrix and cannibalization checks.

15 minutes
By AgriciDaniel (original: Lutfiya Miller)Source
#content-clustering#seo#topic-clusters#pillar-page#hub-and-spoke#content-strategy#internal-linking#serp-analysis

Your keyword clustering tool groups 'dog training tips' and 'dog training classes' into the same cluster because the words look similar — except Google shows completely different results for each, and now you have two pages fighting each other for the same rank.

Who it's for: content strategists building topic clusters, SEO managers planning pillar-and-spoke content architecture, content teams avoiding keyword cannibalization at scale, in-house marketers scaling a content program past the intuition stage, agencies building content plans that need to survive a client's skeptical review

Example

"Build a content cluster plan for 'project management software'" → 40 expanded keyword variants scored by actual SERP overlap, grouped into a pillar page plus 3-5 spoke clusters with template assignments, a full internal link matrix with mandatory pillar-spoke links, a cannibalization check confirming no duplicate primary keywords, and content briefs for every planned post

CLAUDE.md Template

New here? 3-minute setup guide → | Already set up? Copy the template below.

# SERP-Overlap Content Clustering

## Your Role

You design content architecture using actual Google ranking behavior, not keyword text similarity. Two keywords that return the same top-10 results should be targeted by the same page. Two keywords with completely different SERPs need separate pages. This is the foundation — Google's own ranking decisions determine the content structure, not stemming or semantic guesswork.

**Never cluster by text similarity alone.** "Dog training tips" and "dog training classes" can have completely different SERPs despite near-identical text. Always verify with actual search data.

---

## Step 1: Seed Keyword Expansion

Expand the seed keyword into 30–50 variants using web search:

1. **Related searches** — search the seed term, pull "related searches" and "people also search for"
2. **People Also Ask** — extract every PAA question from the SERP
3. **Long-tail modifiers** — append: "best", "how to", "vs", "for beginners", "tools", "examples", "guide", "template", "mistakes", "checklist"
4. **Question mining** — generate who/what/when/where/why/how variants
5. **Intent modifiers** — add commercial modifiers: "pricing", "review", "alternative", "comparison", "free", "top"

Deduplicate: normalize (lowercase, strip articles), remove exact duplicates. Target 30–50 unique variants. If you land under 30, run a second expansion pass seeded with the top PAA questions.

---

## Step 2: SERP Overlap Clustering (the core method)

### Scoring algorithm

For each keyword, retrieve the top 10 organic results via web search — ignore ads, featured snippets, PAA, and knowledge panels. Normalize URLs (strip protocol, trailing slash, non-meaningful query params). Store as a set of 10 URLs per keyword.

For each pair of keywords, compute the overlap: how many URLs appear in both top-10 sets.

| Shared results | Relationship | Action |
|-----------------|--------------|--------|
| 7–10 | Same post | Merge into a single target page — use the higher-volume keyword as primary |
| 4–6 | Same cluster | Group under the same spoke cluster; may be separate posts depending on volume gap |
| 2–3 | Interlink | Place in adjacent clusters, add cross-links |
| 0–1 | Separate | Different clusters entirely, or exclude from this pillar's scope |

**Ambiguous scores (3–4 range)** need tiebreaking: check domain overlap (same domains, different pages = closer relationship), intent alignment (same intent category leans toward same cluster), and volume ratio (10x+ volume difference usually deserves its own post). When genuinely uncertain, keep in the same cluster with separate posts — err toward cohesion.

### Optimization — don't do full pairwise comparison

Full pairwise comparison of N keywords is N×(N−1)/2 checks — 780 for 40 keywords. Reduce it:

1. Pre-group keywords by intent category (roughly 4 groups of ~10 → 4×45 = 180 comparisons instead of 780)
2. Only cross-check group-boundary keywords across groups
3. Skip pairs where both are long-tail variants of the same head term with matching intent — assume overlap 4–6 without checking, then spot-check 20% of skipped pairs to verify the assumption held

### Anti-patterns

- Never cluster by text similarity or stemming alone
- Never assume "related searches" belong in the same cluster without verifying against actual SERP data
- Never ignore SERP feature differences — if one keyword triggers a local pack and another triggers a featured snippet, they likely need different content types even at moderate URL overlap
- Never weight all domains equally — Wikipedia and Reddit show up in huge numbers of SERPs regardless of topic; consider filtering the most ubiquitous domains before scoring, or weighting niche-specific results higher

### Caching

Within one clustering session, cache every SERP result. If keyword A's results were fetched for the A–B comparison, reuse them for A–C. This roughly halves the actual number of searches needed.

---

## Step 3: Intent Classification

| Intent | Signals | Include in clusters? |
|--------|---------|----------------------|
| Informational | how, what, why, guide, tutorial, learn | Yes |
| Commercial | best, top, review, comparison, vs, alternative | Yes |
| Transactional | buy, price, discount, coupon, order, sign up | Yes |
| Navigational | brand names, specific product names, login | No — exclude |

Flag borderline cases for manual review. A keyword like "best CRM software" is both commercial and informational — classify by dominant intent, don't force a binary split.

---

## Step 4: Hub-and-Spoke Architecture

### Structure

One pillar page (the hub) connects to 2–5 spoke clusters, each holding 2–4 individual posts. The pillar gives broad coverage; spokes go deep on subtopics.

### Pillar page

| Attribute | Requirement |
|-----------|-------------|
| Word count | 2,500–4,000 |
| Keyword | Broadest, highest-volume keyword in the set |
| Content | Comprehensive overview covering every cluster's subtopic |
| Internal links | Links to **every** spoke post — mandatory, no exceptions |
| Structure | Table of contents, one section per cluster |
| Update cadence | Refresh quarterly, or whenever new spokes are added |

### Spoke pages

| Attribute | Requirement |
|-----------|-------------|
| Word count | 1,200–1,800 |
| Keyword | Specific subtopic keyword, unique per post |
| Content | Deeper than the pillar's coverage of the same subtopic |
| Internal links | Link to the pillar (mandatory) + 2–3 sibling spokes |

### Template selection by intent

| Intent pattern | Template |
|-----------------|----------|
| Informational (broad) | Ultimate guide |
| Informational (how) | How-to |
| Informational (list) | Listicle |
| Informational (concept) | Explainer |
| Commercial (compare) | Comparison |
| Commercial (evaluate) | Review |
| Commercial (rank) | Best-of |
| Transactional | Landing page |

If multiple templates fit, prefer whichever matches the actual content format dominating the SERP — if the top results are all listicles, write a listicle. Avoid using the same template twice within one cluster unless the intent genuinely calls for it.

### Cluster constraints

- 2–5 clusters per pillar
- 2–4 posts per cluster
- 5–21 total posts including the pillar
- Roughly 50,000 words as a practical ceiling for a full pillar-plus-20-spokes buildout

---

## Step 5: Cannibalization Prevention

**No two posts share the same primary keyword — period.** After clustering:

1. List every primary keyword and check for near-duplicates ("best CRM" vs. "top CRM software")
2. If SERP overlap between two candidate keywords is 7+, merge them into one post
3. If genuinely near-duplicate but the overlap is lower, differentiate by intent instead of merging — one becomes a "best-of" list, the other a "comparison"

---

## Step 6: Internal Link Matrix

| Link type | Direction | Requirement |
|-----------|-----------|-------------|
| Spoke → pillar | Mandatory | Every spoke, at least once in body content |
| Pillar → spoke | Mandatory | Every spoke, in its relevant pillar section |
| Spoke ↔ spoke (same cluster) | Recommended | 2–3 links per post |
| Spoke → spoke (cross-cluster) | Optional | 0–1 per post, only with a genuine topical bridge |

**Non-negotiables**: every post needs at least 3 incoming internal links, no orphan pages (every page reachable from the pillar within 2 clicks), contextual anchor text using the target keyword or a close variant — never "click here" — and anchor text diversity (no single anchor text on more than 40% of links to any one page).

Model the link structure as a JSON adjacency list before writing anything, so you can verify link coverage before content is produced:

```json
{
  "links": [
    { "from": "pillar", "to": "cluster-0-post-0", "type": "mandatory", "anchor": "keyword" },
    { "from": "cluster-0-post-0", "to": "pillar", "type": "mandatory", "anchor": "keyword" }
  ]
}
```

---

## Step 7: Deliverables

Produce three outputs:

1. **`cluster-plan.md`** — human-readable summary: pillar, clusters, posts, target keywords, word counts, template assignments
2. **`cluster-plan.json`** — the same data machine-readable, including the SERP overlap matrix and the link adjacency list
3. **Content briefs** (if you're not writing the posts directly in this session) — one per post, covering: title, meta description, primary + secondary keywords, template and structure outline, word count target, internal links to include with anchor text, key points to cover, and what to differentiate from in the existing top-ranking pages

---

## Step 8: Post-Build Quality Check

Once posts exist (or briefs are handed off), verify against a scorecard:

| Metric | Target |
|--------|--------|
| Coverage | 100% of planned posts written |
| Link density | 3+ internal links per post |
| Orphan pages | 0 |
| Cannibalization conflicts | 0 |
| Pillar↔spoke link completion | 100% |
| Recommended cross-links implemented | 80%+ |
| Content gaps (planned but skipped) | 0 |

---

## Rules

- SERP data drives clustering decisions, never text similarity alone
- Verify assumptions with spot-checks — don't skip verification just because a pattern looks obvious
- Cache SERP results within a session; don't re-fetch the same keyword twice
- No two posts ever target the same primary keyword
- Every spoke links to the pillar and vice versa — this is structural, not optional
- Match template to actual SERP content format, not just to the keyword's literal phrasing
README.md

What This Does

Most keyword clustering tools group keywords by text similarity or stemming — which produces clusters that look right and rank wrong. This uses Google's actual top-10 results as the clustering signal: if two keywords share 7+ of the same ranking URLs, Google already thinks they're the same topic, so target them with one page. If they share almost nothing, they need separate pages, no matter how similar the words look.

The output is a complete hub-and-spoke plan — a pillar page, 2-5 spoke clusters, a full internal link matrix, and a cannibalization check — ready to hand to writers as content briefs.


Quick Start

Step 1: Create a Project Folder

mkdir content-clustering && cd content-clustering

Step 2: Download the Template

Click Download above, then:

mv ~/Downloads/CLAUDE.md ./

Step 3: Build a Cluster Plan

claude

Then ask: "Build a content cluster plan for [seed keyword]"


The SERP Overlap Method

Shared top-10 results Relationship Action
7–10 Same post Merge — target both with one page
4–6 Same cluster Group under one spoke cluster
2–3 Interlink Adjacent clusters, cross-link them
0–1 Separate Different clusters, or out of scope

Cluster Constraints

  • 2–5 spoke clusters per pillar, 2–4 posts per cluster
  • Pillar: 2,500–4,000 words, links to every spoke
  • Spokes: 1,200–1,800 words, link back to the pillar plus 2–3 siblings
  • Zero orphan pages — every post reachable from the pillar within 2 clicks
  • Zero keyword cannibalization — no two posts share a primary keyword

Tips & Best Practices

  • Never trust text similarity alone. The whole point of this method is that "similar-looking" keywords can have completely different search intent and different ranking pages — always verify against actual SERP data before merging or splitting.
  • Pre-group by intent before doing pairwise comparisons. Full pairwise SERP checking on 40 keywords is 780 comparisons; pre-grouping by informational/commercial/transactional intent cuts that to a fraction, since you only need to cross-check keywords at group boundaries.
  • 7+ overlap means merge, don't just interlink. If two keywords are hitting 7 or more of the same top-10 results, writing two separate posts for them creates internal competition — Google will pick one to rank and suppress the other.
  • Cache SERP results within a session. If keyword A's results were already fetched for an A-B comparison, reuse them for A-C rather than re-searching.
  • Every spoke-to-pillar link is mandatory, not optional. A cluster without complete bidirectional pillar-spoke linking is structurally broken and won't pass the SEO value between pages the way clustering is supposed to.

Limitations

  • SERP data quality depends on your search tool's freshness — results can shift, so treat scores as a snapshot, not a permanent classification
  • The 3-4 overlap range genuinely requires human judgment (domain overlap, intent alignment, volume ratio) — don't force an automatic threshold decision here
  • Designed for content-heavy sites building genuine topical authority; overkill for a single landing page or a site with only a handful of target keywords

$Related Playbooks

Marketing & Content

Threads Carousel Generator: Turn a Post Into Slide Images

Splits a text post into 12 slide types and renders exportable carousel images for Threads, Instagram, LinkedIn, TikTok, and Stories via a bundled Next.js preview

15 minutes
Intermediate
Marketing & Content

Switch Brand

Switch active brand profile.

15 minutes
Intermediate
Marketing & Content

Tech Seo Audit

Run technical SEO audit.

15 minutes
Intermediate
Marketing & Content

Technical Seo

Deep technical SEO analysis.

15 minutes
Intermediate
Marketing & Content

TikTok Marketing Assistant

TikTok content strategy, video creation workflows, posting optimization, and analytics. Based on n8n automation templates.

10 minutes
Advanced
Marketing & Content

Swipe File Infrastructure Architect

Design and build your digital swipe file database in Notion, Airtable, or Google Sheets — with capture workflows, entry templates, and optimised views ready in under 30 minutes.

5 minutes
Beginner
Marketing & Content

Swipe File Maintenance System

Design weekly, monthly, quarterly, and annual review routines for your swipe file — with performance feedback loops, staleness scoring, and skip rules to keep the system alive long-term.

5 minutes
Beginner
Marketing & Content

Swipe File Taxonomy Architect

Design a smart tagging and categorisation system for your swipe file — with decision trees for ambiguous entries, power search queries, and implementation instructions for your specific tool.

5 minutes
Intermediate
Marketing & Content

Testimonial Collector

Instantly save ad comments and social proof as organized testimonials - screenshot, name, and file automatically.

5 minutes
Beginner
Marketing & Content

Onboarding CRO

Optimize post-signup onboarding, activation, and time-to-value so users actually stick around.

10 minutes
Intermediate
Marketing & Content

Paywall & Upgrade CRO

Create and optimize in-app paywalls, upgrade screens, and feature gates that convert free users to paid.

10 minutes
Intermediate
Marketing & Content

Signup Flow CRO

Optimize signup, registration, and trial activation flows to reduce friction and lift completion rates.

10 minutes
Intermediate

Browse all Marketing & Content playbooks →