Google Analyticsのことをスクリプト面で勉強中です
Posted: Updated:
Google Analyticsのこと
大概のことは、Tracking Basics (Asynchronous Syntax) - Google Analyticsに書いてあるので、これを参考にすればよい。キャンペーンとかマルチドメインなどなど掘ると深そうなので、今回は下記の基本になるグローバルオブジェクトほか基本的なトコだけ。
- 制作系はそもそもあんまり興味が無さそう
- GAの公式コードが魔法のスニペット状態
- 正直自分もスクリプト面であんまり興味もってなかった
- 専任でもなければ、解析につぎ込む時間は限られる
- 簡単に程ほどでやれたらとりあえずOK
こんな偏見とイメージに基づいて目標は、_gaq.push(['_trackEvent', 'category', 'action']);
のようなコードをonclick属性に書かずにイベントトラッキングできるようにして、専任でない層が興味を持てるような手段を提供すること。というか自分がそうしたい。
「簡単にできるなら試してみようかな」的ハードル下げをしたいという話です。簡単なところで触っておかないと、より詳しい解析ニーズの発掘とか対応とかできませんしね。
重要なグローバルオブジェクト
_gatと_gaqが重要というかコア部分になるようです。&プラスアルファ。
global._gat
pageTrackerオブジェクトの生成をしてくれる。直接呼び出すことはほとんどなさそう。_gat._getTrackerByName
は、もしかしたら必要になることあるかもしれない。
global._gaq
pushメソッドを通して非同期トラッキングのゲートになってくれる。ga.jsが初期化されるまではArrayとして存在するが、その後は中身が入れ替わるため、後からpushメソッドを通してアクションが登録されても実行される。
global._gaUserPrefs
Google Analyticsのオプトアウト用Extensionがそうですが、下記のように_gaUserPrefs.iooがtrueを返すように仕込むとトラッキングが行われません。
window._gaUserPrefs = {
ioo: function() {
return true;
}
};
_gaqについて
_gaqの挙動がよいです。グローバルの_gaqに対するpushメソッドの実行時に、ga.jsが初期化前であればただのArrayとしてキューをため込み、初期化後であればオブジェクトが引き継いでトラッキングを実行してくれます。
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-xxxxxxx-x']);
_gaq.push(['_trackPageview']);
// この時点では _gaq はまだArrayである
// typeof window._gaq === 'array'
(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);
})();
// ga.jsが読み込まれて初期化されると _gaq はObjectになる
// typeof window._gaq === 'object'
_gaqがObjectになった後のpushメソッドは、Arrayではなく_gaqのprototypeがもつpushメソッドです。Arrayだった頃の_gaqが持っていたキューは、ga.jsの初期化時に実行されて、以後は_gaqは独自のオブジェクトとしてpushメソッドを通してトラッキングの実行を待ちます。
諸々メモ
- 非同期トラッキングするなら、すべてのメソッドは
_gaq.push
を通して実行すればok - Outbound Linkのように必ずA要素の画面遷移が発生するようなケースでは、非同期トラッキングが行われる前に遷移してしまうケースがある(稀?要検証)
- Page Trackerは、http://www.google-analytics.com/__utm.gif につづくGETパラメータでトラッキング情報を送信している
- 大分前に調べたときコンバージョン設定するには、pageviewとしてトラックしなければいけなかったような気がするけど、少なくとも今はイベントでもOK
- Outboundとの比較で、同一ドメイン内でのリンク遷移っているイベント欲しいかしら?
- 結構、deprecatedなメソッドがあるので今後も入れ替わりはありそう
- クロスドメインのことはまた今度
- キャンペーンとかもまた今度
次回
Googleの直営ページで見かけるautotrack.js(minifyされてるけど)を解析した結果についてなんぞを。微妙に何かを再発明してしまったんじゃないか疑惑と共にお届けするかもしれない。