[PR] 本ブログの商品紹介リンクには広告が含まれています
blogをサイトの「上のほう」の階層に置くようになってから、Googleをはじめとする検索エンジンのロボットが頻繁に訪れるようになりました。検索エンジンのロボットは更新頻度が少ないサイトにはたまにしか訪問しないようにして動作効率を上げているので、更新が頻繁に行われるサイトにはマメにやってくるのです。
ところが、Google様で検索してみると、このblogのトップページはキャッシュしていて検索の対象になっているのですが、個々の記事のページまでは掘り下げてくれないらしく、インデックスに入っていません。
なぜでしょう。
世の中で広く使われているblogのシステムは、記事ページの生成方法によって大きく2つに分類できます。
記事を書くたびに、その記事を入れた通常のHTMLファイルを生成して、それをサイトの上にそのまま保存する「静的」なシステムと、記事をデータベースや別形式のファイルに保存しておいて、ブラウザで閲覧するたびに、その元ファイルとテンプレートをベースに表示用のHTMLを生成する「動的」なシステムです。
MovableTypeやGreyMatter、それからこれまたちょっと仕組みが違いますがRadio Userlandなどは前者、このサイトで使っている
NucleusやpMachineなどは後者にあたります。
このサイトのように動的にページを生成する仕組みは、ページのデザインを変更するときにテンプレートを変更すれば瞬時にすべてのページが変わる(静的なシステムでは、一旦全部のページを生成しなおすプロセスが必要)などといった利点があるのですが、サーバーに負荷がかかるという欠点もあります。
で、その欠点のひとつが、検索エンジンに無視されやすいということです。
できのいい検索エンジンのロボットは、動的に生成されるページを掘り下げて検索対象にしないように設計されています。そうしないと同じページをいろんなURLで検索対象にしてしまってぐるぐるたどり続ける「無限ループ」に入ってしまったりして、自分自身や相手のサーバーに迷惑なことになってしまうからです。
このページのURLをみるとわかるように、Nucleusの場合も、ほとんどのページを同じURL (index.php) の後ろのパラメータを変えるだけで表示し分けているので、Googleのロボットはパラメータのついたページを検索対象にしてくれません。
せっかく知のネットワークにつながっているblogなのにこれではつまりませんから、これを回避する方法はないかと思ったら、ちゃんとNucleusのマニュアルに載っていました。
これです。
Apacheに標準でついている、特定のURLを別のURLに読み替えて表示対象のページを引っ張ってくるmod_rewriteというモジュールを使って、全部のページに「なんとか.html」という別名をつけるという仕掛けです。
というわけで、このサイトにもこの仕掛けを加えました。Apacheでmod_rewriteが使えることを確認して、.htaccessでarchive-nn-yyyy-mm.htmlというURLをindex.php?archive=yyyy-mm&blogid=nnと読み替えるように指定します。
あとは、トップページにあるアーカイブページへのリンクや、アーカイブページにある月の一覧からのリンクが、この別名URLへのリンクになるようにテンプレートやスキンを書き換えると、見た目はアーカイブがすべて静的なHTMLファイルだけでできているかのようになります。
あとは、次回のGooglebot様のご来臨を待つだけです。
さて、検索結果にどのぐらい影響するでしょう……。
樋口 理さんのコメント:
そこで、/blogというサブディレクトリを作って、その中だけRewrite Engineを使うように変更しました。
今は/blog/archive-nn-yyyy-mm.htmlを/index.php?archive=yyyy-mm&blogid=nnに読み替えています。