mcpField
S
seo-ai-crawlers

seo-ai-crawlers

github.com/hainrixzマーケティング・グロース79208 回インストール4 日前に更新
リポジトリ

seo-ai-crawlers について

seo-ai-crawlers は SEO 監査向けのモジュールで、Google の AI 機能に対する適格性と、サードパーティー AI クローラーのアクセスを評価します。robots ルール、Content-Signal、ユーザーエージェントごとの応答差、JavaScript 描画を調べ、根拠付きの検出結果を出力します。

主な機能

  1. 01Google AI のインデックス・スニペット適格性を確認
  2. 02監査対象パスのクローラーアクセスを評価
  3. 03Content-Signal の設定を分析
  4. 04ユーザーエージェント間の応答を比較
  5. 05JavaScript 非実行時の可読性を確認
  6. 06検証可能な監査結果を作成

活用シーン

  1. 01robots ルールによるクローラーアクセス拒否の診断
  2. 02スニペット制御が Google AI 適格性に与える影響の確認
  3. 03クローラーごとの応答差の特定
  4. 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つだけです。

  1. Google の AI 機能。 ページが AI Overviews / AI Mode に表示されるには、インデックス登録され、Google 検索でスニペット付きで表示される資格を満たしている必要があります。この条件はドキュメントで説明されているため、ここで established とされる調査結果は M14.ai_eligibility.* だけです。
  2. サードパーティの 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 を使用して、次の項目を確認します。

  1. 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 です。
  2. ボットごとの実効アクセス。 監査対象のパスの 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 を記載します。
  3. Content-Signal の状況。 content_signals には、search/ai-input/ai-train キー、それらの行がグローバルか(Cloudflare のマネージド robots.txt アプリはすべてのグループの後に追加します)、または User-agent グループ内にあるか、そして不正なペアがあるかが報告されます。グループ内の行は、そのグループに対してグローバル行より優先されます。Disallow は常にシグナルより優先されます。 Disallow: / は ai-train の値にかかわらずボットをブロックします。また、Allow と ai-input=no の組み合わせでは、同意が保留されている間もページは取得可能です。そのとおりに記述し、「ブロック」とは決して表現しないでください。
  4. ユーザーエージェント間の差異。 オリジンが 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 ボットのアクセス面のみです。
  5. 非 JS クローラーに対するレンダリング可能性。 M4 の render ブロックを使用します。H1、主要な本文、または JSON-LD が rendered_html_path にのみ存在し、raw_html_path には存在しない場合、そのページは JavaScript を実行しない AI クローラーが確実に読み取れるとはいえません。
  6. 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 — 偽装された Googlebot UA がエッジで拒否される(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 も併用してはいけません。併用すると、クローラーがディレクティブを確認できなくなります。

コメント