XMLサイトマップの作成・検証・送信

最終的な正規URLでサイトマップを作成し、エントリを検証して、内部リンクやrobots.txtと併用する方法を解説します。

XMLサイトマップは、検索エンジンに登録してほしいページを伝える、機械可読のURL一覧です。クロール可能な内部リンクを補うもので、インデックス登録を保証するものではありません。載せるのは、サイトのインデックス方針に合った最終的な正規URLだけです。

sitemaps.orgのプロトコルは2005年に登場しました。最初に採用したのはGoogleで、1年後にYandexが続きました。現在は主要な検索エンジンすべてがこの標準に対応しています。

Googlebotのサイトマップの使い方。URL一覧を直接受け取るので、内部リンクをたどり歩かなくてもページをクロールできます。

XMLサイトマップとは何か、なぜ必要か

検索ボットがページを見つける方法は2つあります。内部リンクをたどる方法と、サイトマップを読む方法です。リンクをたどるクロールは、被リンクの多いページには有効です。一方、リンクのないページや公開直後のコンテンツ、内部リンクの少ないセクションは、見落とされたり発見が遅れたりします。サイトマップが役立つのは、まさにこの場面です。

クロールを速める

ボットがURL一覧を直接受け取るため、内部リンクをページ単位でたどる必要がありません。

更新を知らせる

lastmod属性で、ページが変更されて再クロールが必要なことを検索エンジンに伝えます。

多言語サイトに対応

xhtml:linkを使えば、HTMLのタグを重複させずに、サイトマップ内でhreflangの関係を宣言できます。

サイトマップが特に効果的なのは、次のようなサイトです。被リンクのない新規サイト、大規模サイト(数千ページ)、リッチメディア(画像・動画)を含むページがあるサイト、hreflangを使う多言語サイト。

ファイルの基本構造

有効な最小のサイトマップは、エンコーディング宣言、ルート要素のurlset、その中のurl要素からなるXMLファイルです。各urlには、必須の属性であるlocが最低1つ必要です。

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-05-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://example.com/about</loc>
    <lastmod>2026-04-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://example.com/blog/article-slug</loc>
    <lastmod>2026-05-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.75</priority>
  </url>
</urlset>

ファイルはUTF-8でエンコードします。URL内の特殊文字はXMLエスケープが必要です。&は&amp;に、<は&lt;にします。1つのサイトマップファイルには、50,000 URL、非圧縮で50MBまでという上限があります。

属性:loc、lastmod、changefreq、priority

属性必須形式説明
locはい絶対URLプロトコルとドメインを含む完全なページアドレス。最大2048文字。
lastmodいいえW3C Datetime(YYYY-MM-DD)最終更新日。Googleは、値が安定していて正確な場合にだけ信頼します。
changefreqいいえalways / hourly / daily / weekly / monthly / yearly / never更新頻度のヒント。Googleはシグナルの1つとして使いますが、厳密には従いません。
priorityいいえ0.0〜1.0サイト内でのURLの相対的な重要度。検索結果の順位には影響しません。

loc:唯一の必須属性

URLは絶対URLで、サーバーが実際に返すアドレスと一致させます。ページがHTTPSで配信されているなら、locもHTTPSにします。サイトがwwwを使うなら、locにもwwwを含めます。locと実際のアドレスが食い違うと、Googleはそのエントリを無視します。

lastmod:任意属性で最も価値が高い

日付には、テンプレートの更新やサイトマップの再生成ではなく、コンテンツの実際の変更を反映します。コンテンツを変えないままデプロイのたびにlastmodを更新すると、Googleはこのフィールドを信頼しなくなり、無視します。使える形式は、2026-05-15、2026-05-15T10:30:00+03:00、2026-05-15T07:30:00Zです。

ビルドのたびに当日の日付を自動で入れないでください。日付を変えるのは、ページの主要コンテンツが実際に変わったときだけです。

changefreq:指示ではなくヒント

changefreqはクロールの頻度を制御しません。あくまでヒントです。Googleは、多数あるシグナルの1つとして使うと明言しています。Yandexもこのフィールドを参考情報として扱います。実用的な既定値は、ホームページがdaily、ブログ記事がmonthly、法務ページがyearlyです。

priority:サイト内での相対的な重要度

0.0から1.0のpriorityは、どのページをより重要と考えるかを検索エンジンに伝えます。比較対象は他サイトではなく、自サイト内です。全ページに1.0を付けても意味がありません。検索エンジンからは、優先度を付けていないのと同じに見えます。妥当な設定は、ホームページ1.0、セクションのハブ0.85、記事と商品0.7〜0.75、補助ページ0.5です。

サイトマップインデックス:1ファイルで足りないとき

