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