以前に書いたとおり、検索サイト経由でどこかのページにたどり着いた場合、たどり着いた先のページがあるサーバー側では、どこの検索サイトからやってきたのか、また、何という文字で検索してそこにたどり着いたのか、などといった情報が分かります。
前回はそれを解析するツールをこしらえたのですが、ちょっと改造して、ブログ上に表示するためのプラグインにしてみました。新着検索キーワードのリストや、人気キーワードランキングの機能付きです。


一通りの機能が揃った“ベータ版”をここからダウンロードできます。
次の機能が使えます。

  • 直前に検索サイトで入力していた文字列をそのまま表示する。国内外のメジャーな検索サイトほとんどに対応。
  • 新着検索文字列の一覧を表示する。サイト全体での一覧と、各ページごとの一覧が可能。
  • 検索文字列の頻度のランキングを表示する。サイト全体での一覧と、各ページごとの一覧が可能。

インストールするには、ダウンロードしたファイルを解凍して、Nucleusのプラグインディレクトリにアップロードし、Nucleusの管理画面の「プラグイン」のページでインストールのボタンをクリックするだけです。
インストールできたら、ページのスキンの中に、下記の表示用タグを記入します。
<%SearchedPhrase%>
直前の検索文字列を表示します。
このサイトでは、ページ左上のGoogleサイト内検索の入力欄にこの機能を使っていて、検索サイト経由でやってきたときだけ、検索サイトで入力していた文字が入力された状態でページを表示します。
<%SearchedPhrase(highlight)%>
検索サイトで入力していた文字をハイライト表示するためのJavaScriptをページに追加します。
スキンの </head&gt の直前あたりにこのタグを追加してください。
<%SearchedPhrase(recent)%>
新着検索文字列の一覧を表示します。
デフォルトでは現在表示しているページへやってきたときの検索文字列だけを絞り込んで5件だけ表示しますが、<%SearchedPhrase(recent, all)%>でサイト全体の一覧を<%SearchedPhrase(recent, all, n)%>(nは数字)でn件を表示します。
新着データは過去30日分を保存してあります。それより古いものは削除します。何日分を保存するかは、プラグインのオプション設定画面で変更できます。
このサイトでは、サイトのインデックスのページに(recent, all,10)を、個別アイテムのページに(recent)を使用しています。
<%SearchedPhrase(rank)%>
検索文字列の頻度順ランキングを表示します。
デフォルトでは現在表示しているページへやってきたときの検索文字列だけを絞り込んで5件だけ表示しますが、<%SearchedPhrase(rank, all)%>でサイト全体の一覧を<%SearchedPhrase(rank, all, n)%>(nは数字)でn件を表示します。
頻度データは、今のところ新着データと違って過去のものをすべて保存するようにしてあります。
また、それぞれのキーワードをクリックすると、Googleのサイト内検索をそのキーワードで検索した結果を表示します。デフォルトではただのサイト内検索ですが、プラグインのオプションでパラメータを追加して、SiteSearchやAdSenseに対応した検索も可能です。
このサイトでは、サイトのインデックスのページに(rank, all, 20)を、個別アイテムのページに(rank, , 10)を使用しています。
どんなキーワードを探してどのページにたどり着いているのか、リアルタイムに見えて単純に面白いのですが、使い方によってはSEO的にもかなり効果がありそうな気がしています。
お試しください。

投稿者 樋口 理

