SEO

キーワードクラスタリングとは?SERP重複のやり方とツール比較、GSCデータのPython実装

キーワードクラスタリングとは?SERP重複のやり方とツール比較、GSCデータのPython実装

キーワードクラスタリング(キーワードグルーピング、キーワードのグループ化とも呼ばれます)は、検索意図が同じキーワードを1つのグループに束ね、1グループを1ページに割り当てる作業です。束ね方は、検索結果の上位URLがどれだけ重なるかで判定するSERP重複方式と、キーワードの字面や意味の近さで判定する意味ベース方式の2系統があります。この記事では、両方式の判定基準をコードと実測値で示し、主要ツールの基準の違い、Search Consoleのデータを材料にするときの欠損、クラスタを記事に落とす手順までを扱います。

まとめ

キーワードクラスタリングの精度を決めるのは、アルゴリズムより「何をもって同じ意図とみなすか」の基準です。SERP重複方式では、上位の検索結果のうち何件のURLが共通すれば同じクラスタとみなすかを決めます。Keyword Insightsは上位7件中4件を既定値にしており、本記事のコードでは上位10件中3件で試しています。クラスタ内のすべての組で共通を求めるハード方式は分類が細かく、親キーワードとの共通だけを見るソフト方式は大きくまとまります。迷ったらハードで分けてから、記事1本で受け切れるかを人が判断して統合するほうが、カニバリゼーションを作りにくくなります。

意味ベース方式を日本語で使う場合、scikit-learn の TfidfVectorizer を既定設定で当てると、「キーワード クラスタリング」と「キーワードクラスタリング やり方」の類似度が0.000になります。analyzer="char_wb" の文字N-gramに替えると0.623に戻ります。Search Consoleのデータは匿名化クエリと行数の上限で最初から欠けているため、クラスタごとの表示回数は全体比ではなく相対比較に使ってください。数百件程度で初回の分類なら、ツールもコードも使わずスプレッドシートで目視分類する選択肢も十分に現実的です。

キーワードクラスタリングの目的と、1キーワード1記事が崩れる理由

「キーワード クラスタリング」「キーワードクラスタリング やり方」「キーワードグルーピング」は、検索する人にとってほぼ同じ質問です。意図も内容も重なる記事をキーワードごとに作ると、被リンクや内部リンクの評価が複数URLに割れ、Googleがどちらを表示するか定まらずに順位が伸び悩むことがあります。この状態がキーワードカニバリゼーションで、検出と統合の判断はキーワードカニバリゼーションの発見手順と統合・分離の判断基準で扱っています。クラスタリングは、記事を書く前にこの分散を防ぐための設計工程です。

似た言葉に「トピッククラスター」がありますが、こちらはピラーページと関連ページを内部リンクで結ぶサイト構造の考え方です。キーワードクラスタリングで作ったグループが、トピッククラスターの各ページの担当範囲になります。構造側の作り方はピラーページとトピッククラスターの作り方を参照してください。また、統計・機械学習の一般用語としてのクラスタリング(階層型と非階層型の違いなど)はデンドログラムと階層的クラスタリングの解説にまとめています。

キーワードクラスタリングのやり方:SERP重複方式と意味ベース方式

2つの方式は、同じ意図かどうかを誰に判定させるかが違います。SERP重複方式はGoogleの検索結果に判定させ、意味ベース方式は文字列やベクトルの近さに判定させます。前者は実際の検索結果の重なりを判定材料にしますが、キーワード1件ごとに検索結果の取得が必要で、後者は手元のデータだけで回せる代わりに、字面が近くても意図が違うキーワードを同じクラスタに入れてしまいます。

SERP重複方式:上位10件の共通URL数で判定する手順

手順は3段階です。対象地域・言語・端末と取得時期をそろえ、広告を除く自然検索上位10件のURLをキーワードごとに取得し、キーワードの全組み合わせについて共通URLの件数を数え、共通件数がしきい値以上の組を同じクラスタにまとめます。Googleが同じページ群を上位に並べているなら、Googleはその2語を同じ意図と解釈している、という前提に立つ方式です。

