サイトマップ (sitemap.xml) の作り方

サイトマップとは

"サイトマップ (sitemap.xml)" とは、検索エンジンに巡回してほしい Web ページをリストにしたものです。 Web サイトの全体像を HTML 形式でまとめたコンテンツもサイトマップと呼びますが、本ページでは扱いません。 本ページでは検索エンジン向けに XML 形式でまとめたサイトマップについて解説します。

サイトマップの役割は、検索エンジンの "インデックス" に登録、または更新されるための情報を提供することです。 インデックスとは、検索エンジンのデータベースです。 このデータベースに Web サイトが登録されることにより、検索結果に表示されるようになります。

Web サイトが検索エンジンのインデックスに登録されるためには、Google や Yahoo! などの検索エンジンのクローラにクロール (巡回) してもらう必要があります。 検索エンジンは、Web ページのリンクをもとにクロールしていますが、サイトマップを登録すればクローラに効率よくクロールしてもらえます。 なぜなら、サイトマップは Web ページの階層情報もリスト化しているため、Web サイトの構造をクローラに伝えることができるためです。 ただし、Web ページの階層構造は、サイトマップに頼らなくてもユーザやクローラが迷わずにすむようにシンプルで巡回しやすいように設計しましょう。

サイトマップに書かれている情報は、ページのURL、最終更新日、更新頻度、ページの優先度などです。 URL 以外の情報は URL の "メタデータ" と呼ばれ、XML 形式で定義されます。 この XML ファイルを Google など検索エンジンに登録することで、クローラは XML に定義された各 Web ページをクローリングします。

ただし、サイトマップに記載されている Web ページが必ずインデックスに登録されるわけではありません。 逆に、サイトマップに記載されていない Web ページがインデックスに登録される場合もあります。 サイトマップは、あくまでクローラに対して Web サイトの情報を伝えるためのファイルであり、インデックスに登録するかの最終的な判断は検索エンジンが行います。

それでは、実際にサイトマップがどのようなものか見てみましょう。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://murashun.jp/index.html</loc>
    <lastmod>2010-01-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1.0</priority>
  </url>
</urlset>
サイトマップの例

4 行目にWebページのURLが記載されており、5 ~ 7 行目に付随するメタデータが書かれています。 具体的なサイトマップの構造は次章で詳しく説明します。

サイトマップの構造

サイトマップは XML 形式で定義されています。 使用できるタグや、タグの親子関係は決められており、非常にシンプルな構造となっています。

サイトマップの構造
タグ定義説明
<urlset>必須サイトマップのプロトコル標準を参照するためのタグです。
<url>必須各Webページの情報を定義します。
<loc>必須WebページのURLを定義します。
<lastmod>省略可能Web ページの最終更新日を以下のいずれかを W3C Datetime 形式で定義します。
  • YYYY-MM-DD
  • YYYY-MM-DDThh:mm:ss+TZD
例) 2010-01-10T10:20:30+09:00
<changefreq>省略可能Web ページの目安となる更新頻度を定義します。検索エンジンのクローラはこの値を参考情報としてクロール頻度を調整しますが、指定した値とは異なる頻度でクロールされることがあります。 有効な値は以下のとおりです。
  • always
  • hourly
  • daily
  • weekly
  • monthly
  • yearly
  • never
<priority>省略可能Web サイト内の他ページと比較した場合の相対的な優先度を 0.0 ~ 1.0 で定義します。高いほど優先度が高くなり、デフォルト値は 0.5 です。この値は、クローラにページの優先度を通知するために使われます。

urlset 要素

urlset 要素内にはネームスペース (プロトコル標準) を指定します。 ネームスペースとは、XML ファイル内で要素や属性として使用できる名前のことです。 XML ファイルにネームスペースを指定することで、サイトマップに含まれる情報の種類や、使用する要素をクローラに伝えることができます。

ネームスペースは、定義する URL、画像、動画などによって指定方法が異なります。 例えば、動画のサイトマップのネームスペースは、xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" を指定します。 以下のサイトマップのように、ネームスペースに動画情報を定義すると、クローラに動画に関する要素や属性を使用していることを伝えられます。 サイトマップの一部の要素が、指定されたネームスペースに属していない場合は、エラーになります。

以下のサイトマップは、ネームスペースに動画を定義した例になります。

