mcpField
K
keyword-research

keyword-research

github.com/itallstartedwithaideaマーケティング・グロース4496 回インストール29 週間前に更新
リポジトリ

keyword-research について

keyword-research は、Google Ads のキーワード設計に使う Agent Skills™ スキルです。シード語の拡張、意図別の分類、マッチタイプの選定に加え、検索語句データから除外キーワードを見つけます。

主な機能

  1. 01シードキーワードの拡張
  2. 02競合語句と検索語句の調査
  3. 03意図に基づくキーワード分類
  4. 04マッチタイプの推奨
  5. 05階層別の除外キーワードリスト

活用シーン

  1. 01シード語からキーワード戦略を作成
  2. 02ロングテール語と競合の不足語を発見
  3. 03広告キャンペーンのマッチタイプを選定
  4. 04無関係な検索語句への支出を削減

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill keyword-research

インストール後、Claude Code で/keyword-researchを入力して読み込まれたか確認します。

詳細

キーワード調査

Agent Skills™ の一部です。googleadsagent.ai™ によるものです。

説明

キーワード調査スキルは、Google Ads キャンペーンにおけるキーワードの発見、拡張、最適化に体系的なアプローチを提供します。シードキーワードから始め、意味的なバリエーション、競合他社のキーワードの調査、検索語句レポートの分析、ロングテールキーワードの発見、検索意図に基づくグループ化など、複数の拡張方法を通じて包括的なキーワード群を構築します。その結果、無駄な支出を抑えながら関連性の高いキーワードを最大限に網羅する、構造化されたキーワード戦略が得られます。

マッチタイプの選択は重要な要素です。このスキルは、コンバージョンの可能性、検索ボリューム、競争の激しさ、クリック単価の費用対効果に基づいて各キーワードを評価し、最適なマッチタイプを推奨します。部分一致キーワードにはスマート自動入札戦略を組み合わせ、フレーズ一致では購入意欲の高いバリエーションを捉え、完全一致では成果が実証されたキーワードを確実に押さえます。このスキルは、検索語句レポートからのフィードバックループに基づいて、マッチタイプの割り当てを継続的に改善します。

除外キーワードの管理も同様に重要です。このスキルは、検索語句レポートから関連性の低い検索語句を抽出し、階層化された除外キーワードリスト(アカウント単位、キャンペーン単位、広告グループ単位)を作成して、キャンペーン間で共有する除外キーワードリストを管理します。事前に除外キーワードを発見することで、各業種に共通する関連性の低い検索語句のパターンを特定し、予算の無駄を未然に防ぎます。

使用する場面

  • ユーザーが「キーワード調査」や「キーワードのアイデア」を求めている
  • ユーザーが「キーワードを拡張」したい、または「新しいキーワードを見つけたい」
  • ユーザーが「除外キーワード」や「検索語句の調査」に言及している
  • ユーザーが「マッチタイプ」(部分一致、フレーズ一致、完全一致)について尋ねている
  • ユーザーが関連性の低い検索語句への「無駄な支出を減らしたい」
  • ユーザーが「キーワードリスト」や「キーワード戦略」の作成を求めている
  • ユーザーが「キーワードのグループ化」や「広告グループの構成」に言及している
  • ユーザーが「ロングテールキーワード」や「競争の少ないキーワード」を求めている
  • ユーザーが「検索語句の分析」や「検索クエリの調査」を求めている

アーキテクチャ

flowchart TD
    A[Seed Keywords] --> B[Expansion Engine]

    B --> C[Semantic Expansion]
    B --> D[Competitor Mining]
    B --> E[Search Term Report]
    B --> F[Long-Tail Discovery]
    B --> G[Question Queries]

    C --> H[Raw Keyword Universe]
    D --> H
    E --> H
    F --> H
    G --> H

    H --> I[Deduplication & Normalization]
    I --> J[Intent Classification]

    J --> K[Informational]
    J --> L[Commercial]
    J --> M[Transactional]
    J --> N[Navigational]

    L --> O[Match Type Assignment]
    M --> O
    N --> O

    K --> P[Negative Keyword Candidates]

    O --> Q[Keyword Grouping Engine]
    Q --> R[Themed Ad Groups]

    P --> S[Negative Keyword Lists]
    S --> T[Account-Level Negatives]
    S --> U[Campaign-Level Negatives]
    S --> V[Ad Group-Level Negatives]

    R --> W[Final Keyword Strategy]
    T --> W
    U --> W
    V --> W

実装

キーワード拡張およびマッチタイプ割り当てエンジン:

const MATCH_TYPES = {
  BROAD: 'BROAD',
  PHRASE: 'PHRASE',
  EXACT: 'EXACT'
};

const INTENT_CATEGORIES = ['informational', 'commercial', 'transactional', 'navigational'];

async function expandKeywords(seedKeywords, config) {
  const { customerId, industry, maxKeywords = 500 } = config;

  const expansionResults = await Promise.all([
    semanticExpansion(seedKeywords),
    competitorKeywordMining(seedKeywords, industry),
    searchTermReportMining(customerId),
    longTailDiscovery(seedKeywords),
    questionQueryExpansion(seedKeywords)
  ]);

  const rawKeywords = deduplicateAndNormalize(expansionResults.flat());
  const classifiedKeywords = rawKeywords.map(kw => ({
    ...kw,
    intent: classifyIntent(kw.text),
    suggestedMatchType: assignMatchType(kw)
  }));

  return classifiedKeywords.slice(0, maxKeywords);
}

