Apacheログのアクセス解析に最近awstatsを最近入れてみた。
検索エンジンからの検索語の集計も取れたりして便利なんだけれど、最近よくmatome.jpから飛んでくるパターンが多い。awstatsの日本語化バージョンでも検索エンジンとして認識する設定になっていなかった。とりあえず検索語の抽出まで含めて設定してみたのでメモ。
まずはsearch_engines.pmに
@SearchEnginesSearchIDOrder_list1=(
'matome\.jp',(中略)
%SearchEnginesHashID = (
'matome\.jp','matome_jp',(中略)
%SearchEnginesKnownUrl=(
'matome_jp','(tag|keyword)\/',
のように、それぞれmatome.jpに対応する行を追加する。
最後の%SearchEnginesKnownUrlは、refererのURL中でこの文字列より右にある文字列を検索語として認識するという指定。Yahooなどの場合だと、
http://search.yahoo.co.jp/bin/query?p=検索語
となるので、SearchEnginesKnownUrlには"p="を指定してあるが、matome.jpの場合は
http://www.matome.jp/tag/検索語 もしくは、http://www.matome.jp/keyword/検索語
という/tag/か/keyword/で区切られているので'(tag|keyword)\/'と指定。
で、awstatsは検索エンジンのURLのパラメータの区切り文字は"?"でしか判定していない模様。confファイルの$URLQuerySeparatorsも使っていないようだ。
そうすると、"http://www.matome.jp/tag/検索語"なんてURLには"?"が入っていないので検索語が取得できない。なので本体のソースをいじってみる。
awstats.plのだいたい6553行目あたりの
# we will complete %_keyphrases hash array
my @refurl=split(/\?/,$field[$pos_referer],2); # TODO Use \? or [$URLQuerySeparators] ?
を
# we will complete %_keyphrases hash array
my @refurl=split(/\?|matome\.jp\//,$field[$pos_referer],2); # TODO Use \? or [$URLQuerySeparators] ?
と、区切り文字判定に"matome.jp"を追加
かなり無理やりだ…。どなたかがもっとスマートな方法で解決してそうだな。
これでawstatsの解析画面でmatome.jpからのアクセス数と、その検索語の集計がきちんと行われるようになるけど…。
ソースのコメントにも、"# TODO Use \? or [$URLQuerySeparators] ?"と書いてあるから、この検索エンジン集計の処理だけ、URLの区切り文字判定で未実装のがあるのだろうな。
コメント