<?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>動画を掲載したページの URL</loc>
    <video:video>
      <video:thumbnail_loc>サムネイル画像の URL</video:thumbnail_loc> 
      <video:title>動画のタイトル</video:title>
      <video:description>動画の説明</video:description>
      <video:content_loc>動画ファイルの URL</video:content_loc>
      <video:player_loc>動画プレイヤーの URL</video:player_loc>
      <video:duration>動画の長さ (0~28800 秒)</video:duration>
      <video:rating>動画の評価 (0.0~5.0)</video:rating> 
      <video:view_count>動画が再生された回数</video:view_count>
      <video:publication_date>動画の公開日時</video:publication_date>
      <video:category>動画のカテゴリ</video:category>
      <video:uploader>動画のアップロード者</video:uploader>
      <video:live>動画がライブストリームかを yes / no で指定</video:live>
    </video:video> 
  </url>
  
</urlset>
動画のサイトマップの例

ネームスペースには、URL、画像、動画、モバイル、ニュースが定義できます。 詳細は、後述する "サイトマップの拡張" を参照して下さい。

url 要素

url 要素は、各エントリの親要素として定義します。 url 要素は、1 つのサイトマップに 50,000 個まで定義する必要があります。 それ以上のページを定義する場合は、サイトマップを分割する必要があります。 詳細は、後述する "サイトマップの上限と分割" を参照して下さい。

loc 要素

loc 要素は、サイト構成ページの URL を定義します。 Web サーバによっては http または https から始まり、末尾にスラッシュを含める必要があります。 この値は 2,048 文字以下で指定する必要があります。

lastmod 要素

lastmod 要素は、ファイルの最終更新日時を W3C DateTime形式 (ISO 8601) で定義します。 定義できる形式は、以下のとおりです。

  • YYYY-MM-DD
  • YYYY-MM-DDThh:mm:ss+TZD
例) 2010-01-10T10:20:30+09:00

changefreq 要素

changefreq 要素は、Web ページの目安となる更新頻度を定義します。 検索エンジンのクローラはこの値を参考情報としてクロール頻度を調整します。 ただし、最終的なクロール頻度は検索エンジンが判断するため、定義した値の頻度とは異なる場合があります。 定義できる値は以下のとおりです。

  • always
  • hourly
  • daily
  • weekly
  • monthly
  • yearly
  • never

priority 要素

priority 要素は、サイト内の他の URL と比較した優先度を 0.0 ~ 1.0 の範囲で定義します。 0.0 が重要ではないページ、1.0 が重要なページを意味します。 省略した場合は、デフォルト値として 0.5 が設定されます。 ページに割り当てた優先度は、検索エンジンの検索結果に表示されるページの掲載順位に影響しません。 検索エンジンは、この情報を使用してサイトのどのページを優先的にクロール、およびインデックス登録するかを選択します。 また、優先順位は相対的なものであるため、すべてのページを 1.0 と指定するべきではありません。

サイトマップの拡張

サイトマップには、URL 情報に加えて、画像、動画、モバイル、ニュースのコンテンツを定義できます。 それらの拡張機能を利用する場合は、コンテンツのタイプに合わせたネームスペースを <urlset> の属性として定義します。

コンテンツタイプ別のネームスペース
タイプネームスペース
URLxmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
画像xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
動画xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"
モバイルxmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0"
ニュースxmlns:news="http://www.google.com/schemas/sitemap-news/0.9"

各コンテンツにおけるサイトマップの詳細は Google ウェブマスターツールのヘルプをご確認下さい。

文字コードとエスケープ処理

サイトマップの文字コードは、"UTF-8" にする必要があります。 また、以下の文字はエスケープ文字に変換して記述します。

エスケープ文字
文字エスケープ文字
&&amp;
'&apos;
"&quot;
<&lt;
>&gt;

サイトマップの上限と分割

サイトマップの <url> タグの数と、ファイルサイズには上限があり、上限を超える場合はサイトマップを分割する必要があります。 <url> タグの上限数は 50,000 個まで、ファイルサイズは 10 MB 以下となります。 検索エンジンのクローラは、サイトマップを gzip 形式で圧縮した形式でも読み取ってくれるため、gzip 形式に圧縮してファイルサイズを抑えることもできます。

サイトマップを分割した場合、サイトマップのインデックスファイルを作成します。 サイトマップのインデックスファイルの構造は、各サイトマップの保存先を定義するシンプルな構造になっています。

