seo-indexability について
seo-indexabilityは、クロール、インデックス、正規化、サイト健全性の問題を調べるSEO監査スキルです。ページスナップショットとクロール・応答データを組み合わせ、環境やユーザーエージェントの差異など曖昧な兆候を慎重に扱います。
主な機能
- 01canonicalとrobots指示の確認
- 02重複ページとページネーションの確認
- 03リダイレクト、リンク、混在コンテンツの確認
- 04孤立ページとクリック深度の分析
- 05ユーザーエージェント別コンテンツ比較
- 06プレビュー環境の識別
活用シーン
- 01意図せずインデックスを阻まれたページの特定
- 02リンク切れとリダイレクトチェーンの追跡
- 03canonicalと重複URLの挙動確認
- 04ブラウザーとGooglebotの応答比較
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill seo-indexabilityインストール後、Claude Code で/seo-indexabilityを入力して読み込まれたか確認します。
詳細
seo-indexability(M2)
ページを正しくクロール、インデックス登録、または正規化できなければ、ほかのシグナルはすべて無駄になります。これは検索スコアの土台です。スキーマ側のコンテキストについては、references/schema-tier1.mdを参照してください。AI ボットのアクセスとスニペットの適格性はM14(seo-ai-crawlers)が担当します。このモジュールは、検索軸のクローキングチェックを含む、従来の検索側を担当します。
入力
ディスパッチエンベロープで指定されたPageSnapshotを使用します。<run_dir>/pages/<slug>.jsonからparsed(canonicals[]、robots_meta[])を読み込み、さらにstatus_chain、headers、robots_directives.effective、および孤立ページ、深さ、重複クラスター、内部リンクの状態を示す<run_dir>/crawl.json内のクロールグラフを確認します。<run_dir>/profile.jsonにはenvironment.kind(production|preview|staging|local)が含まれます。実行にユーザーエージェント差分が含まれている場合、<run_dir>/ua-diff.jsonにユーザーエージェントごとのレスポンスフィールドが格納されています。逐語的な証拠を確認するには、pages/<slug>.htmlをgrepします。サイトのアーティファクトは<run_dir>/site/{robots.json,sitemaps.json,discovery.json}にあります。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)に加え、headers、status_chain、robots_directives を使って、以下を確認します。
- Canonical:
<link rel="canonical">が厳密に1つあること、絶対 HTTPS URL であることを確認し、自己参照・クロスドメイン・チェーン(canonical の参照先が、さらに別の URL を canonical として指定している状態)に分類します。リダイレクト先または 4xx に解決される canonical にはフラグを付けます。 - Canonical と noindex — 正しく読み取る。自己参照 canonical と組み合わせた
noindexは、致命的な組み合わせではありません。これは一貫性があり、通常は意図的な除外です(サンクスページ、絞り込み表示、ステージングなど)。M2.robots.noindex_presentとして報告し、変更前に確認を求めてください。この組み合わせが致命的なのは、canonical が別の URLを指している場合に限られます。その場合、ページは Google に「代わりに別の URL をインデックスしてほしい」と伝えながら、「自分はインデックスしないでほしい」とも伝えることになり、矛盾が canonical の参照先にnoindexを波及させる可能性があります。これはM2.canonical.noindex_conflictに該当します。 - Robots ディレクティブ:
<meta name="robots">とX-Robots-Tagヘッダーのnoindex/nofollow/noneを確認し、ヘッダーとメタタグの内容を照合します(最も制限の厳しい指定が適用され、ヘッダーのディレクティブは HTML 以外のレスポンスにも適用されます)。スコープを記録します。テンプレートまたはエッジルールで出力されたディレクティブはtemplate/site、単一のドキュメントに記述されたものはpageです。 - 重複クラスター:統合する canonical がない URL 間で、タイトル/H1/本文がほぼ同一であるものを確認します。
- ページネーション:ページ分割されたシリーズのシグナルを確認します(各ページで自己参照 canonical を使用します。2ページ目以降を1ページ目に canonical として指定しないでください。下層項目が検索結果から除外されます)。
- サイトの健全性(M3 を含む):リダイレクトチェーン(2ホップ超)とループ、4xx/5xx を返す内部リンク、ソフト 404(空のページまたは「見つかりません」ページでステータス 200)、混在コンテンツ(HTTPS ページ上の HTTP サブリソース)、HTTP から HTTPS への強制リダイレクト、孤立ページ(クロール範囲内に内部インリンクがないページ)、ホームページからのクリック深度を確認します。
- ユーザーエージェントによるコンテンツの差異(クローキング、検索軸):
ua-diff.jsonを使い、オリジンがデフォルトのブラウザー UA とgooglebotに返す内容を比較します。ステータス、タイトル、H1、単語数、canonical、robots ディレクティブ、JSON-LD が対象です。実質的な差異は、検索軸のクローキングシグナル(M2.cloaking.ua_content_divergence)です。同じ差分の AI ボット側(チャレンジされたGPTBot、偽装を拒否されたGooglebot)は M14 に該当します。 - 環境:
profile.json.environment.kindを確認します。preview/staging/localでは、noindexまたは全体を対象とする robots ブロックは想定される設定であり、不具合ではありません。M2.hosting.preview_environment_auditedを記録し、監査したホストがレポートに記載されるようにします。
修正
- AUTO(
fixable: auto):存在しない場合に、自己参照する絶対 HTTPS の<link rel="canonical">を1つ挿入します。決定論的で追加的な変更であり、fixの差分を検証できます。 - PROPOSED(
fixable: proposed):ユーザーが意図しない設定だと確認したnoindexの削除、重複クラスターの統合(どの URL を優先するかは編集上の判断です)、壊れた内部リンクの参照先変更または削除。 - ADVISORY(
fixable: advisory):リダイレクトチェーン/ループ、ステータスコード、HTTP から HTTPS への強制リダイレクト、混在コンテンツのオリジン、UA の差異を生じさせているエッジルール。これらはサーバー/CDN の設定に関わるため、ツールは具体的な変更内容を報告しますが、何も書き込みません。 - どの URL を「優先すべき」か、ページが意図的に noindex にされているか、UA に応じたレスポンスの意図を決めつけないでください。ユーザーに確認するか、TODO であることを明示したプレースホルダーを残してください。
検証
dom_assert:DOM を解析し、canonical/robots の有無と値を確認します。header_check:X-Robots-Tagを読み取り、リダイレクトチェーンを追跡します(各ホップのステータス+Location、ループ検出)。link_graph:<run_dir>/crawl.jsonから内部リンクのステータス、孤立ページ、クリック深度を確認します。ua_diff:node "${CLAUDE_PLUGIN_ROOT}/scripts/ua-diff.mjs" --url <final_url> --ua default,googlebot— 2 つのレスポンスを並べて比較します。- 必要なデータ層を利用できない場合(ライブフェッチなし、孤立ページと深度を確認するクロールグラフなし、UA 差分なし)、ステータスは
needs_apiです。誤ってpassにすることはありません。
検出結果
検出結果は schema/finding.schema.json に準拠し、軸は search です。各検出結果には、ページ/ヘッダーからの引用を含む evidence.observed と、実行可能な verification.reproduce が含まれます。重大度ポリシー:5 は、サイト/テンプレート全体に影響し、対象資格を失わせる壊滅的な事実にのみ使用します。4 は重大、3 は中程度、2 は軽微、1 は表面的、0 は情報提供です。スコアを上限まで引き下げられるのは、アクティブなカテゴリにおける established な重大度 5 の fail のみです(references/scoring-model.md)。
M2.canonical.missing— インデックス可能なページに<link rel="canonical">がありません(warn。重複がある場合はfail。重大度 4、fixable: auto、established)。M2.canonical.noindex_conflict— canonical が別の URL を指している URL にnoindexが設定されています(fail、重大度 4、fixable: proposed、established)。M2.robots.noindex_present— 自己参照の canonical(または canonical なし)とともにnoindexが設定されています。一貫性のある除外として報告し、問題とは見なしません(warn、重大度 3、fixable: proposed、established)。M2.robots.unintended_noindex— URL をインデックス対象にする意図があるとユーザーが確認した後も、同じディレクティブが設定されています(fail。サイト/テンプレート全体では重大度 5、単一ページでは 4。fixable: proposed、established)。M2.redirect.chain— 内部リンクが 200 に到達するまでに複数のホップを経由しています(warn、重大度 4、fixable: advisory、established)。M2.redirect.loop— チェーンが解決せず、URL に到達できません(テンプレートまたはサイト全体のルールが原因の場合は重大度 5、単一 URL の場合は 4 のfail。fixable: advisory、established)。M2.links.broken_internal— 4xx/5xx を返す内部リンク。リンク元ページとアンカーを含みます(warn、重大度 3、fixable: proposed、established)。M2.mixed_content— HTTPS ページ上の HTTP サブリソースです。アクティブな混在コンテンツはブラウザーによってブロックされます(warn、重大度 3、fixable: proposed、established)。M2.https.not_enforced— HTTP URL が HTTPS にリダイレクトされません(fail、重大度 4、fixable: advisory、established)。M2.cloaking.ua_content_divergence— オリジンが、デフォルトのブラウザー UA とは実質的に異なるコンテンツをgooglebotに配信しています(warn、重大度 4、fixable: advisory、信頼度directional)。M2.hosting.preview_environment_audited— 監査対象のホストはプレビュー/ステージング/ローカル環境です(warn、重大度 1、fixable: advisory、established)。
プラットフォーム条件付き ID。 このモジュールは、profile.json でプラットフォーム(shopify、wordpress)が指定されている場合にのみ発生する 6 つの ID も出力します。これらは references/routing.md § プラットフォーム条件付き検出結果 ID に索引があり、references/platforms/<id>.md §10 に仕様が記載されています。
誠実性
- canonical は指示ではなく ヒント です。Google が別の canonical を選ぶ場合があるため、保証ではなく強い統合の兆候として報告してください。
- Self-canonical と
noindexの併用はバグではありません。noindexのページをすべて致命的な矛盾として報告するのはよくある誤検出です。このモジュールでは、canonical が別の場所を指している場合にのみこの組み合わせを致命的と判断し、ユーザーの確認なしにnoindexを解除することはありません。 - クローキングは推定であり、測定結果ではありません。
Googlebotのユーザーエージェント文字列を送信しますが、Googlebot であることが検証されているわけではありません。地域別/A/B ルーティング、パーソナライズ、同意画面、ボット対策ルールなどは、欺く意図がなくても差異を生じさせます。クローキングと判断する前に、逆引き DNS、サーバーログ、または Search Console の URL 検査で確認してください。この指摘はdirectionalです。 - プレビュー/ステージング/ローカルのホストでは、
noindexと robots によるブロックは適切な設定です。--environment preview|staging|localを指定してスコアラーを実行すると、重大度 5 の上限は、検索スコアを F に制限する代わりにsuppressed_caps[]に移されます。架空の緊急事態として報告するのではなく、監査した環境を明記してください。 - Google はページネーションに
rel=next/prevを使用しなくなりました。ランキング対策として追加を推奨せず、各ページに自己参照 canonical を設定してください。 - クリック深度と孤立状態はクロール優先度と相関しますが、文書化されたランキング要因ではありません。
directionalとして指摘し、確立されたスコア上限として扱わないでください。孤立の根拠には、その判定を生み出したクロール範囲を明記してください。