2012年05月20日
■[SEO]Google AnalyticsでJavaScriptファイルのローディング時間を計測する
やっほぉ、鳥さんとかそんな感じのものだ。
今回はGoogle Analyticsで外部のJavaScriptのローディングタイムをトラッキングする方法を説明するよっ
Google Analyticsの「_trackTiming」ってやつを使うんだ〜。
導入手順
user-timing.js - analytics-api-samples - Google Analytics Sample Code - Google Project Hostingを元にして、ちょっとしたスクリプトを組んでみた。
Tracking JavaScript file loading time with Google Analytics ― Gist
まず、上記のJavaScriptファイルをDLする。
エディタで開いて、_loadJsAryにこんな感じでロードするJavaScriptとその説明の配列をセットする。非同期でOK!の場合は、最後にtrueって入れると良いよん。
var _loadJsAry = [
['js/ga.js', 'Load Google Analytics Component', true]
, ['js/jquery-min.js', 'Load jQuery']
, ['js/jquery-ui-min.js', 'Load jQuery UI']
];
必要に応じて、デバッグかどうかをセットする。(デバッグの場合はサンプルレート100%、GA標準の場合は1%)
※グローバル変数( ̄▽ ̄;
var debug = true;
IE8以下で動かない
ちなみに、IE8以下だと、どーーーにもウマく動かん(´・ω・`)
試した方法は、以下のとおり。
- DOMでスクリプトタグの直前や直後にロード(GA標準) → なんか要素自体が追加されない
- DOMでbodyタグの最後にロード → 要素自体は追加されるけど、ロード順が同期にしてもグチャグチャ
- scriptタグをbodyタグの最後に追加 → なんか追加されない
- Ajaxでロードしてeval → グローバル変数にした奴が機能しない( ̄▽ ̄; (どうやらスコープがeval内で完結するっぽい、セキュリティ考えれば確かにね)←Gistのコードはこの状態
参考
- Site Speed User Timings - Google Analytics — Google Developers
- user-timing.js - analytics-api-samples - Google Analytics Sample Code - Google Project Hosting
- Site Speed User Timing Demo
でわでわっ
2012年05月12日
■[SEO][Objective-C]Google AnalyticsでiOS(iPhone/iPad)アプリのバージョンをトラッキングする、ほか
はぁい、鳥さんだよ。
本題をトラッキング方法にしようと思ったけど、ちょっと変更w
Google AnalyticsでiOSアプリをトラッキングする方法
まずはGoogle AnalyticsでiOSアプリをトラッキングする方法を紹介するよっ
Google Analyticsで取れるログはふつーのウェブサイトのトラッキングと同じで、以下のトラッキングが可能だよ。
- ページビューのトラッキング
- イベントのトラッキング
- ECのトラッキング
- カスタム変数のトラッキング
と書いてみたものの、もう去年だし、わりと記事が出回ってたので、この辺は記事紹介に留めるのである。
Google Analyticsでの設定から、iOS SDKでのアプリへの設定まできちんと解説してる記事:
10分でわかるGoogle Analytics SDK for iOS - murapongの日記
ちなみに、今は「ウェブサイト以外」という設定ができてるので、アプリの場合はそれを使うといいよっ
あと、iOSアプリは一旦データを貯めこんで一定期間ごとにポイっと投げるので、リアルタイム解析でも、ふつーのウェブサイトよりかは反映がちっと遅めだよっ
また、Google Analyticsの時計を使うのではなく、iOSデバイスの時計を使うので、時間はデバイスごとにわりとブレるよん。(誤差が出る)
便利マクロが載ってるSlideShare:
iPhoneアプリのアクセス解析Google Analytics SDK for iOSについて - ninjinkunの日記
ちょっと誤記があるので、そのままでは使えにゃい。
クラスはページとして、メソッドはイベントとしてトラッキングされるマクロだよん。
初期化マクロはこちら:
iPhoneアプリの使用状況をGoogle Analytics for iOSで解析する | へびにっき
簡単に説明すると、以下の手順。
- Google Analyticsでアプリ用のアカウント作る
- Google AnalyticsでGA SDKをダウンロードする
- Xcodeで作ってるプロジェクトに、GA SDKを追加
- アプリに「CFNetwork.framework」と「libsqlite3.0.dylib」 を追加
- 「<プロジェクト名>-Prefix.pch」 で 「GANTracker.h」 をインクルードして、 各種マクロをペタペタ貼る
- アプリの「didFinishLaunchingWithOptions」で「GA_INIT_TRACKER」する
- 途中でマクロを使って便利に計測
- アプリの最後「dealloc」で「GANTracker sharedTracker] stopTracker];」する
ちなみに、同梱されているlibGoogleAnalytics_NoThumb.aは、現時点では"_OBJC_CLASS_$_GANAdHitIdGenerator"が無いってリンカーでエラーメッセージが出るので使えないよ〜。
Google AnalyticsでiOSのバージョンをトラッキングする方法
で、ここからやっと本題。
現時点では、GoogleAnalyticsはiPadかiPhoneかだけをトレースして、そのバージョンまでは判別してくんないわけで。Google アナリティクスでiOSのバージョンを確認する方法 | MOL の結果とかここギコ!: Google Analytics SDK for iOSでUserAgentの変更の方法で勝手にUAを変更して確認する限りでは、そもそもiOS類のバージョン自体をまだトラッキングしてくんないらしい。
てわけで、iOSのバージョンは手動でカスタム変数を使ってトラッキングする。その方法は以下のとおりだね。
UIDevice *cd = [UIDevice currentDevice];
NSError *error;
if (!GANTracker sharedTracker] setCustomVariableAtIndex:1 name:cd.model value:cd.systemVersion withError:&error]) {
NSLog(@"%@",error.helpAnchor);
}
ちなみに、流行(?)のマクロにすると、こんな感じ〜。
#define GA_TRACK_VER { UIDevice *cd = [UIDevice currentDevice]; NSError *error; if (!GANTracker sharedTracker] setCustomVariableAtIndex:1 name:cd.model value:cd.systemVersion withError:&error]) { NSLog(@"%@",error.helpAnchor); } };GA_TRACK_INITの後にGA_TRACK_VERをセットしとくと、バージョン情報が取れるようになるよっ つまり、手順のNo.6のすぐ後だね〜。
あ、この場合はカスタム変数の1番に記録するよ。
他の番号のカスタム変数を使用したい場合は、「setCustomVariableAtIndex:1」の番号を1からその番号に変更してね〜。
ちなみに、フリー版のGoogle Analyticsだと、現時点で使えるカスタム変数の数は5つまでだよ〜。
参考
- Google Analytics SDK for iOS - Google Analytics - Google Developers
- iOS NoThumb library is missing an object file, making the library unusuable - Google グループ
- Google アナリティクスでiOSのバージョンを確認する方法 | MOL
でわでわ。
2012年04月30日
■[SEO][JavaScript]Google Analyticsでダウンロード(PDFとかZIPファイルとか)をトラッキングする(たぶん)正しい方法
やぁ鳥さんだよ。
Google Analyticsを埋め込めないファイルのトラッキング方法を説明するよっ
PDFとかAVI、ZIPファイルのダウンロードとかのトラッキングね。
まず、非同期トラッキング用の配列が無ければ作る。
var _gaq = _gaq || [];
今度は外部ファイルをクリックした時の関数を定義する。
function recordObjectLink(link) {
try {
var linkedURL = link.href.replace('http://’ + document.domain, '');
linkedURL = linkedURL.replace('https://’ + document.domain, '');
_gaq.push(['_trackPageview', linkedURL]);
var cl = '';
if (link.target && link.target !== '_self') {
switch (link.target) {
case '_parent':
cl = 'parent.document.location = "' + linkedURL + '"';
break;
case '_top':
cl = 'top.document.location = "' + linkedURL + '"';
break;
default:
cl ='var w = window.open("' + linkedURL + '", "' + link.target + '");if(!w){document.location = "' + linkedURL + '"}';
break;
}
} else {
cl = 'document.location = "' + linkedURL + '"';
}
setTimeout(cl, 100);
} catch (err) {}
return false;
}
ミソは、以下のとおり。
- Google Analyticsはどうも_gaqに対するトリガーを仕掛けているのではなく、タイマーで定期的にクロールしているらしく、_gaqに突っ込んだ非同期イベントが、ページ遷移が早すぎるとトラックされないことがある。なので、ごく短い時間遅延させ、確実にトラッキングされるようにする
- その影響で、setTimeoutで呼び出す式に、aでtarget指定されてた時の挙動をJavaScriptに引き継がないといけない。(HTMLと完全に一緒にするのは無理)
- このトラッキング方法だと、ふつーにhrefに付いてるURLを渡してもドメイン名がいちいちくっ付いて来るので、それを引っぺがす。
で、最後にトラッキングしたいリンクにイベントを仕掛ける。
<a href="〜" onclick="return recordObjectLink(this);" target="_blank">
つまり、このJavaScript(要編集)を読み込んで、リンクにonclickを仕掛けておけば、トラッキングされるよっ
ページ内の特定のリンクに一気にイベントを仕掛けるなら、こんな方法もあるね。
以下は<div id="targetDiv">〜</div>にあるa要素すべてにトラッキングを仕掛ける場合だよ(jQuery利用の場合)
<script type="text/javascript">
$(function(){
$("#targetDiv").delegate('a', 'click', function (e) {
return recordObjectLink($(this)[0]);
});
});
</script>
参考
でわでわ。