まとめ方にはハードとソフトの2種類があります。ハードはクラスタ内のすべての組がしきい値以上の共通URLを持つことを求め、ソフトは表示回数(または検索ボリューム)が最大の親キーワードとの共通だけを見ます。違いは次のコードで確かめられます。検索結果は説明用の架空データで、しきい値は3件です。

from sklearn.cluster import AgglomerativeClustering
import numpy as np

# 各キーワードの検索結果上位10件のURL(説明用の架空データ)
serp = {
    "キーワードクラスタリング":         ["u01","u02","u03","u04","u05","u06","u07","u08","u09","u10"],
    "キーワードクラスタリング やり方":   ["u01","u02","u03","u04","u05","u06","u11","u12","u13","u14"],
    "キーワードグルーピング":           ["u01","u02","u03","u04","u15","u16","u17","u18","u19","u20"],
    "キーワードクラスタリング ツール":   ["u07","u08","u09","u21","u22","u23","u24","u25","u26","u27"],
    "トピッククラスター 作り方":        ["u31","u32","u33","u34","u35","u36","u37","u38","u39","u40"],
    "ピラーページ":                     ["u31","u32","u33","u34","u41","u42","u43","u44","u45","u46"],
}
imp = {"キーワードクラスタリング":120, "キーワードクラスタリング やり方":60, "キーワードグルーピング":40,
       "キーワードクラスタリング ツール":30, "トピッククラスター 作り方":25, "ピラーページ":20}
kws = list(serp)
N = 3  # 何件の共通URLで「同じ意図」とみなすか

ov = np.array([[len(set(serp[a]) & set(serp[b])) for b in kws] for a in kws])
print(ov)

# ハード:クラスタ内のすべての組がN件以上共有(完全連結法)
hard = AgglomerativeClustering(n_clusters=None, metric="precomputed", linkage="complete",
                               distance_threshold=10 - N + 0.5).fit_predict(10 - ov)
print("hard:", hard.tolist())

# ソフト:表示回数の多い順に親キーワードを決め、親とN件以上共有すれば同じクラスタ
soft, pivots = {}, []
for k in sorted(kws, key=imp.get, reverse=True):
    p = next((p for p in pivots if ov[kws.index(k), kws.index(p)] >= N), None)
    if p is None:
        pivots.append(k); p = k
    soft[k] = p
for k in kws:
    print(f"{k} -> {soft[k]}")

scikit-learn 1.9.1 での出力は次のとおりです。

[[10  6  4  3  0  0]
 [ 6 10  4  0  0  0]
 [ 4  4 10  0  0  0]
 [ 3  0  0 10  0  0]
 [ 0  0  0  0 10  4]
 [ 0  0  0  0  4 10]]
hard: [1, 1, 1, 2, 0, 0]
キーワードクラスタリング -> キーワードクラスタリング
キーワードクラスタリング やり方 -> キーワードクラスタリング
キーワードグルーピング -> キーワードクラスタリング
キーワードクラスタリング ツール -> キーワードクラスタリング
トピッククラスター 作り方 -> トピッククラスター 作り方
ピラーページ -> トピッククラスター 作り方

差が出たのは「キーワードクラスタリング ツール」です。親キーワードとは3件を共有するため、ソフトでは親のクラスタに入ります。一方「やり方」「グルーピング」とは共通URLが0件なので、ハードでは別クラスタに分かれます。ツール比較の意図と定義・手順の意図では上位に並ぶページの種類が違うことがあり、その場合に1本の記事へ詰め込むと両方の意図が中途半端になります。linkage="complete"(完全連結法)は、クラスタ内で最も遠い組の距離で併合を判定するため、ハード方式の条件をそのまま表現できます。

