Categories
GoogleAnalytics

GAでOvertureの指定キーワードを取得する方法

基本的にはutm_termにキーワードを入れれば良いのですが、
それが出来ない場合が多々あります。
トラッキングURLをONにして、カスタムフィルタを以下のように
設定すれば、データを取得できます。
トラッキングURLをONにすると、
OVRAW
OVKEY
OVMTC
OVADID
OVKWID
OVCAMPGID
OVADGRPID
というパラメータが付きます。
・OVRAWはユーザーが入力したキーワード
・OVKEYは購入したキーワード
・OVMTCは検索の種類です(スポンサードサーチ?インタレストマッチ?)
OVRAWはリファラーで取れるので必要なくて、その他はID系なので、特に必要ありません。
OVKEYとOVMTCを組み合わせて、ユーザー定義に表示させています。
やっぱりカスタムフィルタは色々活用しがいがありそうです。
Categories
GoogleAnalytics

ライブラリの非同期トラッキング移行

以前、作ったGA用ライブラリの非同期トラッキングへの移行ができました。
非同期トラッキングへの移行作業は、結構大変かなと思っていたのですが、思っていたよりもスムーズにできました。

動作するファイルは↓に置いています。
【通常】
http://tanakanakana.happy888.net/async.html
【クロスドメインのテスト】
http://tanakanakana.happy888.net/async2.html
【追加ライブラリ】
http://tanakanakana.happy888.net/async3.html

機能を再掲すると、
■標準ライブラリ:gaPlugin.js、gaConf.js
外部サイトへのリンク、DLリンク(.zip,.pdfなど)を自動的に取得
(カスタムイベント)
コンテンツグループを正規表現で指定
(マルチカスタム変数)
パラメータクエリをマルチカスタム変数へ格納
コンバージョンしたユーザーを区別
(マルチカスタム変数)

■追加ライブラリ:ga_scroll.js
(外部ライブラリのjQuery.jsとjquery.mousewheel.min.jsが必要)
ページレベルでの詳細データを取得するためのライブラリです。
UserInsightのレポーティング無しでのパクリです
スクロールされた位置を記録(最下部)
滞在時間を記録
ホイールアップの回数
ホイールダウンの回数
マウスクリックの回数
これらをカンマ区切りで1つのマルチカスタム変数に格納します。
一つだけ抜き出して、カスタムイベントに入れています。
(デフォルトではスクロール位置。滞在時間に変更も可能)

ちなみに、ページ離脱時のタイミング(onUnload)でデータを取得しているので、
ほんとにほんとの滞在時間を取得することができます。
ただし、onUnloadはきまぐれなイベントなので、結構動作しないときがあります。
ブラウザを閉じるときはやばいです。
ページ遷移は大体とれます。
あと、jQueryを使っているので、パフォーマンスが落ちます。
基本的にはランディングページとかで詳しく見たい場合にのみ使うようなイメージです。

まだちょっと設定がシンプルじゃないので、もうちょっとシンプルにしてほしいなーって感じです。あと間接効果をどうするか。。。。

Categories
GoogleAnalytics

非同期トラッキングへの移行のポイント

urchin.jsではなく、ga.jsを使っている場合は、移行する必要はないと思います。

