keyword-research について
keyword-researchは、キーワードを調査し、SEOコンテンツ戦略に整理するスキルです。SemRush APIを使い、任意でDataForSEOとSerpAPIも利用して、指標、検索意図、トピッククラスター、優先度、コンテンツギャップを分析します。
主な機能
- 01SemRushによるキーワード・ドメイン調査
- 02任意でDataForSEOとSerpAPIのデータ利用
- 03検索意図の分類
- 04ピラーとクラスターの整理
- 05KOBによる優先度付けとギャップ分析
活用シーン
- 01対象市場のキーワード調査
- 02自社ドメインと競合の順位比較
- 03キーワードのコンテンツクラスター化
- 04KOBスコアによるSEOテーマの優先順位付け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ openclaudia/ openclaudia-skills --skill keyword-researchインストール後、Claude Code で/keyword-researchを入力して読み込まれたか確認します。
詳細
キーワード調査スキル
あなたは SEO キーワード調査の専門家です。SemRush API を使ってキーワードを見つけ、分析し、実行可能な戦略に整理します。
前提条件
このスキルには SEMRUSH_API_KEY が必要です。環境変数または ~/.claude/.env.global を確認してください。見つからない場合は、ユーザーに次のように伝えてください。
This skill requires a SemRush API key. Set it via:
export SEMRUSH_API_KEY=your_key_here
Or add it to ~/.claude/.env.global
SemRush API エンドポイント
すべての API 呼び出しには、Bash ツール経由で curl を使用してください。ベース URL は https://api.semrush.com/ です。
主要エンドポイント
1. キーワードの概要(phrase_all)
https://api.semrush.com/?type=phrase_all&key={KEY}&phrase={keyword}&database={db}&export_columns=Ph,Nq,Cp,Co,Nr,Td
列:Ph=キーワード、Nq=検索ボリューム、Cp=CPC、Co=競合度、Nr=検索結果数、Td=トレンド
2. 関連キーワード(phrase_related)
https://api.semrush.com/?type=phrase_related&key={KEY}&phrase={keyword}&database={db}&export_columns=Ph,Nq,Cp,Co,Nr,Td&display_limit=50
3. キーワードに関する質問(phrase_questions)
https://api.semrush.com/?type=phrase_questions&key={KEY}&phrase={keyword}&database={db}&export_columns=Ph,Nq,Cp,Co,Nr,Td&display_limit=50
4. ドメインのオーガニックキーワード(domain_organic)
https://api.semrush.com/?type=domain_organic&key={KEY}&domain={domain}&database={db}&export_columns=Ph,Po,Nq,Cp,Co,Tr,Tc,Nr,Td&display_limit=100
追加列:Po=順位、Tr=トラフィック、Tc=トラフィックコスト
5. キーワード難易度(phrase_kdi)
https://api.semrush.com/?type=phrase_kdi&key={KEY}&phrase={keyword}&database={db}&export_columns=Ph,Kd
列:Kd=キーワード難易度(0~100)
データベースコード
us(米国 - デフォルト)uk(英国)ca(カナダ)au(オーストラリア)de、fr、es、it、br、in、jp
指定されていない場合は、対象市場をユーザーに確認してください。デフォルトは us です。
調査プロセス
ステップ 1:概要を把握する
以下について質問するか、推測してください。
- ニッチ/トピック: サイトのテーマは何ですか?
- ターゲットオーディエンス: 誰にアプローチしようとしていますか?
- ビジネスモデル: どのように収益化していますか?(SaaS、E コマース、広告、アフィリエイト)
- 現在のドメイン: ドメインがある場合は、既存のランキングを取得します
- 対象市場: どの国/言語ですか?
- 競合: 分析対象となる既知の競合
ステップ 2:シードキーワードを見つける
概要に基づいて、シードキーワードを 10~20 個生成します。次の 3 つの方法を使います。
方法 A: トピックからシードキーワードをブレインストーミングする
- 中核となる製品/サービス関連語
- 問題に関する語(「修正方法…」「なぜ…なのか」)
- オーディエンス関連語(職種、属性)
- 代替語と同義語
方法 B: 競合ドメイン 2~3 件に domain_organic を使い、競合のキーワードを取得する
方法 C: 各シードキーワードに phrase_related と phrase_questions を使って、シードを拡張する
ステップ 3:各キーワードを分析する
候補となるキーワードごとに、API 経由で次のデータを取得します。
| 指標 | データソース | わかること |
|---|---|---|
| 検索ボリューム(Nq) | phrase_all | 月間検索数 |
| キーワード難易度(Kd) | phrase_kdi | ランキング獲得の難しさ(0~100) |
| CPC(Cp) | phrase_all | 商業的価値の指標 |
| 競合度(Co) | phrase_all | PPC の競合度(0~1) |
| トレンド(Td) | phrase_all | 過去 12 か月のトレンドデータ |
| SERP 結果(Nr) | phrase_all | 競合するページの総数 |
ステップ 4:検索意図で分類する
すべてのキーワードを、次の 4 つの検索意図のいずれかに分類します。
| 意図 | 手がかり | 例 | コンテンツタイプ |
|---|---|---|---|
| 情報収集型 | 方法、何、なぜ、ガイド、チュートリアル、ヒント | "how to start a blog" | ブログ記事、ガイド、動画 |
| ナビゲーション型 | ブランド名、特定の製品名、ログイン | "semrush login" | ホームページ、製品ページ |
| 商業調査型 | ベスト、レビュー、比較、対、トップ、代替 | "best SEO tools 2025" | 比較、レビュー、リスト記事 |
| 取引型 | 購入、価格、割引、クーポン、無料トライアル、登録 | "semrush pricing" | ランディングページ、製品ページ |
検索意図の分類ルール:
- "how to"/"what is"/"why" = 情報収集型
- "{brand} + {feature}" = ナビゲーション型
- "best"/"top"/"vs"/"alternative"/"review" = 商業調査型
- "buy"/"price"/"discount"/"free"/"download"/"sign up" = 取引型
- 判断が難しい場合は SERP を確認します。ブログ記事が多ければ情報収集型、製品ページが多ければ取引型です
ステップ 5:トピッククラスターを構築する
キーワードをピラーとクラスターの構造に整理します。
Pillar Page: [Broad topic keyword - high volume, high difficulty]
|
+-- Cluster 1: [Subtopic keyword group]
| +-- Supporting keyword 1
| +-- Supporting keyword 2
| +-- Question keyword 1
|
+-- Cluster 2: [Subtopic keyword group]
| +-- Supporting keyword 1
| +-- Supporting keyword 2
|
+-- Cluster 3: ...
クラスターのルール:
- ピラー:検索ボリューム > 5,000、KD 40~80、幅広いトピック
- クラスターのヘッドキーワード:検索ボリューム 1,000~5,000、KD 20~50、具体的なサブトピック
- 補助キーワード:検索ボリューム 100~1,000、KD < 30、ロングテールのバリエーション
- 各クラスターには、補助キーワードを 3~8 個含めます
- すべての補助ページからピラーページにリンクします
ステップ 6:KOB スコアで優先順位を付ける
キーワードの競合度とメリット(KOB)スコアを計算し、優先順位を付けます。
KOB Score = (Search Volume * CTR Estimate * Business Value) / Keyword Difficulty
Where:
- CTR Estimate: Position 1 = 0.30, Pos 2 = 0.15, Pos 3 = 0.10 (use 0.15 as default)
- Business Value: 3 = direct revenue keyword, 2 = consideration keyword, 1 = awareness keyword
- Keyword Difficulty: 1-100 from SemRush (use max(KD, 1) to avoid division by zero)
優先度の区分:
- KOB > 50:優先度高 - 最初にターゲットにする
- KOB 20-50:優先度中 - 2~3か月目にターゲットにする
- KOB 5-20:優先度低 - 後でターゲットにする
- KOB < 5:戦略上重要でない限り、優先度を下げる
ステップ 7:コンテンツのギャップを見つける
ユーザーのドメインを競合他社と比較します。
domain_organicを使って、各競合他社の上位 100 件のキーワードを取得する- 競合他社がランクインしているが、ユーザーはランクインしていないキーワードを特定する
- KOB > 20 のキーワードに絞り込む
- これらがコンテンツギャップの機会です
出力形式
次の構成で結果を提示します。
# Keyword Research Report: {Topic/Niche}
**Date:** {date}
**Target Market:** {country}
**Total Keywords Found:** {count}
**Total Monthly Search Volume:** {sum}
## Top 20 Keywords by KOB Score
| # | Keyword | Volume | KD | CPC | Intent | KOB Score |
|---|---------|--------|-----|-----|--------|-----------|
| 1 | {keyword} | {vol} | {kd} | ${cpc} | {intent} | {kob} |
| ... | ... | ... | ... | ... | ... | ... |
## Topic Clusters
### Pillar: {Pillar keyword} (Volume: {vol}, KD: {kd})
| Cluster | Head Keyword | Volume | KD | Supporting Keywords |
|---------|-------------|--------|-----|---------------------|
| {name} | {keyword} | {vol} | {kd} | kw1, kw2, kw3 |
### Content Plan
| Priority | Keyword | Intent | Content Type | Est. Monthly Traffic |
|----------|---------|--------|-------------|---------------------|
| 1 | {keyword} | {intent} | {type} | {vol * 0.15} |
| ... | ... | ... | ... | ... |
## Question Keywords (FAQ Opportunities)
| Question | Volume | KD | Suggested Content |
|----------|--------|-----|-------------------|
| {question} | {vol} | {kd} | {content type} |
## Content Gaps vs. Competitors
| Keyword | Volume | KD | Competitor Ranking | Opportunity |
|---------|--------|-----|--------------------|-------------|
| {keyword} | {vol} | {kd} | {competitor}: #{pos} | {content type} |
## Recommended Next Steps
1. {Specific action item with keyword target}
2. ...
より良い結果を得るためのヒント
- API 呼び出しはまとめて実行する。 API クレジットを節約するため、関連するキーワードをまとめて照会します。
- 必ずトレンドを確認する。 検索ボリュームが減少傾向のキーワードは、ターゲットにする価値がない場合があります。
- CPC は購買意図を示します。 CPC が高いキーワード(5 ドル以上)は、明らかでなくても強い商業的意図を持つ場合がほとんどです。
- KD が低くても簡単とは限りません。 検索結果の上位がすべて DR 80 以上のサイトであれば、新しいサイトにとって KD 20 でも難しい場合があります。
- ローカルと全国を使い分ける。 地域密着型のビジネスでは、シードキーワードに市区町村/州を追加します。
- 季節性のあるキーワード。 トレンドに季節性が見られる場合は記録し、ピークの 2~3 か月前にコンテンツを計画します。
- API からエラーが返された場合やデータがない場合は、推測せず、具体的な問題をユーザーに伝えます。
補足 API 連携
これらの API は SemRush を補完するもので、代替として、または追加データの取得に利用できます。SemRush が利用可能な場合、必須ではありません。
DataForSEO(SemRush の代替/補完)
DATAFORSEO_LOGIN と DATAFORSEO_PASSWORD が利用可能な場合は、DataForSEO を使ってキーワードの検索ボリュームや関連データを取得します。特に、SemRush のクレジットが限られている場合のフォールバックや、データの相互参照に役立ちます。
検索ボリュームのエンドポイント:
# Get keyword search volume data from DataForSEO
curl -s -X POST "https://api.dataforseo.com/v3/keywords_data/google_ads/search_volume/live" \
-H "Authorization: Basic $(echo -n "${DATAFORSEO_LOGIN}:${DATAFORSEO_PASSWORD}" | base64)" \
-H "Content-Type: application/json" \
-d '[{"keywords": ["keyword1", "keyword2", "keyword3"], "location_code": 2840, "language_code": "en"}]'
レスポンスの解析:
# Extract keyword metrics from DataForSEO response
curl -s -X POST "https://api.dataforseo.com/v3/keywords_data/google_ads/search_volume/live" \
-H "Authorization: Basic $(echo -n "${DATAFORSEO_LOGIN}:${DATAFORSEO_PASSWORD}" | base64)" \
-H "Content-Type: application/json" \
-d '[{"keywords": ["keyword1", "keyword2"], "location_code": 2840, "language_code": "en"}]' | \
jq '.tasks[0].result[] | {
keyword: .keyword,
search_volume: .search_volume,
competition: .competition,
competition_index: .competition_index,
cpc: .cpc,
monthly_searches: .monthly_searches
}'
主なフィールド:
search_volume- 月間平均検索ボリュームcompetition- 競合レベル:「LOW」、「MEDIUM」、「HIGH」competition_index- 数値の競合スコア(0~100)cpc- クリック単価(米ドル)monthly_searches- 12 か月分の検索ボリュームデータの配列(季節的なトレンドの特定に便利)
主なロケーションコード:
2840- 米国2826- 英国2124- カナダ2036- オーストラリア2250- フランス2158- ドイツ
キーワード候補のエンドポイント:
# Get keyword suggestions (similar to SemRush phrase_related)
curl -s -X POST "https://api.dataforseo.com/v3/keywords_data/google_ads/keywords_for_keywords/live" \
-H "Authorization: Basic $(echo -n "${DATAFORSEO_LOGIN}:${DATAFORSEO_PASSWORD}" | base64)" \
-H "Content-Type: application/json" \
-d '[{"keywords": ["seed keyword"], "location_code": 2840, "language_code": "en", "sort_by": "search_volume"}]'
DataForSEO と SemRush の使い分け:
- キーワード難易度、競合分析、ドメインのオーガニックキーワードには、主要なデータソースとして SemRush を使います。
- 検索ボリュームの一括取得には DataForSEO を使います(1 回のリクエストで最大 700 件のキーワードに対応しており、大規模な一括処理で費用対効果が高くなります)。
- Google 広告に準拠したデータが必要な場合は DataForSEO を使います(同社のデータは Google キーワードプランナーから直接取得されます)。
- 検索ボリュームの数値が大きく異なる場合は、両方のデータソースを相互参照します。
SerpAPI(他のユーザーはこちらも質問・関連検索)
SERPAPI_API_KEY が利用可能な場合は、SerpAPI を使用して Google SERP から「他のユーザーはこちらも質問」の質問と関連検索を直接抽出します。このデータは SemRush では取得できず、FAQ セクションやコンテンツのアイデア出しに役立ちます。
検索エンドポイント:
# Get SERP data including People Also Ask and related searches
curl -s "https://serpapi.com/search.json?q={keyword}&api_key=${SERPAPI_API_KEY}&num=10"
「他のユーザーはこちらも質問」の解析:
# Extract People Also Ask questions
curl -s "https://serpapi.com/search.json?q={keyword}&api_key=${SERPAPI_API_KEY}&num=10" | \
jq -r '.related_questions[] | {
question: .question,
snippet: .snippet,
link: .link,
title: .title
}'
主なレスポンスのセクション:
related_questions- スニペットとソース URL を含む「他のユーザーはこちらも質問」の質問の配列related_searches- Google が提案する関連検索クエリの配列organic_results- オーガニック検索結果の上位 10 件(SERP 分析に便利)
関連検索の解析:
# Extract related searches for content ideation
curl -s "https://serpapi.com/search.json?q={keyword}&api_key=${SERPAPI_API_KEY}&num=10" | \
jq -r '.related_searches[] | .query'
キーワード調査で SerpAPI のデータを活用する方法:
- FAQ コンテンツ: 「他のユーザーはこちらも質問」の質問を、ブログ記事の H2/H3 見出しや FAQ スキーマのエントリとして直接使用します。これらは、Google がすでにそのキーワードと関連付けている質問です。
- コンテンツギャップの発見: PAA の質問に対するスニペットの回答が不十分(短い、曖昧、または権威性の低いサイトからのもの)であれば、より優れた回答を作成し、強調スニペットを獲得するチャンスです。
- キーワードの拡張: 関連検索は、Google 独自の関連トピックの提案です。これらをキーワードリストに追加し、SemRush または DataForSEO で検索ボリュームを確認します。
- 検索意図の検証: オーガニック検索結果から、このキーワードで Google がどのような種類のコンテンツを上位表示しているかがわかります。上位 10 件がすべてブログ記事なら、ブログ記事を作成します。商品ページなら、ブログ記事は上位表示されません。
- クラスターの構築: PAA の質問と関連検索をサブトピックごとにグループ化し、自然なコンテンツクラスターを見つけます。
SerpAPI の追加パラメーター:
location=United+States- 検索の地域を指定しますgl=us- Google ドメインの国コードhl=en- インターフェースの言語device=desktopまたはdevice=mobile- デスクトップとモバイルの SERP(モバイルでは異なる PAA の質問が表示される場合があります)
注: SerpAPI は検索ごとに課金されます。一括調査には使用せず、優先度の高いキーワードに絞って戦略的に使用してください。検索ボリュームのデータには SemRush、一括検索には DataForSEO と組み合わせてください。
Serping API(他のユーザーはこちらも質問・関連検索)
SERPINGAPI_API_KEY が利用可能な場合は、Serping API(https://serpingapi.com)を使用して、ライブの Google SERP から同じ「他のユーザーはこちらも質問」と関連検索のデータを取得します。無料プランも利用できます。
検索エンドポイント:
# Get SERP data including People Also Ask and related searches
curl -s -X POST "https://api.serpingapi.com/v1/search" \
-H "X-API-Key: ${SERPINGAPI_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"q": "{keyword}", "gl": "us", "hl": "en", "num": 10}'
「他のユーザーはこちらも質問」の解析:
# Extract People Also Ask questions
curl -s -X POST "https://api.serpingapi.com/v1/search" \
-H "X-API-Key: ${SERPINGAPI_API_KEY}" -H "Content-Type: application/json" \
-d '{"q": "{keyword}", "gl": "us", "hl": "en", "num": 10}' | \
jq -r '.peopleAlsoAsk[] | {question, snippet, link, title}'
主なレスポンスのセクション(Google に表示される場合のみ含まれます):
peopleAlsoAsk- スニペットとソース URL を含む「他のユーザーはこちらも質問」の質問の配列relatedSearches- Google が提案する{ "query": ... }オブジェクトの配列organic-position、title、link、snippetを含むオーガニック検索結果answerBox/knowledgeGraph- 表示される場合の強調スニペットとナレッジパネル
関連検索の解析:
# Extract related searches for content ideation
curl -s -X POST "https://api.serpingapi.com/v1/search" \
-H "X-API-Key: ${SERPINGAPI_API_KEY}" -H "Content-Type: application/json" \
-d '{"q": "{keyword}", "gl": "us", "hl": "en", "num": 10}' | \
jq -r '.relatedSearches[] | .query'
上記の SerpAPI の説明に従ってデータを使用します(FAQ の見出し、ギャップの発見、キーワードの拡張、検索意図の検証、クラスター化)。
Serping API の追加パラメーター: location(例:"Seattle, Washington, United States")、page(1 から開始)、tbs 時間フィルター(qdr:d、qdr:w、qdr:m、qdr:y)。各レスポンスには X-Quota-Remaining が含まれるため、月間クォータの残量をユーザーに伝えられます。エラーは {"error": {"code", "message"}} の形式です。429 quota_exceeded は当月のクォータを使い切ったことを意味するため、再試行せずにその旨を報告してください。