しきい値に決まった正解はありません。下げるほどクラスタは大きくなり、上げるほど同義語どうしでも分かれ始めます。重要なクラスタは、実際の検索結果を開いて上位ページの種類(解説記事か、ツールのページか、比較記事か)が揃っているかを目で確かめてください。

意味ベース方式:日本語で類似度が0になるTF-IDFの罠

検索結果を取得せずに手元のキーワード一覧だけで束ねるのが意味ベース方式です。ここで最も静かに失敗するのが日本語の扱いです。scikit-learn の TfidfVectorizer は、既定の token_pattern が (?u)\b\w\w+\b で、空白や記号でしか語を切りません。日本語の連続した文字列は丸ごと1語になります。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

docs = ["キーワード クラスタリング", "キーワードクラスタリング やり方"]

for name, kw in [("既定のTfidfVectorizer", {}),
                 ("char_wb 2-3gram", dict(analyzer="char_wb", ngram_range=(2, 3)))]:
    X = TfidfVectorizer(**kw).fit_transform(docs)
    print(f"{name}: cos = {cosine_similarity(X[0], X[1])[0][0]:.3f}  vocab = {X.shape[1]}")

v = TfidfVectorizer().fit(docs)
print("既定の語彙:", v.get_feature_names_out().tolist())

scikit-learn 1.9.1 での出力です。

既定のTfidfVectorizer: cos = 0.000  vocab = 4
char_wb 2-3gram: cos = 0.623  vocab = 36
既定の語彙: ['やり方', 'キーワード', 'キーワードクラスタリング', 'クラスタリング']

「キーワードクラスタリング」と「キーワード」「クラスタリング」が別々の特徴量として登録され、空白の有無だけで2つのキーワードの共通語彙がゼロになっています。共通語彙がなければコサイン類似度は0です。エラーは出ず、それらしいクラスタが返ってくるため、気づかずに使い続けてしまいます。

対処は文字N-gram(analyzer="char_wb")で足ります。辞書もインストールも不要です。形態素解析器(MeCab、Sudachiなど)は文を単語に分割する道具で、語単位の特徴量にしたいときに使います。「サーチコンソール」と「Search Console」のように文字種ごと違う表記を同一視するには、形態素解析とは別に、同義語の辞書で表記を統一する処理が要ります。「被リンク」と「バックリンク」のように文字がまったく重ならない同義語が多いなら、intfloat/multilingual-e5-large(1,024次元)や OpenAI の text-embedding-3-small(既定1,536次元)などの文埋め込みに切り替えます。切り替えるかどうかは、同義だと分かっているキーワードの組を数十組用意し、文字N-gramと埋め込みのそれぞれで同じクラスタに入った組の数を比べます。さらに、別意図だと分かっている組も用意し、誤って同じクラスタに入った数を確認して切り替えを判断してください。

生成AIに分類させる方法と、毎月比較できない問題

ChatGPTやClaudeにキーワード一覧を渡して「検索意図ごとに分類して」と指示する方法は、数百件規模の初回の叩き台としては手軽です。ただし、同じ一覧を渡しても実行ごとにグループの切り方や名前が変わるため、前月のクラスタとの差分を取る用途には向きません。また、生成AIが判定しているのは言葉の意味であって、Googleが実際に同じページを並べているかではありません。生成AIの分類は意味ベース方式の一種と位置づけ、重要なクラスタはSERP重複で検証する、という使い分けにしてください。

キーワードクラスタリングツールの判定基準と選び方

主要ツールは、同じ「クラスタリング」でも判定基準がそれぞれ違います。各社の公式ヘルプで確認できた範囲を表にしました(2026年11月時点)。

ツール 束ねる基準 まとめ方 上限・料金
Ahrefs Keywords Explorer Parent Topic(親トピック) 親トピックが同じ語を1群に Standard以上のプラン
Semrush Keyword Strategy Builder トピック・ピラー・サブページ 3階層の構成案 最大10,000語・構造化はPro SEOで月10回
SE Ranking Keyword Grouper Google上位10件のURL一致 一致URL数の最小値を指定 アカウント残高から1チェック0.004ドル
Keyword Insights 上位7件の共通URL数(既定4) Centroids/Agglomerative 1語1クレジット・Basic月58ドルで1万

