seo-ai-crawlers について
seo-ai-crawlers は SEO 監査向けのモジュールで、Google の AI 機能に対する適格性と、サードパーティー AI クローラーのアクセスを評価します。robots ルール、Content-Signal、ユーザーエージェントごとの応答差、JavaScript 描画を調べ、根拠付きの検出結果を出力します。
主な機能
- 01Google AI のインデックス・スニペット適格性を確認
- 02監査対象パスのクローラーアクセスを評価
- 03Content-Signal の設定を分析
- 04ユーザーエージェント間の応答を比較
- 05JavaScript 非実行時の可読性を確認
- 06検証可能な監査結果を作成
活用シーン
- 01robots ルールによるクローラーアクセス拒否の診断
- 02スニペット制御が Google AI 適格性に与える影響の確認
- 03クローラーごとの応答差の特定
- 04主要コンテンツが JavaScript 描画に依存するかの確認
MCP 対応
入力には MCP 連携についての記載がありません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill seo-ai-crawlersインストール後、Claude Code で/seo-ai-crawlersを入力して読み込まれたか確認します。
詳細
seo-ai-crawlers (M14)
このモジュールでは、別々の2つの問いを扱います。そのうち、ベンダーのドキュメントに裏付けられているのは1つだけです。
- Google の AI 機能。 ページが AI Overviews / AI Mode に表示されるには、インデックス登録され、Google 検索でスニペット付きで表示される資格を満たしている必要があります。この条件はドキュメントで説明されているため、ここで
establishedとされる調査結果はM14.ai_eligibility.*だけです。 - サードパーティの AI クローラー。 OpenAI、Anthropic、Perplexity、Apple、Amazon、Meta、Mistral、DuckDuckGo、Cohere のうち、どのクローラーがページを取得し、引用する可能性があるかです。アクセスについてはユーザーエージェントごとにドキュメントで説明されていますが、引用の効果は説明されていないため、これらの調査結果は
directionalのままです。
robots の推奨事項はすべて、トレーニング、検索、ユーザーによる取得の区別に基づいて判断します。参考資料:references/ai-crawlers.md(出典付き UA テーブル、Content-Signal、適格性の条件、プリセット)。AI ディスカバリーファイル(llms.txt、agents.md、/.well-known/ucp、エージェント用サイトマップ)はモジュール M21 の対象です。seo-ai-discovery を参照してください。エージェント型コマースへの対応は M18(seo-ecommerce)の対象です。
Inputs
ディスパッチエンベロープで指定された PageSnapshot を使用してください。<run_dir>/pages/<slug>.json から parsed を読み取り、robots_directives、headers(x-robots-tag)、render{needed,used,delta} も確認してください。逐語的な根拠を探すには pages/<slug>.html を Grep してください。<run_dir>/site/robots.json には、監査対象のパスに対する verdicts、effective_access{[bot]:{class, fetch, url_allowed, via, rule, signals, doc_url, robots_reliability}}、content_signals{present, placement, global, by_group[], malformed[], cloudflare_managed_hint}、groups、ua_table_version が記録されています。実行にユーザーエージェントの差分が含まれていた場合、<run_dir>/ua-diff.json に UA ごとの status/title/h1/word_count/canonical/robots/jsonld が記録されています。audit.mjs がすでに出力した決定論的な調査結果は <run_dir>/findings.deterministic.json に記載されています。これらの ID を再出力せず、モデルが判断した調査結果のみを追加してください。URL またはパスを直接指定して呼び出され、スナップショットが存在しない場合は、まず node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <target> --out "${CLAUDE_PLUGIN_DATA}/runs" を実行し、出力されたスナップショットのパスを使用してください。
監査
PageSnapshot(render.used が none でない場合は parsed_rendered、それ以外は parsed)と site/robots.json を使用して、次の項目を確認します。
- Google の AI 機能への適格性(確立された判定基準)。 すべての
<meta name="robots">/<meta name="googlebot">タグと、すべてのX-Robots-Tagヘッダー値を収集します(ヘッダーとメタタグの両方が対象で、最も制限の厳しい指示が優先されます)。noindex/none、nosnippet、max-snippet:N、およびdata-nosnippet属性を確認します。data-nosnippetについては、メインコンテンツのどの程度を覆っているか、特に H1 やリード文を囲んでいるかを測定します。また、このパスで Googlebot 自体が拒否されていないことも確認します。スコープを記録します。テンプレートまたはサイト全体のヘッダーに由来する指示はscope: template|site、単一のドキュメントに手書きされた指示はscope: pageです。 - ボットごとの実効アクセス。 監査対象のパスの
effective_accessを確認します。/のものではありません。サイトが/へのアクセスを許可し、/blog/を拒否している場合もあるため、ルートレベルの状況では判定できません。取得・引用ボット(OAI-SearchBot、Claude-SearchBot、PerplexityBot、Amazonbot、DuckAssistBot、Google-CloudVertexBot)、従来型検索エンジン(Googlebot、Bingbot、Applebot)、学習用トークン(GPTBot、ClaudeBot、Google-Extended、Applebot-Extended、CCBot、Meta-ExternalAgent、cohere-ai、Bytespider)、ユーザーによる取得用トークン(ChatGPT-User、Claude-User、Claude-Web、Perplexity-User、Meta-ExternalFetcher、MistralAI-User)、およびOAI-AdsBotを確認します。現在の OpenAI トークンはGPTBot/1.4およびOAI-SearchBot/1.4として送信されます。ユーザーエージェントは完全な UA 文字列ではなく、トークンを大文字・小文字を区別せずに照合します。Anthropic はクローラーの IP 範囲をclaude.com/crawling/bots.jsonで公開しています。古いテーブルかどうかを確認できるよう、レポートにua_table_versionを記載します。 - Content-Signal の状況。
content_signalsには、search/ai-input/ai-trainキー、それらの行がグローバルか(Cloudflare のマネージド robots.txt アプリはすべてのグループの後に追加します)、またはUser-agentグループ内にあるか、そして不正なペアがあるかが報告されます。グループ内の行は、そのグループに対してグローバル行より優先されます。Disallowは常にシグナルより優先されます。Disallow: /はai-trainの値にかかわらずボットをブロックします。また、Allowとai-input=noの組み合わせでは、同意が保留されている間もページは取得可能です。そのとおりに記述し、「ブロック」とは決して表現しないでください。 - ユーザーエージェント間の差異。 オリジンが
default、googlebot、gptbot、oai-searchbot、claude-searchbotに返す内容を比較します。ステータス、タイトル、H1、単語数、canonical、robots 指示、JSON-LD の違いを確認します。ボットチャレンジ(403/429/503、中間ページ、CAPTCHA マークアップ、単語数がほぼゼロ)と、実際のコンテンツの違いを区別します。Googlebot とブラウザーに異なるコンテンツが提供されるかどうかという検索軸のクローキング判定は M2(M2.cloaking.ua_content_divergence)の対象です。M14 が扱うのは AI ボットのアクセス面のみです。 - 非 JS クローラーに対するレンダリング可能性。 M4 の
renderブロックを使用します。H1、主要な本文、または JSON-LD がrendered_html_pathにのみ存在し、raw_html_pathには存在しない場合、そのページは JavaScript を実行しない AI クローラーが確実に読み取れるとはいえません。 - Google-Extended の確認。
Google-Extendedが拒否されている場合、これによってサイトが AI Overviews や AI Mode から除外されるわけではなく、Gemini の学習とグラウンディングのみが制限されることを明記します。
修正
- AUTO(
fixable: auto):引用に配慮したrobots.txtプリセットです。選択必須で、ユーザーはallow-citations(検索/取得を許可し、トレーニングは拒否)、allow-all、またはblock-allを選択します。プリセットはreferences/ai-crawlers.mdにあります。それぞれの末尾には、同じ意図をその用語で言い換えたContent-Signal:行があります。決定論的で、既存設定に追加する形式で、検証可能です。fix用の差分として出力されます。 - PROPOSED(
fixable: proposed):意図しない設定であるとユーザーが確認した場合のnosnippet/max-snippet:0/noindexの削除、および主要コンテンツからのdata-nosnippetの解除です。自動で書き込むことはありません。スニペット制御は意図的な設定であることが多いためです(ペイウォール、ライセンス)。 - ADVISORY(
fixable: advisory):エッジ/WAF ルールです。チャレンジを課された AI ボットのブロック解除や、robots.txtを無視するエージェント(例:Bytespider)のブロックが該当します。このツールがインフラストラクチャ設定を書き込むことはありません。 サイトマップ URL、連絡先メールアドレス、リンク先を決して捏造しないでください。ユーザーに確認するか、明確に示したTODOプレースホルダーを残してください。
検証
node "${CLAUDE_PLUGIN_ROOT}/scripts/parse-robots-sitemap.mjs" --url <final_url> --path <audited path>(メソッドrobots_parse)— ユーザーエージェントごとに、監査対象のパスに対する有効な指示を解決し、content_signals、effective_access、ua_table_versionを返します。オフラインの robots ファイルには--robots <robots_url>または--file <path>を使用します。node "${CLAUDE_PLUGIN_ROOT}/scripts/ai-eligibility.mjs" --snapshot <pages/<slug>.json>(または--url <u>)— すべての meta-robots/X-Robots-Tag指示、max-snippet値、data-nosnippetの適用範囲の割合を確認します。H1/リードを囲んでいるかどうかも含みます(メソッドdom_assert+header_check)。node "${CLAUDE_PLUGIN_ROOT}/scripts/ua-diff.mjs" --url <final_url> --ua default,googlebot,gptbot,oai-searchbot,claude-searchbot(メソッドua_diff)— UA ごとのレスポンスフィールドとチャレンジの検出結果を確認します。- レンダリング可能性のチェックでは、M4 の結果に対して
render_diffを実行します(raw_html_pathに主要コンテンツが存在すること)。 - 必須の階層を利用できない場合(
robots.txtを取得できない、M4 のレンダリング結果がない、UA 差分を実行していない場合)、ステータスはneeds_apiまたはmanual_reviewです。誤ってpassとすることは決してありません。
指摘事項
指摘事項は schema/finding.schema.json に準拠します。evidence.observed にはページ、ヘッダー、または robots の行をそのまま引用します。verification.reproduce には上記の実行可能なコマンドを1つ記載します。expected_impact には範囲と信頼度タグを付けます(パーセンテージだけの記載は禁止)。重大度ポリシー:5 はサイト/テンプレート全体に関わる、致命的で適格性を失わせる事実にのみ使用します。4 は重大、3 は中程度、2 は軽微、1 は表面的、0 は情報提供です。スコアの上限となり得るのは、有効なカテゴリにおける、重大度5で established と判定された fail のみです(references/scoring-model.md)。
Google の AI 機能の対象要件 — 軸 ai、特に記載がない限り信頼度は established。情報源:Google の AI features and your website、および robots-meta/X-Robots-Tag の仕様:
M14.ai_eligibility.not_indexable—noindex/noneが指定されている、またはこのパスで Googlebot が許可されていない(fail、サイト/テンプレートの範囲では重大度 5、単一ページでは 4、fixable: proposed)。M14.ai_eligibility.nosnippet— メタタグまたはヘッダーにnosnippetが指定されている(fail、サイト/テンプレートでは重大度 5、単一ページでは 4、fixable: proposed)。M14.ai_eligibility.max_snippet_zero—max-snippet:0が指定されている(fail、サイト/テンプレートでは重大度 5、単一ページでは 4、fixable: proposed)。M14.ai_eligibility.max_snippet_low— 0 より大きいmax-snippet:Nが、当方のしきい値である 50 語を下回っている(warn、重大度 2、fixable: advisory、信頼度directional— このしきい値は当方独自のもので、Google は基準を公開していません)。M14.ai_eligibility.data_nosnippet_primary—data-nosnippetが H1 またはリード文を囲んでいる(fail、重大度 4、fixable: proposed)。M14.ai_eligibility.data_nosnippet_partial—data-nosnippetが指定されているが、補足的なブロックのみを囲んでいる(pass、重大度 1)。M14.ai_eligibility.ok— インデックス登録とスニペット表示が可能で、表示を抑制するディレクティブがない(pass、重大度 3)。M14.google_extended.blocked_info—Google-Extendedが許可されていない。AI Overviews や AI Mode には影響しないため、情報提供のみ(pass、重大度 1)。
サードパーティークローラーのアクセス — 軸 ai:
M14.citation_bots.blocked—Disallowにより、監査対象のパスでOAI-SearchBot/Claude-SearchBot/PerplexityBot(または別の検索取得ボット)がブロックされている(fail、重大度 4、fixable: auto)。信頼度がestablishedとなるのは、ブロック対象のトークンが少なくとも 1 つ、robots.txt での動作も含めてベンダーの文書に記載されている場合のみです(lib/bots.mjsのrobots_reliability: 'documented'とdoc_url)。ブロック対象が旧式または未文書化のトークン(Claude-Web、MistralAI-User、またはMeta-ExternalFetcherのようなlimitedトークン)のみの場合も、証拠として記載し、その旨を明示しますが、信頼度はdirectionalに下がります。いずれの場合も、引用機会の損失自体はrationaleでdirectionalと記載されます。M14.retrieval.allowed— すべての検索取得/引用ボットが監査対象のパスを取得できる(pass、重大度 4、信頼度directional)。M14.render.content_js_only— 主要コンテンツ、H1、または JSON-LD がrendered_html_pathにしかない(warn、重大度 4、fixable: advisory、信頼度directional)。M14.access.ai_bot_challenged— デフォルトの UA にはページが表示される一方、AI のユーザーエージェントにはチャレンジ/インタースティシャル、またはほぼ空の本文が返される(warn、重大度 4、fixable: advisory、信頼度directional)。M14.access.googlebot_blocked_at_edge— 偽装されたGooglebotUA がエッジで拒否される(warn、重大度 2、fixable: advisory、信頼度speculative— 検証されていない偽装を拒否するのは正当な防御です。対応する前に逆引き DNS で確認してください)。
Content-Signal — 軸 ai、信頼度が established になることはありません(ベンダーによる準拠の文書がなく、IETF ドラフトは 2026-04 に失効しており、用語のみを定義しています):
M14.content_signal.ai_input_no—ai-input=no(warn、重大度 3、fixable: advisory、directional):ページへのアクセスは可能なまま、回答エンジンへの入力について同意を拒否しています。M14.content_signal.search_no—search=no(warn、重大度 3、fixable: advisory、directional)。M14.content_signal.ai_train_no—ai-train=no(pass、重大度 1):引用機会を損なわない、正当で低コストな設定です。M14.content_signal.malformed— 不明なキー、yes|no以外の値、または解析できないペア(warn、重大度 2、fixable: auto)。M14.content_signal.absent—Content-Signalの行がない(not_applicable、重大度 0 — 指定がないことは欠陥ではありません)。
プローブ(geo コマンドが管理する項目で、M14 プレフィックスが付いているためここに記載):M14.probe.web_presence と M14.gsc_ai.impressions_present|zero_impressions|unavailable は重大度 0で、report.json.probes 内に格納され、スコアを増減させたり、上限を設けたりすることはありません。
誠実さ
このモジュールのすべての主張は、Google 自身の説明に基づいています。
- ページが AI Overviews/AI Mode に表示されるには、Search でインデックスに登録され、スニペットの対象になっている必要があります。対象にするための AI 専用ファイル、トークン、スキーマタイプ、書き換え手順はありません。
- **
Google-Extendedは AI Overviews や AI Mode に影響しません。**トレーニングと Gemini/Vertex のグラウンディングを制限します。これをブロックするのはトレーニングに関する選択であり、AI での可視性に関する選択ではありません。 - **Google Search は
llms.txtを無視します。**M21 で重み 0 として報告され、M14 のカテゴリには一切影響しません。 - Search Console の生成 AI レポートで確認できるのはインプレッションのみで、Search Analytics API には AI のディメンションがありません(2026-08 に確認済み)。このツールは、API レベルの AI 引用データがあるとは決して主張しません。
その他の注意事項:
- **Content-Signal はメタデータであり、強制力はありません。**AI ベンダーで準拠を文書化しているところはありません。
M14.content_signal.*の各検出結果は、最大でもdirectionalです。機能するのはDisallow行です。シグナルを代替手段として提示してはならず、配信が続いているai-input=noのページを「ブロック済み」と呼んではいけません。 - UA の差異の結果は、偽装した UA での結果です。送信するのはトークンであり、検証済みのクローラーではありません。サイトが未検証の
Googlebot文字列を正当に拒否することもあれば、CDN が未知のクライアントにチャレンジを返すこともあります。差異は検証の手がかりとして扱い(逆引き DNS、サーバーログ、Search Console の URL 検査で確認)、クローキングの証拠と見なしてはいけません。そのため、M14.access.googlebot_blocked_at_edgeはspeculativeです。 - トレーニング用ボットをブロックしても、対応する検索用ボットはブロックされません。
GPTBot≠OAI-SearchBot、ClaudeBot≠Claude-SearchBotです。「AI をブロックする」方法を案内するガイドの多くはこの点を誤解しており、サイトの引用機会を損ないます。 Bytespiderや一部のユーザーフェッチャー(Meta はMeta-ExternalFetcherが robots.txt を回避する場合があると説明しています)は、robots.txtを確実には遵守しません。robots ルールはベストエフォートであり、実際に強制するにはエッジルールが必要です(参考情報)。robots.txtが制御するのはクロールであり、インデックス登録ではありません。ページをインデックスから除外するにはnoindexを使用し、Disallowも併用してはいけません。併用すると、クローラーがディレクティブを確認できなくなります。