テーマを切り替える

AIキーワードクラスタリング:検索クエリを記事・シリーズ・内部リンクに整理する

Easton editorial illustration: one large rounded CLUSTER MAP board with grouped query chips and visible intent separation

"Google Search Central:有用で信頼できる、ユーザー第一のコンテンツの作成"

Astro、Docker、Cloudflareに関する300行のqueryを含むkeywords.csvがあるとします。AIは42個のclusterに仮分類しましたが、人が確認するとcluster #1にastro seoとastro vs next.js for seoが一緒に入っていました。前者は手順を探す意図、後者は比較する意図です。一つの記事で両方を満たすのは難しいでしょう。

キーワードクラスタリングで起きやすい失敗はここにあります。AIは意味が近く検索意図が異なる語をまとめることがあり、複数の類似記事が同じ需要を奪い合うcontent cannibalizationのリスクを高めます。また、「キーワードのグループ」が並んでいるだけでは、新規記事にするのか、既存記事を更新するのか、FAQや内部リンクにするのかを判断できません。

以下では、GSC query、企画カード、既存記事を一つの表にまとめ、正規化と重複排除を行い、AIの仮分類後に人が確認します。最後に各clusterを新規記事、既存記事の更新、FAQ、内部リンク、discardへ割り当てます。対象は入力データ、重複排除、分類方法の比較、AI prompt、cluster map、アクション判断、内部リンク設計です。

1. キーワードクラスタリングの入力データをそろえる

入力は「AIが考えた語句」ではありません。自サイトのquery/pageデータ、企画カード、既存記事の一覧です。この3種類を組み合わせると、書く価値がある語、既存記事が受け止められる語、コミュニティで実際に使われる質問を区別できます。

入力データは次のように整理します。

データソースフィールド取得方法注意点
GSC query/pageデータquery, page, clicks, impressions, CTR, positionSearch Console UI / Search Analytics APIAPIのrowLimitはデフォルト1,000、1回の上限25,000。内部制限があるため全行は保証されず、top rowsが返る
企画カードタイトル, 検索意図, 出典(Reddit/GitHub/競合), 根拠企画調査Agentの出力出典の品質を人が確認する
既存記事記事タイトル, URL, シリーズ, 公開日, 流入, ランクインqueryサイトDB / CMS対応する既存記事とシリーズを記録する
quickWins指標低CTR・高impressionのquery, 既存記事の更新候補GSC quickWins分析既存記事を更新する判断に使う

手順:

  1. GSCのquery/pageデータを出力します。Performance reportのデフォルトは直近3か月ですが、タスクに合わせて期間を変更できます。
  2. 企画調査Agentが出力した企画カードを統合します。
  3. 既存記事、シリーズ、流入状況を一覧にします。
  4. 低CTR・高impressionのqueryと既存記事の更新候補にquickWinsフラグを付けます。
  5. query、検索意図の仮判定、出典、既存記事との一致、quickWinsフラグを含む統合表を出力します。

2. クラスタリング前にキーワードを正規化する

統合表には重複、類似表現、表記揺れが大量に含まれます。処理せずにAIへ渡すと、同じ検索意図を別の語として扱い、複数のclusterに分ける可能性があります。

重複排除のチェックリスト:

  • 完全一致:astro seoとastro seo → 1行だけ残す
  • 表記・設定の違い:docker host.docker.internal、docker host-gateway、docker 127.0.0.1 → 同じ意図の候補として記録し、人が確認する
  • 同義語:cloudflare pricing、cloudflare 料金、cloudflare cost → 同じ意図として記録する
  • 語形の違い:astro blogとastro blogs → 同じ意図として記録する

正規化ルール:

  • 用語を統一:nextjs → next.js、cloudflare workers → Cloudflare Workers
  • 大文字・小文字を統一:Astroとastro → astro
  • 句読点を統一:astro, seoとastro seo → astro seo

検索意図の仮ラベル:

  • 情報収集:how to, what is, guide, tutorial
  • ナビゲーション:ブランド名、製品名、特定のURL
  • 比較:vs, compare, alternative
  • 購入:pricing, cost, buy, download