AhrefsのParent Topicは、対象キーワードで1位のページを取り、そのページに最も多くの検索流入を送っているクエリを親トピックとする仕組みです。1位ページを起点に決まるため、そのページや流入クエリの状況が変わると、親トピックが変わる場合があります。

Keyword Insightsのクラスタリング方式は、前章のハードとソフトをそのまま選べる設計です。Centroidsは検索ボリューム最大のキーワードを基準にし、グループ内のキーワードどうしが共通URLを持つとは限らないと明記されています。Agglomerativeは全キーワードを相互に比較し、小さく締まったクラスタになります。SE Rankingのグルーピング精度も、クラスタリングに必要な一致URL数の最小値という同じ考え方の設定です。

SemrushのKeyword Strategy Builderは、キーワードを束ねるだけでなく、ピラーページとサブページの構成案まで出す点が他と違います。リストの構造化は1回ごとに月間の回数枠を使い、Guru SEOは月30回、Business SEOは月50回です。

選び方は、すでに契約しているツールがあればその機能から試すのが現実的です。判定基準を自分で調整したいならKeyword InsightsかSE Ranking、構成案まで欲しいならSemrushが向きます。AhrefsとSemrushの料金やデータの違いはAhrefsとSemrushの比較にまとめています。Keyword InsightsはSearch Consoleとの連携にも対応しており、自社のクエリを取り込んでクラスタリングできます。自前で処理する場合も、材料は次章のSearch Consoleのデータです。

Search Consoleデータの匿名化と取得上限

自社がすでに表示されているクエリを整理するなら、材料はSearch Consoleのパフォーマンスデータです。外部ツールの検索ボリュームと違い、自社のURLと順位がひも付いている点が強みですが、このデータは取り出した時点で完全ではありません。基本的な使い方はサーチコンソールの設定手順とSEO改善への使い方で扱っているので、ここではクラスタリングに効く欠損に絞ります。

匿名化クエリの取得経路別の扱い

Googleはプライバシー保護のため一部のクエリを匿名化します。BigQueryへの一括エクスポートでは、公式ヘルプが「匿名化されたクエリは、テーブルで長さが 0 の文字列として報告されます」と明記し、長さゼロのクエリ値を除外するよう案内しています。この空文字行をTF-IDFでベクトル化するとゼロベクトルになり、意味のない入力が分類に混ざります。独立したクラスタになるとは限らないため、事前に除外してください。一方、Search Analytics API のリファレンスには匿名化クエリの扱いが書かれていないため、空文字の除外をAPI側の対策として当てにしないでください。

匿名化クエリの分だけ、クエリ単位で足し上げた表示回数はサイト全体の数値と一致しません。query と page で集計した場合は、1回の検索で同じサイトの複数URLが表示されるとURLごとに数えられるため、数え方そのものも変わります。クエリやURLでフィルタすると、データの切り捨てと匿名化クエリの除外によって合計が変わる場合があることもSearch Consoleヘルプに書かれています。クラスタごとの表示回数は全体比ではなく、クラスタ間の相対比較に使ってください。

APIの行数上限と、細いロングテールの取りこぼし

画面からのエクスポートでは件数が足りないため、Search Analytics API の searchanalytics.query を使います。公式リファレンスでは rowLimit の有効範囲が1〜25,000で既定値は1,000、それを超える分は startRow を進めて取得します。query と page を同時に取っておくと、後のカニバリ検出がそのまま行えます。

