Googleのこのページによると,パラメータによって生成される動的なページはロボットに巡回されにくいようです.
確かに,自分のページのタイトルで検索してもヒットしない事が多々あります.
もっと幸せになれるように,pukiwikiに静的なページを作ってもらいましょう.

追記
アクセスログを読んでみると,日本語.htmlはほとんどbotに巡回されないようです.2006/01/29

前準備

ページを作成するたびに,htmlファイルを出力する改造・・・ は何だか疲れそうです.もっと楽をしましょう.
そこで,ApacheのRewriteモジュールを使う事にします.
このモジュールは,要求されたURLをApacheの内部で別のURLとして扱う為のモジュールです.
たとえば,「/hogehoge.html」を表示しようとした時に,こっそり「/index.html?hogehoge」を表示しちゃう.という事が出来るようになります.
この設定は.htaccessでする事ができます.私のページでは

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)\.html /index.php?$1

このようにしてあります.
Rewriteモジュールの使い方は,
Apache URL Rewriting Guide
URLを書き換えろ!
を参考にすると良いかと思います.
これによって,「fuu.html」というURLにアクセスされた時,実際には「index.php?fuu」を表示させる事が可能になります.
これが出来たら,pukiwikiによって作成されるリンクを,「index.php?fuu」から「fuu.html」にするように改造してやればOKです.

生成されるリンクをいじる

いよいよpukiwikiにメスを入れます.pukiwikiのリンクを作っている部分は無効なWikiNameの処理でも出てきた部分ですね.
lib/make_link.phpの702行目あたりからリンクを作る部分です.今回は有効なページの所ですね.ここを

if (is_page($page)) {
        // Hyperlinks
        $passage = get_pg_passage($page, FALSE);
        $title   = $link_compact ? '' : ' title="' . $s_page . $passage
        //ここを消す
        //return '<a href="' . $script . '?' . $r_page . $anchor . '"' .
        //      $s_alias . '</a>';
 
        //ここを追加
        $r_page=ereg_replace("%2F", "/", $r_page);
        return "<a href=\"$script$r_page.html$anchor\" $title\>$s_alias</a>";

このように変更します.(8/25:若干修正)
修正内容

hrefの値をs_pageにしていた.これだとリンク先のURLがエンコードされません.*1ロボットはアルファベット以外の文字が含まれるURLは無視しているようなので,エンコード済みのr_pageを使うようにしました.また,%2Fは/に置換しています.

この時, pukiwiki.ini.phpの$scriptの値を指定していない場合,ディレクトリ構造の関係で動作がおかしくなる事がある*2ので

$script = 'http://www.flightless-wing.com/';

のようにpukiwikiのルートのURLを指定しておきましょう.

もう少し

これで主なリンクは全て「ページ名.html」になるはずです.
しかし,プラグイン等によって作成されるンクの中には,独自にAタグを作っている物があります.
もちろんこれらのプラグインによって作られたリンクは元の形式のままです.
もし気になるなら,プラグインを直接いじる必要があります.

プラグインを修正する

  • 主な改造の必要なプラグイン
    • recentプラグイン(最近更新したページ)
      //plugin/recent.inc.php 50行目付近
      $pg_passage = get_pg_passage($page, FALSE);
      if($page == $vars['page']) {
             // No need to link itself, notifies where you just read
             $items .= " <li><span title=\"$s_page $pg_passage\">$s_page</span></li>\n";
      } else {
             //ここをコメントアウト
             //$items .= " <li><a href=\"$script?$r_page\" title=\"$s_page $pg_passage\">$s_page</a></li>\n";
              
             //ここを追加
             $items .= " <li>".make_pagelink($s_page, "", "", $r_page.$pg_passage)."</li>\n";
      }
      
      のように変更しましょう.

このようなプラグインについては,いじりしだいメモを残しておこうと思います.

プラグイン以外

プラグイン以外にも一部修正の必要な所があります.

  • lib/html.php

    lib/html.phpの中には

    $_LINK['add']      = "$script?cmd=add&amp;page=$r_page";
    $_LINK['backup']   = "$script?cmd=backup&amp;page=$r_page";
    $_LINK['copy']     = "$script?plugin=template&amp;refer=$r_page";
    $_LINK['diff']     = "$script?cmd=diff&amp;page=$r_page";
    

    のような部分があります.ここでは$_LINK連想配列に様々なページへのリンクが書かれています.
    この内,

    $_LINK['help']  $_LINK['recent']  $_LINK['top']

    の部分をそれぞれ

    $_LINK['help']     = "$script" . rawurlencode($help_page).".html";
    $_LINK['recent']   = "$script" . rawurlencode($whatsnew).".html";
    $_LINK['top']      = "$script" . rawurlencode($defaultpage).".html" ;

    のように,変えてやりましょう.

    $_LINK['add']      = "$script?cmd=add&amp;page=$r_page";

    のような,コマンドを実行する為の部分は,検索エンジンにクロールされなくてもかまわないので放っておきましょう.

おまけ(キッズgoo対策)

pukiwikiのcommentプラグインを使ったページをキッズgooで表示しようとすると,  「ごめんね。ページがひょうじできませんでした。」 とフィルタリングされてしまいます.何故か気になって調べてみました.
その結果.コメントの「挿人」*3の部分でフィルタリングされているようです.キッズgoo面白すぎです.
特に子供が見て困る内容ではないので,この部分を変えておきます.
ja.lng.phpの229行目付近の$_btn_commentの値を「コメントを送る」等,疑いようの無い言葉に変えておきましょう.

//ja.lng.phpの229行目付近
$_btn_comment = 'コメントを送る';

これでキッズgooからも表示されるようになります.同じ検索エンジン関係の話でした.

コメント欄

  • Google,キッズgoo・・・ 他に面白いものはないでしょうか?
    Safii 2005-08-24 00:11:56 (水)

お名前:

*1 ページ名.htmlのように
*2 index.phpからの相対パス指定の部分がおかしくなる
*3 ここではハイルに変えてますが