Google Analyticsで新規セッションを判別したいの


小ネタです。
最近、あまりにも忙しくて色々無理が生じています。
さすがに放置しすぎた気がするので、ちょっと小ネタを挟みます。

カスタム変数とかカスタムイベントをセッションの初めだけ設定したいという時ってよくありますよね。GAは比較的シンプルなセッション管理の仕組みを使っているので、簡単にセッションの初めかどうかを判別することができます。このセッション管理方法が良いかどうかは別として!

基本的に「__utmb」と「__utmc」のどちらかが無ければ、新規セッションとして取り扱っているみたいです。
ということで、JavaScriptで、このcookieの値を見て、グローバル変数に結果をぶち込むことで、新規セッションかどうかの判別が可能になります。

_isNewSession.js

window._isNewSession = false;
(function(){
     var getCookie = function(key) {
        var cookies = document.cookie.split('; ');
            for (var i = 0; i < cookies.length; i++) {
                var part = cookies[i].split('=');
                    if (part[0] === key && part[1] != null) {
                    return unescape(part[1]);
                }
            }
        return null;
    }
    if((!getCookie("__utmb"))||(!getCookie("__utmc"))){
        window._isNewSession = true;
    }
})();

一応、ダウンロードできるようにしておきます。
__isNewSession

使い方

必ずGAスニペットの前で、_isNewSession.jsを読み込んでください。
カスタム変数用に利用する場合は、
if(_isNewSession){
_gaq.push(['_setCustomVar', ~~]);
}
と書けばセッションの初めだけ、カスタム変数を格納することができます。

<!-- _isNewSession.js -->
<script language="javascript" type="text/javascript" src="/js/_isNewSession.js"></script>

<!-- GAスニペット -->
<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-xxxxxx-x']);

//CustomVar
  if(_isNewSession){
    _gaq.push(['_setCustomVar', 1, 'neko', 'inu', 2]);
  }
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

これでセッションの初めの時だけカスタム変数のスロット1に
name : neko
value : inu
がセッションレベルで入ります。

ちょっと応用すると、セッションレベルでのカスタム変数の上書き防止用に利用できそうです。
ユーザーレベルでは
_getVisitorCustomVar()
というメソッドが用意されていて、お手軽に上書き防止とかできるのですが、セッションレベルはcookieにもデータが格納されておらず、上書き防止が難しいです。
セッションの初めを判別することでうまーくできそうな気がします。それはまた今度。

Leave a Reply