ページ数が50,000を超える場合や、ファイルが50MBを超える場合は、サイトマップインデックスが必要です。これはURLを直接ではなく、子サイトマップを参照するXMLファイルです。子ファイルはそれぞれ通常のurlsetで、上限は50,000エントリです。

xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap/blog.xml</loc>
    <lastmod>2026-05-15T00:00:00Z</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap/products.xml</loc>
    <lastmod>2026-05-14T00:00:00Z</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap/static.xml</loc>
    <lastmod>2026-04-01T00:00:00Z</lastmod>
  </sitemap>
</sitemapindex>

分割の単位は、コンテンツの種類(ブログ、商品、静的ページ)でも、ロケール(ru.xml、en.xml)でも構いません。ロケールで分けると、言語ごとのインデックス登録の状況を個別に確認しやすくなります。

robots.txtには、ルートのサイトマップインデックスだけを書けば十分です。子ファイルを1つずつ列挙する必要はありません。検索エンジンはインデックス経由で見つけます。

画像サイトマップ

画像はGoogle画像検索に表示され、追加のトラフィックをもたらします。クローラーが画像を見つけて理解しやすいよう、通常のurlsetに画像用の拡張を追加します。1つのurlエントリには、最大1,000枚の画像を含められます。

xml
<?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/gallery/city</loc>
    <image:image>
      <image:loc>https://example.com/images/city-skyline.jpg</image:loc>
      <image:title>City skyline at sunset</image:title>
      <image:caption>Downtown panorama taken from the observation deck, 2025</image:caption>
      <image:geo_location>New York, USA</image:geo_location>
      <image:license>https://creativecommons.org/licenses/by/4.0/</image:license>
    </image:image>
  </url>
</urlset>
<url>タグの属性と使える値は次のとおりです。
タグ必須説明
image:locはい画像の絶対URL。別ドメイン(CDNなど)でも構いません。
image:titleいいえ画像のタイトル。img要素のtitle属性に相当します。
image:captionいいえ画像のキャプション。img要素のalt属性に相当します。
image:geo_locationいいえ画像に写っている被写体の地理的な場所。
image:licenseいいえ画像のライセンスのURL。

サイトマップの画像情報は、HTMLのalt属性の代わりにはなりません。両方を併用します。サイトマップはクローラーが画像を見つける助けになり、altは画像の意味を伝えます。

動画サイトマップ

動画サイトマップを用意すると、Googleの動画検索や、動画プレビュー付きのリッチスニペットにコンテンツが表示される可能性があります。名前空間はvideoです。

xml
<?xml version="1.0" encoding="UTF-8"?>
<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/tutorials/getting-started</loc>
    <video:video>
      <video:thumbnail_loc>https://example.com/thumbnails/tutorial-1.jpg</video:thumbnail_loc>
      <video:title>Getting started with the product</video:title>
      <video:description>Step-by-step guide for first-time users</video:description>
      <video:content_loc>https://example.com/videos/tutorial-1.mp4</video:content_loc>
      <video:duration>183</video:duration>
      <video:publication_date>2026-03-10T12:00:00+00:00</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
</urlset>

video:durationの単位は秒です。video:content_locには、プレーヤーページではなく、再生可能なファイル(mp4、webm)を指定します。YouTubeやVimeoで配信している動画には、video:content_locではなくvideo:player_locを使います。

ニュースサイトマップ

Googleニュースサイトマップは、Googleニュースに参加するパブリッシャー向けの専用形式です。載せるのは、直近48時間以内に公開した記事だけです。それより古いコンテンツは含めません。ニュースのインデックスから自動的に外れます。

xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
  <url>
    <loc>https://example.com/news/tech-breakthrough-2026</loc>
    <news:news>
      <news:publication>
        <news:name>Example Daily</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2026-05-15T09:00:00+00:00</news:publication_date>
      <news:title>Technology breakthrough set to transform the industry</news:title>
    </news:news>
  </url>
</urlset>
ニュースサイトマップ形式は、通常のブログには向きません。Googleニュースの承認を受けたニュースパブリッシャー専用です。プログラムに参加せずにこの形式を使っても、メリットはありません。

多言語対応:サイトマップでのhreflang

サイトが複数の言語や地域向けに存在する場合は、対応するページ同士をhreflangで結びつける必要があります。方法は3つあります。HTMLのlink relタグ、HTTPのLinkヘッダー、そしてサイトマップへの直接記述です。サイトマップ方式は、ページテンプレートを変更しなくて済むので、大規模サイトでは最も実用的です。

サイトマップでは、xhtml名前空間でhreflangを宣言します。各ページをurlエントリとして記載し、各エントリには自分自身を含むすべての言語版を列挙します。

xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <!-- Russian version -->
  <url>
    <loc>https://example.com/blog/seo-guide</loc>
    <xhtml:link rel="alternate" hreflang="ru" href="https://example.com/blog/seo-guide"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/blog/seo-guide"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/blog/seo-guide"/>
  </url>
  <!-- English version -->
  <url>
    <loc>https://example.com/en/blog/seo-guide</loc>
    <xhtml:link rel="alternate" hreflang="ru" href="https://example.com/blog/seo-guide"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/blog/seo-guide"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/blog/seo-guide"/>
  </url>
</urlset>

x-defaultの値は、フォールバック先のページを示します。明示的な言語設定のどれにも一致しないユーザーに表示されるページで、通常はサイトの主言語版を指定します。

相互参照のルール:ページAがhreflangでページBを参照するなら、ページBも必ずページAを参照し返します。片方向のhreflang宣言はGoogleがエラーとして扱い、無視します。
hreflangコード用途
ruロシア語(地域を問わない)
en英語(地域を問わない)
en-US英語(米国)
ru-RUロシア語(ロシア)
x-default言語・地域を判別できない場合の既定ページ

robots.txt:1行で十分

検索エンジンにサイトマップを見つけてもらうには、robots.txtにSitemapディレクティブを1行追加します。サイトマップインデックスを使っている場合は、そのインデックスを指定します。クローラーは、インデックスを通じてすべての子ファイルを自動的に見つけます。

text
User-agent: *
Disallow: /admin/
Disallow: /api/
Allow: /

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

ルートのインデックスファイルが複数ある場合(たとえばruとenで別々)は、Sitemapディレクティブを複数書けます。

text
Sitemap: https://example.com/sitemap/index-ru.xml
Sitemap: https://example.com/sitemap/index-en.xml
robots.txtに加えて、Google Search Console(サイトマップのセクション)とYandex Webmaster(インデックス → Sitemapファイル)にもサイトマップを送信します。初回の処理が早まり、検出されたURLとインデックス登録されたURLの統計も得られます。

GoogleとYandexのドキュメント

Google公式のサイトマップのドキュメント

Yandex Webmaster公式のSitemapのドキュメント

Yandexはsitemaps.orgの標準に対応しており、ニュース拡張にも対応しています。changefreqとpriorityも読み取りますが、正確なlastmodを重視することを推奨しています。更新したページの再クロールには、lastmodのほうが効くためです。

チェックリスト

  • ファイルがUTF-8で、1行目が<?xml version="1.0" encoding="UTF-8"?>になっている
  • すべてのURLが絶対URL(プロトコルとドメイン付き)で、実際のcanonicalと一致している
  • サイトがHTTPSなら、locもHTTPSにしている
  • lastmodがビルド日ではなく、コンテンツの実際の変更日を反映している
  • ファイルが50,000 URL、非圧縮50MBを超えていない
  • 大規模サイトでは、子ファイルを持つサイトマップインデックスを使っている
  • 多言語ページでは、x-defaultを含むhreflang付きのxhtml:linkを記述している
  • メディアコンテンツには、対応する拡張(image、video、news)を使っている
  • robots.txtに、絶対URLのSitemapディレクティブがある
  • サイトマップをGoogle Search ConsoleとYandex Webmasterに送信している
  • noindexのページをサイトマップに含めていない
  • canonicalが別のURLを指すページを含めていない

FAQ

小規模サイトにもサイトマップは必須ですか?
技術的には必須ではありません。内部リンクが整っていて、すべてのページにホームページからたどり着けるなら、ボットは自力で見つけます。それでもサイトマップは常に有益です。クロールが速まり、インデックスに登録するページをコントロールしやすくなります。
noindexのページはサイトマップに含めるべきですか?
いいえ。noindexのメタタグやX-Robots-Tag: noindexが付いたページは、サイトマップに載せてはいけません。矛盾した指示は検索エンジンを混乱させます。載せるのは、インデックス登録したいページだけです。
priorityは検索順位に影響しますか?
いいえ。priorityはサイト内でのクロールの優先順位を示すヒントで、ランキングシグナルではありません。ボットがより頻繁に訪れるページを決める助けにはなりますが、検索結果の順位には影響しません。
サイトマップはどのくらいの頻度で更新すべきですか?
ページを追加・削除するたびです。ブログやECのような動的サイトでは、ビルド時にサイトマップを自動で再生成するのが最適です。静的サイトでは、構造を変えたときに手動で更新します。
robots.txtには、いくつのサイトマップを記載できますか?
標準では、robots.txtのSitemapディレクティブの数に制限はありません。ただし、ベストプラクティスはサイトマップインデックスを1つ置き、GoogleやYandexにそこから他のファイルをすべて見つけさせることです。

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it