seo-cluster
SERPの重複データをもとにキーワードを意味的にクラスタリングし、コンテンツ設計を支援するスキルです。テキストの類似性ではなく実際のGoogle SERPの重複に基づいてキーワードをグループ化し、内部リンクマトリクスを含むハブ&スポーク型コンテンツクラスターを設計、インタラクティブな可視化を生成します。「トピッククラスター」「ピラーページ」「コンテンツ設計」「キーワードグルーピング」などのキーワードが含まれる場合に使用してください。
description の原文を見る
> 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".
SKILL.md 本文
セマンティック・トピック・クラスタリング (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比較。その代わり:
- インテント別に事前グループ化(4グループ × 約10 = 4 x 45 = 180比較)
- グループ境界キーワードのみを相互確認
- 両方が同じヘッドタームのロングテールバリエーションであるペアをスキップ(同一クラスタと仮定)
DataForSEO統合: DataForSEO MCPが利用可能な場合、WebSearchの代わりに serp_organic_live_advanced をSERPデータに使用。各バッチの前に 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 | はい |
| ナビゲーショナル | ブランド名、特定製品名、ログイン | いいえ(除外) |
ナビゲーショナルキーワードをクラスタリングから削除。境界線上のケースは手動確認用にフラグを立てます。キーワードは混合インテントを持つ場合があります(例:「best CRM software」は商業と情報提供の両方) -- 支配的インテントで分類します。
ステップ 4:ハブ・スポーク・アーキテクチャ
references/hub-spoke-architecture.md で完全な仕様を読み込みます。
クラスター構造を設計:
- ピラーキーワードを選択 — 最高ボリューム、最も幅広いインテント、他のキーワードとの最も多いSERP重複
- スポークをクラスタにグループ化 — 各クラスタはサブトピック領域(ピラーあたり2~5クラスタ)
- ポストをクラスタに割り当て — 各クラスタは2~4個のスポークポストを取得
- ポストごとにテンプレートを選択 — インテント分類に基づく:
| インテントパターン | テンプレート選択肢 |
|---|---|
| 情報提供(広い) | ultimate-guide |
| 情報提供(how) | how-to |
| 情報提供(リスト) | listicle |
| 情報提供(コンセプト) | explainer |
| 商業(比較) | comparison |
| 商業(評価) | review |
| 商業(ランク) | best-of |
| 取引 | landing-page |
-
字数目標を設定:
- ピラーページ:2500~4000語
- スポークポスト:1200~1800語
-
共食い確認 — 2つのポストが同じプライマリキーワードを共有しません。SERP重複が7以上の場合、これらのキーワードを1つのポストにマージして両方をターゲットに。
ステップ 5:内部リンク行列
双方向リンク構造を設計:
| リンク種別 | 方向 | 要件 |
|---|---|---|
| スポークからピラー | スポーク → ピラー | 必須(すべてのスポーク) |
| ピラーからスポーク | ピラー → スポーク | 必須(すべてのスポーク) |
| クラスタ内スポークからスポーク | スポーク ↔ スポーク | ポストあたり2~3リンク |
| クロスクラスタ | スポーク → スポーク(他のクラスタ) | ポストあたり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オブジェクトを構築:{ 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*にマッチするファイルを検索) - マークダウンテーブルをパース:キーワード、ページタイプ、コンテンツピラー、URL構造
- 抽出されたデータを検証:重複をチェック、キーワード不足、不完全なエントリ
- SERPデータで拡張:抽出されたキーワードでSERP重複分析を実行
- インポートされたキーワードをスタートセットとして、クラスター計画を構築(ステップ1をスキップ)
戦略ファイルが見つからない場合、ユーザーに通知:「現在のディレクトリで既存のSEO計画が見つかりません。最初に /seo plan を実行するか、新しいクラスタリング用のシードキーワードを提供してください。」
実行ワークフロー
/seo cluster execute が呼び出された場合:
claude-blogをチェック
テスト:~/.claude/skills/blog/SKILL.md は存在しますか?
claude-blog がインストール済みの場合:
references/execution-workflow.mdを読み込み、完全なアルゴリズムを確認- 現在のディレクトリから
cluster-plan.jsonを読み込む - 再開状態をチェック:出力ディレクトリをスキャンして、既に書き込まれたポストを確認
- 優先順で実行:ピラー優先、次にスポークをボリューム順(最高優先)
- 各ポストについて、クラスタコンテキストで
blog-writeスキルを呼び出す:- クラスタロール(ピラーまたはスポーク)
- クラスタ内の位置(クラスタインデックス、ポストインデックス)
- ターゲットキーワードとセカンダリキーワード
- テンプレートタイプと字数目標
- 含めるべき内部リンク(アンカー付き)
- 将来のポストから受け取るリンク(プレースホルダーマーカー)
- 各ポストが書き込まれた後、前のポストをスキャンして逆向きリンクプレースホルダーを確認し、新しいポストのURLを注入
- すべてのポストが書き込まれた後、クラスタースコアカードを生成
claude-blog がインストール済みでない場合:
- クラスター計画の各ポストについて詳細なコンテンツブリーフを生成
- 各ブリーフには以下を含む:
- タイトルとメタディスクリプション
- プライマリキーワードとセカンダリキーワード
- テンプレートタイプと提案される構造(H2/H3アウトライン)
- 字数目標
- 含めるべき内部リンク(アンカーテキスト付き)
- カバーすべきキーポイント
- 差別化する競合ページ
- ブリーフを
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を読み込む - 出力ディレクトリをスキャンしてポストステータスを更新(計画済み vs 書き込み済み)
- 更新されたステータスで
cluster-map.htmlを再生成 - 報告:書き込まれたポスト数 vs 計画されたポスト数、リンク完了率
出力ファイル
すべての出力は現在の作業ディレクトリに書き込まれます:
| ファイル | 説明 |
|---|---|
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 を使用」
エラーハンドリング
| エラー | 原因 | 解決 |
|---|---|---|
| 「シードキーワードが指定されていません」 | 引数が不足 | ユーザーにシードキーワードまたはURLを促す |
| 「キーワードバリエーションが不十分」 | 拡張が15未満を生成 | PAA質問で2番目の拡張パスを実行 |
| 「SERPデータが利用不可」 | WebSearchとDataForSEO両方が失敗 | 30秒後に再試行;継続的に失敗の場合、インテントのみでクラスタリング(警告付き)使用 |
| 「戦略ファイルが見つかりません」 | --from strategy だがプランが存在しない | ユーザーに /seo plan を実行するよう促す |
| 「cluster-plan.json が見つかりません」 | 計画なしで実行 | /seo cluster plan を実行するようユーザーに促す |
| 「claude-blogがインストールされていません」 | ブログスキルなしで実行試行 | コンテンツブリーフを生成;インストールを提案 |
| 「DataForSEO予算を超過」 | コストチェックが「blocked」を返す | WebSearchにフォールバック;ユーザーに通知 |
| 「プライマリキーワードが重複」 | 共食い検出 | 影響を受けたポストをマージするか、キーワード再割り当て |
| 「孤立ページが検出」 | ポストに受信リンク不足 | 最も近いクラスタシブリングからリンクを追加 |
| 「再開状態が破損」 | 計画と出力間の不一致 | 出力ディレクトリスキャンから状態を再構築 |
セキュリティ
- すべてのURL取得は
python scripts/fetch_page.py経由(validate_url()でSSRF保護) - 認証情報が保存または送信されない
- 出力ファイルにはPIやAPIキーを含まない
- DataForSEOコストチェックはすべてのAPI呼び出し前に実行
FLOW フレームワーク統合
プロンプトガイド付きキーワード調査とギャップ分析の場合、/seo flow find [url|topic] を使用 — FLOWの5つのfindステージプロンプトがSERP重複クラスタリング手法を構造化発見プロンプトで補完します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- agricidaniel
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/agricidaniel/claude-seo / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。