検索結果ページのURLを書き換える

Movable Typeの検索用ファイル「mt-search.cgi」はスパム行為の標的にされるため、ファイル名を変更して運用しているが、変更後のファイル名が拾われれば再び標的にされ、いたちごっことなってしまう。「<a href="javascript:void(0)" onclick="location.href=~」は「onkeypress」属性でも書けと言われればタグの記述が長くなるので出来れば使いたくないし、「rel="nofollow"」を付けていても無視するロボットがあるらしい。どうしたものかと思い、せめてもの抵抗を。

例えば、キーワード「北海道」で検索した結果を表示する頁のURL。

8287.gif

↓変更後

8288.gif

こんな感じで、見た目もすっきり! 以下、自分メモ。

.htaccess

通常の検索結果を https://umakaras.net/keyword/北海道
タグ一覧のURLを https://umakaras.net/tag/北海道
として、検索表示を50件、含めるブログIDで「1」「2」「3」の三つを指定、mt-search.cgiをhoge-search.cgiに変更して運用する場合。

RewriteEngine on
RewriteRule ^tag/(.*)$ /mt/hoge-search.cgi?tag=$1&limit=50&IncludeBlogs=1,2,3 [QSA,L]
RewriteRule ^keyword/(.*)$ /mt/hoge-search.cgi?search=$1&limit=50&IncludeBlogs=1,2,3 [QSA,L]

以上を「.htaccess」ファイルに記述し、サーバーにアップ。

検索フォーム

MT使用者ではない場合でも、<mt:~>部分を各自のアドレスなどに置き換えて考えれば、応用出来る筈。

初期設定でのタグ

<form method="get" action="<mt:CGIPath><mt:SearchScript>">
<input type="text" id="search" class="ti" name="search" value="<mt:SearchString>">
<input type="hidden" name="IncludeBlogs" value="<mt:SearchIncludeBlogs>">
<input type="hidden" name="limit" value="<mt:SearchMaxResults>">
<input type="submit" value="検索">
</form>

変更後、「hidden」の値は「.htaccess」に書いてあるため、記述が減っている。

<form method="post" action="https://umakaras.net/keyword/">
<input type="text" id="search" name="search" size="31" value="">
<input type="submit" value="検索">
</form>

一行目の「method」が「get」から「post」に変更になっている。

タグリンク

ブログ記事テンプレートやタグクラウドなどに記述しているタグのリンクを変更。

<mt:TagSearchLink>

または

<mt:CGIPath><mt:SearchScript>?tag=<mt:TagName encode_js="1">&limit=50&IncludeBlogs=1,2,3

など。

↓変更後

https://umakaras.net/tag/<mt:TagName encode_url="1">

検索結果テンプレート

検索結果の件数が多い場合は表示するページが複数にまたがり、前後ページへのリンクも表示される。つまり、初期設定のままでは、せっかく隠したファイル名がばれてしまう。

これも.htaccessで指定すれば良いのだろうが、そもそも大量の検索結果を全て見る人もいないだろうから、前後リンクは思い切って外した。その代わり、一ページにつき20件という初期設定よりも多い50件を表示させることに。複数キーワードによる検索を勧める文章も付記。

前後リンクの記述の他、ヘッダーで読み込んでいるJava Scriptタグも要らなくなったので削除。htmlソースが減ってファイルサイズが軽くなり、読み込みも少し早くなった筈。

その他

検索用ファイル名(mt-search.cgi)を変更した場合、以前は「mt-config.cgi」に

SearchScript hoge-search.cgi

と記述していたが、テンプレートから<mt:SearchScript>が消えたので、これもわざわざ記す必要が無くなった。

あくまでも「見せ掛け」だけなので、「keyword」と「tag」というディレクトリ(フォルダ)はサーバーには存在せず、作成自体不要。