サイトマップ(sitemap.xml)のつくり方とちょっとしたテクニック

ここで説明するものはサイト内のページ一覧のリンクを表示したページ(HTML)ではなく、サイト内のページURLをxmlファイルでまとめたサイトマップファイルのことです。
このサイトマップファイルを検索エンジンなどのクローラーに知らせることで、効率よくクローラーが巡回してくれるようになります。

サイトマップファイルを作るのが面倒という人はRSSのxmlファイルでもサイトマップファイルの代用となります。
サイトマップの再作成に時間がかかる場合もRSSのURLをウェブマスターツールなどで検索エンジンに登録しておくといいです。


[参考記事] RSS 2.0の作り方
[参考記事] サイトの更新情報をPINGサーバに送信する方法
[参考記事] Y!J-BSC/1.0 crawlerの挙動(ページ内のRSSを必ず読みに来る)
[参考記事] Yahoo!の検索エンジンの歴史(Inktomi Corporationとは)

サイトマップを設置することでクローラーの巡回頻度が高くなるわけではありません。
ページを作成して他のページへリンクを張ったにもかかわらずそのリンクを張ったページへの巡回が遅い場合や、リンクがつながっていないページがある場合には効果的です。

サイトマップのルール
サイトマップファイルの書式
サイトマップファイルを複数つくる場合(サイトマップインデックス)
サイトマップファイルの圧縮
サイトマップファイルのURLをクローラーに知らせる方法
迷惑なクローラー・ボットを防ぐ方法

サイトマップのルール

1ファイルに50,000個までURLを記載することができます。
1ファイルのサイズは10MB以下です。
ファイル形式はxmlファイルまたはそのxmlファイルをgzip圧縮したものになります。
サイトマップのURLをまとめたサイトマップインデックスというファイルが使えます。

サイトマップファイルの書式

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.example.com/page1.html</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </url>
  <url>
    <loc>http://www.example.com/page2.html</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </url>
  ……
  …
  ……
  <url>
    <loc>http://www.example.com/page99.html</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </url>
</urlset>

ページの更新日時を記載しない場合

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
  <loc>http://www.example.com/page1.html</loc>
</url>
<url>
  <loc>http://www.example.com/page2.html</loc>
</url>
……
…
……
<url>
  <loc>http://www.example.com/page99.html</loc>
</url>
</urlset>

最初にxml宣言を書きます。

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

<urlset></urlset>で囲って各ページURLの情報を<url></url>で書きます。

<url></url>の各URLの情報は
<loc></loc>がページのURL、
<lastmod></lastmod>がページの最終更新日時で、更新日時は省略可能です。

更新日時のフォーマットはPHPだと

date("c")

です。

クローラーがサイトマップファイルを読み込んだ時に、ページの更新日時が新しいものがあればそのページを再取得してくれます。
更新されていないページがクローラーに再取得されるより新しいページが取得されたほうが巡回効率がよいので、更新日時は記載したほうがいいです。

サイトマップファイルを複数つくる場合(サイトマップインデックス)

1ファイルに記載できるURLは50,000個までなので50,000ページ以上ある場合はファイルを複数作成します。
50,000ページ以上ある場合やカテゴリ分けでサイトマップファイルが複数ある場合は、サイトマップファイルのURLをまとめたサイトマップインデックスを作成するといいです。

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>http://www.example.com/sitemap/main.xml</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </sitemap>
  <sitemap>
    <loc>http://www.example.com/sitemap/category01.xml</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </sitemap>
  ……
  …
  ……
  <sitemap>
    <loc>http://www.example.com/sitemap/category99.xml</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </sitemap>
</sitemapindex>

サイトマップファイルの更新日時を記載しない場合

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>http://www.example.com/sitemap/main.xml</loc>
  </sitemap>
  <sitemap>
    <loc>http://www.example.com/sitemap/category01.xml</loc>
  </sitemap>
  ……
  …
  ……
  <sitemap>
    <loc>http://www.example.com/sitemap/category99.xml</loc>
  </sitemap>
</sitemapindex>

最初にxml宣言を書きます。

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

<sitemapindex></sitemapindex>で囲って各サイトマップファイルURLの情報を<sitemap></sitemap>で書きます。

<url></url>の各URLの情報は
<loc></loc>がサイトマップファイルのURL、
<lastmod></lastmod>がサイトマップファイルの最終更新日時で、更新日時は省略可能です。

更新日時のフォーマットはPHPだと

date("c")

です。

クローラーがサイトマップインデックスファイルを読み込んだ時に、サイトマップファイルの更新日時が新しいものがあればそのサイトマップファイルを再取得してくれます。

サイトマップファイルの圧縮

1ファイルのサイトマップファイルの容量は10MBまでなので、容量が大きくなる場合にはgzip圧縮したファイルにします。
gzip圧縮することでファイルの転送量を減らすことができるので帯域制限がある場合やサーバ負荷が大きいときには効果的です。

[参考記事] PHPでgzip圧縮形式(gz圧縮)のファイルを読み書きする方法

gzip圧縮したときのサイトマップインデックスファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>http://www.example.com/sitemap/main.xml.gz</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </sitemap>
  <sitemap>
    <loc>http://www.example.com/sitemap/category01.xml.gz</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </sitemap>
  ……
  …
  ……
  <sitemap>
    <loc>http://www.example.com/sitemap/category99.xml.gz</loc>
    <lastmod>2014-07-05T20:29:42+09:00</lastmod>
  </sitemap>
</sitemapindex>

サイトマップファイルのURLをクローラーに知らせる方法

robots.txtにサイトマップのURLを記載します。

User-agent: *
Sitemap:http://www.example.com/sitemap.xml

GoogleやMSN(bing)、Yandexではウェブマスターツールでサイトマップを登録することができます。
[参考記事] いろんな検索エンジンのウェブマスターツールの一覧

迷惑なクローラー・ボットを防ぐ方法

サイトマップを設置することで、クローラーがURLの記載されたすべてのページを巡回してくれるようになりますが、 GoogleやMSNのようなサイトのアクセスを増やしてくれる有益なクローラーだけでなく、 企業評価調査のためのボットなどサーバ負荷をかけるだけの迷惑なボットが来ることもあります。

そのような迷惑なボットにサイトマップ情報を知らせないように、サイトマップファイルを1つのディレクトリにまとめ.htaccessでアクセス制限をかけておく方法があります。

<Files .htaccess>
order allow,deny
deny from all
</Files>
order deny,allow
deny from all

# Google
allow from 216.239.0.0/16
allow from 64.68.80.0/22
allow from 64.233.0.0/16
allow from 72.14.0.0/16
allow from 66.102.0.0/16
allow from 66.249.0.0/16
allow from 209.85.0.0/16
allow from 68.142.212.0/25
#Yahoo!
allow from 74.6.0.0/16
allow from 114.111.64.0/18
allow from 183.79.0.0/16
#msn
allow from 65.52.0.0/14
allow from 157.56.0.0/14
allow from 131.253.22.0/23
allow from 131.253.24.0/21
allow from 131.253.21.0/24
allow from 157.54.0.0/15
allow from 157.56.0.0/14
allow from 157.60.0.0/16
allow from 199.30.16.0/20
allow from 207.46.0.0/16
#Yandex
allow from 95.108.217.251
allow from 95.108.234.38

関連記事

スポンサーリンク

<docomo>タグ、<au>タグ、<softbank>タグの使用例

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る