サイト全体に対するロボット検索の抑止 & 特定頁の抑止

2006-2-20[月]

 Wikiを更新したり、プラグインをいろいろ弄ったりしてる場合、 いきなり本サイトを弄ってお試し、ってわけには行かないので、 実験用の(隠し)サイトを用意したりしてるわけです。

で、これらは基本的に未公開だしリンクさえ張られなければ大丈夫な んでしょうが、多少、念をいれて、ロボット検索避け、を記述しておきたいなあ と思うわけです。

~.skin.cgi にてhtmlのhead生成があるのでそこに追記すりゃあえーだろと、 やってみましたが、実はすでに PyukiWiki のほうで Editや検索ページ対策で 全ページにロボット歓迎/避けどちらかの<meta>タグが組み込まれるように なっていたのでした...
避け/歓迎を両方かいたらどうなる?... なんてこと考える暇あったら修正で、 ま、判定があるわけだから、逆に言えば、その判定の箇所に変数で判定を1つ 追加すればいいはずだ、で、みてみれば楽チンに。

info/setup.ini.cgi か pukiwiki.ini.cgi に

$::no_robots=1;

のようなロボ禁指定の変数を用意しておきます。

lib/wiki.cgi 中の sub meta_robots 内の最初のif文の||条件、

sub meta_robots {
    my($cmd,$pagename,$body)=@_;
    my $robots;
    my $keyword;
    if($cmd=~/edit|admin|diff|attach/
        || $::form{mypage} eq '' && $cmd!~/list|sitemap|recent/

のようになっている || で設定している条件の一つとして

        || $::no_robots != 0

を追加します。

また lib/autometarobot.inc.pl 中の meta_robots にも同様な処理があるので、 そちらにも

|| $::no_robots != 0

を追加します(役割的にこちらはしなくても問題なさそうだけど)。

で、とりあえず、

<meta name="robots" content="NOINDEX,NOFOLLOW,NOARCHIVE">
<meta name="googlebot" content="NOINDEX,NOFOLLOW,NOARCHIVE">

がhtmlのヘッダ部に入るようになります。


特定ページ対するロボット検索の禁止

上記ルーチンを組み込んだ状態で、ただし

$::no_robots=0;

にして、以下の内容

sub plugin_no_robots_convert {
    $::no_robots= 1;
    return ' ';
}
1;
__END__

のプラグイン(no_robots.inc.pl)を用意すれば、

#no_robots();

を頁に書くことで、特定頁のロボット避けになります。