タイトル: サイトマップインデックスの書き方
SEOタイトル: XML サイトマップインデックス (sitemap_index.xml) の書き方完全ガイド
| この記事の要点 |
|
サイトマップインデックスとは
1 個のサイトマップ XML には最大 50,000 URL / 50 MB (非圧縮) の制限があります。大規模サイトでは複数のサイトマップに分割し、それらを束ねるサイトマップインデックスファイルを作ります。Google / Bing 等は、まずインデックスを読み込み、その中で参照されている個別サイトマップを順に取得します。
最小構成
https://example.com/sitemap-pages.xml
2026-06-10T09:00:00+09:00
https://example.com/sitemap-articles.xml
2026-06-10T09:00:00+09:00
https://example.com/sitemap-products.xml.gz
2026-06-10T09:00:00+09:00
要素一覧
| 要素 | 必須 | 説明 |
|---|---|---|
| 必須 | XML 宣言 |
| 必須 | ルート要素 (urlset と間違えやすい) |
xmlns | 必須 | http://www.sitemaps.org/schemas/sitemap/0.9 固定 |
| 必須 | 個別サイトマップへの参照 (1 個以上) |
| 必須 | サイトマップ URL (絶対 URL、自サイトドメイン) |
| 推奨 | サイトマップ自体の最終更新日 (W3C 日時形式) |
個別サイトマップ (sitemap-articles.xml) の中身
https://example.com/articles/1
2026-06-10
weekly
0.8
https://example.com/articles/2
2026-06-09
注意: インデックスは / 、個別サイトマップは / です。タグを混同するとエラーになります。
分割の判断基準
| 状況 | 分割すべきか | 分割例 |
|---|---|---|
| URL 数 < 50,000 | 不要 | 単一 sitemap.xml で OK |
| URL 数 > 50,000 | 必須 | カテゴリ別に分割 |
| 非圧縮で > 50 MB | 必須 | サイズで分割 or gzip 圧縮 |
| 更新頻度が異なるセクションあり | 推奨 | 静的ページ / ブログ / 商品 で分ける |
| 多言語サイト | 推奨 | 言語別 (sitemap-ja.xml / sitemap-en.xml) |
| 動画 / 画像が大量 | 推奨 | 画像専用 sitemap-images.xml |
命名規則と配置
推奨ファイル構成:
https://example.com/
├── sitemap_index.xml ← サイトマップインデックス (ルート直下)
├── sitemap-pages.xml ← 静的ページ
├── sitemap-articles-1.xml ← 記事 (1〜50,000 件目)
├── sitemap-articles-2.xml ← 記事 (50,001〜100,000 件目)
├── sitemap-products.xml ← 商品
├── sitemap-images.xml ← 画像
└── robots.txt
ファイル名は自由だが、わかりやすい命名にする。
配置場所: 通常ルート (/) または /sitemap/ ディレクトリ。
重要: サイトマップは ★参照する URL と同じドメイン (またはサブドメイン) に置く★。
gzip 圧縮
サイトマップは XML なので gzip で圧縮すると 5〜10 倍小さくなります。配信時間短縮 & クローラ転送量削減のために推奨:
# 圧縮
gzip -k sitemap-articles.xml
# → sitemap-articles.xml (元) と sitemap-articles.xml.gz (圧縮版) が出来る
# サイトマップインデックス側では .gz を参照
# https://example.com/sitemap-articles.xml.gz
# Apache / Nginx の Content-Encoding ヘッダ自動付与は不要
# (拡張子で判定するクローラが多い)
robots.txt との連携
# robots.txt (ドメインルート直下に配置)
User-agent: *
Allow: /
# サイトマップインデックスを宣言
Sitemap: https://example.com/sitemap_index.xml
# 複数の Sitemap 行を並べることも可能 (任意)
Sitemap: https://example.com/sitemap-news.xml
Google Search Console に登録
- Google Search Console でプロパティを選択
- 左メニュー サイトマップ
- 「新しいサイトマップの追加」に
sitemap_index.xmlを入力 - 送信 ボタン
- 数時間〜数日でクロール開始、ステータス「成功」を確認
Bing Webmaster Tools に登録
- Bing Webmaster Tools でサイト登録
- 左メニュー サイトマップ
- サイトマップ送信 → URL 入力
Google から自動でデータ取り込み可能 (連携機能)。
Laravel での生成例
url('/sitemap-pages.xml'), 'lastmod' => Page::max('updated_at')],
['loc' => url('/sitemap-articles.xml'), 'lastmod' => Article::max('updated_at')],
['loc' => url('/sitemap-products.xml'), 'lastmod' => Product::max('updated_at')],
];
return response()
->view('sitemaps.index', compact('sitemaps'))
->header('Content-Type', 'application/xml');
});
// resources/views/sitemaps/index.blade.php
?>
= '' ?>
@foreach ($sitemaps as $s)
{{ $s['loc'] }}
{{ \Carbon\Carbon::parse($s['lastmod'])->toAtomString() }}
@endforeach
WordPress プラグイン例
- Yoast SEO:
/sitemap_index.xmlを自動生成 - Rank Math: 同様、より細かい設定
- Google XML Sitemaps: 軽量、サイトマップ専用
- All in One SEO: SEO 統合プラグイン内蔵
検証ツール
# xmllint で構文チェック
xmllint --noout sitemap_index.xml
# エラーが無ければ何も出ない
# スキーマ検証 (sitemap-validator など)
curl -O https://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd
xmllint --schema siteindex.xsd sitemap_index.xml --noout
# オンラインバリデータ
# - https://www.xml-sitemaps.com/validate-xml-sitemap.html
# - https://www.websiteplanet.com/webtools/sitemap-validator/
よくあるミス
| ミス | 影響 | 対処 |
|---|---|---|
をインデックスとして使用 | 個別サイトマップとして解釈される | に修正 |
異なるドメインを に書く | 無視される (クロスドメインは原則 NG) | 自ドメイン or サブドメインのみ |
| BOM 付きで保存 | Incorrect namespace エラー | BOM なし UTF-8 で保存 |
| 絶対 URL でない (相対 /xxx) | 無視 | 必ず https://example.com/xxx |
lastmod の形式不正 | 無視 or 警告 | W3C 日時形式 (2026-06-10 または 2026-06-10T09:00:00+09:00) |
FAQ
Q: 1 個のインデックスに何個までサイトマップを入れられる?
A: 50,000 サイトマップまで。実用上はそんなに増えません。
Q: インデックスのインデックス (入れ子) はできる?
A: 仕様上は禁止。サイトマップインデックスから で参照できるのは個別 sitemap (urlset) だけです。
Q: ping 通知は必要?
A: 2023 年に Google は ping エンドポイントを廃止。今は Search Console での送信または robots.txt 経由のクロールに任せます。