多少計測ミスが起きづらくなるみたいですが、大してメリットもないので。
が、もし移行したい場合はちょっと面倒かもしれないです。
通常の解析しかしていない場合は、GA画面上で出てくるコードスニペットを貼りつければいいだけなので、全然大したことないのです。
ただし、以前のコードでは</body>の直前が基本でしたが、非同期コードでは
<body>直後が推奨されています。こないだまで<head>ないでしたが。
非同期コードの場合は結局どこで置いても大して変わらなそうです。
何らかのカスタマイズが行われている場合は面倒がおきます。
基本的に以前のコードでは、
pageTracke._setCustomVar(index, name, value, opt_scope);
みたいな形で入っていたものが、
_gaq.push([‘_setCustomVar’,index, name, value, opt_scope]);
という形になります。
_gaq.pushの後に配列形式でデータを入れていきます。
最初の変数は、メソッド(_setCustomVarなど)で、2つ目移行はメソッドに対する引数が入ります。
このような形式で統一されています。
カスタムイベントの場合は
_gaq.push([‘_trackEvent’, category, action, optional_label, optional_value);
です。
クロスドメイン用のsetAllowLinkerは
_gaq.push([‘_setAllowLinker’, true],):
となります。
_gaq.pushの中身はまとめることもできて、
_gaq.push(
[‘_setAccount’, ‘UA-12345-1’],
[‘_setAllowLinker’, true],
[‘_setAllowHash’, false],
[‘_setCustomVar’,1,”test1″,”testa”, 3],
[‘_setCustomVar’,2,”test2″,”testb”, 3],
[‘_trackPageview’]
);
こんな形で書くこともできます。
基本的には、これまでpageTrackerで利用できたメソッドは全部利用できるみたいです。
まだサイト上にあるマニュアル も微妙に変わってなかったりしますが、同じような感じでなんとなくいじってたら、うまく動きました。
Categories
GoogleAnalytics

Google Analyticsで、どこまでスクロールしたのかが分かる

2011年4月24日追記
このファイルは完全に修正しました。
最新版は下のページにあります。
http://web-analytics-or-die.org/?p=355

このページのスクリプトは、バグまみれなので、使わないようにしてください。

———–

GAを使って、どこまでスクロールされたのかを取得するプラグインを作成しました。
User Insightの機能いいなって思って作りました。

ついでに、
・ページでの滞在時間
・マウスクリック回数
・マウスホイール(上)利用回数
・マウスホイール(下)利用回数
も取得しちゃっています。

トラックイベントの変数に最大スクロール位置を入れて、
ひとつのカスタム変数の中に「:」区切りで全ての値を入れています。
GAを使って簡単にデータを取ることを目的としていますので、マウス位置の動きとかをとりたい場合は、素直にUserInsightを入れましょう。

サンプルサイト
http://tanakanakana.happy888.net/scroll.html

ga_scroll.js
(2011/4/24 リンク外しました。)

var firstTime = new Date().getTime();

$(function() {

    var conf = {
    //カスタムリンクに入れる変数を設定
        link_var : "scroll_p",
    //マルチカスタム変数で利用するスロット
        slot : 1,
    //マルチカスタム変数のカテゴリ名
        category : "pageData",
    //サイト内で使用しているページレベルのカスタム変数
        page_var : [1,2],
    //_trackEvent(category, action, optional_label, optional_value)
    //トラックイベントのカテゴリ名
        l_category : "pageData",
    //トラックイベントのアクション名
        l_action : "scroll_point",
    //トラックイベントのラベル名
        l_label : "scroll_point"
    }


    //初期化
    var d = {
        scroll_p : 0, //スクロール位置
        durTime : 0.00, //滞在時間
        wheelUp : 0,  //ホイールアップの回数
        wheelDown : 0, //ホイールダウンの回数
        mClick : 0 //マウスクリックの回数
    }

    //前処理:ページレベルのカスタム変数を消去
    for(var i=0; i<conf.page_var.length; i++){
        pageTracker._deleteCustomVar(i);
    }

    var getVar = function(){
        for(var s in d){
            if(s == conf.link_var){
                return eval("d." + s);
            }
        }
    }

    var setVar = function(d_array){
        var temp = d_array[0];
        for(var i=1; i < d_array.length; i++){
            temp = temp + ":" + d_array[i];
        }
        return temp;
    }


    var loopWait = function(timeWait) {
        var timeStart = new Date().getTime();
        var timeNow = new Date().getTime();
         while( timeNow < (timeStart + timeWait ) )
     {
         timeNow = new Date().getTime();
    }
        return;
    }

    $(window).scroll(function(){
        var temp_p = $(window).scrollTop();
        if(d.scroll_p < temp_p){
            d.scroll_p = temp_p
        }
        //console.log(d.scroll_p);
    });

    $(window).mousewheel(function(e,del){
        if(del>0){
            d.wheelUp++;
            }else{
            d.wheelDown++;
        }
        //console.log("up:"+ d.wheelUp + ",down:" + d.wheelDown);
    });

    $(window).click(function(){
        d.mClick++;
        //console.log(d.mClick);
    });

    $(window).unload(function(e){
        var nowTime = new Date().getTime();
        d.durTime = (nowTime - firstTime)/1000;
        var cstmLink = getVar();
        var d_array = [d.scroll_p, d.durTime, d.wheelUp, d.wheelDown, d.mClick];
        var cstmVar = setVar(d_array);
        //console.log(cstmLink + ">>" + cstmVar);

        //mcvにセット
        pageTracker._setCustomVar(
            conf.slot,
            conf.category,
            d_array,
            3
        );
        //トラックイベント
        pageTracker._trackEvent(
            conf.l_category,
            conf.l_action,
            conf.l_label,
            parseInt(cstmLink)
        );
        loopWait(50);
    });


 });

トラックイベントに入れる変数は変更可能です。
滞在時間をトラックイベントにすることもできます。
これを使うと念願の直帰ユーザーの滞在時間まで取れます!
(クロス集計で余裕でだせます!)
トラックイベントを利用すると、GAの画面上で平均値を出すことができるので、
パッとみたいものをトラックイベントに入れれば良いかと思います。

■諸注意
*重くなります
作るの大変そうだったので、JavaScriptのライブラリ(jQueryとjQueryプラグイン)を使っています。
一般的な環境では気にならない程度ですが、確実にサイトのパフォーマンスは下がります。
その他のライブラリ(prototype.jsなど)を使っている場合は、そのままでは共存できません。コードを改編すれば、共存することもできますが、ライブラリを2つ使うと、パフォーマンスが落ちるので、あまりオススメしません。
逆に既にjQueryを使っているサイトであれば、パフォーマンスの問題はそれほどないです。

*動作がとろくなります
ビーコンを読み込むイベントは「onUnload」イベントを使っています。
ページを移動した時、ページを閉じたときに、ビーコンを読み込んでいます。
その際、50msの遅延処理を行っているので、ちょっと遅いなくらいに感じるかもしれないです。

*全部のデータが取れるわけではないです
onUnloadイベントは結構テキトーなイベントでブラウザによっては取得できないこともあります。全てのデータを取るというつもりではなく、あくまでも傾向を知るという形で使った方が良いかと思います。
Google Chromeでは遅延処理が効かなくなっていたので、取れない場合もあるかもしれないです。
ブラウザごとの挙動の違いは↓にまとまっています。
http://hisasann.com/housetect/2008/09/onunload.html

*全ページに入れることはあまりオススメしません
動作が重くなるので、全ページに入れることはあまりオススメできません。
ランディングページなど、ココぞというページにだけ使う方が良いかと思います。
GAの仕様として1セッション当たり500リクエストまでに制限されていますが、 ページ移動時、ページ閉じる時だけなので、その点は問題ないと思います。

*これまでのプラグインとは一応共存できる
これまで作った他のプラグインとは一応共存できているみたいです。
ただし、オフサイトリンククリック時にも 50msの遅延処理を行っているので、さらに重く感じるかもしれないです。
サンプルサイト

■インストール方法

各種jsを用意し、アップロードした後、
GAコードが適切に入っているHTMLのヘッダ内に

<script src=’jQueryへのパス’></script>
<script src=’jquery.mousewheel.min.jsへのパス’></script>
<script src=’ga_scroll.jsへのパス’></script>

を入れてください。パスは適宜変更してください。
これだけできっと動きます。

Categories
GoogleAnalytics

Google Website Optimizer用 行動ターゲティングスクリプト作りました2

行動ターゲティングJSの仕様

説明はココココ

■仕込み
リダイレクトを出し分けする対象のページにスプリット用のJSを仕込みます。
ページ内の行動でターゲティングする場合は、対象のページ全てに、
ターゲティング用のJSを仕込みます。
それぞれ色々設定は必要です。

■セグメント軸
<出し分け対象ページ内>
・リファラー
・検索キーワード
<ターゲティングページ>
・総滞在時間
・特定ページ(グループ)のPV数
・再訪問間隔

訪問回数はまだつけていません。
ちょっとめんどくさい上に、定義がGAとどうしても変わってしまいます。
JSなので、ジオターゲティングはできません。
検索キーワードによる出し分けは一応実装しています。
ほぼ全ての検索エンジンに対応していると思います。
エンコード周りはecl.jsというライブラリを使っちゃいました。
ライセンスがどこにも書いていなかったので、商用で使ってよいのかどうかは微妙です。

■セグメント化のロジックについて
これだけたくさん変数があると、いくらでも組み合わせができてしまい、
ロジックが複雑になります。
なので、あえてロジックを簡単に設定できるような機能を実装していません。
都度都度、JSを手書きするイメージです。

■動くけど。。。
素人が作ったものなので、これはプロトタイプというイメージです。
実際に使う前には、専門家の人に確認してもらった方が良いと思います。
作っておいて、あれですけど、そこまでしてターゲティングにこだわる必要ないかもってちょっと思ってきました。
あと、リダイレクト先にパラメータ付けて、パラメータ読み込むライブラリを使えば、GAでトラッキングすることができるので、セグメント別のCVRとか出すことができます。

Categories
GoogleAnalytics

Google Website Optimizer用 行動ターゲティングスクリプト作りました1

と、いうことでGWOと組み合わせて使えるような行動ターゲティングのJSを書きました。
GWO専用ではなく、独立したJSにしています。単体でも使えるし、他のツールと組み合わせても使えると思います。

かなり設定が必要ですが、ベースのソースコードだけココに置いておきます。

behavior_t.zip

■GWO専用にしなかった理由
前の投稿にも書いたとおり、GWOはASPではなく、JSファイルでのみスプリットテストを行うので、A/BテストでもMVTでも全データをHTMLファイル上に記載する必要があります。
・GWOのタグを出し分ける
という発想もできたのですが、かなり複雑になります。
アクティブコアのようなASPサービスでは、scriptタグを2~3行入れれば良いだけなので、作りやすいんですけど、GWOの場合はあまりにも、設定が複雑になりすぎてしまいます。
それと、テストを実行する前に、Google様にバリデーションをしてもらう必要があります。
タグを出し分ける場合だとデフォルトではHTML上に記載していない状態なので、Google様に怒られてしまいます。なので、一回Google様のご指示通り記載してからバリデーション通ってから、変更するという形になり、かなり面倒です。

■ GWOを動かす前にリダイレクト
なので、ユーザー誘導用のページを作って、セグメント別にリダイレクト先を変えるという方法を採っています。
セグメント1のユーザーがページに訪れると、セグメント1用のページへとリダイレクトさせ、リダイレクト先でGWOを実施してくれという考えです。
つまり、セグメント分の「ページ」とセグメント分の「テスト」が必要になります。
GWOでA/Bテストをしてしまうと、人によっては2回リダイレクトすることになるので、あんまりよろしくないかもしれないです。するならMVTの方が良いと思います。

仕様については、次の投稿

Categories
GoogleAnalytics

Google Website Optimizerの概要

行動ターゲティング用のJSを作成したのですが、
その前にGWOにテスト方法ついて、ごく簡単に説明したいと思います。

■2つのテスト方法
GWOには
・A/Bテスト
・多変量テスト(MVT)
という2種類のテスト方法があります。
普通のA/Bテスト、MVTと同じと言えば同じなんですけど
定義が少し変です。
Googleの公式サイトによると

A/B テストと多変量テストの 2 種類を提供します。 A/B テストは、2 つのまったく異なるページのコンバージョン率を比較するテストです。レイアウトを変更したり、ページ内のセクションの位置を変更したり、ページの全体的なデザインを変更して、テストを実施できます。 これらのテストは比較的単純で、短期間で結果が得られます。 これに対して、多変量テストはより柔軟性が高く強力なテストです。 多変量テストでは、ページ内の複数のセクションのコンテンツ パターンを同時にテストできます。 たとえば、2 つの異なる見出し、3 つの異なる画像、2 つの異なる製品説明をテストできます。

つまり、A/BテストとMVTというよりも、
・全体テスト
・部分テスト
と言った方が良さそうな感じです。
ちなみに、A/Bテストでも3パターン以上テストすることができます。

■GWOの動作イメージ
ということで、A/BテストとMVTでGWOの動作は異なります。
・A/Bテスト
オリジナルページのHTMLとバリエーションページのHTMLを用意します。
ユーザーが対象のページ(オリジナルページ)を開こうとしたときに、
– オリジナルページを表示
– バリエーションページへリダイレクト
のいずれかが起こります。
表示割合はどのページもほぼイコールになります。
例)2パターン:オリジナル50%、バリエーション50%、
3パターン:オリジナル33.3%、バリエーション33.3%ずつ

