rNoteで404
Yahoo!検索のキャッシュをチェックしていると、既に存在しないページが目立つ。
存在しないページであっても、.htaccessによってrNoteに引数を渡しているため、
本来はサーバーが404の応答をすべきところで、rNoteが200を返しているのだ。
rNoteは仕様上、記事のカテゴリを変更するとURLも変わってしまうので、
その際ただ404にするのではなく、似たエントリを発見したとかいって誘導してくれる。
コレはとても賢い機能で、ユーザーフレンドリーだと思うが、
Yahoo!のロボットに対しては、やはりキッパリと404で応答しないといけないようだ。
rNote導入以前に存在していたURLが未だにキャッシュされているわけだが、
Yahoo!が余計な所にアクセスしたら404で応答し、
人間がアクセスしたらカテゴリの移動がないか検索してrNoteのエラーを返すように、
何とか対応できないかと考えてみた。
で、この方法で良いかどうかはわからないが、
header( “HTTP/1.1 404 Not Found” );
コレをrnote.phpのswitch/caseで404判定してる部分に追加。
ブラウザからのアクセスでは今まで通り、rNoteのエラーページが表示され、
HttpWebReqHeadでHEAD送信すると404エラーを出すようになった。
これで求める動作を実現できたのだが、Yahoo!が期待通りに動くかどうかはわからない。
そもそも、Yahoo!がGETの前にHEADを送信しているかどうかも不明。
さらに、似たエントリがない場合は404で良いが、ある場合は301で転送したい。
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: “.MakeLinkUrl($fn0));
exit;
コレをERR_MSG_404_REFIND処理と置き換えればいい。
これで、似たエントリーがあるなどと回りくどい説明無しに、そのページに飛ぶ。
さて、このサイトにはもう一つ仕掛けがしてあって、
rNoteで補足することになってない拡張子のファイルだと、サーバーが404の判断をするが、
たとえ404が発生しても302でサイトトップに転送するように.htaccessに書いてある。
これは、既にないファイルがリンクをもらった場合に、加点をトップに転送するためだが、
その目的は301でなければ達成できないと知っているにもかかわらず、
やり方がわからないのでとりあえず302で書いている。
こっちについては別に何の問題も発生していないようだが、
似た問題が発生する可能性はあるわけなので、その対処もやらなきゃな。