<?xml version="1.0" encoding="UTF-8"?>

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <sitemap>
    <loc>https://murashun.jp/sitemap1.xml.gz</loc>
    <lastmod>2010-01-01</lastmod>
  </sitemap>

  <sitemap>
    <loc>https://murashun.jp/sitemap2.xml.gz</loc>
    <lastmod>2010-02-01</lastmod>
  </sitemap>

</sitemapindex>
サイトマップのインデックスファイル例
サイトマップのインデックスファイルの構造
タグ定義説明
<sitemapindex>必須サイトマップに関する情報を定義します。
<sitemap>必須各サイトマップの情報を定義します。
<loc>必須サイトマップの保存先を定義します。
<lastmod>省略可能サイトマップの更新日時を以下のいずれかを W3C Datetime 形式で定義します。
  • YYYY-MM-DD
  • YYYY-MM-DDThh:mm:ss+TZD
例) 2010-01-10T10:20:30+09:00

サイトマップの保存先

サイトマップは、最上位のディレクトリに保存するのが一般的です。

サイトマップに記述できるURLは、サイトマップが保存されたディレクトリと同一階層、または配下の階層になります。 例えば、サイトマップを https://murashun.jp/contents/sitemap.xml に保存した場合、
https://murashun.jp/contents/ から始まるURLは記述できますが、
https://murashun.jp/blog/ から始まるURLは記述できません。

Webサイトがサイトマップを分割するほど大規模でなければ、最上位の階層にサイトマップを保存します。 もしもサイトマップを分割する場合は、サイトマップのインデックスファイルを最上位の階層に保存し、各サイトマップを適切な階層に保存するなど、スケーラビリティを考慮したファイル配置を検討します。

検索エンジンのクローラにサイトマップの保存先を伝える

検索エンジンのクローラにサイトマップの保存先を伝えるには、"robots.txt" に記述します。

User-agent: *
Disallow: /cgi-bin/

Sitemap:https://murashun.jp/sitemap.xml.gz
robots.txtにサイトマップを記述する

"robots.txt" の詳細な説明は省略しますが、"Sitemap:https://murashun.jp/sitemap.xml.gz" のように記述することで、クローラにサイトマップの保存先を伝えています。 また、サイトマップを分割している場合は、"Sitemap:" にサイトマップのインデックスファイルを記述するか、複数行記述します。

User-agent: *
Disallow: /cgi-bin/

Sitemap:https://murashun.jp/blog/sitemap-index.xml.gz
Sitemap:https://murashun.jp/contents1/sitemap.xml.gz
Sitemap:https://murashun.jp/contents2/sitemap.xml.gz
robots.txtに複数のサイトマップを記述する

また、その他にも手動で検索エンジンに伝える方法があります。 手動で伝える場合は、検索エンジンの送信インターフェースを利用するか、HTTP リクエストを利用します。

検索エンジンの送信インターフェースを利用する

Googleは、"Google Search Console" サービスを提供しており、その中の "サイトマップ" から送信できます。 "サイトマップを追加/テスト" をクリックすると、サイトマップの保存先を入力するボックスが表示されます。 ボックス内に保存先を入力し、"サイトマップを送信する" をクリックすると送信が完了します。 ただし、サイトマップを送信してもインデックスに登録されるまで、多少時間がかかる場合があります。


ウェブマスターツールからsitemapの送信
ウェブマスターツールからsitemapの送信

HTTP リクエストを利用する

HTTP リクエストを利用する方法は、最も直接的な方法です。 パーセントエンコーディングされたサイトマップの保存先の URL を、各検索エンジンの登録 URL のパラメータとして送信します。 下記の例では、サイトマップの保存先 URL をエンコードし、各検索エンジンの登録 URL のパラメータとして設定しています。

Google
http://www.google.com/webmasters/tools/ping?sitemap=
http%3A%2F%2Fmurashun.jp%2Fsitemap.xml.gz


Bing
http://www.bing.com/webmaster/ping.aspx?siteMap=
http%3A%2F%2Fmurashun.jp%2Fsitemap.xml.gz

まとめ

サイトマップの構造、作成、自動実行までを一通りまとめました。 サイトマップは絶対に必要というものではありませんが、クローリングを適切に行ってもらうためには作成した方が良いかと思います。 また、サイトマップやrobots.txtなどにエラーが発生していないかなどは、定期的にGoogle ウェブマスターツールを確認してWebサイトの健全な運用を心がけましょう。