CreaTools LogoCreaTools
Tips

sitemap.xml の作り方ガイド|置けばインデックスされる、は誤解

2026-06-25

結論:sitemap.xml は「クロールしてほしいページの一覧」

sitemap.xml がやることは1つ。検索エンジンに「うちにはこのページがあるよ」と渡すだけ。

<a href> でつながっていれば Google はリンクをたどってページを見つけられる。だが新しいサイト・更新頻度の低いページ・リンクが浅いページは見つけてもらえないことがある。 そこを補うのが sitemap.xml。

逆に言えば、置いただけで順位が上がるものではない。 インデックスの「候補」を伝えるだけで、載せるかどうかは Google が決める。


最小構成はこれだけ

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
  </url>
  <url>
    <loc>https://example.com/about</loc>
  </url>
  <url>
    <loc>https://example.com/blog/first-post</loc>
  </url>
</urlset>

<loc> にURLを並べるだけ。必須なのは <loc> だけ。 残りのタグは任意。

タグ意味必要か
<loc>ページのURL(絶対URL)必須
<lastmod>最終更新日任意(推奨)
<changefreq>更新頻度の目安任意(ほぼ無視される)
<priority>優先度の目安任意(ほぼ無視される)

lastmod 以外はほぼ気にしなくていい

<changefreq><priority> は、昔は意味があった。今の Google はほぼ参考にしていない。 priority: 1.0 を全ページに振っても順位は1ミリも動かない。

唯一効くのが <lastmod>正直に書けばクロールの効率化に使われる。

<url>
  <loc>https://example.com/blog/first-post</loc>
  <lastmod>2026-06-25</lastmod>
</url>

逆に、中身を変えていないのに <lastmod> を毎日「今日」にすると、Google は信用しなくなる。lastmod は嘘をつくと無視される。 更新していないなら更新日のまま据え置く。


載せるURL、載せないURL

sitemap.xml には「インデックスしてほしい正規URLだけ」を載せる。ここがブレると効果が薄れる。

載せる載せない
200を返す公開ページnoindex のページ
正規(canonical)URLリダイレクトされるURL
https:// 統一404 / 410 のページ
末尾スラッシュを統一パラメータ違いの重複URL

noindex のページを sitemap に載せるのは矛盾。 「インデックスするな」と「インデックスしてほしい」を同時に渡すことになり、Search Console で警告が出る。

canonical の指定がある場合は、sitemap に載せるのも canonical 側のURLにそろえる。これがズレると Google が混乱する。canonical タグの確認は Meta Checker でまとめてチェックできる。


作り方は3通り

1. CMS / フレームワークの自動生成(推奨)

ほとんどの環境は自動生成できる。手書きより事故が少ない。

  • WordPress … Yoast SEO / All in One SEO などのプラグインが自動生成。/sitemap.xml/sitemap_index.xml で配信される
  • Next.js(App Router)app/sitemap.ts を置くと /sitemap.xml を自動生成
// app/sitemap.ts
import type { MetadataRoute } from "next";

export default function sitemap(): MetadataRoute.Sitemap {
  return [
    { url: "https://example.com/", lastModified: new Date() },
    { url: "https://example.com/about", lastModified: new Date() },
  ];
}

ページを追加するたびに手で書き換えるのは続かない。 動的に生成する仕組みに寄せるのが正解。

2. オンラインの生成ツール

小規模・静的サイトなら、URLをクロールして sitemap.xml を吐くツールを使う手もある。ただしページ数が増えると有料 or 上限にぶつかる。

3. 手書き

数ページの静的サイトなら手書きでも十分。ただしページを増やすたびに更新を忘れるのが落ち穴。


1ファイルに収まらないとき:sitemap index

sitemap.xml には上限がある。

  • 1ファイルあたり 50,000 URL
  • 1ファイルあたり 50MB(非圧縮)

これを超えるなら、複数の sitemap を束ねる「サイトマップインデックス」を使う。

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-posts.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-pages.xml</loc>
  </sitemap>
</sitemapindex>

WordPress の sitemap_index.xml はこの仕組み。投稿・固定ページ・カテゴリで sitemap を分けて束ねている。


送信方法:2つやれば終わり

作っただけでは Google は気づかないことがある。確実に知らせる方法は2つ。

1. robots.txt に書く

Sitemap: https://example.com/sitemap.xml

robots.txt の末尾に1行足すだけ。クローラーが robots.txt を読むついでに見つける。robots.txt 側の注意点は robots.txt を1行間違えたらサイトが検索結果から消えた にまとめてある。

2. Google Search Console で送信

Search Console の「サイトマップ」から sitemap のURLを送信する。ステータスが「成功」になるか、検出されたURL数が想定どおりかを必ず確認する。

ステータス意味
成功読み込めた。検出URL数を確認
取得できませんでしたURLが404 / robots.txtでブロック / 構文エラー
エラーありXMLの一部が不正

「送信して終わり」ではない。検出URL数が0や極端に少なければどこかが間違っている。


よくある事故

事故1:相対URLで書いた

<!-- 間違い -->
<loc>/about</loc>

<!-- 正しい -->
<loc>https://example.com/about</loc>

<loc>絶対URL必須。相対パスは無効。

事故2:sitemap 自身を robots.txt でブロックした

Disallow: /sitemap.xml を書いてしまうと、Google が sitemap を読めない。sitemap だけは必ずクロール許可にする。

事故3:noindex やリダイレクト先を載せた

「Search Console でエラーは出ないのにインデックスされない」の典型。sitemap に載せたURLが noindex だったり、別URLにリダイレクトされている。sitemap には最終的な正規URLだけを載せる。

事故4:置けばインデックスされると思っている

sitemap.xml は発見を助けるだけ。中身の薄いページを大量に載せても、Google は載せたいページだけを選ぶ。インデックスされない原因が「発見」ではなく「品質」なら、sitemap をいじっても解決しない。


まとめ

  • sitemap.xml は「クロールしてほしい正規URLの一覧」。順位を上げる魔法ではない
  • 必須タグは <loc> だけ。効くのは <lastmod>changefreq / priority はほぼ無視
  • noindex・リダイレクト・パラメータ違いの重複URLは載せない
  • 50,000 URL / 50MB を超えたら sitemap index で分割
  • robots.txt に1行書く+Search Console で送信。送信後は検出URL数を確認するまでがセット