SearchResultsCache プラグインを導入し、MovableTypeの検索 CGI の動作をキャッシュすることで、検索結果の表示レスポンスが大きく向上し、加えて検索処理にかかるサーバ負荷を大きく低減することができました。検索結果ページには、指定されたキーワードやタグに応じて抽出された記事のみが列挙されるわけですから、それらのキーワードを必然的に多く含む情報密度の高いページであると考えられます。つまり検索結果ページは SEO 的に見ると価値の高いランディングページであると言えます。
この SearchResultsCache プラグイン自体は、これら検索結果ページを Google や Yahoo! などの検索エンジンにインデックスさせることで、ランディングページとして機能させることを本来の目的として開発されました。実際に、SearchResultsCache プラグインを導入してキーワードやタグ検索結果ページのそれぞれについて、検索エンジンのインデックス対象にしたところ、検索エンジンを経由してのこれら検索結果ページへの訪問者が新たに生まれたことで、サイト全体でのビジターが1~2割程度増加しています。
サイト検索の手法として、MovableType の検索用 CGI を使用せず、JavaScript (もしくは Ajax) を利用した高速検索がありますが、現在の検索エンジンのクローラが JavaScript を理解しないことを考えると、これらの仕組みは完全に無視されてしまいます。先にも述べた通り、検索結果ページとは、キーワードやタグによって抽出された高い関連性を持つ記事が並ぶ情報密度の高い良質なページであって、ランディングページとして素質十分なわけです。それ故に、下手に JavaScript などを使ってこの素材をみすみす捨てるのは勿体無いだけです。これらのページを積極的に活用することは SEO においても非常に有益ではないでしょうか。そこで、これら検索結果ページを SEO の一環として活用する場合にクリアすべき点は以下の二つであると考えました。
一番の問題は検索 CGI による大きなサーバ負荷で、MovableType の検索用 CGI による処理はデータベースを総舐めするために決して軽いとはいえません。検索エンジンのクローラがサイトをクロールする頻度はある程度適切に調整されているとは云え、Google、Yahoo!、MSN などなど数ある検索エンジンからキーワード毎に検索 CGI が実行されるわけです。また中には絨毯爆撃をしてくる行儀の悪いロボットも未だに存在するため、検索 CGI の負荷は大きな問題になり得ます。
SearchResultsCache プラグインを導入することで、MovableType 標準の検索 CGI の動作を爆速化します。速度面での改善だけではなく、CGI のサーバへの負荷も大幅に軽減します。
通常、mt-search.cgi による検索では、検索の度に全ての記事についてデータベースへの問合せや文字列走査が行わるため、サーバ負荷が非常に高くなってしまいます。検索エンジンのクローラによる CGI への連続的なアクセスがあると、最悪サーバを落としたり、CGI の利用に制限がかけられる恐れがあります。そのため、以前までは robots.txt を利用して検索 CGI については検索エンジンのクロールが行われないように制限をしていました。
しかし、プラグインの導入によって、そのサーバ負荷を特に憂慮する必要性が薄れたと考えられるため、現在は検索結果ページついても検索エンジンのクロールを許可し、インデックスが行われるように制限を解除しています。万が一にも絨毯爆撃されたとしても(CGI は起動されますが)キャッシュ内容を返してすぐに終了するので、クローラの訪問が多い日も安心です。
この作業は必須ではないかもしれません。検索結果に対して何らかの URL が与えられていれば問題はないでしょう。最近では静的 URL と動的 URL との違いによるインデックスにおける優劣は減少しつつありますが、やはり静的 URL の方が見た目がスマートで扱いやすい、という理由からです。mod_rewrite を利用ことで検索用 CGI へのリクエストを簡単に静的 URL のように見せることができます。URL に複雑なクエリ文字列を含まないので、記事内でキーワード/タグ検索結果ページを参照する場合にもスマートに URL を記述でき便利になります。
そして、この URL はパーマリンクとして機能します。その URL にアクセスすることで、キーワード/タグの記事一覧が表示されることが重要です。
### Straight Search RewriteRule ^/archive/keyword/(.+)$ /cgi-bin/mt/mt-search.cgi?IncludeBlogs=1&Template=magicvox&search=$1 [QSA,L] ### Tag search RewriteRule ^/archive/tag/(.+)$ /cgi-bin/mt/mt-search.cgi?IncludeBlogs=1&Template=magicvox&tag=$1 [QSA,L]
当サイトでは .htaccess 内に上記のような RewriteRule を設定し、実際には mt-search.cgi によって生成されている"MovableType"をキーワードを含む記事一覧ページや、"プラグイン"タグの記事一覧ページを何の変哲の無い静的 URL としてアクセスできるようにしています。
そして、このように記事中にキーワード/タグ検索結果ページへのリンクを書いておけば、通常通りに検索エンジンのクロール対象になりますし、また SearchResultsCache プラグインによるキャッシュが機能するため、クローラによる CGI への集中砲火を本気で憂慮する必要がなくなります。
検索用 CGI の負荷軽減策については、MovableType のプラグインを利用した例を示してありますが、基本的な考え方はほぼ同じだと思います。どんなニッチなキーワード/タグであっても自動的に関連記事が抽出されたページを無限に生成することできますし、また、タグ機能については「タグAに関連するタグのリスト」などといったリンクを機械的に生成できるため、サイト内の被リンク数を大きく増やすことができます。SEO 上での効果以上に、ビジタに対して様々な情報の切り口をもって記事をナビゲーションできるというのも大きな魅力です。