seo-cluster について
seo-clusterは、テキストの類似度だけでなく、Googleの自然検索結果の重なりに基づいてキーワードをまとめ、SEOコンテンツ構成を設計するスキルです。ピラーとスポークの構造や内部リンク表を作り、インタラクティブなクラスター図も生成します。
主な機能
- 01シードキーワードの拡張
- 02SERPの重なりによるキーワード分類
- 03検索意図の分類とトピック構成の計画
- 04双方向の内部リンク表の生成
- 05インタラクティブなクラスター図の作成
- 06コンテンツ計画の実行とブリーフ作成
活用シーン
- 01トピックに沿ったピラー・スポーク記事の構築
- 02キーワードカニバリゼーションの抑制とページ割り当て
- 03コンテンツチーム向け記事ブリーフの作成
- 04制作状況とリンク整備の進捗確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agricidaniel/ claude-seo --skill seo-clusterインストール後、Claude Code で/seo-clusterを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/execution-workflow.mdhub-spoke-architecture.mdserp-overlap-methodology.mdtemplates/cluster-map.html詳細
セマンティックトピッククラスタリング
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 個のバリエーションに拡張します。
- 関連検索: シードを検索し、「関連検索」と「他のユーザーはこちらも検索」の項目を抽出します
- 関連する質問(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 | 同じ記事 | 1 つの対象ページに統合します |
| 4〜6 | 同じクラスター | 同じスポーククラスターの下にグループ化します |
| 2〜3 | 相互リンク | 隣接するクラスターに配置し、相互リンクを追加します |
| 0〜1 | 別々 | 異なるクラスターに割り当てるか、除外します |
最適化: キーワードが 40 個ある場合、すべてのペアを比較すると 780 回になります。代わりに、次のようにします。
- 検索意図で事前にグループ化します(約 10 個ずつの 4 グループ=4 × 45=180 回)
- グループ間の境界にあるキーワードのみを相互確認します
- 同じヘッドタームのロングテールバリエーション同士のペアは省略します(同じクラスターと見なします)
DataForSEO の統合: DataForSEO MCP が利用可能な場合は、SERP データの取得に WebSearch の代わりに serp_organic_live_advanced を使用します。各バッチの前に "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run 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 以上の場合は、それらのキーワードを 1 件の投稿にまとめ、両方をターゲットにします。
ステップ 5:内部リンクマトリクス
双方向のリンク構造を設計します:
| リンクの種類 | 方向 | 要件 |
|---|---|---|
| スポークから柱 | spoke -> pillar | 必須(すべてのスポーク) |
| 柱からスポーク | pillar -> spoke | 必須(すべてのスポーク) |
| スポーク間(クラスター内) | spoke <-> spoke | 投稿ごとに 2~3 件のリンク |
| クラスター間 | spoke -> spoke (other cluster) | 投稿ごとに 0~1 件のリンク |
ルール:
- すべての投稿に、最低 3 件の内部リンクを向ける必要があります
- 孤立ページを作成しないでください(すべての投稿に柱から 2 回のクリック以内で到達できること)
- アンカーテキストには、ターゲットキーワードまたはその類義語を使用する必要があります(「ここをクリック」は不可)
- リンクは本文内に配置します。ナビゲーションやサイドバーのみに配置してはいけません
リンクマトリクスを 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 オブジェクトを作成します:{ 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プレースホルダーを実際の JSON に置き換えます - 完成した HTML ファイルを出力ディレクトリに書き込みます
- ユーザーに次のように伝えます:「ブラウザーで
cluster-map.htmlを開くと、インタラクティブなクラスター マップを確認できます。」
戦略のインポート
--from strategy を指定して呼び出された場合:
- 現在のディレクトリで最新の
/seo planの出力を探します(*SEO*Plan*、*strategy*、*content-strategy*に一致するファイルを検索します) - Markdown テーブルを解析し、キーワード、ページの種類、コンテンツの柱、URL 構造を抽出します
- 抽出したデータを検証します:重複、キーワードの欠落、不完全な項目を確認します
- SERP データで補完します:抽出したキーワードの SERP 重複分析を実行します
- インポートしたキーワードを初期セットとして使用してクラスター計画を作成します(ステップ 1 はスキップします)
戦略ファイルが見つからない場合は、ユーザーに次のように促します:「現在のディレクトリに既存の SEO プランが見つかりません。まず /seo plan を実行するか、新しいクラスターを作成するためのシードキーワードを指定してください。」
実行ワークフロー
/seo cluster execute が呼び出された場合:
claude-blog の確認
Test: Does ~/.claude/skills/blog/SKILL.md exist?
claude-blog がインストールされている場合:
- 完全なアルゴリズムについては、
references/execution-workflow.mdを読み込みます - 現在のディレクトリから
cluster-plan.jsonを読み込みます - 再開状態を確認します:出力ディレクトリをスキャンし、すでに書き込まれている記事を確認します
- 優先順位に従って実行します:まずピラー記事、次にボリュームの多い順でスポーク記事を処理します
- 各記事について、クラスターのコンテキストを含めて
blog-writeスキルを呼び出します:- クラスター内での役割(ピラーまたはスポーク)
- クラスター内の位置(クラスターのインデックス、記事のインデックス)
- ターゲットキーワードと関連キーワード
- テンプレートの種類と目標文字数
- 含める内部リンク(アンカーテキスト付き)
- 今後の記事から受け取るリンク(プレースホルダーマーカー)
- 各記事の執筆後、過去の記事をスキャンしてバックリンクのプレースホルダーを探し、 新しい記事の URL を挿入します
- すべての記事の執筆後、クラスターのスコアカードを生成します
claude-blog がインストールされていない場合:
- クラスタープラン内の各記事について、詳細なコンテンツブリーフを生成します
- 各ブリーフには以下を含めます:
- タイトルとメタディスクリプション
- 主要キーワードと関連キーワード
- テンプレートの種類と推奨構成(H2/H3 のアウトライン)
- 目標文字数
- 含める内部リンク(アンカーテキスト付き)
- 網羅すべき重要なポイント
- 差別化する競合ページ
- ブリーフを個別の Markdown ファイルとして
cluster-briefs/ディレクトリに保存します - ユーザーに次のように伝えます:「コンテンツを自動作成するには、claude-blog
をインストールしてください。ブリーフは
cluster-briefs/に保存されています。」
クラスタースコアカード
実行後の品質レポートです。/seo cluster execute の後に自動で実行されるほか、
出力ディレクトリの分析を通じて任意のタイミングで実行できます。
| 指標 | 目標 | 測定方法 |
|---|---|---|
| 網羅率 | 100% | 執筆済み記事数 / 計画記事数 |
| リンク密度 | 記事あたり 3 件以上 | 記事ごとの内部リンク数をカウント |
| 孤立ページ | 0 | 被リンクが 1 件未満の記事 |
| カニバリゼーション | 競合 0 件 | 主要キーワードの重複を確認 |
| 画像数 | 記事あたり 1 枚以上 | 画像が 1 枚以上ある記事 |
| ピラーリンク | 100% | すべてのスポークがピラーにリンクし、その逆も同様 |
| クロスリンク | 80% 以上 | 推奨されるスポーク間リンクの実装率 |
| コンテンツの欠落 | 0 | スキップまたは未完了となった計画記事 |
マップの再生成
/seo cluster map を実行した場合:
- 現在のディレクトリから
cluster-plan.jsonを読み込みます - 出力ディレクトリをスキャンし、記事のステータス(計画済みか執筆済みか)を更新します
- 更新されたステータスで
cluster-map.htmlを再生成します - 執筆済み記事数と計画記事数、リンクの完了率を報告します
出力ファイル
すべての出力は現在の作業ディレクトリに保存されます:
| ファイル | 説明 |
|---|---|
cluster-plan.json | 機械可読なクラスタープラン(全データ) |
cluster-plan.md | 人間が読めるクラスタープランの概要 |
cluster-map.html | インタラクティブな SVG ビジュアライゼーション |
cluster-briefs/ | コンテンツブリーフ(claude-blog がない場合) |
cluster-scorecard.md | 実行後の品質レポート |
スキル間の連携
| スキル | 関係 |
|---|---|
seo-plan | インポート元:戦略のインポート時に seo-plan の出力を読み込みます |
seo-content | 品質チェック:生成コンテンツの E-E-A-T 検証 |
seo-schema | スキーママークアップ:クラスターのページに Article、BreadcrumbList、ItemList を適用 |
seo-dataforseo | データソース:DataForSEO MCP が利用可能な場合の SERP データ |
seo-google | レポート作成:クラスタープランとスコアカードの PDF レポートを生成 |
クラスターの計画または実行が完了したら、次のように提案します:
「PDF レポートを生成しますか? /seo google report を使用してください」
エラー処理
| エラー | 原因 | 解決方法 |
|---|---|---|
| "No seed keyword provided" | 引数がありません | シードキーワードまたは URL をユーザーに尋ねます |
| "Insufficient keyword variants" | キーワードの拡張で 15 個未満しか得られませんでした | PAA の質問を使って 2 回目の拡張を実行します |
| "SERP data unavailable" | WebSearch と DataForSEO の両方で失敗しています | 30 秒後に再試行します。解決しない場合は、警告を添えて検索意図のみでクラスタリングします |
| "No strategy file found" | --from strategy が指定されていますが、プランがありません | 先に /seo plan を実行するようユーザーに案内します |
| "cluster-plan.json not found" | プランニングせずに実行しました | 先に /seo cluster plan を実行するようユーザーに案内します |
| "claude-blog not installed" | ブログスキルなしで実行しようとしました | 代わりにコンテンツブリーフを生成し、インストールを提案します |
| "DataForSEO budget exceeded" | コストチェックで「blocked」が返されました | WebSearch に切り替え、ユーザーに通知します |
| "Duplicate primary keywords" | カニバリゼーションが検出されました | 該当する投稿を統合するか、キーワードを再割り当てします |
| "Orphan page detected" | 投稿への内部リンクがありません | 同じクラスター内で最も近いページからリンクを追加します |
| "Resume state corrupted" | プランと出力が一致しません | 出力ディレクトリをスキャンして状態を再構築します |
セキュリティ
- すべての URL は
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run render_page.py <url> --mode autoを介して取得されます(url_safetyによる SPA 対応の SSRF 保護) - 認証情報は保存も送信もされません
- 出力ファイルに PII や API キーは含まれません
- DataForSEO のコストチェックはすべての API 呼び出し前に実行されます
FLOW フレームワークとの統合
プロンプトに沿ったキーワード調査とギャップ分析には、/seo flow find [url|topic] を使用します。FLOW の 5 つの find ステージ用プロンプトは、SERP の重複に基づくクラスタリング手法を、体系的な探索プロンプトで補完します。