サーチエンジン(search engine) とREFERER
でとりあげたスクリプトを恥ずかしながらここで公開します。
キッカケ
SEO 検索エンジン最適化
検索サイトの検索結果から来ている人が数多くいることがこれでわかりました。
目的
apacheの referer_logのうち、サーチエンジンと思われるものからのみ抽出してサーチキーワードをblog上に表示させます。これを見ると、どういったキーワードでどのサーチエンジンで検索し、自分のサイトに辿り着いたかが分かります。
ダウンロード
スクリプトのダウンロードはこちら >> getlatestkeywords.tar.gz 1929 bytes
gzip -d getlatestkeywords.tar.gz
tar xvf getlatestkeywords.tar
で展開します。
スクリプトの構成
getlatestsearchkeyword3.sh 全体を通してのshスクリプト
geturlhead.pl referer_logからサーチエンジンのURIを抽出するperlスクリプト
getlinkedkeywords.pl サーチキーワードを抽出し、もともとのURIをリンクしたhtmlを出力するperlスクリプト
gendrawkeyword.pl Blogrolling.comのように、JavaScriptで表示するための加工をするperlスクリプト
動作確認環境
RedHat8(以下が含まれる)
httpd-2.0.40-8
perl-5.8.0-55movabletype2.64
jcode.pl-2.13-6
Jcode.pmがインストールされていることが必須です。
設定方法
*.plファイルを/usr/local/bin等、適当なディレクトリに配置します。*.shファイルはどこでもいいですが、cronで起動する場合は
/etc/cron.hourly/
へ配置して下さい。
cronではなく手動で起動する場合は、root権限を持つか、実行者がreferer_logを読める必要があります。
なお、referer_logを出力するには
/etc/httpd/conf/httpd.conf
# If you would like to have agent and referer logfiles, uncomment the
CustomLog logs/referer_log referer
となっている必要があります。なってない場合、上記のようにアンコメントし、httpdを再起動してください。
getlatestsearchkeyword3.shの赤い部分をインストールしたディレクトリに合わせて変更してください。
#!/bin/sh
# programmed by T.Noma
# 07/16/2003
# 07/18/2003: throw "grep" command out
# 07/23/2003: set variables to sophisticate
# set number of keywords to be listed
NUMBER=20
# set install directory and temporary directory
BINDIR="/home/tnoma/bin"
TMPDIR="/home/tnoma/tmp"
# specify the files
REFERER_LOG="/var/log/httpd/referer_log"
OUTPUT="/var/www/html/tnoma/blog/drawkeywords"
# main
$BINDIR/geturlhead.pl < $REFERER_LOG > $TMPDIR/urls.txt
$BINDIR/getlinkedkeywords.pl -u < $TMPDIR/urls.txt | /usr/bin/tail -$NUMBER > $TMPDIR/result.txt
$BINDIR/gendrawkeyword.pl < $TMPDIR/result.txt > $OUTPUT
*.pl を/usr/local/binに配置した場合は、
BINDIR="/usr/local/bin"
とします。
最近の30アイテムをとりたい場合は
NUMBER=30
とします。
文字コードについてこのスクリプトはutf-8用ですので、eucを使っている場合は -uを -eへ変更します。
geturlhead.pl
# specify name & ip which should be removed
$hostname = "group4";
$hostip = "202\.210";
将来性を考えて、除外すべき自分のサイトのhostnameとipの一部をここで設定します。現在のスクリプトであれば、設定しなくても動くと思います。
movabletypeの設定は、blogrolling.comと同様で、Main Indexテンプレートの適切な位置に以下を挿入します。
<div class="sidetitle">
Recent SearchKeywords
</div>
<div class="side">
<script language="javascript" type="text/javascript" src="drawkeywords"></script>
</div>
srcはさきほどのスクリプト内の$OUTPUTをさすように設定します。
参考URL
- Jcode
http://www.netfort.gr.jp/~kiyoka/jcode_intro/普通に文字コードの変換の場合
# nkf.pl < hogehoge
- Perl
http://tohoho.wakusei.ne.jp/wwwperl.htm
http://www.imedio.or.jp/sozai/perl/perl_9.html
制限事項
Jcode::getcodeで ascii以外のコード(多分eucやsjisなど)の場合は無理にリンクを構成しません。これはページがUTF-8でコードが混在してしまうため。クリックできないアイテムはこれに相当します。
Jcode::convertで変換していますが、キーワードが文字化けすることがあります。
フィードバック・質問について
質問やこのコードはこうした方がいいなどのフィードバックがあれば、ここにコメントしてください。
スクリプトの転載、改変、公開は自由ですが、なるべくtrackbackして下さるようにお願いします。
tnoma
複数キーワードがあった場合、改行できずに右のカラムが左に寄ってしまう問題がありました。
getlinkedkeywords.pl line73
$string = &getstring($output);
$string =~ s/\+/ /g; #09/11/2003追加
複数キーワードは+で連結されているので、それをスペースに変換しました。
tnoma
google.comからの検索キーワードはUTF-8のようだが、エスケープが%ではなく、¥xになっていました。
これに対応するために、
getlinkedkeywords.pl line45
s/\\x/%/g;
を追加しました。