Commands
| Command | What it does |
/seo cluster <seed> | Full plan: expansion, SERP overlap, intent, hub-and-spoke, link matrix, map |
/seo cluster plan <seed> | Architecture only, no execution. Outputs cluster-plan.json and cluster-plan.md |
/seo cluster execute <plan-file> | Hand off to claude-blog. Writes hub and spokes with the agreed link matrix |
/seo cluster map <plan-file> | Regenerate cluster-map.html, refresh post statuses (planned vs written) |
How SERP-Overlap Scoring Works
For each candidate keyword pair, the skill fetches the top 10 organic results (ignoring ads, featured snippets, and PAA) for both queries and computes a Jaccard-like score over the URL sets. Concretely: if keyword A has top-10 URLs {a1...a10} and keyword B has {b1...b10}, the score is |A ∩ B|, the count of shared URLs. The score maps directly to a clustering action:
| Shared URLs | Relationship | Action |
| 7-10 | Same intent, same page | Merge into a single target page |
| 4-6 | Same cluster, different pages | Group as spokes under the same cluster |
| 2-3 | Adjacent clusters | Cross-link between clusters |
| 0-1 | Different clusters | Assign to different clusters or exclude |
For 40 keywords, full pairwise comparison would be 780 calls. The skill optimizes by pre-grouping with intent guesses (4 groups of ~10 = 180 comparisons) and only cross-checking group boundaries. Long-tail variants of the same head term are assumed to share a cluster without an explicit SERP call.
Output Files
All outputs land in the current working directory:
cluster-plan.json: machine-readable cluster plan with keywords, clusters, links, and meta
cluster-plan.md: human-readable cluster plan summary
cluster-map.html: interactive SVG visualization, no build step required
cluster-briefs/: per-post content briefs, generated when claude-blog is not installed
cluster-scorecard.md: post-execution quality report
DataForSEO Integration
When the DataForSEO MCP server is installed, the skill uses serp_organic_live_advanced instead of WebSearch for higher-quality SERP data. A cost check runs before every batch via scripts/dataforseo_costs.py. If the budget is blocked, the skill falls back to WebSearch automatically. See /seo dataforseo for setup.