function assignMatchType(keyword) {
  if (keyword.conversionRate > 0.05 && keyword.volume < 1000) {
    return MATCH_TYPES.EXACT;
  }
  if (keyword.intent === 'transactional' && keyword.wordCount >= 3) {
    return MATCH_TYPES.PHRASE;
  }
  if (keyword.volume > 5000 && keyword.competitorPresence) {
    return MATCH_TYPES.BROAD;
  }
  return MATCH_TYPES.PHRASE;
}

function classifyIntent(keywordText) {
  const transactionalSignals = ['buy', 'order', 'purchase', 'price', 'cost', 'cheap', 'deal', 'discount', 'coupon', 'hire', 'book'];
  const commercialSignals = ['best', 'top', 'review', 'compare', 'vs', 'alternative', 'recommended'];
  const informationalSignals = ['how', 'what', 'why', 'when', 'guide', 'tutorial', 'tips'];

  const text = keywordText.toLowerCase();
  if (transactionalSignals.some(s => text.includes(s))) return 'transactional';
  if (commercialSignals.some(s => text.includes(s))) return 'commercial';
  if (informationalSignals.some(s => text.includes(s))) return 'informational';
  return 'commercial';
}

除外キーワードの調査およびリスト管理:

async function mineNegativeKeywords(customerId, lookbackDays = 30) {
  const searchTerms = await getSearchTermReport(customerId, lookbackDays);

  const negatives = searchTerms.filter(term => {
    const hasClicks = term.clicks > 0;
    const noConversions = term.conversions === 0;
    const highSpend = term.costMicros > 5000000;
    const lowCTR = term.ctr < 0.01;
    const irrelevantIntent = term.classifiedIntent === 'informational';

    return hasClicks && noConversions && (highSpend || lowCTR || irrelevantIntent);
  });

  return categorizeNegatives(negatives);
}

function buildNegativeKeywordLists(negatives) {
  return {
    accountLevel: negatives.filter(n => n.universallyIrrelevant),
    campaignLevel: groupBy(negatives.filter(n => n.campaignSpecific), 'campaignId'),
    adGroupLevel: groupBy(negatives.filter(n => n.adGroupSpecific), 'adGroupId'),
    sharedLists: buildSharedLists(negatives)
  };
}

function groupKeywordsIntoAdGroups(keywords, maxPerGroup = 20) {
  const groups = [];
  const themes = extractThemes(keywords);

  for (const theme of themes) {
    const themeKeywords = keywords.filter(kw => kw.theme === theme.id);
    if (themeKeywords.length <= maxPerGroup) {
      groups.push({ theme: theme.name, keywords: themeKeywords });
    } else {
      const subGroups = splitBySubTheme(themeKeywords, maxPerGroup);
      groups.push(...subGroups);
    }
  }

  return groups;
}

Buddy™ Agent との統合

キーワード調査スキルは、Buddy™ Agent の戦略的な基盤として機能します。ユーザーがアカウントを接続すると、Buddy™ は既存のキーワードの網羅状況をすぐに分析し、拡張の機会を特定します。このスキルはバックグラウンドで継続的に実行され、検索語句レポートを監視して、新たな検索語句のパターンや除外キーワードの候補を見つけます。

Buddy™ は、提案を適用する前にユーザーが承認、編集、または却下できる、対話型インターフェースを通じてキーワードを推奨します。承認されたキーワードは、予測されるパフォーマンスに基づいてマッチタイプと入札単価があらかじめ設定されたうえで、適切なキャンペーンに反映されます。除外キーワードは自動的に分類され、適切な階層に適用されます。

このスキルは競合分析スキルと照合し、競合他社が獲得している一方でアカウントが取りこぼしているトラフィックにつながるキーワードのギャップを特定します。また、広告コピー生成スキルにも情報を渡し、新しいキーワードに対応する広告コピーを用意できるようにします。

ベストプラクティス

  1. 最も価値の高い製品やサービスを表す、5~10個の主要なシードキーワードから始めます
  2. キーワードを検索意図とテーマごとにグループ化し、テーマを絞った10~20個のキーワードで広告グループを構成します
  3. コンバージョン率が高いことが実証された語句には完全一致を使用し、入札単価の精度を維持します
  4. 部分一致は、スマート自動入札戦略(目標コンバージョン単価、目標広告費用対効果)との組み合わせに限定します
  5. 検索語句レポートを毎週確認し、無駄な費用が積み重なる前に除外キーワードを追加します
  6. 仕事、無料、DIY など、全般的に関連性のない語句を除外する共有除外キーワードリストを作成します
  7. 具体的で購入意図の強い検索を取り込むため、ロングテールキーワード(3語以上)を含めます
  8. キーワードの品質スコアを監視し、4未満が続くキーワードを一時停止します
  9. キャンペーン間でキーワードが共食いしないよう、キャンペーン単位の除外キーワードを設定します
  10. 季節性のある検索語句やトレンドの検索語句を取り込むため、四半期ごとにキーワードの拡張を再実施します

プラットフォームの互換性

プラットフォーム対応
Claude Code✅
Cursor✅
Codex✅
Gemini✅

関連スキル

  • 広告文の生成 - 新しいキーワードに対応する広告文を作成し、キーワードと広告の関連性を確保します
  • 競合分析 - 競合のキーワードのギャップから、拡張の機会を見つけます
  • 品質スコアの最適化 - キーワードの品質スコアを参考に、マッチタイプや広告グループの再構成を判断します
  • ナレッジベースの注入 - ドメイン知識のパターンを活用して、キーワードの検索意図を自動分類します

キーワード

キーワード調査、キーワード拡張、除外キーワード、マッチタイプの最適化、部分一致、フレーズ一致、完全一致、検索語句の発掘、キーワードのグループ化、広告グループの構成、ロングテールキーワード、キーワードの検索意図、キーワード戦略、Google 広告のキーワード、PPC キーワード


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

コメント