XMLサイトマップを分割するときはSitemap indexへ各ファイルのURLをまとめる
公開日: 執筆:佐藤
一つのXMLサイトマップが5万URLまたは非圧縮で10MBを超える場合は、複数のサイトマップへ分割します。検索エンジンへ一つずつ知らせるのではなく、各ファイルのURLをSitemap indexへまとめます。
分割の目的は、上限を避けることだけではありません。投稿、商品、画像など、更新する単位に合わせてファイルを分ければ、生成に失敗した範囲と更新した範囲を確認しやすくなります。ただし、少数のURLごとに細かく分ければ、管理するファイルだけが増えます。
一つのファイルへ入れられるURL数と容量を先に確認する
GoogleのSitemapに関する説明は、一つのファイルを最大5万URL、非圧縮で10MBまでとしています。どちらか一方へ達する前に、新しいファイルへ分けます。
gzipで圧縮して送る場合も、容量は非圧縮の状態で判断します。圧縮後に10MB未満でも、展開後のXMLが上限を超える構成にはしません。URL数だけでなく、URLの長さ、画像や動画用の追加情報、lastmodなどを含むXML全体の大きさを確認します。
たとえば、投稿と商品を一つのサイトマップへ入れているなら、次のように分けられます。
https://www.example.com/sitemap-posts.xml
https://www.example.com/sitemap-products.xml
https://www.example.com/sitemap-images.xml
これは説明用のURLです。実際の分け方は、URL数だけでなく、どのデータから生成するか、誰が更新を確認するか、障害時にどの範囲を切り分けたいかで決めます。
Sitemap indexにはサイトマップのURLを書く
Sitemap indexは、ページURLの一覧ではありません。分割したサイトマップのURLを、sitemap要素ごとに一つずつ書くファイルです。
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.example.com/sitemap-posts.xml</loc>
<lastmod>2014-03-28</lastmod>
</sitemap>
<sitemap>
<loc>https://www.example.com/sitemap-products.xml</loc>
<lastmod>2014-03-27</lastmod>
</sitemap>
</sitemapindex>
sitemapindexがファイル全体を囲み、sitemapが一つのサイトマップを表します。locは必須で、サイトマップの完全なURLを入れます。lastmodは任意です。
lastmodへ書くのは、リンク先のサイトマップファイルを最後に変更した日時です。そのサイトマップに含まれる各ページの最終更新日ではありません。商品ページを更新して商品用サイトマップを生成し直したなら、商品用サイトマップのlastmodを更新します。無関係な投稿用サイトマップの日付まで毎回変えません。
更新の単位に合わせて分割する
5万URLへ達していないサイトでも、管理上の理由で分割できます。Sitemap indexの公式案内は、保存用URLと頻繁に変わるURLを別のサイトマップへ分ける例を示しています。
中小規模のサイトなら、まず投稿、固定ページ、商品など、生成元が異なる単位を候補にします。次の三つが同じなら、分割する理由は弱くなります。
- 同じ仕組みから同じ時刻に生成する
- 同じ担当者が更新とエラーを確認する
- 同じ頻度でURLが増減する
反対に、商品情報だけを毎日更新し、会社案内はほとんど変わらないなら、別ファイルにする意味があります。商品用サイトマップだけを生成し直し、そのlastmodだけを更新できるためです。
画像や動画の情報は、通常のページURLへ追加できます。ファイル数を増やすこと自体を目的にせず、生成処理と確認責任を分けられる範囲にします。
同じサイトのURLとして取得できるかを確認する
Sitemap indexへ書く各locは、検索エンジンがHTTPで取得できる完全なURLにします。ブラウザで開けることだけでなく、HTTP status、XML構文、文字コード、圧縮ファイルの展開を確認します。
Sitemap indexと子のサイトマップは、管理権限を説明できる同じサイトへ置きます。別のsubdomainや外部の保管先を混ぜる場合は、同じものとして扱えると推測せず、サイトマップの配置規則と所有確認を先に調べます。
生成処理では、次の対応を記録します。
| ファイル | 含めるURL | 生成元 | 更新の契機 | 確認担当 |
|---|---|---|---|---|
| 投稿用 | 公開中の投稿 | 投稿データ | 投稿の公開、更新、削除 | サイト運用担当 |
| 商品用 | 公開中の商品 | 商品データ | 商品の公開、更新、削除 | 商品管理担当 |
| index | 各サイトマップのURL | 上記のファイル一覧 | 子ファイルの追加、削除、更新 | サイト管理者 |
表内の役割は仮例です。制作会社へ生成機能を依頼しても、どのURLを含めるか、削除したURLが残っていないか、エラーを誰が直すかは、サイト側で確認できる状態にします。
Sitemap indexを一つ送信して子ファイルを確認する
分割したサイトマップをSitemap indexへ記載したら、GoogleウェブマスターツールにはindexのURLを送信します。indexに含めた子ファイルを、同じ内容のまま個別にも重ねて送る必要はありません。
送信後は、indexを受け付けたかだけで終えず、子ファイルごとの取得結果とエラーを確認します。indexが正しくても、一つの子ファイルが404を返す、XMLが途中で切れる、古いURLを残す、といった問題は起こります。
最初の一手は、運用中のサイトマップについて、URL件数と非圧縮時のbyte数を記録することです。上限へ近い場合や生成元が複数ある場合は、分割表を先に作り、その表からSitemap indexを生成します。
関連記事

