外部サイト→内部サイトの移動はリファラーを参照
ユーザの自サイトへ移動元は、アクセルログのリファラーを見れば一目瞭然です。例えば、ログに対して次のように表示されていれば、ユーザの移動元は www.google.co.jp であることが分かります。
127.0.0.1 - - [13/Sep/2008:18:27:01 +0900] "GET /index.html HTTP/1.1" 200 107 "http://www.google.co.jp" "<略>" 0
※実際は1行です
内部→外部の移動は、Aタグに addEventListener()
内部サイト→外部サイトへ移動する際の記録は、AタグのClickを監視し、外部サイトへ移動する場合、前回のエントリと同様にXMLHttpRequest を利用することで実現できます。
http://d.hatena.ne.jp/end0tknr/20080913/1221295974
var REGEXP = new RegExp( "^"+ location.protocol +"//"+ location.host); var RQST = getHttpRqst(); addListener(document, 'click', trackUserOut, false); function trackUserOut(event) { var target; if (event) target = event.target; if (! target){ //for IE event = window.event; target = event.srcElement; } //Aタグによるページ遷移のみtrack if ( String.toUpperCase(target.tagName) != "A" ) return true; var href = target.href; //外部サイトへの移動を判断 if ( href.match(REGEXP) ) return true; if (! RQST ) return true; //ダミーリクエスト(URL)の作成 var url = location.protocol +"//"+ location.host + location.pathname + "?moveout=" + encodeURI(href); //ダミーリクエスト(URL)の送信 RQST.open("POST", url); RQST.send(null); return true; } function addListener(elem, eventType, func, cap) { if(elem.addEventListener) { //for not IE elem.addEventListener(eventType, func, cap); return true; } if(elem.attachEvent) { //for IE elem.attachEvent('on' + eventType, func); return true; } return false; } function getHttpRqst() { if(window.XMLHttpRequest) { //not IE return new XMLHttpRequest(); } if(window.ActiveXObject) { //IE try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { return new ActiveXObject("Microsoft.XMLHTTP"); } } return null; }