見落とされやすいのが、APIが公開するデータそのものの上限です。公式ガイドは、Search Analytics のデータを検索タイプ(ウェブ、画像など)ごとに1日最大5万行、クリック数の順で公開すると説明しています。クリックの多い行から埋まるため、表示はあってもクリックのない細いロングテールほど手元に届きません。加えてヘルプは、実行回数が非常に少ないクエリはトラッキングされない場合があるとしています。クラスタリングに使えるのは、こうした上限の内側に残ったクエリだけです。

反映の遅れにも注意が要ります。ヘルプは「収集されたデータは通常、2〜3 日以内に利用可能になります」と説明しています。未確定のデータが混ざるかどうかは dataState で決まり、既定の final なら確定値だけが返り、all を指定すると最新の未確定分も含まれます。クラスタリングは数か月の集計を材料にするため、final のまま使ってください。

KMeansとHDBSCANの選び分けと、クラスタ数の決め方

意味ベース方式でベクトルを作ったあとの束ね方は、全キーワードを必ずどこかに割り当てたいか、どこにも属さないものを外れ値として切り離したいかで選びます。全件を重複なく分けたいなら KMeans、外れ値を分離したいなら HDBSCAN です。

シルエット係数だけでkを決める限界

クラスタ数 k は、シルエット係数が最大になる値を採る方法が定番です。ただし、少数のキーワードを使った今回の例では、乱数シードによって係数が変わるため、最大値だけでクラスタ数を決めるのは避けます。次のコードは12件のキーワードを文字N-gramでベクトル化し、乱数シードだけを変えて係数を測ります。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

kws = ["キーワード クラスタリング", "キーワードクラスタリング やり方", "キーワードクラスタリング ツール",
       "サーチコンソール api python", "search console api 使い方", "search console api 認証",
       "クラスタリング 手法 比較", "クラスタリング 手法 選び方", "kmeans クラスタ数 決め方",
       "seo 内部リンク 最適化", "内部リンク 貼り方", "トピッククラスター 設計"]

X = TfidfVectorizer(analyzer="char_wb", ngram_range=(2, 3)).fit_transform(kws)

for rs in [0, 1, 7, 42, 2026]:
    sil = [silhouette_score(X, KMeans(n_clusters=k, random_state=rs).fit(X).labels_)
           for k in range(2, 7)]
    print(rs, " ".join(f"{s:.3f}" for s in sil))

scikit-learn 1.9.1 での出力を表にしました。

random_state k=2 k=3 k=4 k=5 k=6
0 0.114 0.177 0.178 0.188 0.208
1 0.108 0.103 0.204 0.190 0.218
7 0.114 0.177 0.204 0.208 0.205
42 0.106 0.088 0.179 0.188 0.218
2026 0.063 0.117 0.204 0.209 0.218

k=3の係数はシードによって0.088から0.177まで動きます。5シードすべてでk=5か6が最大になりますが、12件を6つに分ければ1クラスタ平均2件で、係数の大小を比べる材料として細かすぎます。振れの原因は、既定の n_init="auto" が init="k-means++" と組み合わさると初期化を1回しか行わないことです。k は係数だけで決めず、1本の記事で回答できる検索意図のまとまりから候補範囲を絞り、その中でシードを変えても係数が安定するものを選んでください。実務では KMeans(n_init=10) のように初期化の回数を明示して増やすと、1回の初期値に結果が左右されにくくなります。

HDBSCANによる外れ値の分離

KMeans は孤立したクエリも必ずどこかのクラスタに押し込み、重心を引っ張ります。sklearn.cluster.HDBSCAN はクラスタ数の指定が不要で、外れ値に -1 を付けて分離します。上と同じ12件に min_cluster_size=2 で当てると、4クラスタとノイズ2件に分かれました。

from sklearn.cluster import HDBSCAN

# X は前掲の char_wb ベクトル(疎行列のまま渡せる)
print(HDBSCAN(min_cluster_size=2, copy=True).fit_predict(X).tolist())
# -> [2, 2, 2, 0, 0, 0, 3, 3, -1, 1, 1, -1]

