ロボット検索に登録させるために
2005年6月19日
nucleusのデフォルトでは、ブログの各記事のURLは、例えば"/nucleus/index.php?itemid=1"のようになっている。URLに"?itemid=1"のような部分があると、google等の検索エンジンに登録されない(されにくい)らしい。"?itemid=1"の部分は、通常はHTMLのForm機能でブラウザからサーバに送られてきた情報に相当するから、そういったものを含むURLは敬遠されるのだろう。
nucleusのtips & Suggestionsのページに、mod_rewiteを利用してgoogle等の検索エンジンの巡回ロボットにブログを登録させるための方法が書かれてある。2つの方法があって、一つはFancyURLというnucleusの機能を使う方法。もう一つはApacheのmod_rewriteという機能を用いる方法である。後者の方法を試してみた。
.htaccessファイルに命令を記述することによって、ブログのページを"archive-1-2004-06.html"などに読み替えさせることが出来るらしい。ただし、apacheでmod_rewrite機能が使用可能であることが条件である。mod_rewriteが使用可能であるかどうかを確認する方法についてgoogleで調べると多くの記載が見つかった(例えばこのページ)。それらによると、
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
の2つの設定がhttpd.confに記述されていることが必要らしい。早速、サーバのhttpd.confを調べてみると、ちゃんとそうなっている。よしよしと思い、.htaccessファイルを作成して、nucleusのルートディレクトリに置き、ブラウザで"/nucleus/archive-1-2004-06.html"にアクセスしてみた。しかし…表示されたのは"404 not found"である。
なんで?と思い、httpd.confをよく見てみると、
# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride None
という記述を見つけた。要するに、mod_rewrite機能はオンになっているが、.htaccessの機能がオフになっていたわけである。早速、"AllowOverride FileInfo"に書き換え、Apacheを再起動してもう一度ブラウザで"/nucleus/archive-1-2004-06.html"にアクセスすると、今度はうまく行った。
あとは、ガイドに従ってスキンに"*.html"へのリンクを張るだけだ。アーカイブリスト(アーカイブ一覧ページ)で指定しているテンプレートの「アーカイブ一覧の本体」の
<a href="<%archivelink%>"
を
<a href="archive-<%blogid%>-<%year%>-<%month%>.html"
に変更した。ブラウザからアーカイブ一覧ページを表示させてみたところ、ちゃんとリンク先がhtmlファイルになっていて、クリックするとその月の記事一覧が表示された。OKである。
ただ、メインページからアーカイブ一覧ページに行くリンク(Archives)が、"/nucleus/index.php?archivelist=1"になっている。肝心のアーカイブ一覧ページにロボットが行ってくれないかもしれないので、次のようなリンクを玄関ページのどこかに作っておいたらいいかな(笑)。
<a href="archivelist-<%blogid%>.html">ロボットさんはこちら</a>
もう一つ、ここまでの設定ではロボットが登録してくれるのは月ごとの一覧ページである。ここには"Read more"を押した時に表示される記事の続き部分は含まれない。そこで、テンプレートの『アイテムの本体』中で、
<a href="<%itemlink%>"
を
<a href="item-<%itemid%>.html"
に書き換えた。これで、万事終了。ここまでやってみて、FancyURLの方が良かったかなって気もするけど、mod_rewriteでも実用上は差し支えないし、これはこれでいいだろう。
あと、過剰なロボットのアクセスをさけるため、robots.txtを次のようにしておいた。
User-agent: *
Disallow: action.php?
Disallow: index.php?
nucleusの将来のバージョン(4.0?)では、FancyURLがデフォルトになる気がする。.htaccessファイルの記述を用いなくても、cgiで"/nucleus/index.php/item/1"等の入力を処理することは可能なはずである。ただ、".php"の文字があるページはロボット検索で登録されないのかもしれない…。
追記
tips のページに記述されている.htaccessの内容:
RewriteEngine On
RewriteRule ^archive-([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3&blogid=$1
RewriteRule ^item-([0-9]+).html+ index.php?itemid=$1
RewriteRule ^archivelist-([a-z]+).html+ index.php?archivelist=$1
のうち、4行目の"[a-z]"を"[0-9]"に書き換えないと、ちゃんと動作しなかった。以前のバージョンのNucleusでは、ブログIDにアルファベットを用いていたのかもしれない。
nucleusのtips & Suggestionsのページに、mod_rewiteを利用してgoogle等の検索エンジンの巡回ロボットにブログを登録させるための方法が書かれてある。2つの方法があって、一つはFancyURLというnucleusの機能を使う方法。もう一つはApacheのmod_rewriteという機能を用いる方法である。後者の方法を試してみた。
.htaccessファイルに命令を記述することによって、ブログのページを"archive-1-2004-06.html"などに読み替えさせることが出来るらしい。ただし、apacheでmod_rewrite機能が使用可能であることが条件である。mod_rewriteが使用可能であるかどうかを確認する方法についてgoogleで調べると多くの記載が見つかった(例えばこのページ)。それらによると、
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
の2つの設定がhttpd.confに記述されていることが必要らしい。早速、サーバのhttpd.confを調べてみると、ちゃんとそうなっている。よしよしと思い、.htaccessファイルを作成して、nucleusのルートディレクトリに置き、ブラウザで"/nucleus/archive-1-2004-06.html"にアクセスしてみた。しかし…表示されたのは"404 not found"である。
なんで?と思い、httpd.confをよく見てみると、
# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride None
という記述を見つけた。要するに、mod_rewrite機能はオンになっているが、.htaccessの機能がオフになっていたわけである。早速、"AllowOverride FileInfo"に書き換え、Apacheを再起動してもう一度ブラウザで"/nucleus/archive-1-2004-06.html"にアクセスすると、今度はうまく行った。
あとは、ガイドに従ってスキンに"*.html"へのリンクを張るだけだ。アーカイブリスト(アーカイブ一覧ページ)で指定しているテンプレートの「アーカイブ一覧の本体」の
<a href="<%archivelink%>"
を
<a href="archive-<%blogid%>-<%year%>-<%month%>.html"
に変更した。ブラウザからアーカイブ一覧ページを表示させてみたところ、ちゃんとリンク先がhtmlファイルになっていて、クリックするとその月の記事一覧が表示された。OKである。
ただ、メインページからアーカイブ一覧ページに行くリンク(Archives)が、"/nucleus/index.php?archivelist=1"になっている。肝心のアーカイブ一覧ページにロボットが行ってくれないかもしれないので、次のようなリンクを玄関ページのどこかに作っておいたらいいかな(笑)。
<a href="archivelist-<%blogid%>.html">ロボットさんはこちら</a>
もう一つ、ここまでの設定ではロボットが登録してくれるのは月ごとの一覧ページである。ここには"Read more"を押した時に表示される記事の続き部分は含まれない。そこで、テンプレートの『アイテムの本体』中で、
<a href="<%itemlink%>"
を
<a href="item-<%itemid%>.html"
に書き換えた。これで、万事終了。ここまでやってみて、FancyURLの方が良かったかなって気もするけど、mod_rewriteでも実用上は差し支えないし、これはこれでいいだろう。
あと、過剰なロボットのアクセスをさけるため、robots.txtを次のようにしておいた。
User-agent: *
Disallow: action.php?
Disallow: index.php?
nucleusの将来のバージョン(4.0?)では、FancyURLがデフォルトになる気がする。.htaccessファイルの記述を用いなくても、cgiで"/nucleus/index.php/item/1"等の入力を処理することは可能なはずである。ただ、".php"の文字があるページはロボット検索で登録されないのかもしれない…。
追記
tips のページに記述されている.htaccessの内容:
RewriteEngine On
RewriteRule ^archive-([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3&blogid=$1
RewriteRule ^item-([0-9]+).html+ index.php?itemid=$1
RewriteRule ^archivelist-([a-z]+).html+ index.php?archivelist=$1
のうち、4行目の"[a-z]"を"[0-9]"に書き換えないと、ちゃんと動作しなかった。以前のバージョンのNucleusでは、ブログIDにアルファベットを用いていたのかもしれない。