「探し物はなんですか その2 [検索キーワードプラグイン]」に36件のコメントがあります
  1. 検索していた文字をハイライト表示する機能と、キーワードランキングのそれぞれのキーワードをクリックするとサイト内検索のページが開く機能を追加して「ベータ版」にしました。

  2. β版 [検索キーワードプラグイン]

    検索サイトからブログに飛んできたときに、検索サイトに入力していた検索ワードを調べてブログ上に表示するプラグイン、多少機能を追加してβバージョンとしてリリースしました。
    以前のα版をお使いの方は、そのま…

  3. みなさんのベータテストのフィードバックのおかげで、現在、Beta 4がダウンロードできるようになっています。
    ベータ版からの主な変更点は、
    ・マルチバイト関数エミュレータ環境での誤動作を避けるために、文字コード判別を ‘auto’ ではなく ‘utf-8, sjis, euc-jp, jis’ などと指定するようにした
    ・サーバーに時差があるときに表示時刻がおかしいのを修正
    ・register_globals = off になっている環境でも動作するように修正
    などです。
    フィードバックをいただいたみなさん、ありがとうございます。
    引き続き、フィードバックをお待ちしております。

  4. NP_SearchedPhraseで検索キーワード取得

    もろもろの作業に一区切りついたので、どの検索サイトからどんなキーワードでこのサイトに来たのかを取得するNP_SearchedPhrase(higuchi.com)を導入してみた。
    が、ぜんぜん機能しない。昨日の夜、0時から2時ま…

  5. 昼に報告した、アイテムスキンで「all」を省略したときの挙動について。
    どうも普遍性のない環境依存な感じなので詳しくは口頭なりメールで説明しますが、なぜか$itemidが必ず「83」になってしまうのです。ただ、DBにはそれぞれ正しいアイテムIDが記録されているので、「絶妙なタイミング」で正しいID→83に書き換わっている模様。doSkinVar()のcaseで分岐して、$itemを引数にして、
    echo $item
    するテストオプションを作って確認しました(「メインの目次」スキンでも83ってのはどういうこった)。init()の時点では正しくて、doSkinVar()では書き換わっているのかも。
    どうもウチの環境の問題のような気がします。参考までに、ウチでも動くようにしたコードを後でお見せします。
    ちなみに、Beta 4で1点だけミスを発見! getVersion()の戻り値はb4っすよね(笑)。

  6. あー。たぶん、それはNP_MostViewedプラグインの副作用(バグ)じゃないかと思います。
    http://nucleus.fel-is.info/… にも同じような現象が報告されてるんですが、NP_MostViewedプラグインが、$itemidを書き換えてしまうようなのです。
    NP_MostViewedの38行目のglobal $itemid;の行をコメントアウトしてみてくださいませ。
    getVersion()の戻り値は……忘れてましたっ!(笑)

  7. > ウチでも動くようにしたコードを後でお見せします。
    ってことは、動いたんですね。そうか、init()の時に$itemidを保存しておけばいいのか。それは、いい手ですねぇ。いただき!(感謝、感謝)

  8. あっ、解決の赤面報告しようと思ったら、もう返事が。そう、寝てるときに気づきました。83=MostViewedの10位だ! と。コイツを直したら、SearchedPhraseはそのままでも動くことを確認。失礼しました。
    SearchedPhrase側の修正で動くようにした方法は、まさにinit()で$itemidを別変数名にコピーして、以後それを使うというもでした。これはこれで、そのままにしてあります。Nucleus全体から参照されるグローバル変数だと、いつかほかの「悪い子」が悪さするかもしれないので(笑)。
    いやー、典型的な「グローバル変数のワナ」でしたね。

  9. NP_SearchedPhrase

    おかげさまでcles::blogでは検索サイト経由の訪問者が全体のPVに対して6~8%くらいの割合を占めるに至っています。サイトの運営者としては、どのような検索ワードでこのサイトが見られているかということに関…

  10. 検索キーワードをハイライト表示するプラグイン

    Movable Type 3.1が発表されたのを機会に久々にMT系の情報を集めてみたら、 そうそう。こういうのが欲しかったんです。検索キーワードプラグイン – higuchi.com blogどこの検索サイトからやってきたのか、また、何と…

  11. インストールしようとしたら、
    SqlTablePrefixと言うエラーになりました。
    Plugin NP_SearchedPhrase was not loaded
    (does not support SqlTablePrefix)
    対応方法はありますでしょうか?

  12. 検索キーワードプラグイン(NP_SearchedPhrase)

    検索サイトからどんなキーワードでとんできてるのかログを取れるのはおもしろいですね。PHP5ではそのままでは動きませんでしたが、rankListで使われている $this がまずかったので、その変数名を変えただけで動き…

  13. Google.co.jpのときによく文字化けしているのですが,どうしてでしょう?

  14. > Google.co.jpのときによく文字化けしているのですが,どうしてでしょう?
    現象を見てみないと断定的なことは言えませんが、Googleの検索結果は、まれに文字コードの種類の情報が付いていないことがあって、その場合は文字化けをする可能性があります。
    どういうときに文字コードの種類の情報が付いていないのか、また、情報が付いていないときに実際にはどの文字コードが使われているのかを調べたいのですが、現象をめったに捕まえることができないため困っています。
    文字が化けたときのアクセスに該当するWebサーバーの生のログを集めるとなにかがわかるはずですので、もし運良く化けたところのログが手に入るようでしたらお送りいただけると助かります。

  15. SJIS, EUC-JP, UTF-8,…の順になっていたので(バージョンは1.0b3です),変えてみました。

  16. ありがとうございます。ちょいと難題かもしれない。
    文字コードはUTF-8で来ているようです。で、文字コード種類の指定がないときはUTF-8, SJIS, EUC-JP, JIS, ASCIIの順で自動判別するようにしてあるので、正しくUTF-8と判別してくれるはずなのですが、mb_convert_encoding関数が、なにかのはずみで判別ミスしてしまっているようです。
    なぜこうなるのか、ちょっと調べてみます。
    あ、プラグインのバージョンはいちばん新しい奴ですよね?以前はautoで指定していたので……

  17. Googleはその後,大丈夫なようですがYahoo!でも文字化けでました。
    http://search.yahoo.co.jp/b

    ?????&#65533;&#65533;?&#65533;&#65533;?<?
    なってしまっています。エンコーディングはEUC-JPになっているようですがなぜでしょう?

  18. こんにちはー。
    &#65533; って、Unicodeエンティティの未定義文字っぽいですね。
    やっていることは mb_convert_encoding(stripcslashes(urldecode("%C9%CA%C3%A3%A5%E9%A1%BC%A5%E1%A5%F3", _CHARSET, ‘EUC-JP’) というシンプルな処理ですんで、mb_convert_encoding()がなぜか誤動作したか、cstripslashes()がなぜだか削ってはいけない“文字の一部”を削ってしまったと考えるのが自然な気がします(って、そんなバグあるのかな…)
    _CHARSETはutf-8ですよね?
    PHPのバージョンと、内部文字コード設定をお教えいただけますか?同じような環境で再現できるかどうか試してみます。
    品達ですか……(笑)

  19. PHPは4.3.9,内部コードはUTF-8です。
    mbstringの設定は
    mbstring.detect_order no value no value
    mbstring.encoding_translation Off Off
    mbstring.func_overload 0 0
    mbstring.http_input pass pass
    mbstring.http_output pass pass
    mbstring.internal_encoding no value no value
    mbstring.language neutral neutral
    mbstring.substitute_character no value no value
    となっています。

  20. お世話になります。文字化けの件、
    プラグイン等で
    mb_language(‘ja’);
    を記述する、
    あるいは、当プラグイン中の
    mb_convert_kana() の第3引数に文字コード指定を加えると解決したりしませんでしょうか?

  21. 探し物を教えましょう

     ログを見ていたら、サーチエンジンから飛んでくる方がかなり多かったので、サーチエンジンに優しいBlogにしました :)
     NP_SearchPhraseという素敵なプラグインを見つけて、これで日記に最新検索フレーズを6個…

  22. RelatedとSearchedPhrase

    サイト内やGoogle検索、Amazonから関連アイテムを表示してくれるNP_Relatedと、検索エンジンから飛んできた場合に検索ワードをハイライト表示してくれるNP_SearchedPhraseを入れてみました。そろそろプラグイン入…

  23. はじめまして。プラグインはサイトで便利に活用させてもらってます。バグらしきものを見つけたので報告させてください。
    このプラグインではテーブルに検索されたキーワードが格納されていっていると思うのですが、これが設定してある期日で削除されないようなのです。
    # 最近私のサイトのパフォーマンスが良くなくて、SQLのログを調べてみたらわかりました。
    いろいろと調べてみたところ、DELETE文中の日付の指定に問題があるようです。具体的には142行目でシングルクォートが余計についてしまっています。
    # mysqldate()はダブルクォートがついた文字列を出力するためです。
    よろしくお願いします。

  24. なるほど。気がつきませんでした。早速直しておきます。
    デバッグ&ご報告、ありがとうございます。

  25. はじめまして.nucleusを使い始めたばかりのものです.お世話になってます.さっそくですが,1.0b6にバグが2つあると思います.
    1. rank出力で<li>を</dt>で閉じています.
    2. search_optionで&が不正な実体参照になります.
    いらないと思いますが,一応パッチを.
    — NP_SearchedPhrase.php.orig 2005-01-12 17:10:00.000000000 +0900
    +++ NP_SearchedPhrase.php 2005-01-25 01:23:22.000000000 +0900
    @@ -200,19 +200,19 @@
    $hl = $this->getOption(‘SiteSearchHl’);
    $cof = $this->getOption(‘SiteSearchCof’);
    – $site_search_options = ($domains ? "&domains=" . urlencode($domains) : "") .
    – ($sitesearch ? "&sitesearch=" . urlencode($sitesearch) : "") .
    – ($client ? "&client=$client" : "") .
    – ($forid ? "&forid=$forid" : "") .
    – ($ie ? "&ie=$ie" : "") .
    – ($oe ? "&oe=$oe" : "") .
    – ($hl ? "&hl=$hl" : "") .
    – ($cof ? "&cof=" . urlencode($cof) : "");
    + $site_search_options = ($domains ? "&amp;domains=" . urlencode($domains) : "") .
    + ($sitesearch ? "&amp;sitesearch=" . urlencode($sitesearch) : "") .
    + ($client ? "&amp;client=$client" : "") .
    + ($forid ? "&amp;forid=$forid" : "") .
    + ($ie ? "&amp;ie=$ie" : "") .
    + ($oe ? "&amp;oe=$oe" : "") .
    + ($hl ? "&amp;hl=$hl" : "") .
    + ($cof ? "&amp;cof=" . urlencode($cof) : "");
    echo "<ol>\n";
    while($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
    $query = $disp_length?shorten($row["query_phrase"], $disp_length, "…"):$row["query_phrase"];
    – echo ‘<li><a href="’ . $site_search_url . "?q=" . urlencode($row["query_phrase"]) . $site_search_options . ‘">’ . htmlspecialchars($query) . "</a> (" . number_format($row["query_count"]) . ")</dt>\n";
    + echo ‘<li><a href="’ . $site_search_url . "?q=" . urlencode($row["query_phrase"]) . $site_search_options . ‘">’ . htmlspecialchars($query) . "</a> (" . number_format($row["query_count"]) . ")</li>\n";
    }
    echo "</ol>\n";
    }

  26. NP_SearchedPhrase導入

    ここしばらくこのサイト機能追加などはしていませんでしたが、気が向いたのでちょっと「NP_SearchedPhrase」を追加してみました。

  27. 検索キーワード表示の導入/「かなぁ。」の謎

    検索キーワードプラグインを導入してみた。右メニュー下の方、ご覧になられたし。
    どういう興味で自分のブログが覗かれているのかがはっきりとわかるというのは、それなりにおもしろいものだ。現在のところ、押…

  28. Yahoo!リニューアル記念緊急リリース [NP_SearchedPhrase]

    リニューアルしたYahoo!の検索エンジンであるYSTからのトラフィックを調べていて、気がつきました。
    検索エンジンからやってきたときの検索キーワードを拾って、ハイライト表示したりランキング表示をするプラグイン、NP_SearchedPhraseで、Yahoo!からの検索文字列が文字化けする

  29. NP_SearchedPhrase|文字化け解消とハイライトの工夫

    サイト再開時はシンプルにいこうと決めていたのですが、はり欲が出てきていろいろ拡張しちゃってます。今回導入したのは、検索サイト経由で当サイトに来た場合、その検索語句をハイライトしてくれたり、検索語句のランキングを表示する、来訪者に優しいプラグイン「NP_SearchedPhrase…

  30. NP_SearchedPhrase ver1.0b8

    Positive Feedback [検索キーワードプラグインのバージョンアップ] – higuchi.comより
    実は、このプラグインの本当の狙いは自動的にSEOを行わせることでした。
    検索で使われたキーワードを画面に表示する→検索エン…

  31. 半角カナ、半角アルファベットも問題なく対応しているのでしょうか?もし既知の制限があれば教えてください。

  32. 便利に使わせていただいていますが、php5に移行したら、エラーを吐くようになってしまいました。どうやら$thisという変数名がいけないようです。
    v1.0用のパッチを書きましたので、確認いただけると幸いです。
    http://blog.cles.jp/item/2455

  33. うへ。お恥ずかしい。そういえば以前にもご指摘をいただいていたのに、修正を忘れてました。
    修正して、そのほか積年のアップデートを加えた新しいバージョン (v1.1) をリリースしました。
    http://www.higuchi.com/doku

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です