SEO Keyword Cluster
seranking/seo-skills
Build a content cluster plan from seed keywords — intent-grouped clusters, pillar+spokes architecture with H1/H2 suggestions per spoke, prioritised build order, and an internal-linking map.
Clusters keywords by how much their search results overlap and designs a hub-and-spoke content plan with an internal link matrix and an interactive cluster map.
$ npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AgriciDaniel/claude-seo seo-cluster --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-seo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/seo-cluster .claude/skills/seo-cluster && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "seo-cluster" agent skill from https://github.com/AgriciDaniel/claude-seo/tree/main/skills/seo-cluster into .claude/skills/seo-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-cluster", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/AgriciDaniel/claude-seo/tree/main/skills/seo-clusterType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AgriciDaniel/claude-seo seo-cluster --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-seo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/seo-cluster .agents/skills/seo-cluster && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "seo-cluster" agent skill from https://github.com/AgriciDaniel/claude-seo/tree/main/skills/seo-cluster into .agents/skills/seo-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-cluster", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AgriciDaniel/claude-seo seo-cluster --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-seo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/seo-cluster .cursor/skills/seo-cluster && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "seo-cluster" agent skill from https://github.com/AgriciDaniel/claude-seo/tree/main/skills/seo-cluster into .cursor/skills/seo-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-cluster", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/AgriciDaniel/claude-seo.git --path skills/seo-cluster--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AgriciDaniel/claude-seo seo-cluster --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-seo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/seo-cluster .gemini/skills/seo-cluster && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "seo-cluster" agent skill from https://github.com/AgriciDaniel/claude-seo/tree/main/skills/seo-cluster into .gemini/skills/seo-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-cluster", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install AgriciDaniel/claude-seo seo-clusterInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-seo.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/seo-cluster .github/skills/seo-cluster && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "seo-cluster" agent skill from https://github.com/AgriciDaniel/claude-seo/tree/main/skills/seo-cluster into .github/skills/seo-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-cluster", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install AgriciDaniel/claude-seo seo-cluster --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-seo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/seo-cluster .opencode/skills/seo-cluster && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "seo-cluster" agent skill from https://github.com/AgriciDaniel/claude-seo/tree/main/skills/seo-cluster into .opencode/skills/seo-cluster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-cluster", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
seo-clusterClusters keywords by how much their search results overlap and designs a hub-and-spoke content plan with an internal link matrix and an interactive cluster map.
Keywords are grouped by how many top-10 results they share, not by text similarity. A seed keyword is expanded into 30-50 variants from related searches, People Also Ask questions, long-tail modifiers and intent modifiers, then deduplicated. Candidate pairs are compared with web searches: 7-10 shared results means one page, 4-6 means the same cluster, 2-3 means interlink, and 0-1 means separate.
The output is a hub-and-spoke plan with an internal link matrix and a cluster map built from the bundled cluster-map.html template. Commands cover planning from a seed keyword or from an existing strategy plan, executing the plan by creating content through claude-blog or outputting briefs, and regenerating the map. Reference files document the overlap algorithm and the hub-spoke architecture. The skill is for planning; article production is a separate command.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4b99de2. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json and javascript).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
SEO Keyword Clustering loads about 3.3k tokens when it runs, and up to ~7.6k if it reads all its reference files. Until then it costs about 49 tokens; SKILL.md has 1,511 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from AgriciDaniel/claude-seo at commit 4b99de2, republished under its MIT licence (© AgriciDaniel). 1,511 words, ~3,278 tokens.
.claude/skills/seo-cluster/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.SERP-overlap-driven keyword clustering for content architecture. Groups keywords by how Google actually ranks them (shared top-10 results), not by text similarity. Designs hub-and-spoke content clusters with internal link matrices and generates interactive cluster map visualizations.
Scripts: Located at the plugin root scripts/ directory.
| Command | What it does |
|---|---|
/seo cluster plan <seed-keyword> | Full planning workflow: expand, cluster, architect, visualize |
/seo cluster plan --from strategy | Import from existing /seo plan output |
/seo cluster execute | Execute plan: create content via claude-blog or output briefs |
/seo cluster map | Regenerate the interactive cluster visualization |
Expand the seed keyword into 30-50 variants using WebSearch:
Deduplication: Normalize variants (lowercase, strip articles), remove exact duplicates. Target: 30-50 unique keyword variants. If under 30, run a second expansion pass with the top PAA questions as seeds.
This is the core differentiator. Load references/serp-overlap-methodology.md for
the full algorithm.
Process:
| Shared Results | Relationship | Action |
|---|---|---|
| 7-10 | Same post | Merge into single target page |
| 4-6 | Same cluster | Group under same spoke cluster |
| 2-3 | Interlink | Place in adjacent clusters, add cross-links |
| 0-1 | Separate | Assign to different clusters or exclude |
Optimization: With 40 keywords, full pairwise = 780 comparisons. Instead:
DataForSEO integration: If DataForSEO MCP is available, use serp_organic_live_advanced
instead of WebSearch for SERP data. Run "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_costs.py check serp_organic_live_advanced --count N
before each batch. If "status": "needs_approval", show cost estimate and ask user.
If "status": "blocked", fall back to WebSearch.
Classify each keyword into one of four intent categories:
| 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) |
Remove navigational keywords from clustering. Flag borderline cases for manual review. Keywords can have mixed intent (e.g., "best CRM software" is both commercial and informational) -- classify by dominant intent.
Load references/hub-spoke-architecture.md for full specifications.
Design the cluster structure:
| Intent Pattern | Template Options |
|---|---|
| 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 |
Set word count targets:
Cannibalization check: No two posts share the same primary keyword. If SERP overlap is 7+, merge those keywords into a single post targeting both.
Design the bidirectional linking structure:
| Link Type | Direction | Requirement |
|---|---|---|
| Spoke to pillar | spoke -> pillar | Mandatory (every spoke) |
| Pillar to spoke | pillar -> spoke | Mandatory (every spoke) |
| Spoke to spoke (within cluster) | spoke <-> spoke | 2-3 links per post |
| Cross-cluster | spoke -> spoke (other cluster) | 0-1 links per post |
Rules:
Generate the link matrix as a JSON adjacency list:
{
"links": [
{ "from": "pillar", "to": "cluster-0-post-0", "type": "mandatory", "anchor": "keyword" },
{ "from": "cluster-0-post-0", "to": "pillar", "type": "mandatory", "anchor": "keyword" }
]
}Generate cluster-map.html using the template at templates/cluster-map.html.
CLUSTER_DATA JSON object from the cluster plan:{
pillar: { title, keyword, volume, template, wordCount, url },
clusters: [{ name, color, posts: [{ title, keyword, volume, template, wordCount, url, status }] }],
links: [{ from, to, type }],
meta: { totalPosts, totalClusters, totalLinks, estimatedWords }
}CLUSTER_DATA placeholder in the template with the actual JSONcluster-map.html in a browser to explore the interactive cluster map."When invoked with --from strategy:
/seo plan output in the current directory (search for
files matching *SEO*Plan*, *strategy*, *content-strategy*)If no strategy file is found, prompt the user: "No existing SEO plan found in the
current directory. Run /seo plan first, or provide a seed keyword for fresh clustering."
When /seo cluster execute is invoked:
Test: Does ~/.claude/skills/blog/SKILL.md exist?If claude-blog IS installed:
references/execution-workflow.md for the full algorithmcluster-plan.json from the current directoryblog-write skill with cluster context:If claude-blog is NOT installed:
cluster-briefs/ directory as individual markdown filescluster-briefs/."Post-execution quality report. Run automatically after /seo cluster execute or
on demand via analysis of the output directory.
| Metric | Target | How Measured |
|---|---|---|
| Coverage | 100% | Posts written / posts planned |
| Link Density | 3+ per post | Count internal links per post |
| Orphan Pages | 0 | Posts with < 1 incoming link |
| Cannibalization | 0 conflicts | Check for duplicate primary keywords |
| Image Count | 1+ per post | Posts with at least one image |
| Pillar Links | 100% | All spokes link to pillar and vice versa |
| Cross-Links | 80%+ | Recommended spoke-to-spoke links implemented |
| Content Gaps | 0 | Planned posts that were skipped or incomplete |
When /seo cluster map is invoked:
cluster-plan.json from the current directorycluster-map.html with updated statusesAll outputs are written to the current working directory:
| File | Description |
|---|---|
cluster-plan.json | Machine-readable cluster plan (full data) |
cluster-plan.md | Human-readable cluster plan summary |
cluster-map.html | Interactive SVG visualization |
cluster-briefs/ | Content briefs (if no claude-blog) |
cluster-scorecard.md | Post-execution quality report |
| Skill | Relationship |
|---|---|
seo-plan | Import source: strategy import reads seo-plan output |
seo-content | Quality check: E-E-A-T validation of generated content |
seo-schema | Schema markup: Article, BreadcrumbList, ItemList for cluster pages |
seo-dataforseo | Data source: SERP data when DataForSEO MCP is available |
seo-google | Reporting: generate PDF report of cluster plan and scorecard |
After cluster planning or execution completes, offer:
"Generate a PDF report? Use /seo google report"
| Error | Cause | Resolution |
|---|---|---|
| "No seed keyword provided" | Missing argument | Prompt user for seed keyword or URL |
| "Insufficient keyword variants" | Expansion yielded < 15 keywords | Run second expansion pass with PAA questions |
| "SERP data unavailable" | WebSearch and DataForSEO both failing | Retry after 30s; if persistent, use intent-only clustering with warning |
| "No strategy file found" | --from strategy but no plan exists | Prompt user to run /seo plan first |
| "cluster-plan.json not found" | Execute without planning | Prompt user to run /seo cluster plan first |
| "claude-blog not installed" | Execute attempted without blog skill | Generate content briefs instead; suggest installation |
| "DataForSEO budget exceeded" | Cost check returned "blocked" | Fall back to WebSearch; inform user |
| "Duplicate primary keywords" | Cannibalization detected | Merge affected posts or reassign keywords |
| "Orphan page detected" | Post missing incoming links | Add links from nearest cluster siblings |
| "Resume state corrupted" | Mismatch between plan and output | Rebuild state from output directory scan |
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run render_page.py <url> --mode auto (SPA-aware SSRF protection via url_safety)For prompt-guided keyword research and gap analysis, use /seo flow find [url|topic]: FLOW's 5 find-stage prompts complement the SERP-overlap clustering methodology with structured discovery prompts.
© AgriciDaniel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/seo-cluster of AgriciDaniel/claude-seo.
Open the folder on GitHubat commit 4b99de2
We found 5 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in AgriciDaniel/claude-seo, which our catalogue first saw on October 7, 2026.
SEO Keyword Clustering next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| SEO Keyword Clustering this skillAgriciDaniel/claude-seo | 19k | 2 repos | ~3.3k | Automated safety check: Pass | MIT | |
| SEO Keyword Clusterseranking/seo-skills | 160 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Content Brief Authoringrampstackco/claude-skills | 941 | — | ~5.6k | Automated safety check: Pass | MIT | |
| Ink Clusterjeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~1.3k | Automated safety check: Notes | MIT | |
| SEO Keyword Cluster Buildersecondsky/claude-skills | 227 | — | ~3.1k | Automated safety check: Pass | MIT | |
| SEO Content Briefseranking/seo-skills | 160 | — | ~2.5k | Automated safety check: Pass | MIT |
seranking/seo-skills
Build a content cluster plan from seed keywords — intent-grouped clusters, pillar+spokes architecture with H1/H2 suggestions per spoke, prioritised build order, and an internal-linking map.
rampstackco/claude-skills
How to author a content brief that actually guides a writer (human or AI) to produce a piece that ranks, converts, or both.
jeremylongshore/tons-of-skills-marketplace
Topic cluster architecture builder — takes a core topic and maps the full cluster with 1 pillar page, 6-10 supporting posts, internal linking map, keyword targets, and estimated monthly search…
secondsky/claude-skills
SEO keyword clustering with topic organization, content hub architecture, internal linking strategies.
seranking/seo-skills
Generate a writer-ready SEO content brief from a target domain and topic.
garrettjsmith/localseoskills
Build a complete local content strategy from keyword research output.
AgriciDaniel/claude-seo
Audits, validates and generates hreflang tags for multi-language and multi-region sites in HTML, HTTP headers or XML sitemaps, flagging common code and return-tag mistakes.
AgriciDaniel/claude-seo
Pulls real Google data for SEO work: Search Console, PageSpeed Insights, CrUX field data, the Indexing API and GA4 organic traffic, through /seo google commands.
AgriciDaniel/claude-seo
Builds research-backed SEO content briefs with competitor scoring, per-section word counts and page-type templates, for new pages or improving existing ones.
AgriciDaniel/claude-seo
Brings the FLOW framework's stage-specific SEO prompts into the agent, from keyword discovery through backlinks, on-page work and conversion to local SEO, loaded on demand.
AgriciDaniel/claude-seo
Generates Open Graph previews, blog hero images, product photos and infographics for SEO use through Gemini image tools and the banana extension.
AgriciDaniel/claude-seo
Captures baselines of a page's SEO-critical elements, compares later snapshots against them and flags regressions by severity, like version control for on-page SEO.
Categories
Clusters keywords by how much their search results overlap and designs a hub-and-spoke content plan with an internal link matrix and an interactive cluster map. Keywords are grouped by how many top-10 results they share, not by text similarity. A seed keyword is expanded into 30-50 variants from related searches, People Also Ask questions, long-tail modifiers and intent modifiers, then deduplicated.
SEO Keyword Clustering fits situations like: planning a topic cluster around a seed keyword; deciding which keywords belong on one page and which need their own; designing internal links between hub and spoke pages; turning an SEO strategy into a cluster map.
Run `npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a claude-code`. Or copy the skill folder (skills/seo-cluster in AgriciDaniel/claude-seo) into .claude/skills/seo-cluster in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a codex`. Or copy the skill folder (skills/seo-cluster in AgriciDaniel/claude-seo) into .agents/skills/seo-cluster in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AgriciDaniel/claude-seo --skill seo-cluster -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/seo-cluster, .gemini/skills/seo-cluster, .github/skills/seo-cluster and .opencode/skills/seo-cluster in your project.
SKILL.md names no scripts, command-line tools or credentials: SEO Keyword Clustering is instructions for the agent only. Our summary lists: Web search access for expanding keywords and comparing results.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
SEO Keyword Clustering is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with SEO Keyword Clustering: SEO Keyword Cluster (seranking/seo-skills, 160 stars), Content Brief Authoring (rampstackco/claude-skills, 941 stars), Ink Cluster (jeremylongshore/tons-of-skills-marketplace, 2.8k stars) and SEO Keyword Cluster Builder (secondsky/claude-skills, 227 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AgriciDaniel (a GitHub user) maintains it in AgriciDaniel/claude-seo, which has 18,574 GitHub stars. The repository holds 33 skills in this directory. The repository was last updated on October 4, 2026.
Source: AgriciDaniel/claude-seo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.