GA: Custom Variableを使う(応用編)

2010/01/24 追記
この記事の方法は、レポートでも上手く活用できてません。
また、nameとvalueに値を積んでいくのは、keyとvalueで、64byteまでという制限にも引っかかり易いので、よくない方法だと分かりました。
そういう事を了承して、以下を読んで下さい。

タイトルに応用編が付くのは、getXKeyなど、内部的なapi?を使ってるからです。ある日、突然動かなくなる可能性もあるので、毎日checkが必要です。

さて、先週末までにCustom Variableが全てのGoogle Analytcsユーザに導入されたようです。

Custom Variableを使えば、アクセス解析運用の柔軟性が増します。

と言うことで、試してみました。

CustomVariableでの値の設定の仕方は?

pageTracker._setCustomVar(slot, key, value, scope)という形です。

slotは、1-5までの数字を割り当てます。(レポート側で、この番号がアドバンスセグメントの項目に出てきます。)

key, valueは、好きな文字列を。(keyは、nameという名称の時もあります。同じです)

scopeは、設定した値がどれだけ生き延びるかです(デフォルト設定は3のpage-level)

  • 1だと、user-levelで、cookieに値が書き込まれ、ユーザー単位で管理が可能です。
  • 2だと、session-levelで、そのセッションをラベル付けします。(セッション内で、複数回、値を設定していくと、上書きされます)
  • 3だと、page-levelです。ページ単位でラベル付け。使いどころ?Googleのお話では、特定条件でページをカテゴライズすると。

繰り返しますが、slotは5つまで使えます。(上書きはできます)

今回は、ユーザレベルに的を絞ります。

ここでは、トラフィックについての値を割り当ててみます。

  • トラフィックでの分類をしながら
  • keyに流入元を、valueに日付をいれます。

具体的には、

keyには、drssrs…という感じで、d:direct, r:referrer, s:検索エンジンと場合分けして、文字列を足します(セッション開始時に)。

valueには、-20091001-20091102-20091127という感じで日付を足していきます。

そして、単純にsetCustomVarだと、値が毎回上書きされてしまうので、追記する形をとります。(応用編にした理由です)

公式APIと言っていいのか不明なメソッドですが、以下のようメソッドを追加してやって、

 pageTracker._mySetOrPushCv = function(slot, key, value, scope){
       this._initData();
       var strName = this._getXKey("8", slot) || "";
       var strValue = this._getXKey("9", slot) || "";
       this._setCustomVar(slot, strName+"-"+key, strValue+"-"+value, scope);
 };

pageTracker._mySetOrPushCV(2, source, “20091207”, 1)

pageTracker._trackPageview();

とします。

トラフィックの場合分けですが、ga.jsの内部の判定を利用できればいいのですが、難しそうなので、手元で簡易に判定します。

