このサイトも、ブログの部分はとりあえず枠組みができあがったので、ぼちぼち日記も(なるべく)毎日書くようにしています。
そこそこコンテンツも増えてきたら気になるのが、自分のサイトがGoogleとかの検索サイトでちゃんと検索できるようになっているか?ということです。 一応、最初の頃にGoogleとYahoo!に関しては検索登録をしていたのですが、ここんところいくつか書き加えた記事が検索にひっかかるようになっているか調べてみました。
一般的に検索サイトのbotが探しにくるにはしばらく時間がかかるのですが、Xoops Analyzerでログを見ていると、定期的にGoogleやYahoo!などのbotがちゃんと見にきてくれているようです。 ところが、Googleで検索をかけてみると、トップページしか出てこない!肝心の日記記事はまったくひっかかりません。 Webをぐぐってみると、どうやら検索エンジンは、URL表記が動的表記よりも静的表記をより好んでクロールしてくれるようです。
インストールしたままのwordpressの各日記記事へのURLは以下のようなフォーマットになっています。
http://www.sailweb.net/modules/wordpress/index.php?p=96 ※1
つまり、index.phpというphpのスクリプトに、記事番号96を与えると、ID=96の記事が表示されるという寸法です。このようにphpやperlなどのスクリプトにパラメータを与えて、表示される内容を動的に生成しているページをbotはどうも苦手としているようです。
またこのような動的生成ページのURL表記を俗に「動的表記」と言います。
いっぽう、Googleなどの検索サイトのbotが好む静的表記は、以下のような表記です。
http://www.sailweb.net/modules/wordpress/2007/04/23/96/ ※2
つまり、URLを見た限り、一見/2007/04/23/96/index.htmlといったようなプレーンなhtmlファイルへのリンクです。
したがってせっかく見に来てくれたbotにきちんと情報を持っていってもらうには、※1のような表記を※2にしてやる必要があります。
さてそのやり方ですが、単純な方法は、動的に生成されたページをあらためて静的なhtmlファイルとして別に保存してやる、という方法ですが(たとえプログラムなどで自動処理をしたとしても)手間がかかる上、同じ情報がひとつのwebサーバに2重に存在するという点であまりよろしくありません。ディスクスペースを2倍消費するし、管理も2度手間になります。
通常はこのような人海戦術的単純戦略はとらずに、webサーバのURL書き換え機能を利用するのが常套手段です。例えば多く使われているwebサーバであるApache(アパッチ)には、mod_rewriteというモジュールが組み込まれていることが多く、これを使ってURLの書き換えを比較的簡単に行うことができます。mod_rewriteモジュールは大手のフリーのブログサイトであればだいたい組み込まれていることが多いようです。
またApacheのmod_rewriteモジュールの使い方については、例えば下記のようなサイトを参照されると良いでしょう。
mod_rewriteリファレンス
mod_rewriteの基本ですが、
Apacheのsystem configurationファイル: /etc/httpd/httpd.confなど、もしくは
ユーザディレクトリの設定ファイル: <任意のユーザwebドキュメントディレクトリ>/.htaccess
のいずれかに、mod_rewrite機能をonにするコマンドと、書き換えのルールを記述してやれば使えるようになります。
httpd.confはApache全体のシステム設定用のファイルで、こちらにmod_rewriteの記述をしてやる方が.htaccessへ記述するよりも処理の負荷が低いらしいです。しかしながら、当然自分が管理しているサーバでなければhttd.confはいじれません。フリーや商用のブログサイトに間借りしている場合は.htaccessを使うことになります。
今回、僕はhttpd.confへの記述追加を試みたのですが、後述しますがwordpressが自動生成してくれるmod_rewrite用のコードが、.htaccess用に記述されているようで、単純にこれをhttpd.confへ追記しただけではうまくいきませんでした。なので、以後は.htaccessへ追記するやり方を書きます。
1.httpd.confの確認
この項目は、ご自身がサーバを管理していてhttpd.confをいじれる人のみが必要な作業です。外部サーバを借りている場合は、殆どのケースすでに設定がなされているケースが多いようなので、次に進んでください。
まず、httpd.confで、ユーザディレクトリで.htaccessが使えるようになっているかどうかを確認しましょう。今回はwordpressのモジュールにアクセスがあった場合にmod_rewriteが動けばよいので、Xoopsのwordpressモジュールのインストールディレクトリを<wp_home>だとして、以後説明をします。<wp_home>はご自身の環境にあわせて読み替えてください。
まず<wp_home>にあとで設置する、.htaccessファイルをapacheがきちんと読んで処理してくれるよう、<wp_home>での.htaccess利用を許可する必要があります。これは、httpd.confの中に以下の行を追記することで使えるようになります。
<Directory <wp_home>>
AllodwOverride all
</Directory>
なお、これを指定することで、ユーザ側が.htaccessに必要な処理を記述することで、全ての処理をオーバーライドできるようになるので注意が必要です。なので、<Directory *>などとせず、ほんとに使いたいディレクトリ(今回はWordpressのインストールディレクトリ)のみを明示的に指定するようにしたほうが良いでしょう。バーチャルホストを使っている場合は、
<VirtualHost <バーチャルホスト名>>
<Directory <wp_home>>
AllodwOverride all
</Directory>
</Virtual>
という感じで、バーチャルホストの記述の中に追記します。
httpd.confでこの記述を追記したら、apacheを再起動する必要があります。
% apachectl restart
これで無事新しいhttpd.confが読み込まれて、該当のwordpressのディレクトリで.htaccessを使えるようになります。
もしうまくいかなかったら、apacheのエラーログを見て、記述に間違いがないか、きちんと起動しているかを確認すると良いでしょう。
(/var/log/httpd/error_logとか)
2..htaccessの作成
.htaccessは普通のテキストファイルなので、ご自身でサーバがいじれる場合は、サーバの<wp_home>に直接viなどで作成しても良いですし、外部のサーバを使っている場合はPCでテキストファイルを作成しておいて、ftpでアップロードしても良いでしょう。
さて、基本的なやり方は下記のとおりです。(実際のwordpress用の設定方法は後述します)
例えば、
http://www.sailweb.net/modules/wordpress/index.php?p=97 (1)
を
http://www.sailweb.net/modules/wordpress/articles-97.html (2)
という静的リンクに書き換えたいとします。その場合は下記のようなルールを.htaccessに記述します。
RewriteEngine on (3)
RewriteCond %{REQUEST_FILENAME} !-f (4)
RewriteRule ^articles-([0-9]+).html+ index.php?p=$1 (5)
(3)は、このディレクトリへのアクセスの際にmod_rewriteエンジンを使う、という宣言です。(4)は、外部のウェブブラウザからこのディレクトリにアクセスしてきた場合に、該当ファイルがなければ、(5)のルールを適用する、という条件文です。そして(5)が肝心のルールです。
(5)のルールの意味は"^"が行頭を示し、行頭からすぐに"articles-"という文字列が続くことを意味します。そのあと([0-9]+)は"0〜9までの数字が一つ以上続く文字列"を意味しますので、(2)の"97″がこれにマッチします。そしてその後ろに”.html"が続くというパターンを示しています。なお([0-9]+)の両サイドの"(,)"(カッコ)がグループを意味し、マッチした文字列を$1という変数で参照することができます。
つまりここでは"$1=97″ということになります。さて、スペースをはんさんで"index.php?p=$1″という記述がありますが、$1はここでは97に置換されるので、結果として、(2)の"articles-97.html"は(1)の"index.php?p=97″に置換されて、無事アクセスできる、という仕組みです。
なお、.htaccessへ記述するルールのなかで、(5)の検索パターン"^articles-([0-9]+).html+"の中には、サブディレクトリの記述ができないようなので、注意しましょう。たとえば、archiveというサブディレクトリが<wp_home>以下にあったとして(wp_home>/archive)このarchiveというサブディレクトリを検索パターンに含めたいことがあるかもしれません。
つまり"^archive/articles-([0-9]+).html+"という感じです。しかしこれはちゃんと動きません。もしそのようなサブディレクトリを使いたい場合は、まさにそのサブディレクトリの中に.htaccessを作るようにします。(ちなみに、httpd.confではそういった記述は可能です。ただし、<Directory <dir>>の<dir>との兼ね合いになります)
.htaccessは、その場所にアクセスがあった場合に毎回webサーバが読み込むので、.htaccessを置いた瞬間から有効になります。もし一時的にこの設定を無効にしたいとか、編集中は使って欲しくない、というときは、.htaccess.workとか適当な名前に変更しておくと良いでしょう。
さて、これで無事(2)のURLで(1)へアクセスがリダイレクトされるようmod_rewriteの設定が終わりました。
が、これで終わりではありません。mod_rewriteとしての設定はこれで十分なのですが、本来の目的はSEO対策、つまり検索サイトのbotが当該ホームページをクロールしにきたときに、そのページのどこかにこの静的URL(2)で書かれたリンクがあって、当該ホームページにそのページが存在することを知ってもらわねばなりません。
3.wordpressでの静的リンク設定
予め当方環境では、xoops用のwordpressモジュールである、WordPress Me 0.6.0aを使っていることを記しておきます。
当該サイトに、肝心の静的URLで示される日記ページがあることをbotはどのようにして知るでしょうか?人間のユーザであれば、wordpress Meの「最近の投稿」ブロックのリンクから辿るでしょう。つまり、この「最近の投稿」ブロック(を含め、そのほかの関連ブロック)からのリンク表記も静的URLになっていなければなりません。デフォルトでは、このへんのリンクは、マウスカーソルをリンクにあわせてもらえばわかりますが、依然として動的表記のままです。つまりこれではSEO対策になりません。
サイトのページ上で現れるそのほかのリンクも全て静的URL表記になっていなければ結果としてBotは肝心の各日記ページを登録できないのです。幸いにもwordpressでは、$Permalinkという変数で、各モジュール内部でのリンク表記が記述されており、この$Permalinkを適切に設定してやることで、複数あるブロックのphpのファイルや、htmlテンプレートを書き換える、ということをしなくて良いようになっています。
xoopsの管理者メニューの中で、「wordpress」モジュールを選んで、
wordpressオプション
ブロック管理
一般設定
のうち、「wordpressオプション」を選びます。画面が切り替わると、複数あるオプションカテゴリのうち、一番最後に「Permalinks」という項目があります。これを選択します。このPermalinksの設定画面で、$permalinkという変数に置換文字列の指定をします。この文字列中で使える変数に関しては、詳細説明がこの画面にありますので、詳しくはそれを参照していただくとして、当方は下記の文字列を指定しました。
/%year%/%monthnum%/%day%/%post_id%/
その下にある「Permalinks構造の更新」というボタンを押すと、その下のテキストエリアに、ReWriteEngine onという文字列から始まる、複雑な文字列が生成されますので、これを全て選択してクリップボードにコピーし、(つまりWindowsであれば、ctrl+a, ctrl+c、MacならCommand+a, Command+c)、これを先ほどの2.の.htaccessに全てコピーします。
これで、2007/04/22のid=97の日記記事の場合は、/2007/04/22/97/という文字列に変換され、
http://www.sailweb.net/modules/wordpress/2007/04/22/97/
という静的URLでアクセスできるようになります。またwordpressの各ブロックのリンクもこの$permalinkの設定によって、すべてこれを使ったリンクを生成するようになるので、検索エンジンのbotがクローリング時にちゃんと情報を取り込んでくれるようになります。
これで、大元のSEO対策は終了です。
2.に記した一般的なmod_rewriteのやりかたは、wordpressモジュールに限らず使えますので、そのほかのモジュールなどで静的リンク書き換えをしたい場合は利用すると良いでしょう。mod_rewriteにはそのほかにも、エラーページのカスタマイズや、直リンク禁止の処理など、多様な処理が可能なので、さらに一歩進んで勉強したい場合は下記あたりを参照すると良いでしょう。
Apacheチュートリアル::.htaccess
Apache Module mod_rewrite
↓↓↓「いいね!」と感じたら、クリックしてBlogRanking投票お願いします(^o^)/