クエリ取得: 複数ソースからの検索データ収集
この記事では、包括的なデータセットを構築するために、5つの異なるソースから検索クエリを収集する方法について説明します。このデータセットはSEOパイプラインで使用されます。
問題点: 不完全なクエリデータ
単一のデータソースに依存すると、不完全な全体像しか得られません:
-
Google Search Console: クリックにつながったクエリのみ表示(高インプレッション、低CTRのクエリを見逃す)
-
Google Ads: 有料検索キーワードのみ表示(オーガニックトラフィックを見逃す)
-
ライブ検索ログ: サイト内検索のみ表示(外部での発見を見逃す)
-
Algolia: オートコンプリートクエリのみ表示(完全な検索を見逃す)
完全な検索状況を理解するためには、すべてのソースからのクエリを集約する必要があります。
概要: 5つのクエリソース
パイプラインは5つのソースからデータを取得します:
-
Google Search Console: エンゲージメント指標付きのオーガニック検索クエリ
-
Google Ads: コンバージョンデータ付きの有料検索キーワード
-
ライブ検索ログ: サイト内ユーザークエリ
-
Algolia アナリティクス: オートコンプリート検索クエリ
-
キーワードプランナー: 関連キーワードの提案
各ソースは異なる洞察を提供し、組み合わせることで包括的なクエリデータセットが作成されます。
ステップ1: 各ソースからのクエリ取得
1.1 Google Search Console (GSC)
目的: クリックにつながったオーガニック検索クエリを収集する。
入力: Search Consoleで確認済みのウェブサイトURL。
出力: エンゲージメント指標付きのクエリリスト(クエリ、クリック数、インプレッション数、CTR、順位)。
データ仕様:
-
クエリテキスト
-
クリック数(ユーザーが結果をクリックした回数)
-
インプレッション数(結果が表示された回数)
-
CTR(クリック率、パーセンテージ)
-
検索結果での平均順位
遡及期間: 90日間(詳細なクエリデータの最大期間)
フィルタリング: 最低1クリック(インプレッションのみのクエリを除外)
アクセス方法: 読み取り専用スコープを持つサービスアカウントによるGoogle Search Console API
1.2 Google Ads 検索キーワード
目的: 広告をトリガーした有料検索キーワードを収集する。
入力: マネージャーアカウントアクセス権を持つGoogle Adsアカウント。
出力: パフォーマンス指標付きの検索キーワードリスト(キーワード、インプレッション数、クリック数、コスト)。
データ仕様:
-
検索キーワードテキスト
-
インプレッション数(広告が表示された回数)
-
クリック数(広告がクリックされた回数)
-
マイクロ単位のコスト(100万単位 = 1通貨単位)
遡及期間: 2年間(利用可能なすべての履歴データ)
集約: すべての認可されたアカウントのデータを結合
フィルタリング: 最低1インプレッション
アクセス方法: OAuth2によるGoogle Ads API
1.3 ライブ検索クエリ
目的: サイト内ユーザー検索クエリを収集する。
入力: 検索サービスからの内部検索ログ。
出力: 頻度指標付きのクエリリスト(クエリ、回数、エンゲージメント)。
データ仕様:
-
クエリテキスト
-
頻度(検索された回数)
-
エンゲージメントデータ(製品インタラクションにつながった検索)
遡及期間: 可変(通常、ログ保持期間に基づき30~90日間)
重み付け: エンゲージメントによるクエリの重み付け(インタラクションのある検索は高スコア)
フィルタリング: 重複排除と出現回数のカウント
1.4 Algolia トップ検索
目的: Algoliaアナリティクスからオートコンプリート検索を収集する。
入力: Algolia検索アナリティクスデータ。
出力: 頻度付きのトップ検索クエリリスト(トップ検索、回数)。
データ仕様:
-
クエリテキスト
-
検索回数(検索された回数)
遡及期間: 90日間
フィルタリング: 最近の高ボリューム検索に限定
アクセス方法: アプリケーション認証情報によるAlgolia Analytics API
1.5 キーワードプランナー アイデア
目的: 関連キーワードの提案を収集する。
入力: シードキーワード(製品カテゴリ、ファミリー、一般的な検索用語)。
出力: 指標付きのキーワードリスト(キーワード、検索ボリューム、競争率、入札提案額)。
データ仕様:
-
キーワードテキスト
-
月間平均検索数
-
競争レベル(低、中、高)
-
提案入札額
フィルタリング: 関連するキーワードのみ(無関係な提案を除外)
アクセス方法: OAuth2によるGoogle Ads Keyword Planner API
ステップ2: クエリの正規化と集約
2.1 クエリテキストの正規化
集約前にクエリを標準化します:
-
小文字に変換
-
空白の正規化(複数のスペースを1つに圧縮)
-
先頭/末尾の空白をトリミング
-
特殊文字の削除(該当する場合)
2.2 マージと重複排除
すべてのソースからのクエリを結合します:
- すべてのソースクエリリストを読み込む
- 正規化されたクエリテキストで重複排除
- 指標をマージ(クリック数、インプレッション数、検索数を結合)
- 各クエリのソースを追跡
- 結合されたエンゲージメントスコアでソート
2.3 エンゲージメントシグナルによる重み付け
クエリはエンゲージメントに基づいてスコアリングされます:
-
GSCからのクリック: 最高重み(コンテンツへの直接的なエンゲージメント)
-
広告からのクリック: 最高重み(ユーザーの有料意図がアクションに変換)
-
エンゲージメントのあるライブ検索: 中程度の重み(サイト内インタラクション)
-
エンゲージメントのないライブ検索: 低い重み(検索のみ)
-
Algoliaオートコンプリート: 低い重み(不完全な意図)
-
キーワードアイデア: 最低重み(提案された、観測されていない検索)
重み付け式は設定可能で、エンゲージメントが主要なランキングシグナルです。
2.4 低品質クエリのフィルタリング
無効なクエリは削除されます:
-
スパム: 数字のみ、特殊文字のみ、またはインジェクション試行を含むクエリ
-
ブランド名のみ: 自社ブランド名のみのクエリ
-
低スコア: 最低エンゲージメント閾値を下回るクエリ
ステップ3: 技術的実装
3.1 クエリ取得プロセス
各ソースの認証とデータ取得:
- 認証情報(サービスアカウント、OAuth2、またはAPIキー)を取得
- それぞれのAPIに接続
- 指定された日付範囲のデータをリクエスト
- レスポンスを標準JSON形式に解析
- ローカルストレージに保存
3.2 Google Search Console クライアント
プロセス:
- サービスアカウント認証情報で認証
- 指定サイトのSearch Console APIをクエリ
- 結果をページネーション(各ページは最大25,000件を返す)
- クエリ、クリック数、インプレッション数、CTR、順位を抽出
- 集約してJSONとして保存
3.3 Google Ads クライアント
プロセス:
- OAuth2認証情報で認証
- すべての認可されたアカウントを列挙
- 各アカウントの検索キーワードをクエリ
- アカウント間で指標を集約
- インプレッション数でソートして保存
3.4 ライブクエリログ解析
プロセス:
- 内部検索ログファイルを読み込む
- 各ログエントリを解析(JSON形式、1行ごと)
- クエリテキストとエンゲージメントシグナルを抽出
- クエリの重複排除と出現回数のカウント
- エンゲージメントで重み付けして保存
3.5 Algoliaアナリティクス取得
プロセス:
- Algolia認証情報で認証
- 検索データのためにAnalytics APIを呼び出す
- 日付範囲フィルター付きでトップ検索をリクエスト
- 検索回数と結果指標を返す
- 標準JSON形式で保存
ステップ4: 増分更新
クエリ取得は、より高速な処理のために増分更新をサポートします:
初回実行:
-
すべての履歴データを取得(広告は2年間、GSCは90日間)
-
埋め込みを計算(初期設定は遅い)
以降の実行:
-
前回実行以降の新しいデータのみを取得
-
可能な限りキャッシュされた埋め込みを再利用
-
増分更新は迅速に完了
最適化ロジック:
-
出力が存在し、最近であるかを確認
-
新しいデータが利用できない場合はスキップ
-
失敗時は最後のチェックポイントから再開
ステップ5: パイプラインとの統合
取得されたクエリは、後続のパイプラインステップに供給されます:
5.1 クエリクラスタリング:
-
入力: エンゲージメント重み付きの結合クエリリスト
-
プロセス: 埋め込みを使用して類似クエリをグループ化
-
出力: ページ生成のためのクエリクラスター
5.2 製品マッチング:
-
入力: クエリ埋め込みとクラスター
-
プロセス: 各クラスターに関連製品をマッチング
-
出力: クエリと製品のマッピング
5.3 クエリページ:
-
入力: クラスタリングと製品マッチング
-
プロセス: 各クラスターのページコンテンツを生成
-
出力: HTMLページとルーティングデータ
5.4 関連検索:
-
入力: クエリ埋め込みとページデータ
-
プロセス: 各ページの類似クエリを検索
-
出力: 関連検索の提案
参照: 完全なパイプラインアーキテクチャについてはSEOパイプライン概要
データ品質に関する考慮事項
重複の処理
クエリは、わずかなバリエーションで複数のソースに現れる場合があります。例:
-
"mini pc" (GSC)
-
"Mini PC" (広告)
-
"mini pc" (余分なスペースのあるライブ)
解決策: マージ前に正規化(小文字化、トリミング、空白圧縮)
スパムの処理
一部のソースには無効なクエリが含まれます:
-
ランダムな文字列
-
SQLインジェクション試行
-
極端に長いクエリ
解決策: エンゲージメントシグナル、文字構成、長さルールによるフィルタリング
季節性の処理
クエリボリュームは季節によって変動します:
-
祭事期間中はボリュームが高い
-
休暇中はボリュームが低い
解決策: 季節変動を平滑化するために90日間の遡及期間を使用
パフォーマンス特性
-
取得時間: ソースによって異なる; 並列取得により全体時間を削減
-
クエリボリューム: データソースに依存して数千から数百万
-
集約時間: ユニーククエリの合計数に比例してスケール
-
増分更新: 完全再取得よりも大幅に高速
-
リソース使用量: 集約に中程度のCPU、重複排除にメモリ
エラー処理
パイプラインは一般的な障害を処理します:
-
API利用不可: 指数バックオフで再試行
-
データ欠落: スキップしてログに記録; 他のソースで継続
-
無効なエントリ: フィルタリングして処理を継続
-
部分的な障害: 成功したデータを保存し、チェックポイント位置を記録
関連項目
-
SEOパイプライン概要 — 完全なパイプラインアーキテクチャ
-
クエリクラスタリング — 類似クエリのグループ化方法
-
製品マッチング — クエリと製品のマッチング
-
埋め込み戦略 — クエリと製品の埋め込み
-
関連検索生成 — 関連リンクの構築
参考文献
APIとサービス
-
Google Search Console API — 公式ドキュメント
-
Google Ads API — 公式ドキュメント
-
Algolia Analytics API — 公式ドキュメント
関連記事
-
SEOパイプライン概要 — 完全なパイプラインアーキテクチャ
-
クエリクラスタリング — クエリのクラスタリング方法
-
製品マッチング — クエリと製品のマッチング