SERP セマンティッククラスタリング
Google検索結果の重複度合いに基づき、キーワードをグループ化してコンテンツの構造を設計し、内部リンクを含むハブ&スポーク型のコンテンツクラスターを可視化して、効果的なコンテンツ戦略を支援するSkill。
📜 元の英語説明(参考)
SERP-based semantic topic clustering for content architecture planning. Groups keywords by actual Google SERP overlap (not text similarity), designs hub-and-spoke content clusters with internal link matrices, and generates interactive visualizations. Optionally executes content creation if claude-blog is installed. Use when user says "topic cluster", "content cluster", "semantic clustering", "pillar page", "hub and spoke", "content architecture", "keyword grouping", or "cluster plan".
🇯🇵 日本人クリエイター向け解説
Google検索結果の重複度合いに基づき、キーワードをグループ化してコンテンツの構造を設計し、内部リンクを含むハブ&スポーク型のコンテンツクラスターを可視化して、効果的なコンテンツ戦略を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o seo-cluster.zip https://jpskill.com/download/10563.zip && unzip -o seo-cluster.zip && rm seo-cluster.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/10563.zip -OutFile "$d\seo-cluster.zip"; Expand-Archive "$d\seo-cluster.zip" -DestinationPath $d -Force; ri "$d\seo-cluster.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
seo-cluster.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
seo-clusterフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
セマンティックトピッククラスタリング (v1.9.0)
コンテンツアーキテクチャのための、SERPオーバーラップ駆動型のキーワードクラスタリングです。キーワードをテキストの類似性ではなく、Googleが実際にどのようにランキングしているか(上位10件の検索結果の共有)によってグループ化します。ハブアンドスポーク型のコンテンツクラスターを内部リンクマトリックスで設計し、インタラクティブなクラスターマップの可視化を生成します。
スクリプト: プラグインのルートディレクトリ scripts/ にあります。
クイックリファレンス
| コマンド | 実行内容 |
|---|---|
/seo cluster plan <seed-keyword> |
完全な計画ワークフロー: 展開、クラスタリング、アーキテクチャ設計、可視化 |
/seo cluster plan --from strategy |
既存の /seo plan の出力からインポート |
/seo cluster execute |
計画を実行: claude-blog を介してコンテンツを作成するか、ブリーフを出力 |
/seo cluster map |
インタラクティブなクラスターの可視化を再生成 |
計画ワークフロー
ステップ 1: シードキーワードの展開
WebSearch を使用して、シードキーワードを 30〜50 個のバリエーションに展開します。
- 関連検索 — シードを検索し、「関連検索」と「他の人はこちらも検索」を抽出します。
- People Also Ask (PAA) — SERP の結果からすべての PAA の質問を抽出します。
- ロングテール修飾子 — 一般的な修飾子を追加します: "best"、"how to"、"vs"、"for beginners"、"tools"、"examples"、"guide"、"template"、"mistakes"、"checklist"
- 質問マイニング — who/what/when/where/why/how のバリエーションを生成します。
- インテント修飾子 — コマーシャルな修飾子を追加します: "pricing"、"review"、"alternative"、"comparison"、"free"、"top"
重複排除: バリエーションを正規化(小文字化、冠詞の削除)し、完全な重複を削除します。 目標: 30〜50 個の一意のキーワードバリエーション。30 個未満の場合は、上位の PAA の質問をシードとして使用して、2 回目の展開パスを実行します。
ステップ 2: SERP オーバーラップクラスタリング
これがコアとなる差別化要因です。詳細なアルゴリズムについては、references/serp-overlap-methodology.md を参照してください。
プロセス:
- 最初のインテントの推測によってキーワードをグループ化します(ペアごとの比較を減らします)。
- グループ内の各候補ペアについて、両方のキーワードを WebSearch で検索します。
- 上位 10 件のオーガニック検索結果で共有 URL をカウントします(広告、おすすめスニペット、PAA は無視します)。
- 閾値を適用します。
| 共有結果数 | 関係性 | アクション |
|---|---|---|
| 7-10 | 同じ投稿 | 単一のターゲットページにマージ |
| 4-6 | 同じクラスター | 同じスポーククラスターにグループ化 |
| 2-3 | 相互リンク | 隣接するクラスターに配置し、クロスリンクを追加 |
| 0-1 | 分離 | 異なるクラスターに割り当てるか、除外 |
最適化: 40 個のキーワードの場合、完全なペアワイズ = 780 回の比較になります。代わりに:
- インテントによって事前にグループ化します(~10 個の 4 つのグループ = 4 x 45 = 180 回の比較)。
- グループ境界のキーワードのみをクロスチェックします。
- 両方が同じヘッドタームのロングテールバリエーションであるペアはスキップします(同じクラスターと仮定)。
DataForSEO の統合: DataForSEO MCP が利用可能な場合は、SERP データに WebSearch の代わりに serp_organic_live_advanced を使用します。各バッチの前に python scripts/dataforseo_costs.py check serp_organic_live_advanced --count N を実行します。"status": "needs_approval" の場合は、コストの見積もりを表示してユーザーに確認します。"status": "blocked" の場合は、WebSearch にフォールバックします。
ステップ 3: インテントの分類
各キーワードを 4 つのインテントカテゴリのいずれかに分類します。
| インテント | シグナル | クラスターに含めるか? |
|---|---|---|
| 情報提供 | how、what、why、guide、tutorial、learn | はい |
| 商業 | best、top、review、comparison、vs、alternative | はい |
| 取引 | buy、price、discount、coupon、order、sign up | はい |
| ナビゲーション | ブランド名、特定の商品名、login | いいえ (除外) |
ナビゲーションキーワードをクラスタリングから削除します。境界線上のケースにはフラグを立てて、手動で確認します。キーワードは混合したインテントを持つ可能性があります(例: "best CRM software" は商業的かつ情報提供的です)-- 主要なインテントによって分類します。
ステップ 4: ハブアンドスポークアーキテクチャ
詳細な仕様については、references/hub-spoke-architecture.md を参照してください。
クラスター構造の設計:
- ピラーキーワードの選択 — 最もボリュームが多く、最も広いインテントを持ち、他のキーワードとの SERP オーバーラップが最も多いもの
- スポークをクラスターにグループ化 — 各クラスターはサブトピック領域です(ピラーごとに 2〜5 個のクラスター)。
- 投稿をクラスターに割り当て — 各クラスターは 2〜4 個のスポーク投稿を取得します。
- 投稿ごとにテンプレートを選択 — インテントの分類に基づきます。
| インテントパターン | テンプレートオプション |
|---|---|
| 情報提供 (広範) | ultimate-guide |
| 情報提供 (方法) | how-to |
| 情報提供 (リスト) | listicle |
| 情報提供 (概念) | explainer |
| 商業 (比較) | comparison |
| 商業 (評価) | review |
| 商業 (ランキング) | best-of |
| 取引 | landing-page |
-
目標ワード数の設定:
- ピラーページ: 2500〜4000 語
- スポーク投稿: 1200〜1800 語
-
カニバリゼーションチェック — 2 つの投稿が同じプライマリキーワードを共有することはありません。SERP オーバーラップが 7 以上の場合は、それらのキーワードをマージして、両方をターゲットとする単一の投稿にします。
ステップ 5: 内部リンクマトリックス
双方向のリンク構造を設計します。
| リンクタイプ | 方向 | 要件 |
|---|---|---|
| スポークからピラー | spoke -> pillar | 必須 (すべてのスポーク) |
| ピラーからスポーク | pillar -> spoke | 必須 (すべてのスポーク) |
| スポークからスポーク (クラスター内) | spoke <-> spoke | 投稿あたり 2〜3 個のリンク |
| クロスクラスター | spoke -> spoke (他のクラスター) | 投稿あたり 0〜1 個のリンク |
ルール:
- すべての投稿には、最低 3 つの受信内部リンクが必要です。
- 孤立したページはありません (すべての投稿がピラーから 2 クリックで到達可能)。
- アンカーテキストは、ターゲットキーワードまたはそれに近いバリエーションを使用する必要があります ("click here" は不可)。
- リンクの配置: 本文コンテンツ内、ナビゲーション/サイドバーだけではありません。
リンクマトリックスを JSON 隣接リストとして生成します。
{
"links": [
{ "from": "pillar", "to": "cluster-0-post-0", "type": "mandatory", "anchor": "keyword" },
{ "from": "cluster-0-post-0", "to": "pillar", "type": "mandatory", "anchor": "keyword" }
]
}
ステップ 6: インタラクティブクラスターマップ
templates/cluster-map.html のテンプレートを使用して、cluster-map.html を生成します。
- テンプレートファイルを読み込みます。
- クラスター計画から
CLUSTER_DATAJSON オブジェクトを構築します。
(原文はここで切り詰められています)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Semantic Topic Clustering (v1.9.0)
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.
Quick Reference
| 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 |
Planning Workflow
Step 1: Seed Keyword Expansion
Expand the seed keyword into 30-50 variants using WebSearch:
- Related searches — Search the seed, extract "related searches" and "people also search for"
- People Also Ask (PAA) — Extract all PAA questions from SERP results
- Long-tail modifiers — Append common modifiers: "best", "how to", "vs", "for beginners", "tools", "examples", "guide", "template", "mistakes", "checklist"
- Question mining — Generate who/what/when/where/why/how variants
- Intent modifiers — Add commercial modifiers: "pricing", "review", "alternative", "comparison", "free", "top"
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.
Step 2: SERP Overlap Clustering
This is the core differentiator. Load references/serp-overlap-methodology.md for
the full algorithm.
Process:
- Group keywords by initial intent guess (reduces pairwise comparisons)
- For each candidate pair within a group, WebSearch both keywords
- Count shared URLs in the top 10 organic results (ignore ads, featured snippets, PAA)
- Apply thresholds:
| 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:
- Pre-group by intent (4 groups of ~10 = 4 x 45 = 180 comparisons)
- Only cross-check group boundary keywords
- Skip pairs where both are long-tail variants of the same head term (assume same cluster)
DataForSEO integration: If DataForSEO MCP is available, use serp_organic_live_advanced
instead of WebSearch for SERP data. Run python scripts/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.
Step 3: Intent Classification
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.
Step 4: Hub-and-Spoke Architecture
Load references/hub-spoke-architecture.md for full specifications.
Design the cluster structure:
- Select the pillar keyword — Highest volume, broadest intent, most SERP overlap with other keywords
- Group spokes into clusters — Each cluster is a subtopic area (2-5 clusters per pillar)
- Assign posts to clusters — Each cluster gets 2-4 spoke posts
- Select templates per post — Based on intent classification:
| 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:
- Pillar page: 2500-4000 words
- Spoke posts: 1200-1800 words
-
Cannibalization check — No two posts share the same primary keyword. If SERP overlap is 7+, merge those keywords into a single post targeting both.
Step 5: Internal Link Matrix
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:
- Every post must have minimum 3 incoming internal links
- No orphan pages (every post reachable from pillar in 2 clicks)
- Anchor text must use target keyword or close variant (no "click here")
- Link placement: within body content, not just navigation/sidebar
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" }
]
}
Step 6: Interactive Cluster Map
Generate cluster-map.html using the template at templates/cluster-map.html.
- Read the template file
- Build the
CLUSTER_DATAJSON 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 } } - Replace the
CLUSTER_DATAplaceholder in the template with the actual JSON - Write the completed HTML file to the output directory
- Inform user: "Open
cluster-map.htmlin a browser to explore the interactive cluster map."
Strategy Import
When invoked with --from strategy:
- Look for the most recent
/seo planoutput in the current directory (search for files matching*SEO*Plan*,*strategy*,*content-strategy*) - Parse markdown tables for: keywords, page types, content pillars, URL structures
- Validate extracted data: check for duplicates, missing keywords, incomplete entries
- Enrich with SERP data: run SERP overlap analysis on extracted keywords
- Build cluster plan using the imported keywords as the starting set (skip Step 1)
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."
Execution Workflow
When /seo cluster execute is invoked:
Check for claude-blog
Test: Does ~/.claude/skills/blog/SKILL.md exist?
If claude-blog IS installed:
- Load
references/execution-workflow.mdfor the full algorithm - Read
cluster-plan.jsonfrom the current directory - Check for resume state: scan output directory for already-written posts
- Execute in priority order: pillar first, then spokes by volume (highest first)
- For each post, invoke the
blog-writeskill with cluster context:- Cluster role (pillar or spoke)
- Position in cluster (cluster index, post index)
- Target keyword and secondary keywords
- Template type and word count target
- Internal links to include (with anchors)
- Links to receive from future posts (placeholder markers)
- After each post is written, scan previous posts for backward link placeholders and inject the new post's URL
- After all posts are written, generate the cluster scorecard
If claude-blog is NOT installed:
- Generate detailed content briefs for each post in the cluster plan
- Each brief includes:
- Title and meta description
- Primary keyword and secondary keywords
- Template type and suggested structure (H2/H3 outline)
- Word count target
- Internal links to include (with anchor text)
- Key points to cover
- Competing pages to differentiate from
- Write briefs to
cluster-briefs/directory as individual markdown files - Inform user: "Install claude-blog
to auto-create content. Briefs saved to
cluster-briefs/."
Cluster Scorecard
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 |
Map Regeneration
When /seo cluster map is invoked:
- Read
cluster-plan.jsonfrom the current directory - Scan output directory and update post statuses (planned vs written)
- Regenerate
cluster-map.htmlwith updated statuses - Report: posts written vs planned, link completion percentage
Output Files
All 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 |
Cross-Skill Integration
| 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 Handling
| 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 |
Security
- All URLs fetched via
python scripts/fetch_page.py(SSRF protection viavalidate_url()) - No credentials stored or transmitted
- Output files contain no PII or API keys
- DataForSEO cost checks run before every API call