1.

sitemap.xml の書き方完全ガイド(URL / 画像 / 動画 / index / 圧縮)

編集
この記事の要点
  • sitemap.xml は <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ルート
  • 各 URL は <url><loc> 必須、<lastmod> 強推奨、<changefreq>/<priority> は今や無視される
  • 1 ファイル上限: 50,000 URL かつ 50 MB 未満(非圧縮)。超えたら分割 + sitemap-index で束ねる
  • gzip 圧縮 (sitemap.xml.gz) も認識される。大規模サイトは圧縮が基本
  • 画像 / 動画 / ニュース / hreflang は拡張名前空間を追加。Google Search Console で送信

最小の 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」を伝えるものです。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. サイトマップの書き方
  2. サイトマップインデックスの書き方
  3. エラー一覧 (sitemap.xml)

最近更新/作成されたページ