| この記事の要点 |
|
最小の sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-06-11</lastmod>
</url>
<url>
<loc>https://example.com/about</loc>
<lastmod>2026-05-30</lastmod>
</url>
</urlset>
各タグの意味
| タグ | 必須 | 役割 |
|---|---|---|
<urlset> | ○ | ルート要素。名前空間 0.9 を指定 |
<url> | ○ | URL ごとに 1 個 |
<loc> | ○ | 絶対 URL。URL エンコード必須。2048 文字以内 |
<lastmod> | 強推奨 | 最終更新日 (W3C Datetime / YYYY-MM-DD) |
<changefreq> | 任意 | 更新頻度 (Google は無視) |
<priority> | 任意 | 重要度 (Google は無視) |
changefreq / priority は無視されると Google 公式が明言(2017〜)。書いてもエラーにはならないが効果は無い。正確な lastmod が最重要。
1 ファイルの上限と分割
サイトマップ仕様には1 ファイルにつき以下の上限があります:
- URL 件数: 最大 50,000 個
- ファイルサイズ: 非圧縮で 50 MB 未満
超える場合は分割し、sitemap index ファイルで束ねます:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap-articles-1.xml.gz</loc>
<lastmod>2026-06-11</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-articles-2.xml.gz</loc>
<lastmod>2026-06-11</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-products.xml.gz</loc>
<lastmod>2026-06-10</lastmod>
</sitemap>
</sitemapindex>
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: 画像サイトマップ
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/products/foo</loc>
<image:image>
<image:loc>https://example.com/img/foo-1.jpg</image:loc>
<image:title>Foo 商品画像 1</image:title>
</image:image>
<image:image>
<image:loc>https://example.com/img/foo-2.jpg</image:loc>
</image:image>
</url>
</urlset>
1 つの <url> 内に最大 1000 枚の画像情報を入れられます。
拡張 2: 動画サイトマップ
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://example.com/videos/intro</loc>
<video:video>
<video:thumbnail_loc>https://example.com/thumb.jpg</video:thumbnail_loc>
<video:title>製品紹介ビデオ</video:title>
<video:description>製品の使い方を 3 分で解説</video:description>
<video:content_loc>https://example.com/video.mp4</video:content_loc>
<video:duration>180</video:duration>
</video:video>
</url>
</urlset>
拡張 3: ニュースサイトマップ(Google ニュース)
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
<url>
<loc>https://news.example.com/2026/06/11/article</loc>
<news:news>
<news:publication>
<news:name>Example News</news:name>
<news:language>ja</news:language>
</news:publication>
<news:publication_date>2026-06-11T10:00:00+09:00</news:publication_date>
<news:title>新製品発表</news:title>
</news:news>
</url>
</urlset>
ニュースサイトマップは過去 48 時間以内の記事のみ対象。
拡張 4: hreflang(多言語サイト)
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/ja/</loc>
<xhtml:link rel="alternate" hreflang="ja" href="https://example.com/ja/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/"/>
</url>
<url>
<loc>https://example.com/en/</loc>
<xhtml:link rel="alternate" hreflang="ja" href="https://example.com/ja/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/>
</url>
</urlset>
設置とサーチエンジンへの通知
設置
- ドメインルートに置く:
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
<?php echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n"; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach ($articles as $a)
<url>
<loc>{{ url('/articles/' . $a->slug) }}</loc>
<lastmod>{{ $a->updated_at->toDateString() }}</lastmod>
</url>
@endforeach
</urlset>
よくあるトラブル
| 症状 | 原因 | 対処 |
|---|---|---|
| 「読み取れません」エラー | 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」を伝えるものです。
子ページ
子ページはありません
同階層のページ
- サイトマップの書き方
- サイトマップインデックスの書き方
- エラー一覧 (sitemap.xml)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38