調べれば誰かやっていそうな小ネタですが。
検索エンジンからアクセスしてきたときに、そのときの検索語でサイト内検索しておいて結果を表示すると便利っぽいのでやってみた。このブログのサイト内検索に使っている、GoogleAjaxSearchにちょっとコードを追加。
function load()
{
var searchControl = new GSearchControl();
var blogSearch = new GwebSearch();
..snip..
searchControl.draw(document.getElementById("searchcontrol"));
var query = '<?=my_get_referer_query()?>';
if (query != '') {
searchControl.execute(query);
}
}JavaScriptで完結させたいところですが、文字コードの変換は面倒なのでリファラーから検索語を拾う箇所はPHPで。
function my_get_referer_query()
{
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
if ($referer == '') {
return '';
}
$p = @parse_url($referer);
if ($p === false || !isset($p['host']) || !isset($p['query']) || $p['host'] == $_SERVER['HTTP_HOST']) {
return;
}
if (strpos($p['host'], 'google.') !== false || strpos($p['host'], 'msn.') !== false) {
$key = 'q';
} else if (strpos($p['host'], 'yahoo.') !== false) {
$key = 'p';
} else if (strpos($p['host'], 'goo.') !== false) {
$key = 'MT';
} else if (strpos($p['host'], 'excite.') !== false) {
$key = 'search';
} else if (strpos($p['host'], 'nifty.') !== false) {
$key = 'Text';
} else if (strpos($p['host'], 'infoseek.') !== false) {
$key = 'qt';
} else if (strpos($p['host'], 'aol.com') !== false) {
$key = 'query';
} else {
$key = 'q';
}
parse_str($p['query'], $param);
$query = isset($param[$key]) ? $param[$key] : '';
return htmlspecialchars(mb_convert_encoding(urldecode($query), 'UTF-8', 'auto'), ENT_QUOTES);
}レイアウト的にサイト内検索の位置が一番下なのがいまいち。。検索エンジン経由のときは横にあった方が見やすいかも。
One Comment
なるほど! これ面白いですね。うーん