手順:

  1. 統合表から完全一致の重複を削除します。
  2. 表記揺れと同義語を見つけ、同じ意図の候補として記録します。
  3. 用語、大文字・小文字、句読点を正規化します。
  4. 各queryに情報収集、ナビゲーション、比較、購入の仮ラベルを付けます。
  5. query、normalized_query、intent_tag、source、old_post_matchを含む正規化表を出力します。

3. 3種類のクラスタリング方法を比較する

方法を選ぶときは、コスト、精度、リスクのバランスを取ります。主な3種類は、それぞれ適した運用段階が異なります。

方法コスト精度適した場面リスク
SERP-based高い。多数のSERP照会が必要で、bot対策に触れる可能性もある高い。実際の検索結果を使い、ページを統合するかの判断を補助できる公開済み記事、ページの重なり判定、SERP API予算がある運用高コスト。SERP変動で安定性が下がる
Semantic低い。embedding APIだけで実行できる中程度。実際の検索意図を見落とし、異なる意図をまとめることがある初期のトピックマップ、限られた予算、素早い仮分類意味が近く意図が異なる語を誤ってまとめる可能性がある
Hybrid中程度。意味ベースの仮分類 + SERP/GSC検証 + 人のレビュー高い。コストと精度を両立しやすいGSCデータとレビュー時間がある継続的なコンテンツ運用人のレビュー工数が必要

推奨フロー:

  • 小規模チーム / 初期:Semanticの仮分類 + GSC/page検証 + リスクの高いclusterを人が確認
  • 中〜大規模チーム / 公開済み記事が多いサイト:意味ベースの分類、SERP/GSC検証、人のレビューを組み合わせたHybrid
  • 十分な予算 + ページ統合の判断:SERP-based + 人のレビュー

私が使っているのはHybridです。まず意味の近さで仮分類し、GSC pageデータで既存記事が受け止めているqueryを確認し、最後に人が検索意図の衝突を解決します。

4. AIの出力形式を決めてクラスタリングする

正規化したキーワードをAIへ渡すときは、出力フィールドと検索意図の条件を明記します。次のpromptを使えます。

AI promptの例:

あなたはSEOコンテンツプランナーです。以下の正規化済みキーワードを検索意図ごとにclusterへ分類し、各clusterについて次を出力してください。
1. primary_intent(主な検索意図)
2. canonical_page(統合先のページ種別:new article / old post refresh / FAQ / discard)
3. suggested_action(推奨アクション)
4. internal_link_targets(リンクすべき既存記事またはシリーズ)
5. risk_notes(cannibalizationの可能性、人のレビューが必要か)

キーワード:
- astro seo
- astro vs next js for seo
- cloudflare pricing
- docker host.docker.internal
- docker host-gateway
...

JSON配列で出力してください。各clusterは次の形式にします。
{
  "cluster_id": 1,
  "keywords": ["astro seo", ...],
  "primary_intent": "情報収集 - チュートリアル",
  "canonical_page": "new article",
  "suggested_action": "Astro SEOチュートリアルを新規作成",
  "internal_link_targets": ["astro-guideシリーズ", "cloudflare-binduiシリーズ"],
  "risk_notes": "人のレビューが必要:astro vs next js for seoは比較意図なので統合しない"
}

cluster mapの例:

cluster_idkeywordsprimary_intentcanonical_pagesuggested_actioninternal_link_targetsrisk_notes
1astro seo, astro blog seo情報収集 - チュートリアルnew articleAstro SEOチュートリアルを新規作成astro-guideシリーズ, cloudflare-binduiシリーズなし
2astro vs next js for seo比較new articleAstroとNext.jsのSEO比較記事を新規作成astro-guideシリーズ, nextjs-blog-seriesなし
3cloudflare pricing, cloudflare cost, cloudflare 料金購入old post refresh既存のCloudflare料金記事を更新cloudflare-binduiシリーズ既存記事/cloudflare-pricingを更新する
4docker host.docker.internal, docker host-gateway, docker 127.0.0.1情報収集 - 設定FAQDockerシリーズの記事にFAQを追加docker-practiceシリーズ同じ意図の表記違いとしてFAQへ統合

