sitemap.xml の作り方ガイド|置けばインデックスされる、は誤解
結論: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数を確認するまでがセット