copy を省くと、scikit-learn 1.9 では既定値が1.10で変わる旨の FutureWarning が出るため明示しています。この例でノイズになったのは「kmeans クラスタ数 決め方」と「トピッククラスター 設計」で、周囲に似た文字列が少ないキーワードです。HDBSCANが見ているのはベクトル空間での密度で、意味として不要かどうかではありません。ノイズに回った分は、残すか捨てるかを人が判断して拾ってください。クラスタの重なりを目で確かめたい場合の次元削減はt-SNEによる2D・3D可視化の解説で扱っています。

クラスタを記事に割り当てる手順とカニバリの検出

クラスタができた時点では、キーワードの集合が並んでいるだけです。記事に落とすには、代表クエリを決め、既存URLと突き合わせ、リライトか新規かを決める3工程を通します。順位を持つURLを動かす判断が含まれるので、この工程は自動化せず人が確認してください。

表示回数による代表クエリ選定と11〜30位の加筆候補抽出

クラスタの名前に重心に最も近いキーワードを選ぶ方法は勧めません。重心への近さはベクトル空間での代表性を表す指標であり、検索需要の大きさや記事の主題としての適切さを保証しないためです。Search Consoleの impressions が最大のクエリを代表に採り、position が11〜30のクエリを併記します。この帯は評価の土台がありながら流入に届いていない層なので、代表クエリで主題を決め、併記したクエリで加筆する論点を決める、という読み方になります。

1クラスタに複数URLが表示されるカニバリ候補の抽出

Search Consoleから query と page を同時に取得しておくと、クラスタ単位でURLを集計できます。1つのクラスタで表示回数の1位と2位のURLが拮抗していれば、カニバリゼーションの候補です。候補であって確定ではないため、抽出後に各URLがどのクエリで表示されているかと、ページの内容が同じ問いに答えているかを照合します。

import pandas as pd

# df: Search Console から取得した query, page, impressions, position の表
# labels: df の重複を除いた query 一覧(queries)をベクトル化して得たクラスタ番号
queries = df["query"].drop_duplicates().tolist()
# X = TfidfVectorizer(analyzer="char_wb", ngram_range=(2, 3)).fit_transform(queries)
# labels = HDBSCAN(min_cluster_size=2, copy=True).fit_predict(X)
df = df.merge(pd.DataFrame({"query": queries, "cluster": labels}), on="query")
df = df[df["cluster"] >= 0]   # HDBSCAN のノイズ(-1)を除く
agg = (df.groupby(["cluster", "page"], as_index=False)["impressions"].sum()
         .sort_values(["cluster", "impressions"], ascending=[True, False]))
top2 = agg.groupby("cluster").head(2)
share = top2.groupby("cluster")["impressions"].apply(
    lambda s: s.iloc[1] / s.iloc[0] if len(s) > 1 else 0.0
)
print(share[share > 0.5])   # 本記事の目安: 2位が1位の5割超なら要確認

5割という水準は本記事の運用上の目安で、公式の基準ではありません。照合の結果、同じ問いに答えていれば片方へ統合して301で転送するか担当するクエリの範囲を分け、別々の意図に答えていて両方が流入を得ているなら変更せずに維持します。クラスタ内のどのクエリにも既存URLが表示されず、CMSの記事一覧を検索しても同じ主題の記事が見つからない場合だけ新規作成に回し(Search Consoleに出ないことは、記事が無い証拠になりません)、11〜30位に既存URLがあるクラスタはそのURLのリライトを優先してください。表示回数が大きいという理由で新規記事を立てると、既存のURLと自分で競合します。競合サイトにあって自社にないクラスタを洗い出す工程はコンテンツギャップ分析の手順とつながります。

キーワードクラスタリングを自動化しないほうがよい条件