c = document.cookie;
if(!(/_utmb/).test(c) || !(/_utmc/).test(c)){
      var trfc = !document.referrer ? "d" :
      (/https?://.*.(google|yahoo).(com|co.jp)/).test(document.referrer) ? "s" : "r";
      pageTracker._mySetOrPushCv(2, trfc, d, 1);
}

utmcとutmbで新規セッションの判別をして、document.referrerで、直接、リンク、検索エンジンに場合分けします。

最後にまとめて、コードを載せます。

これで、コード側の設定を終わりです。レポート側の話に移ります。

回数でセグメント

アドバンスセグメントで、

image

変な値(%…)が入ってますが、昔の失敗した値です。無視して下さい(消すコードは下の全コードに入れます。)。

また、Keyの値を見せるために完全一致にしてますが、正規表現で{-.}{3,}という感じで3回以上の訪問などと設定します。

image

リピータは、来訪3回以上もあるので、だぶりになるのに注意。後、api側の設定の不備の可能性もあるので、鵜呑みにはできないです。

日付でセグメント

ここまでは、回数でみたわけですが、customVariableのvalueの方での設定には日付をいれたので、

image

例えば、-2009120[1-3]などで正規表現で引っ張れば、

image

12月1ー3日に訪問したユーザのセッションが見られる。4日移行はセッションが一回しかないですが、このサイトへの継続的な訪問者がいないという事ですね。

ここまでで、訪問回数と訪問日でセグメントしたのですが、一応、流入別にkeyの値を入れて、日付をいれているので、流入元+日付でのセグメントも可能なはずです。データが貯まれば、してみたいです。

まとめ

customVariableを使って流入元を追記しました。それをレポート側のアドバンスセグメントで振り分けの設定をして、レポートをみました。keyに流入元、値には日付をいれました。これで、日付を元にしたセグメントが可能になりました。また、今回は流入元だけにしましたが、goalなどを設定して、conversionした場合にkeyをゴール名などで設定して、値を日付にしてもいいと思います。

以下、設定のコピペです。(property-idは変えてます)

 var GA_me = function(){
    var pageTracker = _gat._getTracker("UA-XXXXXX-xx");
    //if(/a/[-1]=='a')console.log(pageTracker);
    var c = document.cookie;
    var d = (function(){
      var date = new Date();
      var y = date.getFullYear().toString();
      var m = (1+date.getMonth());
      m = m < 10 ? "0"+m.toString() : m.toString();
      var day = date.getDate();
      day = day < 10 ? "0"+day.toString() : day.toString();
      return y + m + day;
      })();
    pageTracker._mySetOrPushCv = function(slot, key, value, scope){
      this._initData();
      var strName = this._getXKey("8", slot) || "";
      var strValue = this._getXKey("9", slot) || "";
      strName.replace(/%2d*B/, "-");
      strValue.replace(/%2d*B/, "-");
      this._setCustomVar(slot, strName+"-"+key, strValue+"-"+value, scope);
    };
    if(!(/_utmb/).test(c) || !(/_utmc/).test(c)){
      var trfc = !document.referrer ? "d" :
               (/https?://.*.(google|yahoo).(com|co.jp)/).test(document.referrer) ? "s" : "r";
      pageTracker._mySetOrPushCv(2, trfc, d, 1);
    }
    //the page pathname of the goal you set
    if((/^/profile$/).test(document.location.pathname)){
      pageTracker._mySetOrPushCv(1, "g_"+"profile", d, 1);
    }
    pageTracker._trackPageview();
  }
  var _gaq = _gaq || [];
  _gaq.push(GA_me);
  (function() {
    var ga = document.createElement('script');
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics
.com/ga.js';
    ga.setAttribute('async', 'true');
    document.documentElement.firstChild.appendChild(ga);
    })();

「GA: Custom Variableを使う(応用編)」への4件のフィードバック

  1. かなり参考になります!すごいですね。

    1点教えて欲しいです。
    getXKeyの「”8″slot “9”slot」っていうところの仕様がよく分からず。
    具体的には、___utmaの2つ目のをJSからアクセスしたいのですが、どうやって引っ張り出せるものやら。

    現状、cookieから取って来ているのですが、初回のアクセス時や複数ドメイン時にあまりエレガントなソースにならず。。

    っていうか、やりたいことは、utmvにそのままを叩き込みたいと思っているだけなのですが。
    それで、複数アクセスだろうが、複数ドメインだろうが、どういう分析もできるようになるかなと思っていて。

    よろしくお願いします!

  2. Yujiさん、こんにちは。
    utmaの二番目は、訪問者IDそのものですよね。
    http://wiki.abc-analytics.com/cookie/utma
    サイトのポリシーとも絡みますが、apiには当然ないので、javascriptそのもので引っ張るしかないです。

    getXkeyは、utmvのname部分を取得するものですが、この記事のあと、上手く動かなくなりました。
    * _setCustomVar(index, name, value, scope)とする。

    api側でも、用意されているのは、valueを取得するものだけです

    utmvにそのまま叩き込む場合は、setCustomVarでいいと思います。初回訪問時には、cookieのutmaの値が作られてから、セットするのがいいと思うので、pageTracker._initData();としてから、操作すればいいと思います。試してないですが、、

  3. そうです。訪問者のIDです。
    initdataでクッキーに登録されるのですね。助かりました。initdataした後に、クッキーを見てutmaの2番目を抽出およびsetCustomVarをしたところ、無事、期待通りの動きをしてくれました。

  4. 質問してくれると、いろいろと考えるきっかけになるので、今後も気軽に質問して下さい。

    僕の理解は、半知半解かもしれませんが、これはblogなので、質問がきっかけで、僕の理解が進めばもうけものです。

コメントを残す