blog-cluster について
Blog Clusterは、シードキーワードから相互にリンクするコンテンツ群を計画・実行します。連携したブログ記事を作るチーム向けに、SERP分析、ハブ&スポーク構成、順次執筆を組み合わせます。
主な機能
- 01SERPに基づくキーワード分類
- 02ハブ&スポーク型コンテンツ構成
- 03内部リンクマトリクスとクラスタマップ
- 04戦略プランの取り込みと検証
- 05blog-writeによる記事の順次作成
- 06実行スコアカードと再開可能な進捗
活用シーン
- 01ピラーページと関連記事の計画
- 02戦略上のクラスタ案をSERP検証済みマップに変換
- 03承認済みプランから内部リンク付き記事を作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill blog-clusterインストール後、Claude Code で/blog-clusterを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cluster-architecture.mdexecution-workflow.mdsemantic-clustering.md詳細
ブログクラスター(セマンティックトピッククラスターエンジン)
1つのシードキーワードから、相互にリンクされたコンテンツエコシステム全体を計画し、実行します。3つのレイヤーで構成されます。セマンティッククラスタリング(頭脳)、クラスターアーキテクチャ(構造)、実行エンジン(機械)です。
コマンド
| コマンド | 機能 |
|---|---|
/blog cluster | 対話形式です。計画するか実行するかを尋ねます。 |
/blog cluster plan <seed-keyword> | SERPに基づくセマンティック分析を行います。クラスター計画とマップを出力します。 |
/blog cluster plan --from strategy [path] | 既存の blog-strategy クラスタービルド計画をインポートし、SERPデータに照らして検証します。 |
/blog cluster execute [path-to-plan] | クラスターのコンテキストと自動相互リンクを使用して、blog-write を順番に呼び出します。 |
主要なリファレンス(必要に応じて読み込み)
references/semantic-clustering.md(SERPの重複分析、インテント分類、キーワードユニバースの拡張)references/cluster-architecture.md(ハブアンドスポークの仕様、スキーマ戦略、リンク密度のルール)references/execution-workflow.md(実行順序、コンテキストの注入、スコアカード、失敗時の処理)
既存の claude-blog スキルとの相互参照
| スキル | このスキルから呼び出されるタイミング |
|---|---|
/blog strategy | 上流の計画時です。plan --from strategy は、そのクラスタービルド計画の表を使用します。 |
/blog write | 投稿ごとの実行時です。各スポークとピラーは、クラスターコンテキストブロックを先頭に追加して blog-write で作成します。 |
/blog chart | インラインSVGチャートの作成時に、blog-write によって内部的に呼び出されます。このスキルから直接呼び出すことはありません。 |
/blog image | 投稿ごとのヒーロー画像を任意で生成します(nanobanana-mcp が設定されていない場合は、適切にフォールバックします)。 |
/blog seo-check | 実行後の投稿ごとのオンページ検証に推奨されます。 |
/blog cannibalization | クラスター内のキーワード重複がないことを確認するため、実行後に推奨されます。 |
/blog schema | 実行後に BreadcrumbList、ItemList、Article スキーマを追加するために推奨されます。 |
このスキルは、他のスキルに属するファイルを変更することはありません。Task ツールまたはオーケストレーションされたサブスキルを通じて、それらを呼び出します。
コマンドの振り分け
- ユーザーのコマンドを解析して、サブコマンドを特定します。
- ユーザーが
/blog clusterだけを入力した場合は、「新しいクラスターを計画しますか、それとも既存の計画を実行しますか?」と尋ねます。 - 振り分け先:
plan <keyword>は計画フェーズ(以下)へplan --from strategy [path]はStrategyインポートフロー(以下)へexecute [path]、build、またはrunは実行フェーズ(以下)へ
計画フェーズ:/blog cluster plan <seed-keyword>
リファレンス:references/semantic-clustering.md
ステップ1. シードキーワードの拡張
WebSearch を使ってシードを拡張し、30~50個のフレーズからなるキーワードユニバースを作成します。
<seed>を直接検索し、関連する検索キーワードと「他の人はこちらも質問」を取得します。- ロングテールキーワードを拡張します:
<seed> guide、<seed> tips、<seed> tools、<seed> examples、<seed> vs、best <seed>、how to <seed>。 - 質問を抽出します:
what is <seed>、how does <seed> work、why <seed>、<seed> for beginners。 - インテントのバリエーションを追加します。商用修飾語(best、top、review、comparison、pricing)、情報提供修飾語(guide、tutorial、explained、examples)、取引関連修飾語(buy、download、tool、software、service)を加えます。
- 年による最新性を加えます:
<seed> 2026。
ステップ2. セマンティッククラスタリング
references/semantic-clustering.md の優先ルールを使って、拡張したキーワードをグループ化します。
- SERP重複分析を主要なシグナルとします。上位10件の検索結果のうち5件以上が共通するキーワードは、同じインテントを対象としており、1つの投稿にまとめます。
- インテント分類では、各キーワードを情報提供、商用、取引関連、またはナビゲーションに分類します。
- エンティティマッピングでは、Googleがトピックに関連付けている人物、製品、フレームワーク、組織を特定します。
- グループ化では、インテントとトピック上の近接性が共通するキーワードをまとめます。各グループがハブアンドスポークの1つのブランチになります。
ステップ 3. クラスターのアーキテクチャ設計
参照:references/cluster-architecture.md
ハブ&スポークを構築します。
- ピラー(ハブ):最も広範なキーワードをターゲットにします。文字数は 2,500~4,000 です。テンプレートは
pillar-pageです。すべてのスポークへリンクします。 - スポーク:それぞれロングテールクラスターをターゲットにします。文字数は 1,200~1,800 です。テンプレートは検索意図に基づいて自動選択されます。ピラーおよび同じ階層のページへリンクします。
クラスター形成ルール:
- ピラーごとに 2~5 クラスター。
- クラスターごとに 2~4 スポーク。
- 合計:ピラー 1 ページとスポーク 5~15 ページ。
- 各スポークは固有のプライマリーキーワードをターゲットにします(カニバリゼーションはゼロ)。
ステップ 4. 内部リンクマトリックス
各スポーク S について:
Sからピラーへ(必須。アンカーテキストにはピラーのプライマリーキーワードを使用します)。- ピラーから
Sへ(必須。アンカーテキストにはSのプライマリーキーワードを使用します)。 Sから同じクラスター内の他のスポークへ(各 2~3 リンク。文脈に沿ったアンカーを使用します)。Sから隣接するクラスターのスポークへ(0~1 リンク。意味的に関連する場合のみ)。
各スポークに少なくとも 3 つの被リンクがあることを確認します。計画した内部リンクの合計数を数えます。
ステップ 5. 出力ファイルを生成
計画および実行に関するすべての成果物は、現在の作業ディレクトリ内の単一のサブディレクトリに保存します。
<cwd>/
└── cluster-<seed-keyword-slug>/
├── cluster-plan.json
├── cluster-map.html
├── pillar-<slug>.md (Execute Phase)
├── <spoke-slug>.md (Execute Phase, one per spoke)
└── cluster-scorecard.md (Execute Phase)
cluster-plan.json スキーマ
{
"seed_keyword": "<seed>",
"generated_at": "YYYY-MM-DDTHH:MM:SSZ",
"pillar": {
"id": "P",
"title": "Title of the pillar",
"primary_keyword": "broadest keyword",
"secondary_keywords": ["..."],
"search_volume_estimate": "high|medium|low",
"template": "pillar-page",
"word_count_target": 3000,
"cluster": "pillar"
},
"clusters": [
{
"name": "Cluster A: Theme",
"intent": "informational|commercial|transactional",
"color": "#2563eb",
"posts": [
{
"id": "A1",
"title": "Post title",
"primary_keyword": "long-tail keyword",
"secondary_keywords": ["..."],
"search_volume_estimate": "high|medium|low",
"template": "how-to-guide",
"word_count_target": 1500,
"links_to": ["P", "A2"],
"links_from": ["P", "A2"]
}
]
}
],
"total_posts": 9,
"total_interlinks": 23,
"estimated_total_words": 18000
}
注:検索ボリュームの推定値は、絶対的な検索数ではなく、SERP シグナルから導き出された相対的な指標(高、中、低)です。正確なデータについては、ユーザーが Ahrefs、SEMrush、または DataForSEO を確認してください(claude-blog には seo-dataforseo のコンパニオンとして機能する関連ツールがあります)。
cluster-map.html(XSS 対策済み)
SVG ビジュアライゼーションを埋め込んだ、静的で自己完結型の HTML ファイルです。作成者向けの厳守事項:
- インラインの
<script>ブロックは禁止です。ドキュメント内のどこにも、onclick、onmouseover、またはon*イベント属性を含めてはいけません。 - 外部スクリプトの
<src>参照は禁止です。 - SVG に描画するすべてのテキストラベル(タイトル、キーワード、クラスター名)はエスケープする必要があります。挿入前に、
&は&に、<は<に、>は>に、"は"に、'は'に置き換えてください。 - ホバーエフェクトには CSS の
:hoverのみを使用します。JavaScript は使用しません。 - アクセシブルなツールチップには、SVG ノード内の
<title>子要素を使用します(ブラウザー標準機能を使用し、スクリプトは使用しません)。
マップには、中央のピラーノード、外側へ放射状に広がる色分けされたクラスターグループ、各クラスター内のスポークノード、関連ノードを結ぶリンク線を表示します。
ステップ 6. 計画をユーザーに提示
クラスターと投稿の概要表、内部リンクの合計数、推定文字数、ファイルパスを表示します。実行に進む前に確認を求めます。ユーザーから明示的な承認があるまで待ちます。自動実行してはいけません。
戦略のインポート:/blog cluster plan --from strategy [path]
blog-strategy の出力をクラスター計画に取り込みます。
- 戦略の出力を特定します。現在のディレクトリ(またはユーザーが指定したパス)をスキャンし、
Cluster Build Planテーブルが含まれるファイルを探します。このテーブルには、# | Spoke Topic | Template | Target Keyword | Word Count | Internal Linksという列が含まれています(/blog strategyが生成する形式です)。 - テーブルを解析します。ピラーの行(
Pと記されている行)、スポークの行、テンプレートの割り当て、ターゲットキーワード、文字数、リンク関係を抽出します。 - 検証して情報を補完します。各キーワードについて SERP の重複を検証し(計画フェーズのステップ 2)、検索ボリュームの推定値を追加して、クラスターのグループ分けが意味的に適切か確認します。
- SERP データが戦略テーブルと矛盾する場合は、矛盾を指摘します。ユーザーの戦略的な意図を黙って上書きしてはいけません。
- 標準の計画フェーズと同じ出力を使用して、
cluster-plan.jsonとcluster-map.htmlを生成します。 - SERP に基づく調整箇所を強調して変換後の計画を提示し、ユーザーの確認を待ちます。
実行フェーズ:/blog cluster execute [path-to-plan]
参照:references/execution-workflow.md
ステップ 1. 計画を読み込む
ユーザーが指定したパスにある cluster-plan.json、または作業ディレクトリ内で最も新しい cluster-*/cluster-plan.json を読み込みます。JSON 構造を検証します。計画が見つからない場合は、次を返します。「クラスター計画が見つかりません。最初に /blog cluster plan <seed-keyword> を実行してください。」
ステップ 2. 実行順序を決定する
- まずピラーページを作成します(スポークから既知のファイル名へリンクできるようにするため)。
- 次にスポークを、
(クラスターの優先度、search_volume_estimate の降順、post id のアルファベット順)で並べます。クラスターの優先度は、クラスター内の推定ボリュームの合計です(高い順)。 - クラスターが 2 つを超える場合は、クラスターを交互に切り替えることで、初期コンテンツの広がりを多様化できます。
ステップ 3. 各投稿について:クラスターのコンテキストを構築し、blog-write を呼び出す
クラスターのコンテキストブロック(スキーマ全体は references/execution-workflow.md を参照)を作成し、blog-write を呼び出す Task ツールに渡すトピックプロンプトの先頭に追加します。このコンテキストでは、クラスター名、投稿の役割(ピラーまたはスポーク)、主要キーワードと副次キーワード、選択したテンプレート、目標文字数、作成済みの投稿一覧(これらにリンクする)、今後作成する投稿一覧([INTERNAL-LINK] プレースホルダーを使用)、およびこの投稿のリンク要件を blog-write に伝えます。
FLOW エビデンス・トリプルの引き継ぎ(必須)。 クラスターのコンテキストには、すべてのスポークとピラーについて、次の指示を含める必要があります。「公開されるすべての統計に FLOW エビデンス・トリプルを適用してください。本文中に年を明記(『In 2026,』)、発行元とタイトルを含むインライン引用、ソースブロックに取得日付きの URL を記載してください。検証できない統計は削除してください。反証された統計は置き換えてください。」
クラスター実行は影響の大きい操作(1 回に 5〜15 件の投稿)であるため、この指示の引き継ぎは必須です。明示的に引き継がなければ、個々のスポークでエビデンスに関する厳密なルールが知らないうちに省略される可能性があります。skills/blog/references/flow-alignment.md を参照してください。
出力形式:デフォルトでは標準の Markdown(.md)を使用し、blog-write のデフォルトに合わせます。ユーザーが HTML を明示的にリクエストした場合は、それに応じてプラットフォームのターゲットを設定します。ブランド固有の CSS やワードマークを適用しないでください。それらは後続の工程でユーザーが対応します。
ステップ 4. 投稿ごとの任意のヒーロー画像
nanobanana-mcp が設定されている場合は、Task ツールを通じて /blog image generate を呼び出し、投稿用の 16:9 のヒーロー画像を生成して、cluster-<slug>/images/<post-slug>-hero.png に配置します。投稿のフロントマター(coverImage:)と本文の先頭に、標準の Markdown 画像参照を挿入します。MCP を利用できない場合や生成に失敗した場合は、警告を記録して画像なしで続行します。画像生成はブロッキング処理ではありません。
ステップ 5. 逆方向リンクの挿入
各投稿の作成後に、次の処理を行います。
- クラスターディレクトリ内にある作成済みの投稿をすべてスキャンし、作成したばかりの投稿を参照する
[INTERNAL-LINK: keyword -> filename.md]マーカーを探します。 - 一致した箇所を、実際の Markdown リンク
[keyword](filename.md)に置き換えます。 - 初回処理時に、投稿のフロントマターにクラスターのメタデータブロック(
cluster:、cluster_role:、cluster_group:)を追加します。
ステップ 6. 失敗への対応
単一の投稿で blog-write が失敗した場合(タイムアウト、エラー、または品質ゲートの不合格)、失敗を記録し、残りの投稿の処理を続行します。クラスター全体を中止しないでください。スコアカードに未完了の投稿が記録され、その投稿について /blog write を手動で呼び出して再試行するよう推奨されます。
ユーザーが実行の途中でキャンセルした場合は、進捗を保存し、完了済みの投稿を記録します。次回 /blog cluster execute を実行するときは、すでに作成済みのファイルを検出し、次の未作成の投稿から再開します。
ステップ 7. cluster-scorecard.md を生成する
すべての記事の生成を試みた後、次の内容を含む Markdown のスコアカードを作成します。
- 記事ごとのステータス(生成済み、失敗、スキップ)、ファイルパス、単語数。
- 記事ごとの品質スコア(各記事に対して
/blog analyzeを並行して実行)と、クラスターの平均スコア。 - クラスターの結束度スコア:リンクの相互性、検索意図の多様性、テンプレートの多様性、キーワードの網羅性を合成した 0~100 のスコア(計算式は
references/execution-workflow.mdを参照)。 - 内部リンクの監査:記事ごとの発信リンク数と受信リンク数、孤立記事のフラグ、未解決の
[INTERNAL-LINK]マーカー。 - カニバリゼーションのチェック:主要キーワードが重複する記事の組み合わせ、またはキーワードの重複率が 70% を超える記事の組み合わせ。より詳細な確認には
/blog cannibalizationの実行を推奨します。 - 画像生成の概要:生成したヒーロー画像とスキップしたヒーロー画像。
- 推奨する次のアクション:スキーマの生成(
/blog schema)、記事ごとの SEO 検証(/blog seo-check)、コンテンツの再利用(/blog repurpose)。
ステップ 8. 最終レポート
合計数、スコアカードのパス、次のアクションで使用するコマンドを含む簡潔な概要をユーザーに返します。
出力成果物(概要)
| ファイル | フェーズ | 形式 |
|---|---|---|
cluster-plan.json | 計画 | JSON |
cluster-map.html | 計画 | 静的 HTML + インライン SVG、JavaScript なし |
pillar-<slug>.md | 実行 | Markdown(またはプラットフォームで検出された形式) |
<spoke-slug>.md | 実行 | Markdown(またはプラットフォームで検出された形式) |
images/<post-slug>-hero.png | 実行(任意) | blog-image による PNG |
cluster-scorecard.md | 実行 | Markdown |
品質ゲート
| ゲート | チェック項目 | 失敗時の対応 |
|---|---|---|
| クラスターの最小数 | それぞれ 2 件以上の記事を含むクラスターが少なくとも 2 つある | 計画中に警告し、拡張を提案 |
| カニバリゼーション | 主要キーワードが重複する記事がない | 実行をブロックし、計画の調整を要求 |
| リンクの完全性 | すべての記事が 3 件以上の内部リンクを受信している | スコアカードで警告 |
| 単語数 | ピラー記事は 2,500 語以上、クラスター記事は 1,200 語以上 | 厳守すべき制約として blog-write に渡す |
| 検索意図の多様性 | クラスター全体で異なる検索意図が 2 つ以上ある | スコアカードで警告 |
| テンプレートの多様性 | クラスター全体で異なるテンプレートが 3 種類以上ある | スコアカードで警告 |
エラー処理
| 状況 | 対応 |
|---|---|
| シードキーワードの範囲が広すぎる(キーワードのバリエーションが 50 を超える) | クラスタリングの前に対象を絞るよう提案します。 |
| シードキーワードの範囲が狭すぎる(キーワードのバリエーションが 5 未満) | より小規模なクラスター(ピラー記事とクラスター記事 2~3 件)を提案するか、対象を広げるよう提案します。 |
| WebSearch が利用できない | キーワードの拡張とグループ化には Claude の推論を使用します。精度が低下することをスコアカードに記載します。 |
1 件の記事で blog-write が失敗する | 記録してスキップし、続行します。スコアカードに未作成の記事を記載します。 |
blog-write がインストールされていない | 「blog-cluster を使用するには claude-blog が必要です。このスキルを実行する前にインストールしてください。」と返します。 |
cluster-plan.json の形式が不正 | JSON を検証し、行番号とともに解析エラーを報告します。 |
| ユーザーが実行をキャンセルする | 進行状況を保存します。次回の呼び出しでは、すでに生成済みの記事を自動検出して再開します。 |
nanobanana-mcp が設定されていない | ヒーロー画像の生成をスキップします。記事ごとではなく、実行開始時に一度だけ警告します。 |
関連する claude-blog スキルとの違い
| スキル | 役割 | blog-cluster が加える機能 |
|---|---|---|
blog-strategy | 3~5 個のコンテンツの柱を計画し、戦略的な演習としてハブ・アンド・スポーク図を作成します | SERP に基づいて意味的なクラスタリングを行い、その計画を相互にリンクされた実際の投稿として実行します。 |
blog-calendar | トピッククラスターを中心に公開日を設定します | クラスターの構築も投稿の執筆も行いません。このスキルはその両方を行います。 |
blog-cannibalization | 既存のコンテンツ内でキーワードの重複を検出します | 診断のみを行います。blog-cluster は計画段階でカニバリゼーションを防ぎます。 |
blog-write | 一度に 1 つの投稿を執筆します | blog-cluster は、共有クラスターのコンテキストと双方向リンクを使って、複数の blog-write 呼び出しを統括します。 |
blog-outline | SERP の情報を反映したアウトラインを 1 つ生成します | blog-cluster はクラスター全体を通じたアウトライン相当の内容を生成し、その後、投稿を執筆します。 |
blog-cluster は総合請負業者です。トピックを分析し、データに基づく計画を立て、1 つのシードキーワードから構造全体を構築します。