人によるレビュー項目:

  • 検索意図の混在:同じclusterにチュートリアルと比較のqueryがある → 分割する
  • 既存記事との衝突:「新規記事」に割り当てられたclusterに関連する既存記事がある → 既存記事の更新またはFAQへ変更する
  • 分けすぎ:一つの検索意図が複数のclusterに分かれている → 統合する
  • まとめすぎ:異なる検索意図が同じclusterに入っている → 分割する

手順:

  1. 正規化表をClaude、ChatGPT、社内モデルなどのAIクラスタリング処理へ渡します。
  2. 上のpromptで仮分類します。
  3. cluster mapを出力します。
  4. 検索意図の衝突、既存記事との一致、分けすぎ、まとめすぎを人が確認します。
  5. cluster mapを修正し、リスクの高いclusterに印を付けます。

5. 各クラスターを一つのコンテンツアクションへ割り当てる

クラスタリングの完了条件は「キーワードのグループ」ではなく、実行できるアクションです。私は次の判断表を使います。

判断軸新規記事ピラーページ既存記事の更新FAQ内部リンク改善discard
query数多い(5+)多い(5+)少ない(1〜3)少ない(1〜3)少ない(1〜3)1件
検索意図の差大きい大きい小さい小さい小さい小さい
対応する既存記事なしなしありありありあり
競合の強さ高い高い中程度中程度低い低い
サイトテーマとの適合高い高い高い中程度中程度低い
独自価値を追加できる余地大きい大きい小さい小さい小さいなし
例astro seoチュートリアルastroシリーズcloudflare pricingdocker host.docker.internal関連記事間のリンクブランド名の表記違い

アクションの定義:

  • 新規記事:cluster内の同じ検索意図を一つのページで扱います。
  • ピラーページ:シリーズのhubを作り、cluster内の他の記事へリンクします。
  • 既存記事の更新:新しいqueryを扱えるように既存ページを拡張します。
  • FAQ:既存記事に焦点を絞った回答を追加します。
  • 内部リンク改善:canonicalページを指す文脈的なリンクを追加します。
  • Discard:コンテンツを作らず、価値が低い、または対象読者の範囲外として記録します。

手順:

  1. 各clusterを判断軸に沿って評価します。
  2. 評価結果をアクションへ割り当てます。
  3. cluster_id → suggested_actionの形式でアクション一覧を出力します。
  4. 新規記事とピラーページなど、リスクの高いアクションを人が確認します。

表のquery数は判断材料の例であり、固定のしきい値ではありません。最終アクションは検索意図、既存記事、独自価値、保守コストを合わせて判断します。

6. 内部リンクをclusterのナビゲーションとして設計する

cluster間の関係は、単なる「関連記事」ではなく、実行可能な内部リンクへ変換します。次の形式で計画できます。

内部リンク設計の原則:

  • pillar/clusterの双方向リンク:pillarから全clusterページへリンクし、各clusterページからpillarへ戻します。
  • 具体的なアンカーテキスト:「こちら」ではなく、リンク先の検索意図が分かる表現を使います。
  • canonical URLをリンク先にする:重複・類似ページを避け、優先したいcanonicalページへリンクします。
  • 孤立記事を避ける:各記事に少なくとも一つの文脈的な被リンクを計画し、サイト構造と読者経路に応じて入口を追加します。
  • cluster mapのinternal_link_targets:リンクすべき既存記事またはシリーズを記録します。

内部リンク一覧:

cluster_idpillar_pagecluster_pagesinternal_link_targetsアンカーテキスト案
1Astro SEO完全ガイドastro seoチュートリアル, astro blog seoastro-guideシリーズ, cloudflare-binduiシリーズ「AstroのSEO最適化」「Cloudflareのパフォーマンス最適化」
2-astro vs next.js for seoastro-guideシリーズ, nextjs-blog-series「AstroとNext.jsの比較」
3-cloudflare pricingcloudflare-binduiシリーズ「Cloudflareの料金解説」

手順:

  1. pillarページとclusterページを特定します。
  2. 双方向のリンク構造を設計します。
  3. 各リンクに具体的なアンカーテキストを決めます。
  4. 孤立記事がないか確認します。
  5. 内部リンク一覧をコンテンツタスク表へ出力します。