対象キーワードが数百件程度で、分類が初回の1回きりなら、自動分類の仕組みを作る前に作業量を見積もってください。スプレッドシートにキーワード、表示回数(または検索ボリューム)、上位URLを並べ、上から順に分類列を埋めていく手作業なら、1件ごとに上位URLを見ながら意図のズレを確かめられます。自動分類を組む価値が出るのは、一覧を通読できない件数になったときか、毎月同じ条件で分類し直す運用にするときです。

Search Consoleの表示回数が全体として少ないサイトも、自社データを材料にする前提が成り立ちません。前述の欠損は母数が小さいほど効くため、この場合は外部ツールの検索ボリュームを入力にしてください。

最後に、クラスタをそのまま記事構成にする運用は避けます。「〇〇 とは」と「〇〇 料金」は字面が近く、意味ベース方式では同じクラスタに入りがちですが、上位に並ぶページの種類が違えば別の記事で受けるべきです。クラスタは候補として扱い、検索結果を開いて上位ページの種類と答えている範囲が揃っているかを人が確かめる工程を必ず挟んでください。キーワード設計を外部に任せる場合は、SEO内部施策・キーワード設計の支援のように、クラスタの判定基準と記事の割り当てまで説明できる相手を選ぶのが安全です。

よくある質問

そもそもクラスタリングとは何ですか?

正解ラベルを与えずに、データを似ているものどうしのグループへ分ける手法の総称で、機械学習では教師なし学習に分類されます。SEOのキーワードクラスタリングは、その対象を検索キーワードに絞り、同じ検索意図のキーワードを1グループにまとめる使い方です。階層型と非階層型の違いなど手法そのものの体系はデンドログラムと階層的クラスタリングの解説を参照してください。

マーケティングでいうクラスタリング分析とは違うものですか?

手法は同じで、分ける対象が違います。マーケティングのクラスタリング分析(クラスター分析)は、顧客を購買履歴や属性で似たグループに分けてセグメントを作るのが典型です。キーワードクラスタリングは顧客ではなく検索キーワードを分け、グループごとに担当するページを決めます。

キーワードクラスタリングとキーワードグルーピングは違いますか?

実務ではほぼ同じ意味で使われます。ツールによって呼び方が違い、どちらも同じ検索意図のキーワードを束ねる作業を指します。ただし「グルーピング」は共通する単語でまとめるだけの単純な分類を指す場合もあるため、ツールを選ぶときは、検索結果の重なりで判定しているのか、単語の一致で判定しているのかを確かめてください。

SERP重複方式では、何件共通なら同じクラスタにすべきですか?

決まった正解はなく、ツールの既定値も違います。Keyword Insightsは上位7件中4件を既定にしており、本文のコードでは上位10件中3件で試しました。同じしきい値でもハード方式とソフト方式で結果が変わります。カニバリゼーションを避けたいならハードで細かく分け、1本の記事で受け切れると判断したクラスタだけを人が統合する順番が安全です。

キーワードクラスタリングは無料でできますか?

できます。数百件までならスプレッドシートでの目視分類、それ以上ならSearch ConsoleのデータとPythonの文字N-gramで、本文のコードはいずれも無料で動きます。費用がかかるのはSERP重複方式で検索結果を大量に取得する場合で、ツールの従量課金(SE Rankingは1チェック0.004ドル)か、検索結果を取得するAPIの利用料が必要になります。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.29 テックブログ ソニー生命の不正アクセス:38.5万件の対象確認と窓口、停止中の手続き
  2. 2026.10.31 テックブログ osinaの情報漏洩:約23万人の対象確認とSNS連携の解除、分析ツールへ渡すデータの絞り方
  3. 2026.10.31 テックブログ 松屋の不正アクセス:237万件の対象確認と窓口、漏れたパスワードの守り方
  4. 2026.11.01 テックブログ RAGTAGの情報漏洩:延べ約120万件の対象項目と会員の備え、侵入から検知まで11日の意味
  5. 2026.05.18 テックブログ マネーフォワードで連携できない・失敗するときの対処法|エラー別の原因と再連携のやり方

RELATED POSTS 関連記事

目次