XMLサイトマップ(sitemaps.org)に関する要点整理

XMLサイトマップは主に検索エンジンのクローラに対してサイト内のページ情報を知らせるための手段・規格です。

対象サイトが開設してまもなくなど、他のサイトからのリンクが少ない(≒クローラがサイトへ訪れる機会がない/少ない)場合などに検索エンジンへサイトやページの存在を連絡することが可能なので、新設サイトのSEOの第一歩として重要視されています。

XMLサイトマップが登場してしばらくはいくつかの仕様があったようですが、Google, Yahoo, Microsoft など大手検索サイトからサポートを受けている sitemaps.org で定義された規格が現時点のデファクトスタンダードとなっています。

この規格の日本語訳はsitemaps.org – プロトコルで公開されているのですが、その内容を元に要点を簡単に整理してみます。

基本はXML

XMLサイトマップなのでXMLなのは当たり前なのですが、単にサイトマップのプロトコル形式がXMLタグで構成されているというだけでなく、各ノードの内容がXMLの規格に沿っている必要があるということです。手動で作成・変更する際に特にうっかりしやすいのは、URLに含まれる & のエスケープでしょうか。

XMLサイトマップの基本構成要素

XMLサイトマップのルート要素は urlset で必須要素です。

その下位に url 要素を1つ以上含む必要があります(通常サイトに含まれるページ数だけ url 要素を持つことになります)。

url 要素はサイト構成ページの詳細情報を含む子要素を持ちます。但し一つのXMLサイトマップに含むことができる url 要素は50,000個まで(ファイルサイズは10MB以内であること)で、それ以上のページを指定するためにはXMLサイトマップを分割する必要があります。

なお、ファイルサイズだけが問題になる場合はgzip形式で10MB以下に圧縮しても良いそうです。

url 要素は以下の子要素を持ちえます。

loc
サイト構成ページのURLを記述するための要素で必須要素。2048文字以下で指定する必要があります。
lastmod
ファイルの最終更新日時をセットする要素で任意要素。W3C Datetime 形式、即ち ISO 8601 に従う必要があります。但し時刻の部分を省略して YYYY-MM-DD で記述することも可能。
changefreq
ページの更新頻度を指定する要素で任意要素。検索エンジンはこの値を参考にクロール頻度を決めることになってますが、どちらかというとXMLサイトマップ作成者の希望クロール頻度を指定するための要素と考えた方がしっくりくるかもしれません。指定可能な値は以下の通り。

  • always
  • hourly
  • daily
  • weekly
  • monthly
  • yearly
  • never
priority
サイト内の他の URL 要素で定義したページと比較したページに優先度を指定するための要素で任意要素。0.0~1.0の間で指定可能で、デフォルト優先度は0.5として扱われます。この優先度が検索結果に影響を与えることは基本的にないことになっているようです。例えばサイト名で検索された際に会社概要よりもサイトトップページが上位に来てほしいというこちらの希望を検索エンジンに伝えるための要素と受け止めるのが無難です。そのためどのページにも高い値を設定すると返って希望しない検索結果になる可能性もありえるでしょう。

ここまでを整理して、例えばこのサイトのブログ以外のページでサイトマップを作成してみるなら、以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>https://ucwd.jp/</loc>
        <lastmod>2009-12-12T03:51:54+00:00</lastmod>
        <changefreq>daily</changefreq>
        <priority>1.0</priority>
    </url>
    <url>
        <loc>https://ucwd.jp/website</loc>
        <lastmod>2009-12-17T04:27:15+00:00</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.6</priority>
    </url>
    <url>
        <loc>https://ucwd.jp/system</loc>
        <lastmod>2009-12-12T03:54:34+00:00</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.6</priority>
    </url>
    <url>
        <loc>https://ucwd.jp/about</loc>
        <lastmod>2009-12-21T04:17:16+00:00</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://ucwd.jp/contact</loc>
        <lastmod>2009-12-12T03:55:09+00:00</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.3</priority>
    </url>
    <url>
        <loc>https://ucwd.jp/privacy</loc>
        <lastmod>2009-12-12T03:57:57+00:00</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.3</priority>
    </url>
</urlset>

分割したXMLサイトマップのインデックスを作成する

url 要素が50,000個超過になる場合など、一つずつ個別に検索エンジンへ通知しても良いのですが、そのサイトのXMLサイトマップの一覧(サイトマップインデックス)を作成することで全てのXMLサイトマップを検索エンジンに通知することも可能です。

サイトマップインデックスもXMLで作成し、sitemapindex 要素がルート要素となります。

その子要素を sitemap 要素とし、XMLサイトマップの数だけ sitemap 要素を含むことになります。この要素は必須要素で1つ以上含まれていなければなりません。

sitemap 要素は詳細の情報を持つ子要素を囲むだけの要素で、以下の子要素を含むことができます。

loc
ここのサイトマップURLを記述するための要素で必須要素となります。基本的にXMLサイトマップのURLとなりますが、AtomフィードやRSS2.0フィードのURLなどを配置することも可能です。
lastmod
対応するサイトマップ(あるいはフィードファイル)の最終更新日時を指定するための要素で、任意要素です。XMLサイトマップの同名要素と同じく W3C Datetime 形式、即ち ISO 8601 に従う必要があります。検索エンジンのクローラがクロールするべきXMLサイトマップか否かの判断材料となる要素で、クローラの制御をしたい場合に設定すると効果的なようです。

サイトマップインデックスのサンプルとしては以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <sitemap>
      <loc>https://ucwd.jp/sitemap.xml</loc>
      <lastmod>2010-01-07T18:00:00+00:00</lastmod>
   </sitemap>
   <sitemap>
      <loc>https://ucwd.jp/feed/atom</loc>
      <lastmod>2010-01-07T18:00:00+00:00</lastmod>
   </sitemap>
</sitemapindex>

XMLサイトマップの設置場所

XMLサイトマップファイルを設置するディレクトリによってサイトマップに含むことができるURLが異なる点は要注意です。例えば http://example.com/dir1/ にサイトマップファイルを設置した場合、そのXMLサイトマップには http://example.com/dir1/ 以下に含まれるURLしか含めることができません。

sitemap.orgの文書によるとサイトマップは、何かしらの事情でディレクトリごとに分割して作成する必要がなければ、ウェブサーバのルートディレクトリに設置されることが強く勧められています。

またディレクトリごとに分割して作成する必要がある場合でもサイトマップインデックスのファイルをウェブサーバのルートディレクトリに設置するのが望ましいでしょう。

検索エンジンのクローラへXMLサイトマップを通知する方法

sitemap.orgの文書ではいくつかの方法が紹介されていますが、その文書の当該項の内、最初に紹介されている検索エンジンの送信インターフェースを使用してサイトマップを送信がお手軽です。

具体的には

がその送信インターフェースに当たります。但しそれぞれGoogleアカウント/Yahoo!JAPAN ID/Windows Live!アカウントが必要になりますので注意してください。

そのほか色々とあるのですが、プロトコルの規約としては文章量は少ないですし、内容もそう難しくないので細かいところや気になったところはsitemap.orgの文書を参照されると良いと思います。