・MVT
MVTではA/Bテストと異なり、用意するページは「1ページのみ」です。
ページ内に全てのパターンを記載します。
ユーザーが対象ページを開くと、ページ内に記載したパターンのうち、
どれか一つが表示されます。
もちろん、表示される割合は均等です。

当然、タグチメソッド的な方法は用意されていません。
直行表作って頑張って手動でタグチメソッドをすることはできます。
分析は結構めんどくさいです。
(一般線形モデルが必要)

Categories
GoogleAnalytics

GoogleAnalyticsプラグイン JSファイル

jsフォルダ内に2つのjsファイルを置いて、
HTMLのGAコードスニペットを書くところに↓と書いてください。

あ、うまく動かなかったら、ごめんなさい。

<script type="”text/javascript”">// <![CDATA[
var gaJsHost = ((“https:== document.location.protocol) ? “https://ssl.” : “http://www.”);
document.write(unescape(%3Cscript src=’” + gaJsHost + “google-analytics.com/ga.js’ type=’text/javascript’%3E%3C/script%3E”));
// ]]></script>
<script src="”/js/gaPlugin.js”" type="”text/javascript”"></script> <script src="”/js/gaConf.js”" type="”text/javascript”"></script>

プラグインファイル

//GA用のプラグイン
//gaGroup : コンテンツグループ設定コンフィグ
//getGroup : コンテンツグループをカスタム変数へ
//getQueryParam : パラメータをカスタム変数へ
//gaEvent : 外部リンク、DLリンクをカスタムリンクへ
//gaConv : コンバージョンのアリのユーザーをカスタム変数へ

//コンテンツグループ設定
var gaGroup = {
//グループ設定。上から順に評価される。
//正規表現でコンテンツグループを設定する

//1つ目
groupA : {
groupA : /.+sampling.+/,
groupB : /ga_test.html$/,
topPage : /^/$|^/index.html$/
},
confA : {
//スロットの設定
slot : 1,
//カテゴリ名の設定
category : "group",
//スコープはレベル3:ページレベル
scope : 3
},

//2つ目
groupB : {
test : /ga_test.html$/,
sample : /.+sampling.+/,
TopPage : /^/$|^/index.html$/
},
confB : {
//スロットの設定
slot : 2,
//カテゴリ名の設定
category : "bigGroup",
//スコープはレベル3:ページレベル
scope : 3
}

//end of gaGroup
}

//コンテンツグループを正規表現で設定して
//マルチカスタム変数へ入れる
//使用時はpageTrackerの前でnewして、set();
//_setCustomVar(index, name, value, opt_scope)
var getGroup = function(group, conf){
//コンストラクタ
this.group = group;
this.conf = conf;
}
getGroup.prototype = {
//パス名からグループを判断
get : function(){
var path = location.pathname;
var cVal = "";
for(var i in this.group){
if(path.match(this.group[i])){
cVal = i;
break;
}
}
//当てはまるものが無かった場合はotherを追加
if(cVal==""){
cVal = "others";
}
return cVal;
},

//カスタム変数にいれる
makeCVar : function(cVal){
pageTracker._setCustomVar(
this.conf.slot,
this.conf.category,
cVal,
this.conf.scope
);
},

//通常のPV取得用
set : function(){
var cVal = this.get();
this.makeCVar(cVal);
}
}

//end of getGroup

//getQueryParam
//GETクエリを見てパラメータに入れる
//コンストラクタ
var getQueryParam = function(slot, category, param, scope){
this.param = param;
this.slot = slot;
this.category = category;
this.scope = scope;
}

getQueryParam.prototype = {
//nameのクエリを返す
getQuery : function(name){
if(location.search){
var query = location.search;
query = query.substring(1,query.length);
var qArray = [];
qArray = query.split("&amp;");
for(var i=0;i
var param = qArray[i].split("=");
if(param[0] == name){
return param[1];
}
}
}
},

//カスタム変数にいれる
set : function(){
var arr = [];
var param = this.getQuery(this.param);
arr = [this.slot, this.category, param, this.scope]
pageTracker._setCustomVar(
arr[0],
arr[1],
arr[2],
arr[3]
);
}
}
//end of getQueryParam

//gaEvent
//aタグクリック時にトラックイベントへ入れる
//onloadイベント中にgaEvent.adding()でスタート
var gaEvent = {
//設定
conf : {
domain : "tanakanakana.happy888.net",       //domain名
down : {        //ダウンロード対象ファイル
pdf: /.pdf$/,
zip: /.zip$/
},
//カスタム変数を使っている場合はスロット番号を記載
customSlot : [1,2]
},

//wait関数
loopWait : function(timeWait) {
var timeStart = new Date().getTime();
var timeNow = new Date().getTime();
while( timeNow &lt; (timeStart + timeWait ) )
{
timeNow = new Date().getTime();
}
return;
},

//カスタム変数を消去
delCvar : function(){
for(var i = 0; i &lt; gaEvent.conf.customSlot.length ; i++){
pageTracker._deleteCustomVar(gaEvent.conf.customSlot[i]);
}
},

//クロスブラウザ対応のaddListenr
addListener : function(el, type, func) {
if(! el) { return false; }
if(el.addEventListener) {
el.addEventListener(type, func, false);
} else if(el.attachEvent) {
el.attachEvent('on'+type, func);
} else {
return false;
}
return true;
},

//_trackEvent(category, action, optional_label, optional_value)
tracking: function(category, action, optional_label){
pageTracker._trackEvent(category, action, optional_label);
},

//イベントバインド
bindFunc : function (bind, func){
return function(){
func.apply(bind, arguments);
//return false;
};
},

//aタグにイベント追加
adding : function(){
//aタグを取得
var atag = document.getElementsByTagName('a');
//それぞれにイベントリスナーを付ける
for(var i=0; i &lt; atag.length; i++){
var ref = atag[i].href;
//サイト外へのリンクの時
if(ref.indexOf(gaEvent.conf.domain) == -1){
gaEvent.addListener(atag[i], "click", gaEvent.bindFunc(atag[i], gaEvent.getOffsite));

//サイト内へのリンクの時
}else{
gaEvent.addListener(atag[i], "click", gaEvent.bindFunc(atag[i], gaEvent. getOnsite));
}

}

},

//サイト内リンク場合
getOnsite : function(){
var path = this.pathname;
path = gaEvent.delSla(path);
var cVar = [];
for (var j in gaEvent.conf.down){
if(path.match(gaEvent.conf.down[j])){
cVar = [j, "download",  path];
}
}
gaEvent.delCvar();
gaEvent.tracking(cVar[0], cVar[1], cVar[2]);
gaEvent.loopWait(100);
},

//オフサイトリンクの場合
getOffsite : function(){
var path = this.hostname + this.pathname;
path = gaEvent.delSla(path);
//変数名を設定 : _trackEvent(category, action, optional_label, optional_value)
var cVar = ["offsite", "offsite",  "offsite:" + path,];
gaEvent.delCvar();
gaEvent.tracking(cVar[0], cVar[1], cVar[2]);
gaEvent.loopWait(100);
},

//最初と最後に/があったら、削除
delSla : function(str){
if (str == "/"){
return "/";
}else{
str = str.replace(/^//, "");
str = str.replace(//$/, "");
return str;
}
}

//end of gaEvent
}

//gaConv
//カスタム変数に
//コンバージョンしたユーザーをTrue
//してないユーザーをFalse で設定
//_setCustomVar(index, name, value, opt_scope)
//slot,nameは任意で設定
//scopeは基本1(visitor)
var gaConv = function(slot, name, scope){
//コンバージョンのパス名を設定
this.path = ["/sampling/sample.html", "/sampling/conf.html"];
this.slot = slot;
this.name = name;
this.value = "";
this.scope = scope;
}

gaConv.prototype = {
set : function(){
for(var i = 0; i &lt; this.path.length; i++){
if(location.pathname==this.path[i]){
this.value = "true";
var val = [this.slot, this.name, this.value, this.scope];
pageTracker._setCustomVar(
val[0],
val[1],
val[2],
val[3]
);
}
}
}
}
//end of gaConv

設定用ファイル

try {
var pageTracker = _gat._getTracker("UA-XXXXX-X");

//set contents groupA
var groupA = new getGroup(gaGroup.groupA, gaGroup.confA);
groupA.set();
//set contents groupB
var groupB = new getGroup(gaGroup.groupB, gaGroup.confB);
groupB.set();
//set getQueryParam
var gq = new getQueryParam(3, "cid", "cid", 2);
gq.set();

//set get conversion
var gaC = new gaConv(4, "conv", 1);
gaC.set();

pageTracker._trackPageview();
} catch(err) {}

//get offsite, download link
window.onload = function(){
gaEvent.adding();
}
Categories
GoogleAnalytics

GoogleAnalyticsプラグイン作りました

GAはよく出来ていますけど、機能的に不満な点も多々あります。
ただし、こないだローンチしたマルチカスタム変数によって、
JavaScriptを書けば、かなりのことまで出来るようになりました。

ということで、js書いちゃいました。
使用頻度が高いだろうと考えられる機能を
できるだけ汎用的に書いています。

マルチカスタム変数が5個まで(+カスタムリンク)しか
使えないのですが、クロス集計の自由度が非常に高いので、
5個だけでも十分に使えます。
(おすすめしませんが、ちょっとした技を使えば5個以上もいけます)

現時点で下記の機能が使えます。

1.コンテンツグループの設定
正規表現でコンテンツグループを設定できるプラグインです。
違う変数に違う方法でのグルーピングも出来るようにしています。
(複数の単位のグループ分けができる)

2.外部リンク・DLリンクの取得
機能をONにするだけで、自動的にリンク(aタグ)を監視して、
全ての外部リンク、設定したDLリンク(pdf、zipなど設定可)が
押されると、カスタムリンクに変数を格納します。
onclickイベントにjsを書かなくても、クリックイベントを取得できます。

3.GETパラメータを取得
GAにもキャンペーン分析の機能があるので、必要ないと言えば、
ないんですけど、設定面倒なので、GETパラメータを取れるような
機能を付けました。
パラメータでクロス集計したい時にどうぞ。

4.コンバージョンした人を識別
コンバージョンページへ到達したユーザーを識別します。
これで、CVユーザーの特徴や、CVしていないユーザーとの違いが
集計できるようになります。
セッションレベルでの識別と、半永続的な識別の両方共設定可能です。

もうちょっと機能を拡大していくつもりですが、
これだけあれば、一般的なコーポレイトサイトでは、
SCいらないんじゃないくらいな感じになると思います。
パス系の機能弱いですけど。

この機能欲しいって言うのがあれば、ぜひお寄せください。
僕の気まぐれで実装するかもしれないです。

ファイルは次の投稿で。

Categories
Web分析一般

大きなPDCAと小さなPDCA

最近はどの企業もサイトリニューアルの際、PDCAプラニングをしてきてくれというオーダーがあります。Webサイトは作りっぱなしではダメで、効果測定に基づいて、「カイゼン」をしていきましょうというのが広まってきました。

しかし、「PDCA」という言葉が単に、効果測定してチューニングしていきましょうという意味だけで使われている傾向があります。一度作った後の「チューニング」という意味でのPDCAサイクルに加え、もう一つ重要なサイクルがあります。次期サイトリニューアルまでのPDCAサイクルです。つまり、サイトを作成した後の運用フェーズにおけるチューニングという意味でのPDCAサイクルと、次期リニューアルまでという長いフェーズでのPDCAサイクルの2種類のPDCAサイクルがあります。私は前者を小さなPDCA、後者を大きなPDCAと呼び明確に区別しています。

小さなPDCA

サイトを作りっぱなしで、そのままにしておいてはもったい無いです。指標をきちんと定義して測定し、ボトルネックを改善していく努力をして初めて、効果を産むWEBサイトになることができます。

どんなにうまくサイトを設計したとしても、「完璧」なサイトを作ることはほぼ不可能です。低コストで追加・修正ができるというWEB(HTML)のメリットを活かして、日々改善していくことが重要です。

そのためには、適切な指標を定義し、ウォッチする箇所を明確にしておく必要があります。できれば、コンバージョンに対して影響力の強い箇所を特定して、A/Bテストなどを続けていくことが望ましいです。

大きなPDCA

サイトを作成してから年月が経ってくると、小さな「カイゼン」だけでは対処できない問題が出てきます。

・市場動向の変化

・ユーザー意識の変化

・WEB技術の変化

などに対応していくには、運用チューニングだけでは不可能です。サイトのリニューアルが必要です。

サイトリニューアルをする際には、日々のチューニングとは違うレベルでの分析が必要になります。

・WEBがどのような目的で使われているのか

・どのような人がサイトを使っているのか

・現状サイトのどの部分が大きな問題となっているのか

といった現状分析に加え、

・ビジネスゴールの設定

・セグメント、ターゲットの決定

・ターゲットユーザーのニーズ分析

などを行い、サイト戦略を詰めていきます。

どちらのPDCAも重要

短期プロモーションサイトを除くと、最近はさすがにPDCAなんかどうでもいいというクライアントはなくなってきました。しかし、逆に(小さな)PDCAを回して、サイトをカイゼンしていくんだから、サイトの設計は、短期間で作ってくれというクライアントも増えてきました。

もちろん、納期・予算との兼ね合いもあるので、全ての案件で大規模な調査・分析をすることは不可能です。しかし、サイト設計時に的を得た設計をしていないと、いくら小さなPDCAを回しても、的を外れたまま、あまり効果の出ない改善にしかなりません。

小さなPDCAは明確なマーケティングプラン(大きなPDCA)があって初めて成り立つものです。この点を疎かにすると、どんなにカイゼンしても、効果を産むサイトに生まれ変わることはありません。