Sitemapとrobots.txtの作成

戻る一つ前のメニューに戻る

Googleなどの検索エンジンに効率良くキャッシュされるために、最低限行っておくべきWebサイトの最適化のためのメモ。

目次

サイトマップ

サイトマップsitemap)とは、検索エンジンにキャッシュして欲しいファイルの一覧表のこと。一般的にはsitemaps.org:サイトマップのXML形式に示されているXML形式で作成したもので、sitemap.xmlという名前のファイル。また、Google ウェブマスター ツール サイトマップにも説明が掲載されている。

サイトマップファイルはrobots.txtで指定して検索サイトのクローラに自動発見させる。また、GoogleであればGoogleウェブマスター ツールでファイルを個別指定することも可能。

サイトマップファイルの例 (UTF-8エンコードで保存する

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <url>
      <loc>http://oasis.halfmoon.jp/mw/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8</loc>
      <lastmod>2009-02-20</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.5</priority>
   </url>
   <url>
      <loc>http://oasis.halfmoon.jp/mw/index.php?title=(MediaWiki)_previouspage_restrict%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD</loc>
   </url>
</urlset>

<lastmod>,<changefreq>,<priority>タグは必須ではないため、必要なければ書かなくてもよい。

静的サイトのsitemap一括作成方法

UNIXまたはLinuxサーバにログオンして、次のようなコマンドとスクリプトを利用することで効率よくサイトマップファイルを作成できる。(何百もあるファイルを、一つずつ登録するような馬鹿な真似は出来ない…)

まず、web公開フォルダ以下の全ての*.htm,*htmlファイルの一覧をsitemap.txtに出力する。

find ~/www/* -name "*.htm*" -print > sitemap.txt

複数のパターンで検索する場合は次のようにする

find ~/www/* \( -name "*.html" -or -name "*.shtml" \) -print > sitemap.txt

静的サイトでエスケープしなければならないようなURLは存在しないとして、次のステップに進む。

公開したくない不必要なファイルを消去した後に、ファイルのフルパスをURLのフルパスに変更するために、次のようなPerlスクリプトを利用する。(下記の例では、/home/www を http://www.example.com に置き換えてURLフルパスにしている)

#!/usr/bin/perl
 
## URLリストから、sitemapファイルを作成
 
use strict;
 
# テキスト形式のsitemapファイル(一時ファイル入力)
my $strInFileName = './sitemap.txt';
# XML形式のsitemapファイル(出力)
my $strOutFileName = '/home/www/sitemap.xml';
# ファイルから一時的にデータを読み込む配列
my @aryData = [];
# ファイルの属性をstat関数で読み込むための配列
my @filestat = [];
 
my $strTmp;
my $strTimestamp;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
 
# ファイルハンドル
my $hFile;
 
if(!open($hFile, $strInFileName))
{	# ファイルが開けない場合
	print "src file (sitemap.txt) open error\n";
	exit;
}
@aryData = <$hFile>;
close($hFile);
 
if(!open($hFile, ">".$strOutFileName))
{	# ファイルが開けない場合
	print "src file (sitemap.xml) open error\n";
	exit;
}
 
print $hFile "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
printf $hFile "<!-- sitemap created automatically by script on %04d-%02d-%02d %02d:%02d:%02d (JST).  contains %d pages -->\n", $year+1900, $mon+1, $mday, $hour, $min, $sec, $#aryData;
print $hFile "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
 
foreach $strTmp (@aryData) {
	# 行末の開業を除去
	$strTmp =~ s/\n//g;
	# ファイルの更新時刻を得る
	@filestat = stat $strTmp;
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($filestat[9]);
	# ファイル名をURLに変換
	$strTmp =~ s/\/home\/www/http:\/\/www.example.com/g;
	print $hFile "  <url>\n";
	print $hFile "    <loc>".$strTmp."</loc>\n";
	printf $hFile "    <lastmod>%04d-%02d-%02dT%02d:%02d:%02d+09:00</lastmod>\n", $year+1900, $mon+1, $mday, $hour, $min, $sec;
	print $hFile "    <changefreq>daily</changefreq>\n";
	print $hFile "  </url>\n";
}
 
print $hFile "</urlset>\n";
 
close($hFile);
 
exit(0);

sedコマンドを使わないのは、環境によりsedパラメータでタブや改行のエスケープ文字(\tとか\n)が扱えないため、Perlスクリプトを利用している。

MediaWikiでのsitemap一括作成方法

拡張機能mw:Extension:Google Sitemapを用いると簡単にサイトマップファイルを作成できる。

Movabletypeでのsitemap一括作成方法

記事追加時に自動的にサイトマップファイルを作成させるために、次のようなインデックス・テンプレートを新規作成する。 テンプレート名:サイトマップ自動作成   ← この名前は任意 出力ファイル名:sitemap.xml  ← robots.txtなどに指定するためのファイル名 「インデックス・テンプレートを再構築するときに、自動的に再構築」をONにする。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc><$MTBlogURL encode_xml="1"$></loc>
<priority>1.0</priority>
</url>
<MTEntries lastn="9999">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
</url>
</MTEntries>
</urlset>

Google Sitemaps using Movable Typeからプログラムをコピーした。

robots.txt

サイトのルートディレクトリに置いたrobots.txtに、そのサイト内の全てのサイトマップファイルを指定する。

User-Agent: *
Disallow: /cgi-bin/
Allow: /
Sitemap: http://example.com/sitemap.xml
Sitemap: http://example.com/sitemap_wiki.xml
Sitemap: http://example.com/myblog/sitemap.xml

ここで指定できるサイトマップファイルは、robots.txtが置かれたサイトと同一サイト内のみ。(フルパス指定していても、同一サイト内しか認識しないようである)

戻る一つ前のメニューに戻る