アクセス解析でリファラ取得(久々のアクセス解析ネタ)
久々のアクセス解析ネタ。といっても目的はアクセス解析ソフトではない。
自分のサイトを訪れてくれる人がどういったキーワードで検索してきたか調べて、動的にコンテンツを入れ替える手法を実現することが目的。
いまやアクセス解析といえばGoogle Analytics。普通にアクセス解析するならこれにまさるものはないだろう。なんといってももともと商用利用されていたものをGoogleが買収して無償で提供しているのだから。しかし超多機能なためどこから手をつけていいのか迷うのは事実だ。
あと一般によく使われているのは忍。ウェブを見て小さい手裏剣のアイコンがくるくるまわっているのを見たことがある人も多いだろう。こちらはもっとお手軽で初心者でも使いやすい。
余談はさておき、これらのアクセス解析ツールはJavaScriptのコードを埋め込んで解析を実施する。これによりリファラ(ウェブサイトの参照元)取得を実現できるからだ。リファラを取得できるということは、検索で使用されたキーワードを取得できるということになる。
JavaScriptでは以下のコードでリファラを取得できる。
var ref=document.referrer;
これをPHPに渡せばよい。具体的にはこんな感じ。
<script type="text/javascript">
document.write("<script type=’text¥/javascript’ src=’logging.js?ref=" + document.referrer + "’><¥/script>");
</script>
何をやっているかというと、JavaScriptからJavaScriptを呼び出すコードを書いている。しかし実際呼び出しているlogging.jsは単なるJavaScriptではなくPHPで記述することになる(拡張子jsでphpが動作するように設定しておく必要あり)。ここは拡張子phpのファイルを呼び出してもいい。要はphpで必要な処理をしてJavaScriptを出力しておくようなコードを書くわけだ(ちなみに忍はここで広告を表示するJavaScriptを書いている)。
結局上記のコードでは$_GET[‘ref’]にリファラが入ることになるが、このままでは実はNG。php内で処理する際には勝手にキーワードが日本語に変換されているからだ。一見便利そうだが、後で処理に手間取ることになる。
よって検索結果のURLのごとく%AB%6C・・・といったURLのまま取得したいわけだが、JavaScriptからphpに渡す際にエンコードして渡せばいい。
具体的には、document.referrerで渡しているところを以下のように、
escape(document.referrer)
として渡せばよい(escapeはJavaScriptのURLエンコード関数)。なおここでエンコードしたからといって、うっかり受け取り側のphpプログラムでデコードしてはいけない。元の木阿弥だ。受け取ったリファラのURLから必要な部分のみ取り出して、そこだけをデコードする。これでキーワードの取得が容易になる(はず)。
いつかはアクセス解析プログラムに手を出したい(暇になれば・・・)。