記事本文
検索時の Throttling メッセージを変更しました
これは元々気付いていたけれど面倒で ( おい ) 対応していなかった件なのですが、 IRC チャンネル #Team-One で SEOについての覚書の土屋 裕美さんと話していて、 Movable Type では短時間に連続して検索が実行された際の Throttling メッセージが適切なものになっていないという問題がある件を「ユーザの誤解を招くよね」という流れになったので、腰を上げて対応することにしました。
あ、 Movable Type を使って weblog を書いている人でなければ、次の段落以降の大部分は読み飛ばしてかまいません。 Movable Type による weblog を閲覧するだけの人はまとめ部分だけをどうぞ。
Movable Type の日本語版は、パッケージ内の lib\MT\L10N\ja.pm で各種システムメッセージを日本語化していますので、それを開いてみます。
すると、 850 行目 (Movable Type 3.33 の場合。バージョンによって行数は異なります ) に
'You are currently performing a search. Please wait until your search is completed.' => '現在検索中です。検索が終わるまでお待ちください。',
と書かれてあります。
「現在検索中です。検索が終わるまでお待ちください。」ということは、そのまま待っていれば検索が完了しそうな印象がありますが、これは ThrottleSeconds の値 ( 初期値は 20) の秒数よりも短い間隔で検索が実行されたために Throttling したということであり、そのまま待っていても検索は完了しません。
( なお、 Throttling については Throttling 機能とはで解説しています。 )
じゃあこれは日本語訳が間違っているのかというとそういうわけではなく、 You are currently performing a search. Please wait until your search is completed. というメッセージの訳としては間違っているものではありません。 要するに元々のメッセージ自体のポイントがズレているということで。
ということで、 lib\MT\L10N\ja.pm を書き換え、
'You are currently performing a search. Please wait until your search is completed.' => 'このサイトでは ThrottleSeconds を 30 に設定しているために、 30 秒以内の検索の連続実行は制限されています。少し時間を置いてから再度検索してください。 ThrottleSeconds は検索実行以外にも spammer による連続コメント投稿のブロックなどに利用されるため、この値を小さくする予定は今のところありません、ご了承願います。なお、 ThrottleSeconds については http://hxxk.jp/2006/09/07/2310#sub-20060907-02 を参照してください。',
という Throttling メッセージを出すように変更しました。
簡単にまとめると、 Movable Type を使っているサイトで検索をして、「現在検索中です。検索が終わるまでお待ちください。」というメッセージが出たら、 20 秒ほど待ってもう一度検索 ( そのメッセージが出ているページをリロード ) しないと検索は完了しないよ ! でも hxxk.jp は mt-config.cgi をちょっといじってるのでもう少し長く、 30 秒ほど待ってから検索してね ! というお話でした。
hxxk.jp の検索結果テンプレートソース 20061128 版
良い機会なので、現在使っている検索結果のテンプレートのソースを公開しておきますね。 ( この間と同じ話題転換とか言わないように )
Movable Type のテンプレートを公開しているサイトって結構多いのですが、検索結果のテンプレートってあまり練り込まれていないことが多いので、恥ずかしながら自分のを晒してみようという次第です。 ソース内で改行することによって、その改行が空白文字として扱われるのを避けるためにやたら一行が長い部分がありますが、そこは適宜見やすいようにエディタで書き直してください。 また、 head 要素内やフッタ部分などは hxxk.jp にしか使えないような記述もありますが、そこも適宜除外していただければ。
<?xml version="1.0" encoding="<$MTPublishCharset$>" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="<$MTDefaultLanguage$>" xml:lang="<$MTDefaultLanguage$>">
<head profile="http://purl.org/net/ns/metaprof">
<meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta name="author" content="真琴" />
<meta name="generator" content="<$MTProductName version="1"$>" />
<title><$MTBlogName encode_html="1" remove_html="1"$> - <MTSearchResults><MTBlogResultHeader><MTIfStraightSearch>"<$MTSearchString$>" による全文検索結果<MTElse>タグ "<$MTSearchString$>" が設定された記事</MTElse></MTIfStraightSearch> : <$MTSearchResultCount$> 件</MTBlogResultHeader></MTSearchResults><MTNoSearchResults><MTIfStraightSearch>"<$MTSearchString$>" による全文検索結果 : 見つかりませんでした<MTElse>タグ "<$MTSearchString$>" が設定された記事はありません</MTElse></MTIfStraightSearch></MTNoSearchResults><MTNoSearch>検索キーワードが入力されていません</MTNoSearch></title>
<link rel="stylesheet" href="<$MTBlogURL$>common/css/hxxk005.css" type="text/css" title="hxxk005" />
<MTNoSearch><MTElse><link rel="alternate" type="application/atom+xml" title="<$MTBlogName encode_html="1" remove_html="1"$> - <MTSearchResults><MTBlogResultHeader><MTIfStraightSearch>"<$MTSearchString$>" による全文検索<MTElse>タグ "<$MTSearchString$>" が設定された記事一覧</MTElse></MTIfStraightSearch>の Feed</MTBlogResultHeader></MTSearchResults>" href="<$MTCGIPath$><$MTSearchScript$>?<MTIfStraightSearch>search<MTElse>tag</MTElse></MTIfStraightSearch>=<$MTSearchString encode_url="1"$>&Template=feed&IncludeBlogs=<$MTSearchIncludeBlogs$>" /></MTElse></MTNoSearch>
<link rel="help" href="/about/site" title="このサイトについて" />
<link rel="index" href="/about/map" title="サイトマップ ( 全記事一覧 )" />
<link rel="start" href="<$MTBlogURL$>" title="<$MTBlogName encode_html="1" remove_html="1"$>" />
<link rel="last" href="<$MTBlogURL$>latest" title="<$MTBlogName encode_html="1" remove_html="1"$> - latest" />
<link rel="contents" href="<$MTBlogURL$>all" title="<$MTBlogName$> - 記事目次" />
<script type="text/javascript" src="<$MTBlogURL$>appendix/showhide.js"></script>
</head>
<body class="search" id="hxxk.jp">
<p id="topic-path">
http://<a href="<$MTBlogURL$>"><$MTBlogHost exclude_port="1"$></a>/<MTIfStraightSearch>search<MTElse><a href="<$MTBlogURL$>tag.php" title="タグ一覧">tag</a></MTElse></MTIfStraightSearch>/<em><$MTSearchString encode_url="1"$></em>
</p>
<ul id="common-navi" title="サイト全体に共通するページのナビゲーション部分です。">
<li><a href="/about/site">hxxk.jp について</a></li>
<li><a href="/about/map">サイトマップ</a></li>
</ul>
<h1><a href="<$MTBlogURL$>"><$MTBlogName encode_html="1" remove_html="1"$></a></h1>
<ul id="directories">
<li><a href="/latest" title="最新記事 - <MTEntries lastn="1"><$MTEntryTitle remove_html="1"$></MTEntries>">Latest</a></li>
<li><a href="/" title="<$MTBlogName encode_html="1" remove_html="1"$>">Home</a></li>
<li><a href="<$MTBlogURL$>all" title="記事目次">Log</a></li>
<li><a href="<$MTBlogURL$>moment/">murmur</a></li>
</ul>
<MTNoSearch>
<MTElse>
<dl id="description">
<MTIfStraightSearch>
<dt>"<$MTSearchString$>" の全文検索 Feed について</dt>
<dd>
<p>
Feed リーダを用いて "<$MTSearchString$>" の全文検索結果の Feed を講読すると、今後投稿される記事において "<$MTSearchString$>" という語句が記事内に含まれたもののみの更新情報を得ることができます。
</p>
<p>
<a href="<$MTCGIPath$><$MTSearchScript$>?search=<$MTSearchString$>&Template=feed&IncludeBlogs=<$MTSearchIncludeBlogs$>"><img src="<$MTStaticWebPath$>images/status_icons/feed.gif" width="9" height="9" alt=" "/>"<$MTSearchString$>"の全文検索 Feed を取得</a>
</p>
</dd>
<MTElse>
<dt>"<$MTSearchString$>" のタグ限定 Feed について</dt>
<dd>
<p>
<MTSetVar name="search_feed_text" value="フィードを取得">
<MTSetVar name="search_feed_param" value="tag">
Feed リーダを用いて "<$MTSearchString$>" というタグが設定された記事のみの Feed を講読すると、今後投稿される記事において "<$MTSearchString$>" というタグが設定されたもののみの更新情報を得ることができます。
</p>
<p>
<a href="<$MTCGIPath$><$MTSearchScript$>?tag=<$MTSearchString$>&Template=feed&IncludeBlogs=<$MTSearchIncludeBlogs$>"><img src="<$MTStaticWebPath$>images/status_icons/feed.gif" width="9" height="9" alt=" "/>"<$MTSearchString$>"のタグ限定 Feed を取得</a>
</p>
</dd>
</MTElse>
</MTIfStraightSearch>
</dl><!-- dl#description END -->
</MTElse>
</MTNoSearch>
<div class="section search" id="search-results">
<MTSearchResults>
<MTBlogResultHeader>
<h2><MTIfStraightSearch>"<em><$MTSearchString$></em>" による全文検索結果<MTElse>タグ "<em><$MTSearchString$></em>" が設定された記事</MTElse></MTIfStraightSearch> : <$MTSearchResultCount$> 件</h2>
<p>
"<em><$MTSearchString$></em>" という<MTIfStraightSearch>検索キーワードを含む<MTElse>タグが設定された</MTElse></MTIfStraightSearch>記事を日付の新しいものから並べ、記事のデータを表示します。
該当する記事を表示したのち、ブラウザのページ内検索機能でもう一度検索すると、目的の情報にスムーズに辿り着くことができると思います。
</p>
</MTBlogResultHeader>
<dl id="entry-<$MTEntryID$>">
<dt><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a> - <$MTEntryDate format="%Y/%m/%d %H:%M"$></dt>
<dd>
<p>
<$MTEntryExcerpt$>
</p>
<dd>
</dl>
</MTSearchResults>
<MTNoSearchResults>
<h2><MTIfStraightSearch>"<em><$MTSearchString$></em>" による全文検索結果 : 見つかりませんでした<MTElse>タグ "<em><$MTSearchString$></em>" が設定された記事はありません</MTElse></MTIfStraightSearch></h2>
<MTIfStraightSearch>
<p>
"<em><$MTSearchString$></em>" という検索キーワードを含む記事は見つかりませんでした。
次項のヒントを参考にして、検索キーワードを変えてもう一度検索してみてください。
</p>
<ul>
<li>キーワードに誤字や脱字がありませんか ?</li>
<li>キーワードの意味はそのままで、表現や言い回しを変えてみてください。</li>
<li>専門的なキーワードだったり、長い文字列のキーワードだったりした場合は、より一般的で短いキーワードにしてください。</li>
<li>キーワードを複数指定している場合は、キーワードの数を減らしてみてください。</li>
</ul>
<p>
( <a href="#search">キーワード入力欄に戻ります</a> )
</p>
<MTElse>
<p>
タグ "<em><$MTSearchString$></em>" が設定された記事はありませんでした。
<a href="<$MTBlogURL$>tag.php" title="タグ一覧">タグ一覧</a>からもう一度タグを探してみてください。
</p>
</MTElse>
</MTIfStraightSearch>
</MTNoSearchResults>
<MTNoSearch>
<h2>検索キーワードが入力されていません</h2>
<p>
検索用のキーワードが入力されていません。
( <a href="#search">キーワード入力欄に戻ります</a> )
</p>
</MTNoSearch>
</div><!-- div#search-results END -->
<MTIfStraightSearch>
<div class="section" id="tips">
<h2>検索のコツ</h2>
<p>
標準の状態では、この検索システムは本文から全て全文検索を行います。
キーワードが一単語なら特に支障はありませんが、キーワードが複数の単語で成り立っている場合、正確に検索するために引用符 ( <code>""</code> ) でキーワードを囲んでください。
</p>
<p>
たとえば、 <kbd>Movable Type</kbd> というキーワードで検索すると検索結果にヒットしなくても、 <kbd>"Movable Type"</kbd> という、引用符で囲んだキーワードで検索すると検索結果にヒットすることがあります。
</p>
<p>
また、 <kbd>AND</kbd> や <kbd>OR</kbd> 、 <kbd>NOT</kbd> といったキーワードを組み合わせて検索することもできます。
</p>
<dl>
<dt><kbd>Movable Type</kbd> と<kbd>シックスアパート</kbd>の両方のキーワードを含む記事を検索する例</dt>
<dd>
<p>
<kbd>"Movable Type" AND シックスアパート</kbd>というキーワードで検索をしてください。
</p>
</dd>
<dt><kbd>Movable Type</kbd> もしくは<kbd>シックスアパート</kbd>のいずれかのキーワードを含む記事を検索する例</dt>
<dd>
<p>
<kbd>"Movable Type" OR シックスアパート</kbd>というキーワードで検索をしてください。
</p>
</dd>
<dt><kbd>Movable Type</kbd> というキーワードを含み、<kbd>シックスアパート</kbd>というキーワードを含まない記事を検索する例</dt>
<dd>
<p>
<kbd>"Movable Type" NOT シックスアパート</kbd>というキーワードで検索をしてください。
</p>
</dd>
</dl>
</div><!-- div#tips END -->
</MTIfStraightSearch>
<dl id="menu">
<dt>検索</dt>
<dd>
<form method="get" action="<$MTCGIPath$><$MTSearchScript$>">
<fieldset>
<legend><label for="search">全文検索フォーム</label></legend>
<p>
<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />
<input type="text" id="search" name="search" size="20" value="<$MTSearchString$>" />
</p>
<p>
<input type="submit" id="submit" value="検索する" />
</p>
<dl>
<dt>検索オプション</dt>
<dd>
<ul>
<li><input type="checkbox" id="CaseSearch" name="CaseSearch" /><label for="CaseSearch">大文字・小文字を区別する</label></li>
<li><input type="checkbox" id="RegexSearch" name="RegexSearch" /><label for="RegexSearch">正規表現で検索する</label></li>
</ul>
</dd>
<dt>検索範囲</dt>
<dd>
<ul>
<li><input type="radio" id="search-element-entries" name="SearchElement" value="entries" /><label for="search-element-entries">記事本文部分</label></li>
<li><input type="radio" id="search-element-comments" name="SearchElement" value="comments" /><label for="search-element-comments">コメント部分</label></li>
<li><input type="radio" id="search-element-both" name="SearchElement" value="both" /><label for="search-element-both">両方</label></li>
</ul>
</dd>
<dt>検索結果の並び順</dt>
<dd>
<ul>
<li><input type="radio" id="result-display-descend" name="ResultDisplay" value="descend" /><label for="result-display-descend">降順</label></li>
<li><input type="radio" id="result-display-ascend" name="ResultDisplay" value="ascend" /><label for="result-display-ascend">昇順</label></li>
</ul>
</dd>
</dl>
</fieldset>
</form>
</dd>
</dl><!-- dl#menu END -->
<dl id="footer">
<dt>Author</dt>
<dd>
<ul>
<li><a href="http://hxxk.jp/about/site#site-webmaster" title="作成者について">真琴</a></li>
<li>mail : makoto[at]hxxk.jp</li>
</ul>
</dd>
<dt>Banners</dt>
<dd>
<ul>
<li><a href="http://openlab.ring.gr.jp/k16/htmllint/htmllint.cgi?ViewSource=on;HTTPHeader=on"><img src="http://hxxk.jp/common/materials/banner/html_lint.png" width="80" height="15" alt="Check with Another HTML-lint" /></a></li>
<li><a href="http://validator.w3.org/check/referer"><img src="http://hxxk.jp/common/materials/banner/v_xhtml.png" width="80" height="15" alt="Valid XHTML 1.0!" /></a></li>
<li><a href="http://jigsaw.w3.org/css-validator/validator?uri=http://hxxk.jp/common/css/hxxk005.css"><img src="http://hxxk.jp/common/materials/banner/v_css.png" width="80" height="15" alt="Valid CSS!" /></a></li>
<li><a href="http://readmej.com/"><img src="http://readmej.com/readme_epik_sb.cgi?makoto@hxxk.jp" width="51" height="15" alt="ReadMe!" /></a></li>
</ul>
</dd>
<MTBlogIfCCLicense>
<dt>ライセンス</dt>
<dd>
<p>
<$MTBlogName encode_html="1" remove_html="1"$>は、<a href="<$MTBlogCCLicenseURL$>"><img src="<$MTBlogCCLicenseImage$>" alt="クリエイティブ・コモンズ・ライセンス" /></a>で保護されています。
</p>
</dd>
</MTBlogIfCCLicense>
<dt>Powered</dt>
<dd>
<ul>
<li>Powered by <a href="http://www.sixapart.jp/movabletype/"><$MTProductName version="1"$></a></li>
<li>Template based by <a href="http://hxxk.jp/template/mt_3_2_strict/">Web Standards with MT ver.3.2 Strict</a></li>
<li>Background images made by <a href="http://lab.rails2u.com/bgmaker/">Background Image Maker</a></li>
</ul>
</dd>
</dl><!-- dl#footer END -->
</body>
</html>

