タイトル: サイトマップの書き方
SEOタイトル: sitemap.xml の書き方完全ガイド(URL / 画像 / 動画 / index / 圧縮)
| この記事の要点 |
|
最小の sitemap.xml
https://example.com/
2026-06-11
https://example.com/about
2026-05-30
各タグの意味
| タグ | 必須 | 役割 |
|---|---|---|
| ○ | ルート要素。名前空間 0.9 を指定 |
| ○ | URL ごとに 1 個 |
| ○ | 絶対 URL。URL エンコード必須。2048 文字以内 |
| 強推奨 | 最終更新日 (W3C Datetime / YYYY-MM-DD) |
| 任意 | 更新頻度 (Google は無視) |
| 任意 | 重要度 (Google は無視) |
changefreq / priority は無視されると Google 公式が明言(2017〜)。書いてもエラーにはならないが効果は無い。正確な lastmod が最重要。
1 ファイルの上限と分割
サイトマップ仕様には1 ファイルにつき以下の上限があります:
- URL 件数: 最大 50,000 個
- ファイルサイズ: 非圧縮で 50 MB 未満
超える場合は分割し、sitemap index ファイルで束ねます:
https://example.com/sitemap-articles-1.xml.gz
2026-06-11
https://example.com/sitemap-articles-2.xml.gz
2026-06-11
https://example.com/sitemap-products.xml.gz
2026-06-10
index ファイル自体も上限あり: 最大 50,000 sitemap、50 MB 未満。理論上は 5 万 × 5 万 = 25 億 URL まで管理可能。
gzip 圧縮
大規模サイトでは .xml.gz 形式が一般的:
# 作成
gzip -k sitemap.xml
# sitemap.xml と sitemap.xml.gz が並ぶ
# 拡張子なしで保存して中身を圧縮しても OK だが、検索エンジンには .gz の方が伝わる
# Apache で gzip を Content-Encoding 付きで返す例
# .htaccess
AddType application/xml .xml
AddEncoding gzip .gz
拡張 1: 画像サイトマップ
https://example.com/products/foo
https://example.com/img/foo-1.jpg
Foo 商品画像 1
https://example.com/img/foo-2.jpg
1 つの 内に最大 1000 枚の画像情報を入れられます。
拡張 2: 動画サイトマップ
https://example.com/videos/intro
https://example.com/thumb.jpg
製品紹介ビデオ
製品の使い方を 3 分で解説
https://example.com/video.mp4
180
拡張 3: ニュースサイトマップ(Google ニュース)
https://news.example.com/2026/06/11/article
Example News
ja
2026-06-11T10:00:00+09:00
新製品発表
ニュースサイトマップは過去 48 時間以内の記事のみ対象。
拡張 4: hreflang(多言語サイト)
https://example.com/ja/
https://example.com/en/
設置とサーチエンジンへの通知
設置
- ドメインルートに置く:
https://example.com/sitemap.xml - サブディレクトリでも OK だが、その配下の URL しか含められない
- HTTPS で配信(HTTP は今や非推奨)
robots.txt で宣言
# /robots.txt
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xml
Sitemap: https://example.com/sitemap-news.xml
Google Search Console に送信
- Search Console → サイトマップ → 「新しいサイトマップの追加」
sitemap.xmlのパスを入力 → 送信- 「成功しました」と出れば認識完了。検出件数は数日かかる
Bing Webmaster Tools に送信
Bing の Webmaster Tools 管理画面から同様に送信。bing.com/ping?sitemap=URL は廃止済み。
動的生成例: PHP / Laravel
// Laravel: routes/web.php
Route::get('/sitemap.xml', function () {
$articles = Article::where('published', true)->get();
return response()
->view('sitemap', compact('articles'))
->header('Content-Type', 'application/xml');
});
// resources/views/sitemap.blade.php
' . "\n"; ?>
@foreach ($articles as $a)
{{ url('/articles/' . $a->slug) }}
{{ $a->updated_at->toDateString() }}
@endforeach
よくあるトラブル
| 症状 | 原因 | 対処 |
|---|---|---|
| 「読み取れません」エラー | XML 構文エラー / BOM / 文字化け | UTF-8 (BOM 無し) で出力、XML バリデータで確認 |
| 「URL を取得できません」 | 掲載 URL が 404 / robots.txt でブロック | 該当 URL の HTTP 状態を確認 |
| 登録 URL が反映されない | noindex / canonical で別 URL を指している | noindex 削除、canonical を見直し |
| 圧縮が認識されない | Content-Type / 拡張子ミス | .xml.gz + application/x-gzip |
| 50,000 件を超えた | 分割していない | sitemap-index に切替 |
FAQ
Q: lastmod を毎回 NOW にしてはダメ?
A: ダメ。実際の更新が無いのに新しい日付を返すと、検索エンジンに信用されなくなり再クロール頻度が下がります。本当に更新したときだけ更新を。
Q: 動的生成と静的ファイルどちらが良い?
A: 小規模なら動的でも OK。大規模なら cron で静的ファイルを夜間生成 → CDN 配信が定石。
Q: noindex のページも入れるべき?
A: 入れないでください。サイトマップは「インデックスしてほしい URL」を伝えるものです。