しばらく間が空いてしまった。WordPress自体があまり手がかからないようで、ひととおり設定してしまえば特に問題もなく、書くこともない。
今回の件は WordPress カテゴリに含めるのも何だという気もするが、その関連ということで。
WordPress導入時、.htaccess
に自動的に
# BEGIN WordPress <ifmodule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </ifmodule> # END WordPress
と書き込まれる。実在するファイル名・ディレクトリ名でない場合、/index.php
が呼ばれるようになる。
さて、WordPress 導入以前に同じサイトで某日記システムを使っていたのだが、その URL は
http://www.example.com/?date=20050325
のようになるものであった。現在この URL で指示されるものはないのだが、上記により、404 エラーにはならず、トップページが表示される。
検索エンジンに旧い形式の URL が残っていて、しかもいま WordPress で作られたトップページがその旧い形式の URL の内容として着々と更新され続ける。WordPress で書いた最新の記事の内容が、http://www.example.com/?date=20050325
のものとして検索されてしまうのだ。
放っておいてもその連鎖は断ち切れないので、ロボット対策を参考に、.htaccess
に次のように書き加えてみた[1]。
<ifmodule mod_rewrite.c> RewriteCond %{HTTP_USER_AGENT} archiver [NC] RewriteCond %{QUERY_STRING} .*date=200.* RewriteRule ^.*$ - [G,L] RewriteCond %{HTTP_USER_AGENT} crawler [NC] RewriteCond %{QUERY_STRING} .*date=200.* RewriteRule ^.*$ - [G,L] RewriteCond %{HTTP_USER_AGENT} robot [NC] RewriteCond %{QUERY_STRING} .*date=200.* RewriteRule ^.*$ - [G,L] RewriteCond %{HTTP_USER_AGENT} slurp [NC] RewriteCond %{QUERY_STRING} .*date=200.* RewriteRule ^.*$ - [G,L] RewriteCond %{HTTP_USER_AGENT} spider [NC] RewriteCond %{QUERY_STRING} .*date=200.* RewriteRule ^.*$ - [G,L] RewriteCond %{HTTP_USER_AGENT} googlebot [NC] RewriteCond %{QUERY_STRING} .*date=200.* RewriteRule ^.*$ - [G,L] RewriteCond %{HTTP_USER_AGENT} msnbot [NC] RewriteCond %{QUERY_STRING} .*date=200.* RewriteRule ^.*$ - [G,L] RewriteCond %{HTTP_USER_AGENT} findlinks [NC] RewriteCond %{QUERY_STRING} .*date=200.* RewriteRule ^.*$ - [G,L] </ifmodule>
旧URLへのアクセスは、(1)せっかく検索して見つけて来てくれる人には今のトップページをみていただく (2)検索ロボットなら 410 エラーを返す、とした。こうしておけばそのうち検索エンジンから消えるだろうし、昔の記事に直接リンクしている人はほぼいないだろうから、旧URLへのアクセスは絶滅するだろうと考えた。
—-
という対策をとったのが実は1ヶ月前。だいたい思ったとおりに絶滅に向かっていったのだが、Yahoo の Slurp というのは行儀が悪いのか[2]、なかなか根絶できない。
そして今日、検索で旧 URL をたどってくる人がなぜか増えている。確認すると、.htaccess
の当該部分がすっかり消えている。ファイルの時刻を見ると、絶対に自分で何かをした時刻ではない。WordPress がこれを書き換えることはないと思うし、そうするとこれを置いているレンタルサーバの問題なのだろうか。なんだか気持ちが悪い。
こんにちは
Permalink Redirect というプラグインではどうでしょう。
/index.php? へアクセスした人を指定してあるパーマリンクへリダイレクトしてくれるプラグインです。
http://fucoder.com/code/permalink-redirect/
ありがとうございます。
ちょっと書き足りなかったのですが、乗り換えに際して過去の記事を引き継いだのではなく、内容的にはまったく別のものとして出発しましたので、個々の記事のリダイレクトは必要ないのです。
人間が旧URLをたどってきてトップページを見ることになるのは、そのままでかまわないのですが、問題は検索エンジンに旧タイプURLが残っていて、それがWordPressによるmod_werite設定によっていつまでも有効なまま生き続けていることでした。
Permalink Redirectは301を返すようですね。Yahooのヘルプを見ても、今回のケース(?パラメータ付をトップページへ)はどう扱われるのか判然としません。