2010-11-21 14 views
1

私は、Ajaxの呼び出しによってメインコンテンツが変更されるサイトを作成しています。私はasync _gaqメソッドを使用してGoogle Analyticsコードを追加したいと思います。 URIを含む_trackPageviewイベントを_gaqにプッシュする必要があることを理解しています。Google AnalyticsでAjaxを使用する

1)私のリンクやフォームでonclickプロパティを使う(またはJQueryでイベントをバインドする):onlink = "_ gaq.push(....)"

2)私のajaxコードは、ajaxリクエストからデータを受け取るときにスクリプトを処理できるので、ajaxedページを提供するときに_gaq.push(...)呼び出しをそのスクリプトスニペットに追加できます。

最初のオプションを使用すると、わかりやすく簡潔なコードが生成されます。しかし、欠点は、すべてのリンクを入れて解析コードを作成することを覚えておかなければならず、JS検証付きのフォームで使用すると、検証が失敗してもクリックがGAによって分析されることです。

2番目のオプションはあまりクリーンではありませんが、上記の問題を解決します。 1つのGAコードを使用して、ajaxページまたは通常のページを提供しているかどうかを確認し、それに応じてJSスニペットを出力することができます。また、フォーム提出は、フォームが実際に提出されたときにのみ記録されます。

これに関するご意見やご感想をお寄せいただきありがとうございます。おそらく、これを行うためのより多くの配慮や方法がありますか?

おかげ ヤロン

答えて

4

あなたはjQueryのを使用している場合は、それを行うには、いくつかのよりスマートな方法があります。

一つの可能​​性は、このイベントをトリガーするすべてのjQueryのAjaxの呼び出しで、そこから次にイベントajaxSuccess

$(document).ajaxSuccess(function(e, xhr, opt){ 
    _gaq.push(['_trackPageview', opt.url]); 
}); 

と結合することであり、それはあなたが_gaqにAjaxを介して、要求されたURLをプッシュします。

あなたがリクエストしたとおりにURLをプッシュします。あなたが呼ぶのであれば:

$.ajax('http://www.mydomain.com/path') 

http://www.mydomain.com/path _gaqにプッシュされます。おそらくそれはあなたが望むものではありません。だから、このような.ajaxを呼び出すことが良いでしょう:

$.ajax('/path'); 

は、今では唯一の/pathが_gaqするためにプッシュされます。

本当にドメイン全体を使用する必要がある場合は、URLをサニタイズしてからGoogleアナリティクスにプッシュすることをお勧めします。

+0

おかげエドゥアルド、 私はアイデアを好きで、それをさらに検討する必要があります。私が見ることができる唯一の欠点は、いくつかのAjax呼び出しがアナリティクスに送信されることが意図されていない場合、私はどこか特別なロジックが必要だということです。しかし、私はそれが可能だと思います。 – Yaron

1

これは別のアプローチであるため、これを新しい回答として投稿しています。

グローバルイベントajaxSucessにバインドしたくない場合は、deferredsを使用して手動で行うことができます。

$.ajax('/page').done(function(){ 
    _gaq.push(['_trackPageview', '/page']); 
}).done(function(response){ 
    // Do something with the response 
}); 

悪い点は、完了したコールバックがURLを受信しないことです。だからあなたはURLを二度入力します。あなたはおそらくそれを数回をやろうとしているので、ヘルパー関数を作成するために便利なことがあります。あなたはそのAjaxリクエストをやっているとき

function GaAjax(url){ 
    return (function(u){ 
    return $.ajax(u).done(function(){ 
     _gaq.push(['_trackPageview', u]); 
    }); 
    })(url); 
} 

今、あなたの代わりにjQueryの.ajaxのそれを呼び出すことができますGoogleアナリティクスに送信する必要があります。

GaAjax('/page').done(function(){ 
    // Do something with the response 
}); 
関連する問題