seo-crawlability について
検索エンジンのクロールアクセス、robots.txt のルール、サイトマップの指示を監査する Claude スキルです。ページスナップショットを基に Googlebot と Bingbot のアクセスを調べ、根拠に基づく修正案を提示します。
主な機能
- 01robots.txt の到達性と構文を確認
- 02Googlebot と Bingbot のアクセスを判定
- 03ブロックされたアセットやコンテンツを検出
- 04クロール遅延とサイトマップ指示を確認
- 05修正案の生成と検証
活用シーン
- 01ページがクロール禁止かを監査
- 02CSS や JavaScript を遮るルールを特定
- 03サイトマップ指示とクロール遅延を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill seo-crawlabilityインストール後、Claude Code で/seo-crawlabilityを入力して読み込まれたか確認します。
詳細
seo-crawlability (M1)
クロールアクセスは、ほかのすべての検索シグナルの前提条件です。Googlebot/Bingbot がページとそのアセットを取得できなければ、ほかの要素がランキングに影響することはありません。このモジュールでは、汎用的なクロールアクセスのみを扱います。AI 固有のボット指示(GPTBot、Claude-SearchBot など)は seo-ai-crawlers(M14)に、AI ディスカバリーファイル(llms.txt、agents.md、UCP)は seo-ai-discovery(M21)にあります。この境界については references/ai-crawlers.md を参照してください。
入力
ディスパッチエンベロープで指定された PageSnapshot を使用します。<run_dir>/pages/<slug>.json から parsed と status_chain、headers を読み込み、<run_dir>/site/robots.json から解析済みの robots ファイル(構文、グループ、監査対象 URL に対する Googlebot/Bingbot の判定、Sitemap: 行)を読み込みます。pages/<slug>.html を Grep して、証拠をそのまま確認してください。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 を使用して、次を確認します。
- 到達可能性:
/robots.txtが 200 を返すこと(404 は「すべて許可」を意味しますが、指摘する価値があります。5xx ではクロールが一時停止することがあります)。 - 構文:各行が有効なディレクティブ(
User-agent、Disallow、Allow、Sitemap、Crawl-delay)であること。不明なトークン、User-agentグループヘッダーの欠落、BOM/文字コードの問題にフラグを立てます。 - アセットのブロック:CSS/JS、フォント、または
/wp-includes/のようなパスをブロックするDisallowがないこと。これはレンダリングを妨げ、「ページが Google に正しく表示されない」主な原因です(M-render と照合してください)。 - コンテンツのブロック:重要なインデックス可能パスを
Googlebot/Bingbotから隠すDisallowルールがないこと。 - Crawl-delay の妥当性:大きな
Crawl-delay(または全体グループに適用されるもの)はクロールバジェットを圧迫する可能性があります。Googlebot はCrawl-delayを無視しますが、Bingbot は適用する点に留意してください。 - Sitemap ディレクティブ:絶対 URL の
Sitemap:が少なくとも 1 つ存在すること。 - 全体的なアクセス:監査対象 URL に対する
GooglebotとBingbotの有効なルールセットを評価し、最終的にアクセスが許可されるか確認します。
修正
生成される編集内容は fix 用の差分であり、スキーマの fixable フィールドに対応します。
- AUTO:CSS/JS または重要なコンテンツパスに対する誤った
Disallowを削除する(検証可能な、許可範囲の追加)。絶対 URL のSitemap:行がない場合は追加する。構文の誤り(例:Dissallowのタイプミス、コロンの欠落、User-agentヘッダーのないグループ)を修正する。 - PROPOSED:
Crawl-delayの厳格化、またはUser-agentグループの再構成。意図的な設定である可能性があるため、項目ごとの承認を必要とする案として提示します。 - ADVISORY:意図的に禁止されている対象(非公開/ステージング用パス)の変更。ツールによる書き込みは行いません。
サイトマップの URL やパスを決して捏造しないでください。正規のサイトマップの場所が不明な場合は、ユーザーが入力するための
TODOプレースホルダーであることを明記して出力するか、確認してください。
検証
node "${CLAUDE_PLUGIN_ROOT}/scripts/parse-robots-sitemap.mjs" --url <final_url> --path <audited path>—/robots.txtを取得して解析し、監査対象のパス(ルートではありません)に対するGooglebot/Bingbotの有効な許可/拒否ルールを評価し、Sitemap:ディレクティブを確認します(メソッドrobots_parse)。オフラインの robots ファイルには--robots <robots_url>または--file <path>を使用してください。/robots.txtを取得できない場合(ネットワーク/認証/エッジによるブロック)、ステータスはneeds_apiとなり、誤ってpassになることはありません。
検出事項
schema/finding.schema.json に従って検出事項を出力します。軸は search です。重大度ポリシー:5 は、サイト/テンプレートのスコープで適格性を失わせる壊滅的な事実にのみ割り当てます。4 は重大、3 は中程度、2 は軽微、1 は表面的、0 は情報提供です。また、アクティブなカテゴリにおける established の重大度 5 の fail のみが、スコアの上限を設定できます(references/scoring-model.md)。
M1.robots.blocks_googlebot— 有効なルールセットにより、監査対象 URL へのGooglebotのアクセスが拒否されています(fail、重大度 5、fixable: proposed、確信度established)。サイト全体に関わるもので、robots に関する欠陥として最も破壊的なものです。重大度は 5 のままです。M1.robots.blocks_css_js— ページのレンダリング時に読み込まれる CSS/JS にDisallowが一致し、Google によるページのレンダリングが劣化します(fail、重大度 4、fixable: auto、確信度established)。M1.robots.unreachable—/robots.txtが 5xx を返すため、復旧するまでクロールが停止します(fail、サイトスコープで重大度 5、fixable: advisory、確信度established)。M1.robots.syntax_error— ディレクティブの形式が正しくない、User-agentグループヘッダーがない、または BOM がある状態です(warn、重大度 3、fixable: auto、確信度established)。M1.sitemap.missing_directive— robots.txt にSitemap:行がありません(warn、重大度 2、fixable: auto、確信度directional— サイトマップは Search Console や/sitemap.xmlからも検出されるため、ディレクティブがないのは利便性の問題であり、アクセス障害ではありません)。M1.crawl_delay.excessive— グローバルグループに大きなCrawl-delayが設定されており、それに従うクローラーの処理が滞ります(warn、重大度 2、fixable: proposed、確信度directional)。 プラットフォーム条件付き ID。 このモジュールは、profile.jsonでプラットフォーム(shopify、wordpress、nextjs)が指定されている場合にのみ発生する 6 つの ID も出力します。これらはreferences/routing.md§ Platform-conditional finding ids に索引があり、references/platforms/<id>.md§10 に仕様が記載されています。
各検出事項では、evidence.observed に問題のある robots.txt の行(または解決済みの判定)をそのまま引用します。verification.reproduce は上記の実行可能なコマンドです。expected_impact は範囲と確信度タグを付けて記載します(% のみの表記は禁止)。
正確性
robots.txtが制御するのは クロール であり、インデックス登録 ではありません。Disallowで拒否されたページも、外部リンクを通じて URL のみインデックス登録されることがあります。ページをインデックスから除外するにはnoindexメタタグを使用し、Disallowも併用しないでください。併用すると、クローラーがnoindexを確認できなくなります。robots.txtがない場合や 404 の場合は 欠陥ではありません。「すべてクロールする」という意味です。failとして報告せず、情報提供として扱ってください。5xx は異なり、発生中は全面的な拒否として扱われます。- Googlebot は
Crawl-delayを無視します。Google のクロールを制御する手段として推奨するのは誤りです。アドバイスの対象は Bingbot や、これに従うその他のエージェントに限定してください。 - すべての判定は
/ではなく、監査対象のパスを基準に解決してください。ルートへのアクセスは許可し、/blog/へのアクセスは拒否するサイトはよくあります。ルートのみを確認すると、誤った結果が報告されます。 - プレビューホストやステージングホストでは、
Disallow: /による一括拒否が想定される設定です。--environment preview|staging|localが設定されている場合、スコアラーはM1.robots.*による上限設定を抑制します(references/scoring-model.mdを参照)。