browse-geo について
browse-geoは、AI生成検索結果におけるブランドやドメインの表示状況を追跡するスキルです。Google AI Overviews、Perplexity、認証済みのChatGPT Searchで可視性と引用内容を比較し、クエリ別・エンジン別のレポートを作成します。
主な機能
- 013つの検索エンジンで可視性を追跡
- 02引用位置と文脈を記録
- 03クエリ別・エンジン別の可視性マトリクス作成
- 04可視性と引用指標の算出
- 05コンテンツとクエリの優先度を提案
活用シーン
- 01ブランド関連クエリでのドメイン表示を監視
- 02AI検索エンジン間の引用状況を比較
- 03競合のみが表示されるクエリを特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ulpi-io/ skills --skill browse-geoインストール後、Claude Code で/browse-geoを入力して読み込まれたか確認します。
詳細
browse-geo:生成エンジン最適化のモニタリング
目的
Google AI Overviews、Perplexity、ChatGPT Search の3つのエンジンで、AI が生成する検索結果にブランドまたはドメインがどのように表示されるかをモニタリングします。対象ドメインがどのクエリで、何番目に、どのような文脈で表示されるかを示す可視性マトリックスを作成します。
前提条件
Google ではボット検出のため、Camoufox が必要です。利用可能か確認します。
browse --runtime camoufox doctor
Camoufox がインストールされていない場合は、処理を中止し、手動でインストールするようユーザーに伝えます。
次のコマンドでインストールしてください:
npm install camoufox-js && npx camoufox-js fetch
自動でインストールしてはいけません。
ChatGPT Search を使用するには、ChatGPT にログイン済みの永続ブラウザープロファイルが必要です。プロファイルが存在しない場合は、ユーザーに認証を依頼します。
browse --profile chatgpt --headed goto https://chatgpt.com
# User logs in manually via headed browser
# Profile persists cookies for future sessions
ステップ 0:入力情報の収集
クエリを実行する前に、ユーザーから次の情報を収集します。
- 対象ドメイン — 追跡するドメイン(例:
example.com) - クエリリスト — ブランドに関連する検索クエリを3~10件
- エンジン — 確認するエンジン(デフォルト:3つすべて)
ユーザーがドメインのみを指定した場合は、そのドメインの業界や製品カテゴリとして考えられるものを基に、関連するクエリを提案します。AskUserQuestion を使ってクエリリストを確認します。
ステップ 1:Google AI Overviews
Google AI Overviews は、情報検索クエリの検索結果の上部に表示されます。ボット検出や Cookie バナーを回避するため、同意画面を閉じる機能を使って Camoufox を使用します。
移動して抽出する
各クエリについて:
BROWSE_CONSENT_DISMISS=1 browse --runtime camoufox --headed goto "https://www.google.com/search?q=<url-encoded-query>"
browse --runtime camoufox --headed wait --network-idle
browse --runtime camoufox --headed snapshot -i
結果を分析する
スナップショットの出力を読み取ります。AI Overview セクションには通常、「AI Overview」というラベル、展開可能な要約テキストとインライン引用、ソースへのリンクが含まれています。表示されている場合は、browse --runtime camoufox --headed text を使って全内容を抽出します。
各クエリについて、ai_overview_present(yes/no)、domain_cited(yes/no)、citation_position(数値または null)、citation_context(引用が裏付ける主張)、competing_domains(引用されている他のドメイン)を記録します。
ステップ 2:Perplexity
Perplexity では、番号付きのソース引用を含む AI 生成の回答が表示されます。
移動して抽出する
各クエリについて:
browse goto "https://www.perplexity.ai/search?q=<url-encoded-query>"
browse wait --network-idle
browse snapshot -i
結果を分析する
Perplexity では、回答内に脚注形式の番号付き引用(例:[1]、[2])が表示され、URL を含む「Sources」セクションも表示されます。必要に応じて、browse text を使って全内容を取得します。
各クエリについて、answer_generated(yes/no)、domain_cited(yes/no)、citation_numbers(対象ドメインを参照する位置)、citation_context、total_citations、competing_domains を記録します。
ステップ 3:ChatGPT Search(認証済み)
ChatGPT Search には認証済みのセッションが必要です。永続プロファイルを使用します。
移動してクエリを実行する
各クエリについて:
browse --profile chatgpt goto https://chatgpt.com
browse --profile chatgpt snapshot -i
スナップショットから入力フィールドを見つけて、次を実行します。
browse --profile chatgpt fill <input-ref> "<query>"
browse --profile chatgpt press Enter
browse --profile chatgpt wait --network-idle
ChatGPT は応答をストリーミングします。出力が安定するまで待ってから、スナップショットを取得します。
browse --profile chatgpt wait --network-idle
browse --profile chatgpt snapshot -i
停止/再生成ボタンが表示されている場合、応答はまだストリーミング中です。待ってからスナップショットを再取得します。全内容の抽出には browse --profile chatgpt text を使用します。
結果を分析する
ChatGPT Search では、インラインの番号付き引用リンクと URL を含む「Sources」パネルが表示されます。
各クエリについて、response_generated(yes/no)、search_used(yes/no — ChatGPT は検索せずに学習データから回答する場合があります)、domain_cited(yes/no)、citation_position(数値または null)、citation_context、competing_domains を記録します。
ステップ 4:可視性レポートの作成
選択したエンジンですべてのクエリを実行したら、結果を構造化されたレポートにまとめます。
可視性マトリックス
行にクエリ、列にエンジンを配置した表を作成します。
| Query | Google AI Overview | Perplexity | ChatGPT Search |
|------------------------|--------------------|------------|----------------|
| "best <product>" | Cited (#2) | Cited (#1) | Not cited |
| "<brand> vs competitor"| No AI Overview | Cited (#3) | Cited (#2) |
| "how to <task>" | Cited (#1) | Not cited | Not cited |
概要指標
次の項目を計算して報告します。
- 可視性率:エンジンごとに、ドメインが表示されたクエリの割合
- 引用位置の平均:エンジンごとに、引用された場合の平均位置
- パフォーマンスの高いクエリ:複数のエンジンでドメインが表示されるクエリ
- ギャップのあるクエリ:すべてのエンジンでドメインが表示されないクエリ
- 主な競合ドメイン:すべてのクエリを通じて最も頻繁に表示されるドメイン
推奨事項
調査結果に基づいて、次の点を提案します。
- AI での可視性向上が最も期待できるクエリ
- 競合他社は引用されているものの、対象ドメインは引用されていない箇所
- 引用される可能性を高めるために改善できるコンテンツの不足
- 対象ドメインを優先するエンジン(そのエンジンに最適化を集中)
複数クエリのワークフロー
多くのクエリを実行する場合は、コンテキストの切り替えを最小限に抑えるため、エンジンごとにまとめて実行します。
- まず Google AI Overviews ですべてのクエリを実行します(camoufox セッションは維持されます)
- 次に Perplexity ですべてのクエリを実行します(特別なランタイムは不要です)
- 最後に ChatGPT Search ですべてのクエリを実行します(認証済みのプロファイルセッション)
同じエンジンでクエリを切り替える際は、ブラウザーを再起動する必要はありません。次の検索 URL に直接移動してください。
重要なルール
- Google には Camoufox を使用 — Google は自動検索に通常の Chromium を使用するとブロックします。Google のクエリには、必ず
--runtime camoufox --headedを使用してください。 - レート制限 — 同じエンジンでクエリを実行する間に、自然な間隔を空けてください。Google では、5〜10 秒に 1 クエリを超える頻度で実行しないでください。Perplexity と ChatGPT の制限は比較的緩やかです。
- AI Overviews が常に表示されるわけではありません — Google は情報を探すクエリに対して AI Overviews を表示しますが、ナビゲーション目的や取引目的のクエリでは表示しません。表示されない場合もデータポイントとして記録してください。
- ChatGPT が検索を使用しない場合があります — ChatGPT はウェブ検索を実行せず、学習データから回答することがあります。ソースパネルが表示されない場合は、
search_used: noと記録してください。 - テキストより先にスナップショットを取得 — まず必ずスナップショットを取得してページ構造を把握し、必要に応じてテキストを抽出して全コンテンツを確認してください。
- 結果を捏造しないでください — 引用が曖昧または不明瞭な場合は、存在または不存在を断定せず、不確かであると記録してください。
- プロファイルの永続性 —
--profile chatgptフラグを使用すると、セッション間で Cookie が再利用されます。セッションの有効期限が切れた場合は、headed モードで再認証するようユーザーに依頼してください。
制限事項
- Google AI Overviews の利用可能性 — すべてのクエリで AI Overviews が表示されるわけではありません。利用可能性は地域やクエリの種類によって異なります
- ChatGPT Search へのアクセス — 検索が有効になっている ChatGPT Plus または Team のサブスクリプションが必要です
- レート制限 — 頻繁なクエリは、どのエンジンでも一時的なブロックを引き起こす可能性があります
- 動的なコンテンツ — AI が生成する回答は時間とともに変化します。結果は特定の時点のスナップショットを表します
- 画像・動画の引用 — このワークフローで追跡するのはテキストの引用のみです。AI の回答に含まれるリッチメディアの引用は記録されません