クエリ文字列パラメーターを使用せずにキャンペーンを追跡するために、Googleアナリティクスでサポートされている方法はありますか?.
Analyticsでは サイトへのリンクにタグを付ける を使用して、utm_campaign
やutm_medium
などのクエリ文字列パラメーターを使用し、キャンペーンに関する情報を保持して追跡できます。
グーグルは実際にそのようなリンクの作成に役立つ オンラインツール を持っています。
たとえば、StackOverflowがExperts Exchangeでアドバタイズしていた場合、次のようなリンクがある可能性があります。
多くの理由で、これらの不格好に見えるパラメーターを自分のURLに表示したくありません。
少し前に、これらのパラメーターを設定できる方法を探しました。 Googleにはページがあります 一見するとソリューションのように見えますが、実際にはそうではありません。このページでは、クエリ文字列パラメータの名前を別の名前に変更する方法について説明しています。たとえば、utm_source
ではなくsrc
を使用するには、次のように実行します。
pageTracker._setCampSourceKey("src");
実際にutm_source
キーの値を明示的に設定するのが簡単ではなく、代わりのパラメーター名を設定するだけではなぜなのか、私には本当にわからないようです。
昔、一種の厄介なハックをした人を見つけたのを覚えていますが、今ではそれを見つけることすらできません。分析コードのコピーを入手し、本質的にそれを分岐してハッキングしたことを思い出しているようです。これは私にとって良い解決策ではありません!
ある種の厄介なリダイレクトなしに、これを行うための公式にサポートされた方法はありますか?.
一言で言えば、私はこのようなことをしたいです(ASP.NET MVCサイト)。次のようなURLで私のサイトへのリンクをpartnetに与えます:
http://www.example.com/?cid=2dae88a8-66b1-475d-8a35-2978bd1a158c
私のMVCページのコントローラーで、これに関連するキャンペーンを見つけ、GUID関連するモデルを設定します。注:これにより、キャンペーンパラメーターを変更せずに変更できるという利点がありますURLを再発行してください。
ページ自体で私はこれを行います:
var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
var campaignSource = <%= ViewData.Model.CampaignSource %>;
var campaignName = <%= ViewData.Model.CampaignName %>;
pageTracker._setCampaignData({
utm_source: campaignSource,
utm_medium: campaignMedium,
utm_campaignName: campaignName
});
pageTracker._trackPageview();
重要:この_setCampaignDataメソッドは実際には存在しません。これは、私が理想的に実行できるようにするための単なる「擬似コード」です。
誰かがこのようなことを何とかうまく成功させましたか?
Push(['_ set'、 'campaignParams'、... を使用したソリューションは レガシーライブラリga.js に対してのみ機能するようです。
Analytics.jsを使用する場合は、キャンペーンパラメータを個別に指定する必要があります。例えば。
ga('set', 'campaignName', 'TheCampaignName...');
ga('set', 'campaignSource', 'someCampaignSource');
ga('set', 'campaignMedium', 'email');
理論上の "_setCampaignData"が["_set","campaignParams",...]
の形式でようやく存在します
設定する値をプログラムで挿入する方法がある場合(たとえば、リダイレクトのCookieによって設定されるか、サーバー側で設定されてページに印刷される)、_set
APIを使用できます設定するキャンペーンパラメータをハードコーディングします。
そのためのフォーマットは次のとおりです。
_gaq.Push(['_set', 'campaignParams',
'utm_campaign=CAMPAIGN&utm_source=SOURCE&utm_medium=MEDIUM']);
したがって、元の例を使用します。
var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
var campaignSource = <%= ViewData.Model.CampaignSource %>;
var campaignName = <%= ViewData.Model.CampaignName %>;
_gaq.Push(['_set', 'campaignParams',
'utm_campaign=' + campaignName + '&utm_source=' + campaignSource +'&utm_medium=' + campaignMedium]);
この回答 は、新しいGoogleアナリティクスライブラリanalytics.js/Universal Analyticsでこれを実現する方法を詳しく説明しています。
TörökGáborは私にアイデアを与えました。
// ...
var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
var campaignSource = <%= ViewData.Model.CampaignSource %>;
var campaignName = <%= ViewData.Model.CampaignName %>;
// save the old hash
var oldHash = document.location.hash;
// add campaign data to the hash
document.location.hash = 'utm_source=' + escape(campaignSource) + ...;
pageTracker._setAllowAnchor(true);
pageTracker._trackPageview();
// restore the old hash:
document.location.hash = oldHash;
このようにして、バックエンドでキャンペーンデータを作成し、それを動的にハッシュに渡して、ユーザーに気付かれることなく復元できます。つまりキャンペーンの追跡は、実際のURLから100%独立しています。
関数があります _setAllowAnchor
クエリパラメータではなくアンカーテキストでタグを指定できるようにするTrackin APIの場合。
pageTracker._setAllowAnchor(true);
したがって、http://www.stackoverflow.com/#utm_source=expertexchange
およびGAはそれを理解します。これにより、SEOの問題を回避できます。
Twitterの問題については、投稿 Twitterの追跡とGoogleアナリティクスでのURLの短縮 で説明されている方法をお勧めします。
これをGoogleヘルプフォーラムに投稿しました。
グーグルお読みください!!!素晴らしい強化の機会!!!これにより、多くのユーザーがAdvertisingパラメータを使用できなくなります。 AdvertisingパラメータをtrackPageview(url)で使用されるURLから読み取ることができるようにします。
いずれにしても、この機能がない場合は、回避策を使用する必要がありました。パラメータをURLに追加するのではなく。一時的にブックマークとしてURLに追加しました。次に、trackPageview呼び出しの後にそれらを削除しました。それらをブックマークとして追加することにより、ページはリロードされません。次の例を参照してください。
var pageTracker = _gat._getTracker(param);
var orighash = document.location.hash;
if (orighash == "") {
orighash = "none"; // this is done to prevent page scrolling
}
document.location.hash = 'utm_source='+source+'&utm_campaign='+campaign+'&utm_medium='+medium+'&utm_content='+content;
pageTracker._setAllowAnchor(true);
pageTracker._trackPageview();
document.location.hash = orighash
以下は、GA標準イベントトラッキングではなく、イベントトラッキングのGoogleアナリティクスユニバーサルメソッドを使用してこれを行うための更新された方法です。
UTM文字列全体をqueryString(存在する場合)から抽出するか、Google Cookie(__utmz)からプルして、以下のコードを使用してGoogle Analyticsに渡すことができます。
ga('send', 'event', 'queryString', 'getQueryString', googleString );
次に、作成するトリガーを実行すると(「widgetTracker」という名前の関数を使用します)、GAイベントトラッカーを実行できます。
コード全体は次のとおりです。
/* JavaScript Document */
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).Push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-xxxxxxx-xx', 'xx.xxx');
ga('send', 'pageview');
var googleString;
var stringArray = [];
var queryStringObject = makeQueryStringObject();
var QUOT = "'";
var EQ = '=';
var AMP = '&';
for ( var v in queryStringObject ) {
var str = v + EQ + queryStringObject[v] ;
stringArray.Push(str);
googleString = stringArray.join(AMP);
}
function makeQueryStringObject() {
var obj = [];
var pageURL = window.location.href;
var URLArray = pageURL.split('?');
if( URLArray[1] ) {
var argsArray = URLArray[1].split('&');
var l = argsArray.length;
for( i=0; i<l; i++ ) {
var individualArg = argsArray[i].split('=');
if(individualArg[1] && individualArg[1].indexOf('#') > -1) {
var dropHashArray = individualArg[1].split('#');
individualArg[1] = dropHashArray[0];
}
obj[ individualArg[0] ] = individualArg[1];
console.log("value of queryStringObject: " + individualArg[0] + " :: " + obj[ individualArg[0] ]);
}
} else { /* from http://stackoverflow.com/a/14984832/1013405 */
ga1 = parseGACookie();
if(ga1['utmcsr']) {
var utm_source = ga1['utmcsr'];
}
if(ga1['utmccn']) {
var utm_campaign = ga1['utmccn'];
} if(ga1['utmcmd']) {
var utm_medium = ga1['utmcmd'];
}
if(ga1['utmctr']) {
var utm_term = ga1['utmctr'];
}
if(ga1['utmcct']) {
var utm_content = ga1['utmcct'];
}
}
var googleString2 = "utm_campaign=" + utm_campaign + '&' + "utm_medium=" + utm_medium + '&' + "utm_term=" + utm_term + '&' + "utm_content=" + utm_content;
return obj;
}
function parseGACookie() {
var values = {};
var cookie = readCookie("__utmz");
if (cookie) {
var z = cookie.split('.');
if (z.length >= 4) {
var y = z[4].split('|');
for (i=0; i<y.length; i++) {
var pair = y[i].split("=");
values[pair[0]] = pair[1];
}
}
}
return values;
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function widgetTracker() {
/* event tracking order of elements: send (required), event (required), Category, Action, Label, Value */
if (googleString) {
ga('send', 'event', 'queryString', 'getQueryString', googleString );
} else {
ga('send', 'event', 'queryString2', 'getQueryString2', googleString2 );
}
}
さて、私はそれをテストしませんでしたが、これらのパラメータを.trackPageview()
メソッドに追加してみてください:
pageTracker._trackPageview("?utm_source=...")
とにかく、あなたはそれらのパラメータを何らかの方法で渡す必要があります。つまり、常に長いURLがあり、その中に何らかのキャンペーンのがらくたが含まれています。間違ったURLにブックマークを付けたり、検索エンジンがそれらにインデックスを付けたりすることを防ぐことはできません。
これらのパラメーターの制御を維持したい場合は、タグ付けされたターゲットURLにリダイレクトする、パートナー用の個別のURLをセットアップします。
http://example.com/campaigns/1 -> http://example.com/?utm_source=...
新しいユニバーサルアナリティクスでは、これらのパラメーターを指定できます-こちらのドキュメントをご覧ください https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference
Utm_sourceパラメータを設定する例については、「キャンペーンソース」セクションをご覧ください。
Google Analytics APIを使用して、例の_trackPageviewの呼び出しをカスタマイズできます。
pageTracker._trackPageview("/inbound/" + campaignSource + "/" + campaignMedium );
すべてのインバウンドリンクは、Googleアナリティクスの/ inbound /「疑似ディレクトリ」の下に表示され、キャンペーンソースとキャンペーンメディア用の個別の「ディレクトリ」が表示されます。