keyword-clustering について
keyword-clustering は、SEOやコンテンツ制作向けのスキルです。キーワードを検証し、トピックと検索意図で分類して、ダウンロード可能な Excel ワークブックを作成します。DataForSEO の指標と複数シートの集計で、キーワード調査を整理できます。
主な機能
- 01貼り付けやファイルのキーワードを解析
- 02DataForSEO で検索指標を取得
- 03検索ボリュームのない語句を除外
- 04トピックと検索意図で分類
- 05集計シート付き Excel を生成
活用シーン
- 01キーワード調査リストの整理
- 02検索ボリュームのある語句の抽出
- 03トピックと意図別のコンテンツ計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill keyword-clusteringインストール後、Claude Code で/keyword-clusteringを入力して読み込まれたか確認します。
詳細
キーワードクラスタリングスキル
生のキーワードリストを、構造化され検証済みのクラスターマップに変換し、ダウンロード可能な Excel ファイルとして提供します。
このスキルでできること
- 受け付けます:あらゆる形式の入力からキーワードを受け付けます
- 検証します:DataForSEO で各キーワードを検証し、検索ボリューム、KD、CPC を取得します
- 除外します:検索ボリュームが 0 または null のキーワード(検索されていないキーワード)を除外します
- クラスタリングします:検証済みのキーワードをトピックと検索意図で分類します
- 出力します:書式設定済みのダウンロード可能な Excel ファイルを出力します
ステップ 1:入力の処理
ユーザーが指定した入力形式を判別し、キーワードリストを抽出します。
貼り付けられたリスト
ユーザーがチャットにキーワードを直接貼り付けた場合(1 行に 1 つ、カンマ区切り、または番号付き)、各キーワードを抽出して整った配列にします。番号、箇条書き記号、余分な空白を取り除きます。
CSV または Excel のアップロード
ファイルは /mnt/user-data/uploads/ にあります。pandas で読み込みます:
import pandas as pd
# CSV
df = pd.read_csv('/mnt/user-data/uploads/filename.csv')
# Excel
df = pd.read_excel('/mnt/user-data/uploads/filename.xlsx')
# Identify keyword column: look for columns named 'keyword', 'keywords', 'query', 'term', 'search term'
# If ambiguous, pick the first text column or ask the user
keyword_candidates = ['keyword', 'keywords', 'query', 'term', 'search term']
keyword_col = next((col for col in df.columns if col.lower() in keyword_candidates), df.columns[0])
keywords = df[keyword_col].dropna().tolist()
Google Sheet の URL
web_fetch を使ってシートを CSV として取得します(ベース URL に /export?format=csv を追加)。pandas で解析します。
1 回の実行につき最大 500 キーワードです。 入力が 500 を超える場合はユーザーに伝え、最初の 500 件を処理するか、使用するサブセットを尋ねてください。
ステップ 2:DataForSEO による検証
dataforseo_labs_google_keyword_overview ツールを使ってすべてのキーワードを検証し、指標を取得します。API の制限内に収めるため、100 件ずつバッチ処理します。
キーワードごとに抽出する必須フィールド:
search_volume— 月間検索数(Google)keyword_difficulty— KD スコア(0~100)
フィルタールール: search_volume が 0、null、または欠落しているキーワードを除外します。これらは検索されていないキーワードです。
開始時にユーザーへ次のように伝えます:「DataForSEO で [N] 件のキーワードを検証しています。しばらくかかる場合があります……」
検証後、次の内容を報告します:
- 送信したキーワードの合計数
- 条件を満たしたキーワード数(検索ボリュームあり)
- 除外したキーワード数(検索ボリュームがゼロまたは null)— 除外されたものが分かるよう、一覧を表示します
DataForSEO が利用できない場合、またはエラーを返した場合: ユーザーに「DataForSEO の検証に失敗しました。検索ボリュームを検証できず、KD/CPC データも提供できませんが、リスト全体をクラスタリングします。」と伝えます。その後、未検証のリスト全体を使って処理を進め、出力では検索ボリューム、KD、CPC の列を省略します。
ステップ 3:クラスタリング
検証済みのキーワードのみを、次の 2 軸のアプローチでクラスタリングします。
軸 1:トピック別クラスタ
共通するトピックやテーマに基づいてキーワードをグループ化します。核となる概念を使ってクラスタ名を付けます。
ルール:
- 各クラスタには、内容を表す2~5 語の名前を付けます(例:「メールマーケティングツール」、「Python データ分析」)
- クラスタあたり3~8 個のキーワードを目指します。クラスタ数は少なくするより多くすることを優先します。トピックを 2 つの異なるサブトピックに合理的に分割できる場合は、分割してください
- クラスタを過度に統合しないでください。異なる切り口、対象者、コンテンツ形式を狙うキーワードは、共通のルートワードがあっても別のクラスタに分けます
- トピックの範囲が非常に広い場合は、必ずサブクラスタを作成します(例:「SEO – オンページ」、「SEO – テクニカル」のように親子の命名規則を使います)
- 各クラスタに数値の
Cluster ID(1、2、3…)を割り当てます
軸 2:検索意図
各キーワードに、標準的な 4 つの検索意図ラベルのいずれかを割り当てます。
| ラベル | 意味 | シグナルとなる語句 |
|---|---|---|
Informational | ユーザーは学習したい | what is、how to、guide、tutorial、definition、examples |
Navigational | ユーザーは特定のサイトやブランドを探している | ブランド名 + login/sign in/pricing |
Commercial | ユーザーは選択肢を比較している | best、top、vs、review、alternative、comparison |
Transactional | ユーザーは購入や行動を希望している | buy、download、get、free trial、sign up、hire |
検索意図が曖昧な場合は、キーワード全体から最も可能性の高いものを選びます。検索意図を空欄にしないでください。
クラスタリングのロジック
キーワードの意味を理解したうえで分類します。次の条件に当てはまるキーワードをグループ化します。
- 同じ中心的なトピックや製品分野に関する
- 同じコンテンツやサイトのセクションに掲載されるのが自然な
- 同じオーディエンス段階を対象とする
単に共通の単語があるという理由だけでグループ化しないでください(例:「最高のメールマーケティングソフトウェア」と「メールマーケティングの統計」を、「メールマーケティング」という共通語だけを理由に同じクラスタに入れないでください。前者は商用、後者は情報提供を目的としており、異なるページに適しています)。
ステップ 4:Excel の出力を作成する
利用可能な場合は、最初に xlsx SKILL を読み込んでください。書式設定には openpyxl を使用します。
シート 1:「Keyword Clusters」(メインの出力)
列の順序:
| 列 | 説明 |
|---|---|
| Cluster ID | 数値のクラスタ番号 |
| Cluster Name | 説明的なトピック名 |
| Keyword | 検証済みのキーワード |
| Search Volume | DataForSEO による月間検索ボリューム |
| KD | キーワード難易度(0~100) |
| Intent | 情報提供 / ナビゲーション / 商用 / 取引 |
並べ替え: Cluster ID の昇順、各クラスタ内では Search Volume の降順に並べます。
書式設定:
- 1 行目:ヘッダーを太字、背景色を濃色(#1F2D40)、文字色を白、中央揃えにします
- クラスタを視覚的に区別できるよう、クラスタグループごとに薄い行の網掛けを交互に適用します(1 つおきのクラスタグループを #F2F2F2 にします)
- 先頭行を固定します
- 列幅を自動調整します(最小 15、最大 40)
- Search Volume の数値形式:
#,##0 - KD:整数
シート 2:「Cluster Summary」
クラスタごとに 1 行を記載します。
| 列 | 説明 |
|---|---|
| Cluster ID | 番号 |
| Cluster Name | 名前 |
| # Keywords | クラスタ内のキーワード数 |
| Avg Search Volume | クラスタ内の平均検索ボリューム |
| Avg KD | 平均 KD |
| Dominant Intent | クラスタ内で最も多いインテントのラベル |
| Top Keyword | 検索ボリュームが最も多いキーワード |
Avg Search Volume の降順で並べ替え、最も有望なクラスタを先頭にします。
シート 3:「Dropped Keywords」
検証の段階で除外されたキーワードをすべて記載します。
| 列 | 説明 |
|---|---|
| Keyword | 除外されたキーワード |
| Reason | 「検索ボリュームがゼロ」または「データが返されなかった」 |
除外されたキーワードがない場合は、1 行だけ「キーワードは除外されませんでした。」と記載します。
ステップ 5:保存して納品する
# Save the workbook
output_path = '/mnt/user-data/outputs/keyword_clusters.xlsx'
wb.save(output_path)
数式を使用する場合は、続けて再計算を実行します。
python scripts/recalc.py /mnt/user-data/outputs/keyword_clusters.xlsx
present_files を使って、ファイルをユーザーに渡します。
ファイルを提示した後、チャットで簡単に次の内容をまとめます。
- クラスタリングしたキーワードの合計数
- 作成したクラスタ数
- 除外したキーワード数
- 平均検索ボリューム上位 3 クラスタ
エッジケース
- 重複キーワード: 検証前に重複を削除します。重複があった場合は、その旨を伝えます。
- 英語以外のキーワード: DataForSEO は多言語に対応しています。意味に基づいてクラスタリングします。言語を明記します。
- すべてのキーワードが除外された場合: すべてのキーワードの検索ボリュームがゼロだったことをユーザーに伝えます。検証せずにクラスタリングすることを提案します。
- キーワードが 1 つの場合: 有意義なクラスタリングには少なくとも 10 個のキーワードが必要であることをユーザーに伝えます。
- 非常に多くの入力(200 個以上のキーワード): DataForSEO のバッチ処理に 2~3 分かかる場合があることを伝えます。そのまま自動的に処理を進めます。