seo-geo について
seo-geoは、単一ページがAI検索で引用されている状況を調べ、ページ単位の改善案をまとめるスキルです。SEO担当者や編集者向けに、キーワード・引用データ、段落の評価、引用元ページとの比較を行います。
主な機能
- 01ページ単位のAI検索引用分析
- 02キーワード範囲とAIOの確認
- 03段落の引用適性評価
- 04引用元ページとの比較
- 05任意のSchema・AIプロトコル確認
活用シーン
- 01AI Overviewsでのページ引用状況の確認
- 02引用ページとの内容差分の特定
- 03編集更新前の段落レビュー
MCP 対応
SE Ranking MCP サーバーを使い、URLのキーワードとAI Overviewのデータを取得します。Firecrawl MCPは任意で、JSON-LDとAIプロトコルファイルの確認に使います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ seranking/ seo-skills --skill seo-geoインストール後、Claude Code で/seo-geoを入力して読み込まれたか確認します。
詳細
ページ単位のGEO(生成エンジン最適化)
1つのURLについて、AI検索での引用状況を明らかにし、AI Overview、Perplexity、ChatGPT、その他のLLMを利用した検索エンジンで引用されやすくするための、ページ単位の変更を提案します。ドメイン単位でブランド同士のシェア・オブ・ボイスを比較するものとは異なり、ページ単位で診断します。
前提条件
- SE Ranking MCP サーバーが接続されていること。
- Claude の
WebFetchツールが利用できること。 - ユーザーが対象 URL を指定していること。対象国(デフォルトは
us)と、重点的に調査する特定のキーワード(デフォルトは SE Ranking による、その URL のトラフィック加重上位5件)は任意です。
プロセス
-
対象を検証し、事前チェックを行います。 標準の3段階の事前チェック(クレジット残高、Firecrawl の利用可否、Google API)については、
skills/seo-firecrawl/references/preflight.mdを参照してください。このスキル固有の注意事項:- 続行する前に、URL を取得できることを確認します。
- このスキルで推定される SE Ranking のコスト:通常は約10~20クレジット(URL のキーワード状況、上位5件のキーワードの AIO 表示状況とランキング)。
- Firecrawl:任意で、利用できる場合は約3 Firecrawl クレジットを使用します。利用できる場合、ステップ7の JSON-LD 解析とステップ8の AI プロトコルファイルの処理で使用します。利用できない場合、処理が失敗するのではなく、
GEO.mdに(skipped — Firecrawl not installed; install via extensions/firecrawl/install.sh)という注記が出力されます。利用可能な場合でも Firecrawl をスキップするには、--no-firecrawlを渡してください(クレジットを節約できます)。 - Google API:使用しません。
-
URL のキーワード状況
DATA_getUrlOverviewWorldwideとDATA_getDomainKeywords(URL で絞り込み)- URL の概要(キーワード、トラフィック)を取得します。
- URL がランクインしているすべてのキーワードを取得します。トラフィック加重スコア順に並べます。
- 上位5件を GEO 調査対象として選びます(または、ユーザーが指定したキーワードを使用します)。
-
キーワードごとの AIO 表示状況
DATA_getAiOverview- 各キーワードについて、AIO の表示状況と引用リストを取得します。
- AIO が表示されるか、対象 URL が引用されているかを確認します。
- AIO の回答文を記録します。これは、Google のモデルがどのような文章構成を好むかを把握する手がかりになります。
-
キーワードごとの AIO ランキング
DATA_getAiOverviewLeaderboard- AIO クエリで引用されたソースの完全なランキングリストを取得します。
- 傾向を特定します。ドメイン単位では(どのサイトが一貫して引用されているか)、文章単位では(どのような構成か)を確認します。
-
ページの文章単位の監査
WebFetch- ページの HTML を取得します。
- 単独で抽出できる「文章」を特定します(TL;DR ボックス、定義を記した段落、H2 の後に続く要約文など)。
- 各文章について、引用されやすさを評価します。
- 1~3文で完結した内容になっていますか?
- 特定の質問(つまり、親となる H2 が示す質問)に答えていますか?
- 統計、数値、固有表現が含まれていますか?
- 明確なタイムスタンプや鮮度を示す情報がありますか?
- これが引用されやすさの評価レイヤーです。
-
対象ページと引用元を比較します
- 対象ページが引用されていない AIO クエリごとに、引用元を特定します。
- そのうち2~3件を
WebFetchで取得します。 - 引用された文章を抽出します(多くの場合、AIO の回答に含まれるスニペットです)。
- 文章の構成を対象ページと引用元で比較します。構成、内容、鮮度に関する具体的な不足点を示します。
-
スキーマチェック
mcp__firecrawl-mcp__firecrawl_scrape- 手順 5 の WebFetch は Markdown を返しました。解析前に JSON-LD ブロックが除去されています。スキーマチェックには、Firecrawl でそれらを取得する必要があります。
- Firecrawl が利用可能な場合: 対象 URL を 1 回スクレイピングし(Firecrawl クレジット 1 件)、返された
htmlからすべての<script type="application/ld+json">ブロックを解析します。具体的には、author、datePublished、dateModifiedが有効なArticle/BlogPosting、Q&A ブロックがある場合はFAQPage、BreadcrumbList、自己正規化 URL を示すmainEntityOfPageを確認します。 - Firecrawl が利用できない場合:
evidence/06-schema-check.mdにSchema check: skipped — Firecrawl required to parse JSON-LD blocks (WebFetch returns markdown only).と記述し、同じ行を GEO.md の「Schema check」セクションにも反映します。Markdown から推測しないでください。このセクションで解消するのは、その問題です。 - スキーマは直接的な引用シグナルではありませんが、Google の AIO における引用率と強く相関しています。
-
AI プロトコルファイル
mcp__firecrawl-mcp__firecrawl_scrape- Firecrawl が利用可能な場合:
https://{domain}/llms.txtとhttps://{domain}/.well-known/rsl.json(およびフォールバックとして従来の/RSL.txtの場所)をスクレイピングします。費用:Firecrawl クレジット 2 件(ファイルごとに 1 件)。 - 各ファイルについて、HTTP ステータス(200/404/その他)、存在する場合は本文全体、解析した概要(宣言されたコンテンツカテゴリー、許可/拒否の範囲、帰属表示の要件)を記録します。
evidence/07-ai-protocol-files.mdと GEO.md の新しい「AI-protocol files」セクションに記載します。これらは、LLM のトレーニングや引用に対するドメインの姿勢を示します。ファイルが存在し、許可的な内容であることは、AIO の引用率上昇と相関しています。- Firecrawl が利用できない場合:
AI-protocol files: skipped — Firecrawl not installed.と記述します。WebFetch へのフォールバックは行わないでください(プレーンテキストなら取得できますが、統合を一貫させます。実行時の節約効果はわずかです)。
- Firecrawl が利用可能な場合:
-
統合する
GEO.md
出力形式
次のフォルダーを作成します:seo-geo-{target-slug}-{YYYYMMDD}/
seo-geo-{target-slug}-{YYYYMMDD}/
├── GEO.md (synthesised report + recommendations — primary deliverable)
├── 04-page-passages.md (extracted passages + citability scores — load-bearing reference editors consult)
├── 05-cited-source-comparison.md (gap vs cited sources — load-bearing reference)
└── evidence/
├── 01-url-keyword-footprint.md (URL overview + top keywords — raw step output)
├── 02-aio-by-keyword.md (AIO presence + citation per keyword)
├── 03-leaderboards.md (full leaderboards per keyword)
├── 06-schema-check.md (JSON-LD audit for GEO-relevant types — requires Firecrawl)
└── 07-ai-protocol-files.md (llms.txt + RSL status and content — requires Firecrawl)
最上位には、GEO.md、04-page-passages.md、05-cited-source-comparison.md を配置します。ほかの手順ファイルには、再現性を確保するための API/スクレイピング結果の生データを evidence/ に保存します。通常の作業フローでは、編集者やライターがこれらを開くことはありません。
GEO.md は次の構成にします。
# GEO Analysis: {URL}
> Snapshot dated {YYYY-MM-DD} · Country: {country} · Keywords analysed: {n}
## Citation footprint
| Keyword | AIO present | Candidate cited | Citers |
|---|---|---|---|
| {keyword 1} | ✓ | ✗ | {3 cited sources} |
| {keyword 2} | ✓ | ✓ | {includes candidate + 2 others} |
| ... |
**Citation rate: {n}/{checked} ({%}) of AIOs where candidate could appear actually cite it.**
## Where the candidate IS cited
- {keyword X} — passage cited: "{passage text}"
- ...
## Where the candidate is NOT cited (and AIO is present)
- {keyword Y} — cited sources tend to share these patterns:
- {pattern 1: short definitive answer in first 100 words}
- {pattern 2: numbered stat with date}
- {pattern 3: schema-marked Article with author bio}
- The candidate is missing: {specific gap}.
## Page passage-level audit
Top-scoring passages on the candidate (by citability score):
1. {passage at H2 "X" — score 8/10. Strong: definitive sentence, named stat. Weak: no date.}
2. ...
Lowest-scoring passages (refresh candidates):
1. {passage at H2 "Y" — score 3/10. Weak: vague generalities, no specific data.}
2. ...
## Schema check
- `Article` (or sub-type) present and valid: {✓/✗ | skipped — Firecrawl required}
- `author` populated with `@type: Person` and `url`: {✓/✗}
- `datePublished` + `dateModified` ISO 8601: {✓/✗}
- `FAQPage` for visible Q&A: {✓/✗/N-A}
- `BreadcrumbList`: {✓/✗}
## AI-protocol files
- `/llms.txt` present: {✓ status 200 / ✗ status {n} / skipped — Firecrawl required}
- `/.well-known/rsl.json` (or `/RSL.txt`) present: {✓ / ✗ / skipped}
- Stance summary: {permissive / restrictive / mixed / unknown — based on declared categories and allow/deny scope}
## Recommendations (top 5 to improve citability)
1. {Specific change — e.g., "Add a 60-word TL;DR after the H1 that directly answers '{primary keyword}' — current page buries the answer below 800 words of preamble"}
2. {Specific change}
3. {Specific change}
4. {Specific change}
5. {Specific change}
## Recommended next step
Re-run `seo-geo` on this URL in 30 days after applying the recommendations. AIO indexes update on a monthly cadence — citation changes show up there first.
ヒント
- レート制限を守ってください。キーワード約 5 件 × AIO 呼び出し 2 回で約 10 回、さらに引用元での WebFetch が 2~3 回です。十分対応できます。
- 費用:通常は SE Ranking クレジット約 10~20 件に加え、拡張機能がインストールされている場合は Firecrawl クレジット約 3 件(対象 URL の JSON-LD 用に 1 件、AI プロトコルファイル用に 2 件)です。Firecrawl がなくても、このスキルは適切に機能を縮退します。スキーマと AI プロトコルのセクションには、黙って省略するのではなく、「skipped」と明記します。
- 引用はランキングではありません。 オーガニック検索で上位表示されても、AIO に引用されないページがあります。その逆も起こります。引用されるページが、引用率に見合う順位より下位にあることもよくあります。
- GEO に最も効果の大きい施策は、通常次のとおりです。
- 最初の 200 語以内に明確な回答を示す。
- 日付と情報源を添えた具体的な統計を示す。
- 著者と日付を含むスキーマを設定する。
- パッセージ単位で構成する(各 H2 を質問とし、H2 の直後の最初の段落で回答する)。
- ドメイン単位でブランド間の可視性を比較するには、
seo-ai-search-share-of-voiceと組み合わせます(このスキルはページ単位です)。 - ページに CITE 評価基準を適用するには、
seo-content-auditと組み合わせます(引用への準備状況に関する項目がより多く含まれています)。 - 手順 7 で特定したスキーマの問題を修正するには、
seo-schemaと組み合わせます。 - 人間にとっての読みやすさを犠牲にして AIO 向けに最適化しないでください。適切に行えば、両者は相互に高め合います。