不明なflavour回避パッチの問題点

かなり前に書いた不明なflavourというエントリで紹介したパッチは概ねうまく機能しているのだけど、検索エンジンなどで意図しないURLが検索結果に出てきてしまうことがあるという問題が。通常は多くのページでリンクを張られている.htmlで終わるURLの方が圧倒的に強く、Web全体からの検索などではあまり問題にならないが、サイト内検索などではかなりゴミとして目立ってしまう。ので、redirectif_noflavourを使い、存在しないflavourの場合は.htmlで終わるURLにリダイレクトさせることにした。

redirectif_noflavourはflavourが見つからなかった場合、設定で指定したflavourのURLに302 Foundでリダイレクトさせるというプラグイン。301 Moved Permanentlyを使いたかったり、設定させなくても$blosxom::default_flavour使えば良さそうと思ったので、

# Blosxom Plugin: redirectif_noflavour
# Author(s): motormean, Kyo Nagashima <kyo@hail2u.net>
# Version: 2006-10-04
# Blosxom Home/Docs/Licensing: http://www.blosxom.com/

package redirectif_noflavour;

use strict;

# --- Configurable variables -----------

# --- Plug-in package variables --------

# --------------------------------------

sub start {
  1;
}

sub skip {
  my $path = $blosxom::path_info;

  do {
    return 0 if -e "$blosxom::datadir/$path/story.$blosxom::flavour";
  } while ($path =~ s/(\/*[^\/]*)$// and $1);

  $path = $blosxom::path_info;
  $path =~ s/\..+?$/.$blosxom::default_flavour/;
  $blosxom::header->{-status} = '301 Moved Permanently';
  $blosxom::header->{-Location} = "$blosxom::url/$path";
  $blosxom::output = '';

  return 1;
}

1;

と、少しだけ改造した。自前でflavourを漁らなくても何とかなりそうな気はする。けどコード考えるのがめんどくさい。303 See Otherのが良いかな?微妙だ。移動させたわけじゃないから303 See Otherのほうが妥当かもしれない。

こういうケースは404 Not Foundでももちろん良いと思う。というか本来は404 Not Foundであるべきなのだけど、301 Moved Permanently(などのリダイレクトするHTTPステータスコード)を使った方が訪問者を逃さないので、サイト・オーナー的にはプラスだと思う。訪問者にも(多くの場合は)プラスになるはず。

redirectif_noflavourは使いたくないけどerror flavourなページを検索エンジンに拾わせたくないなどという場合は、blosxom.cgiの最後のに書いてあるerror flavourの定義に、

<meta name="robots" content="noindex, nofollow" />

といったロボット対策のmeta要素を追加するとかが良さそう。