Googleは現在、redirectとrel="canonical"を強いcanonicalシグナル、sitemapへの掲載を弱いシグナルとして扱っています。複数のシグナルは組み合わせられますが、最終的なcanonicalはGoogleが選びます。内部リンクはcanonicalとして優先したいURLへ一貫して向けます。

7. クラスタリングをページ量産にしない品質基準を設ける

キーワードクラスタリングを一括ページ生成器にすると、people-firstの原則から外れやすくなります。

リスク境界:

  • キーワードの表記違いごとにページを作らない。同じ検索意図のqueryは一つのページまたはcanonicalのリンク先へ統合します。
  • 独自価値の判断を必須にする。各clusterを読者の課題、サイトの主題、既存記事にない追加価値へ結び付けます。
  • 同じ意図のqueryをcanonicalへまとめる。重複または非常に似たページでは、redirect、rel="canonical"、sitemapで希望を示せますが、シグナルの強さは異なり、Googleの採用を保証しません。
  • search engine-firstのコンテンツを避ける。主目的はランキング操作ではなく、読者の課題を解決することです。
  • cannibalizationのリスクを下げる。ほぼ同じキーワード向けに多数のページを公開すると、複数URLが同じ検索意図を奪い合う可能性があります。
  • リスクの高いclusterを記録する。cluster mapのrisk_notesで人のレビューを必須にします。

品質上の禁止事項:

  • 対応する既存記事がある場合は、類似ページを増やす前に記事更新またはFAQを優先します。
  • クラスタリングの出力には、サイトテーマとの適合と独自価値の判断を必ず含めます。
  • 内部リンクは重複・類似ページではなく、canonical記事へ向けます。

8. astro seo、cloudflare pricing、dockerの例で確認する

3つの場面に当てはめると、フローが分かりやすくなります。

例1:astro seoとastro vs next.js for seo(検索意図が異なるため分割)

  • 元のquery:astro seo, astro vs next.js for seo, astro blog seo
  • 正規化:astro seo, astro vs next js for seo, astro blog seo
  • AIの仮分類:cluster_id=1, keywords=[astro seo, astro vs next js for seo, astro blog seo]
  • 人のレビュー:astro seoはチュートリアル、astro vs next js for seoは比較なので分割します。
  • 最終cluster map:
    • cluster_id=1: [astro seo, astro blog seo] → Astro SEOチュートリアルを新規作成
    • cluster_id=2: [astro vs next js for seo] → AstroとNext.jsのSEO比較記事を新規作成

例2:cloudflare pricing(既存記事を更新)

  • 元のquery:cloudflare pricing, cloudflare cost, cloudflare 料金
  • 正規化:cloudflare pricing, cloudflare pricing, cloudflare pricing
  • AIの仮分類:cluster_id=3, keywords=[cloudflare pricing, cloudflare pricing, cloudflare pricing]
  • 既存記事との一致:/cloudflare-pricingがある
  • 最終cluster map:
    • cluster_id=3: [cloudflare pricing, cloudflare cost, cloudflare 料金] → /cloudflare-pricingを更新

例3:docker host.docker.internal(関連する技術queryを正規化)

  • 元のquery:docker host.docker.internal, docker host-gateway, docker 127.0.0.1
  • 正規化:同じ設定意図の候補グループとして記録します。
  • AIの仮分類:cluster_id=4, keywords=[docker host.docker.internal, docker host-gateway, docker 127.0.0.1]
  • 既存記事との一致:Dockerシリーズがある
  • 最終cluster map:
    • cluster_id=4: [docker host.docker.internal, docker host-gateway, docker 127.0.0.1] → 人が検索意図を確認したうえで、Dockerシリーズの記事へFAQまたは節として追加

9. コンテンツマップを次の工程へ渡す

クラスタリングが終わったら、cluster mapをコンテンツタスク表へ移し、フィールド、スコア、状態遷移、公開計画を設計します。シリーズの次の記事「コンテンツタスク表の設計:フィールド、スコア、状態、公開計画」で扱います。

cluster mapから執筆可能な構成を作る方法は、「AIによる構成生成:cluster mapから執筆可能なアウトラインへ」で説明します。リンクの一括挿入は、後続の「内部リンク自動化:関連記事リンクの一括生成と注意点」で掘り下げます。

