perlでサイトマップとサイトマップインデックスを作る
WWW::Sitemap::XML と WWW::SitemapIndex::XML を使う。
準備
- libxml2 を入れておく
% sudo yum install libxml2-devel
モジュールのインストールでコケたら MooseX::Types のバージョンが古いかもしれないので最新にするなど
code
use strict; use warnings; use WWW::Sitemap::XML; use WWW::SitemapIndex::XML; use Time::Piece; main(); sub main { my $output_dir = "/tmp"; mkdir $output_dir unless -d $output_dir; unlink glob "$output_dir/sitemap*"; my $base_url = "http://yoursite"; my $tp = localtime; my $lastmod = $tp->ymd; my ($L, $n) = (5, 1); for my $i (1..$L) { my $map = WWW::Sitemap::XML->new; $map->add($base_url); for (1..$L) { $map->add( loc => "$base_url/contents/$n", lastmod => $lastmod, changefreq => 'monthly', priority => 1.0, ); $n++; } $map->write("$output_dir/sitemap$i.xml", 1); #$map->write("$output_dir/sitemap$i.xml.gz"); } my $index = WWW::SitemapIndex::XML->new; for my $i (1..$L) { $index->add( loc => "$base_url/sitemap$i.xml", #loc => "$base_url/sitemap$i.xml.gz", lastmod => $lastmod, ); } $index->write("$output_dir/sitemap_index.xml", 1); #$index->write("$output_dir/sitemap_index.xml.gz"); }
writeメソッドの第二引数は true or false を求めてるので、別にpod通りに渡す必要は無い。
plain text で作るか gz で作るかは任意。
サイトマップって何ぞ
https://www.google.com/support/webmasters/bin/answer.py?answer=156184
https://www.google.com/support/webmasters/bin/answer.py?answer=183668
http://www.sitemaps.org/ja/index.php
サイトマップインデックスって何ぞ
https://www.google.com/support/webmasters/bin/answer.py?answer=71453
後は http://www.sitemaps.org/ja/protocol.php に大体載ってる。
tips
- lastmodのフォーマットの HH:MM:SS は省略可能
- 数とサイズに注意
サイトマップ ファイルに含める URL は 50,000 個以下で、ファイル サイズは圧縮されていない状態で 10 MB 以下にする必要があります
- 圧縮するかしないかはどちらでもいいようだ
- このフォーマットに従わなくてもgoogle様は読んでくれる。が、
サイトマップ プロトコルに基づいてサイトマップを作成することをおすすめします。
そうすることで、作成したファイルを sitemaps.org のメンバーである Bing や Yahoo! など、他の検索エンジンに送信することができます。
- とのことなので従っておいた方が楽
- ファイル名も特に指定は無いようだ