seo-sitemaps について
seo-sitemaps は、クロール結果とページのインデックス可否を基に、サイトマップと robots データを調べる SEO 監査スキルです。XML と robots.txt の修正案を作成し、canonical の判断はレビューに委ねます。
主な機能
- 01サイトマップの検出と XML 検証
- 02URL 数とファイルサイズの確認
- 03robots のサイトマップ参照確認
- 04canonical とインデックス状態の整合性確認
- 05孤立 URL の照合
活用シーン
- 01リダイレクトやエラーを返すサイトマップ URL の発見
- 02インデックス可能ページのサイトマップ収録確認
- 03孤立 URL やリンクから到達できない URL の特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill seo-sitemapsインストール後、Claude Code で/seo-sitemapsを入力して読み込まれたか確認します。
詳細
seo-sitemaps (M17)
サイトマップは、クローラーに渡す検出のための契約です。正規 URL かつインデックス可能な URL だけを正確に列挙する必要があります。関連するマークアップのスキーマルールについては、references/schema-tier1.md を参照してください。
入力
ディスパッチエンベロープで指定された PageSnapshot を使用します。<run_dir>/pages/<slug>.json から parsed を読み込み、孤立ページの照合と URL ごとのステータス確認のために <run_dir>/site/sitemaps.json(および site/sitemap-urls.txt)、<run_dir>/site/robots.json、<run_dir>/crawl.json を読み込みます。逐語的な証拠を確認するには、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/sitemaps.json、site/robots.json を使用して、次を確認します。
- 有無と妥当性:XML サイトマップ(
/sitemap.xml、robots のSitemap:行、サイトマップインデックス)を探し、整形式 XML として sitemaps.org のスキーマに照らして解析します。 - サイズ上限:各サイトマップは URL 数が
<=50,000、非圧縮サイズが<=50MBである必要があります。上限を超える場合は、セットを分割するサイトマップインデックスが必要です。 - 拡張要素:該当する場合は、
image:、video:、news:の名前空間エントリーを検証します(正しい名前空間が宣言されていること、必須の子要素があること)。 - lastmod の正確性:
<lastmod>が有効な ISO 8601 形式で、実際の最終更新時刻を反映していることを確認します。すべての URL にビルド時のタイムスタンプを設定してはいけません(クローラーが値を無視するようになるためです)。 - robots での参照:
robots.txtに絶対 URL のSitemap:行が少なくとも 1 つあることを確認します。 - サイトマップと canonical の整合性:サイトマップ内に
noindex、リダイレクト、4xx/5xx、または非正規の URL が含まれていないことを確認します(自己参照の canonical のみ)。M-indexability と照合してインデックス可能性を確認します。 - 孤立ページの照合:サイトマップの URL と内部リンクグラフを比較し、サイトマップにないインデックス可能なページと、内部リンクから到達できないサイトマップ URL にフラグを付けます。
修正
- AUTO:XML サイトマップのエントリーを生成または修正します(正しい
<loc>、観測された最終更新データに基づく正確な<lastmod>、メディアがある場合は有効なimage:/video:拡張子要素)。また、robots.txtに絶対 URL のSitemap:行を追加します。これらはfixに適用される、追加のみの決定的な差分です。 - PROPOSED:エントリーの削除や分割(例:非正規/noindex URL の削除、サイトマップインデックスへの分割)。項目ごとに下書きを作成し、承認を得ます。
- ADVISORY:サイト全体の lastmod 方針や canonical の決定を変更します。説明のみ行い、ツールによる書き込みは行いません。
- lastmod の時刻、メディア URL、canonical のターゲットを決して捏造しないでください。観測データから取得するか、ユーザーに確認するか、スキーマの
fixable契約に従ってTODOのプレースホルダーであることを明示してください。
検証
- 実行結果から(ネットワーク接続なしで):
<run_dir>/site/sitemaps.jsonと<run_dir>/site/robots.jsonを読み込みます。クロールですでにインデックスをたどり、gzip 圧縮された子サイトマップを取得し、ファイルごとのエラーを記録しています。 - 再取得:
node "${CLAUDE_PLUGIN_ROOT}/scripts/parse-robots-sitemap.mjs" --url <final_url> [--max-sitemaps 50] [--max-urls 100000] [--no-well-known]を実行します。xml_parseメソッドでは、robots.txt と、宣言および探索されたすべてのサイトマップを解析し、整形式、サイズ上限、名前空間/拡張要素の妥当性、canonical/noindex の整合性に関するアサーションを確認します。--sitemap <sitemap url>で 1 つのファイルを対象にでき、--file <robots.txt> [--path /x]でオフラインの robots ファイルを解析できます。このスクリプトには--snapshotモードがありません。サイトマップはページのスナップショットではなく、サイトレベルの成果物です。 - 必要なデータ階層(サイトマップ/robots のライブ取得、または解決済みのリンクグラフ)が利用できない場合、ステータスは
needs_apiになります。誤ってpassと判定してはいけません。
検出結果
検出結果は schema/finding.schema.json に従って出力します。例:
M17.sitemap.missing—/sitemap.xmlにも robots.txt にも XML サイトマップが見つかりません(statusfail、severity 3、fixable: auto、axissearch、confidenceestablished)。M17.robots.no_sitemap_line— サイトマップは存在しますが、robots.txt にSitemap:行がありません(statuswarn、severity 3、fixable: auto、axissearch、confidenceestablished)。M17.sitemap.noindex_url— サイトマップ内の<loc>がnoindexまたは非正規 URL を指しています(statusfail、severity 3、fixable: proposed、axissearch、confidenceestablished)。M17.sitemap.error_url— クロールで取得した<loc>が 4xx/5xx を返しました(statusfail、severity 3、fixable: proposed、axissearch、confidenceestablished)。M17.sitemap.redirected_url—<loc>が最終 URL を返さず、リダイレクトしています(statuswarn、severity 3、fixable: proposed、axissearch、confidenceestablished)。M17.sitemap.missing_indexable_url— クロールで見つかったインデックス可能な URL が、どのサイトマップにも記載されていません(statuswarn、severity 3、fixable: proposed、axissearch、confidencedirectional— サイトマップがなくても、十分にリンクされたページは発見されます)。M17.sitemap.lastmod_identical— すべての<loc>に同じ<lastmod>が付いているため、変更されたページと変更されていないページをファイルで区別できません(statuswarn、severity 2、fixable: advisory、axissearch、confidencedirectional)。 URL ごとの判定は、クロールで実際に取得した<loc>エントリに対してのみ出力されます。一度も訪問されていない URL は、推測せず報告対象外とします。実行時にサイトマップの検出が行われなかった場合(--artifacts none/--no-sitemaps)、M17.sitemap.missingはneeds_apiとしても出力されます。これは「サイトマップが存在しない」とは別の事実です。 プラットフォーム条件付き ID。 このモジュールは、profile.jsonでプラットフォーム(shopify、wordpress、nextjs、nuxt、astro、gatsby、hugo)が指定されている場合にのみ発生する ID も 8 件出力します。これらはreferences/routing.mdの § Platform-conditional finding ids に索引があり、references/platforms/<id>.mdの §10 に仕様が記載されています。
各検出結果では、evidence.observed にページまたはサイトマップの内容をそのまま引用し、verification.reproduce に上記の実行可能なコマンドを記載します。expected_impact は段階と信頼度のタグを付けて示し、単独のパーセンテージは使用しません。
正確性
- サイトマップは発見を助けるものであり、ランキングシグナルでもインデックス登録の保証でもありません。Google は
<lastmod>、<priority>、<changefreq>をヒントとして扱い、<priority>/<changefreq>はほとんど無視されます。そのため、これらを調整すればランキングが上がるとは約束しないでください(そのような施策には、影響度が小さい/方向性を示すものとしてラベルを付けてください)。 - サイトマップを送信しても、品質の低いページや非正規ページがインデックス登録されるとは限りません。孤立ページや canonical の適切な管理は、サイトマップのサイズより重要です。