既存記事の更新には、「GSC既存記事更新戦略:quickWinsからコンテンツ更新へ」という別のガイドがあります。

公開済みの関連記事:

キーワードを実行可能なコンテンツマップに変える手順

複数の入力をcluster map、アクション割り当て、内部リンク一覧へ変換する最小フローです。

⏱️ 目安時間: 60 分

  1. 1

    ステップ 1: 3種類の入力を統合する

    GSCのquery/pageデータ、企画カード、既存記事一覧を一つの表に入れ、出典、既存記事との一致、quickWinsフラグを残します。
  2. 2

    ステップ 2: キーワードを正規化する

    重複、表記揺れ、同義語、大文字・小文字、句読点を処理し、情報収集、ナビゲーション、比較、購入の検索意図を付けます。
  3. 3

    ステップ 3: 意味ベースの仮分類を実行する

    AIに検索意図ごとの分類を依頼し、各クラスターのprimary_intent、canonical_page、suggested_action、internal_link_targets、risk_notesを出力させます。
  4. 4

    ステップ 4: リスクの高いクラスターを検証する

    GSC page、必要なSERP、人の判断を使い、チュートリアルと比較の混在、既存記事との衝突、まとめすぎ、分けすぎを確認します。
  5. 5

    ステップ 5: 主アクションを一つ割り当てる

    各クラスターを新規記事、ピラーページ、既存記事の更新、FAQ、内部リンク改善、discardに割り当て、理由を記録します。
  6. 6

    ステップ 6: 内部リンク一覧を作る

    pillarとclusterの双方向リンク、canonicalのリンク先、具体的なアンカーテキストを決め、孤立記事と重複ページのリスクを確認します。

FAQ

キーワードクラスタリングは似た語をまとめるのですか、それとも検索意図で分けるのですか?
検索意図で分けます。主要キーワードと同じ意図のロングテールは一つのページで扱えますが、チュートリアル、比較、ナビゲーション、購入の意図が異なる場合は分けるのが基本です。
キーワードを単独記事にするか、既存記事のH2やFAQに入れるかはどう判断しますか?
検索意図の差、対応する既存記事、サイトとの適合、独自の追加価値を確認します。既存ページが意図を満たせるなら更新、H2、FAQ、内部リンクを優先し、別の課題として成立し適切なページがない場合だけ新規記事を検討します。
GSCクエリ、Redditの質問、GitHub issue、競合タイトルを同じ表に入れてもよいですか?
出典を残し、役割を分ければ可能です。GSCは既存の検索需要、コミュニティの質問は自然な表現、競合タイトルは競合調査として扱います。いずれも分類前に重複排除、正規化、人のレビューが必要です。
AIはなぜ意味が近く検索意図が異なる語を誤ってまとめるのですか?
意味モデルは関連する対象や表現を見つけるのは得意ですが、検索者が期待するページ形式まで常に判断できるわけではありません。`astro seo`は手順、`astro vs next.js for seo`は比較なので、意図ラベル、GSC・SERP検証、人のレビューが必要です。
SERP-based、semantic、hybrid clusteringはどう選びますか?
初期段階や予算が限られる場合はsemanticで仮分類し、GSC pageと人のレビューで修正します。既存記事と継続的なデータがあるサイトはhybridが向きます。検索結果の重なりで統合・分割を判断し、照会予算もある場合にSERP-based検証を加えます。
同じテーマの既存記事がある場合、新しいページを作るべきですか?
まず既存記事が同じ検索意図を自然に満たせるかを確認します。満たせるなら本文更新、FAQ追加、内部リンク改善を優先します。検索意図とページの役割が明確に異なり、十分な独自価値がある場合だけ新規ページを作ります。
キーワードクラスタリングが低品質なページ量産につながることはありますか?
あります。そのため各クラスターに読者の課題、サイトとの適合、独自価値、人の承認を持たせます。キーワードの表記違いごとにページを作らず、AIのcluster mapをそのまま自動公開キューにしないことが重要です。

9分で読めます · 公開日: 2026年11月13日

コメント

GitHubアカウントでログインしてコメントできます

Easton BlogEaston Blog