Google Analytics中是否支持跟踪广告系列而无需使用查询字符串参数。
在Google Analytics中,您可tag a link to your site使用查询字符串参数,例如utm_campaign
和utm_medium
,其中包含有关广告系列的信息,以便跟踪这些参数。
Google实际上有online tool来帮助创建此类链接。
例如,如果StackOverflow在Experts Exchange上做广告,他们可能会有这样的链接:
由于种种原因,我不希望这些笨拙的参数出现在我的网址中:
我前一段时间试图找到一种可以设置这些参数的方法。 Google has a page乍一看似乎是解决方案,但实际上并非如此。该页面描述了如何将查询字符串参数的名称更改为其他名称 - 例如,使用src
代替您将运行的utm_source
:
pageTracker._setCampSourceKey("src");
我似乎无法弄清楚为什么它们不容易实际显式设置utm_source
键的值 - 而不仅仅是为它设置替代参数名称。
我记得有一段时间后找到了一个讨厌的黑客,但我现在似乎无法找到。我似乎记得,无论是谁,它都会使用分析代码的副本,并且基本上将其分解并攻击它。这对我来说不是一个好的解决方案!
是否有官方支持的方式完成此操作,没有某种令人讨厌的重定向。
简而言之,我想做这样的事情(ASP.NET MVC网站)。使用以下网址为partnet提供指向我网站的链接:
http://www.example.com/?cid=2dae88a8-66b1-475d-8a35-2978bd1a158c
在我的MVC页面的控制器中,我会找出此GUID所涉及的广告系列,并设置模型状态。注意:这为我提供了一个优势,即我可以更改广告系列参数,而无需重新发布网址。
在页面本身,我会这样做:
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方法实际上并不存在。这只是我希望能够做到的“伪代码”。
有没有人成功地做过这样的事情?
答案 0 :(得分:29)
您的理论“_setCampaignData”最终以["_set","campaignParams",...]
如果您有办法以编程方式注入您想要设置的值(例如,通过重定向上的cookie设置,或者在服务器端设置并打印到页面上),您可以使用{{1用于对您要设置的广告系列参数进行硬编码的API。
该格式只是:
_set
所以,使用你原来的例子:
_gaq.push(['_set', 'campaignParams',
'utm_campaign=CAMPAIGN&utm_source=SOURCE&utm_medium=MEDIUM']);
This answer详细介绍了如何使用较新的Google Analytics资源库analytics.js / Universal Analytics实现这一目标。
答案 1 :(得分:10)
// ...
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;
这样,您可以在后端创建广告系列数据,然后将其动态传递给哈希值,然后在用户甚至不注意的情况下将其还原。即广告系列跟踪100%独立于真实网址。
答案 2 :(得分:7)
solution using push(['_set', 'campaignParams',...似乎只适用于legacy library ga.js。
使用analytics.js,您需要单独指定广告系列参数。 E.g。
ga('set', 'campaignName', 'TheCampaignName...');
ga('set', 'campaignSource', 'someCampaignSource');
ga('set', 'campaignMedium', 'email');
答案 3 :(得分:6)
Trackin API中有一个函数_setAllowAnchor
,允许您在锚文本中指定标记而不是查询参数。
pageTracker._setAllowAnchor(true);
所以你可以使用http://www.stackoverflow.com/#utm_source=expertexchange
,GA会理解它。这样你可以避免SEO问题。
对于Twitter问题,我建议您使用帖子Tracking Twitter and Shorten URLs in Google Analytics中描述的方法。
答案 4 :(得分:6)
我已将其发布到Google帮助论坛。
谷歌请阅读!!!伟大的增强机会!这导致许多用户无法使用广告参数。允许从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
答案 5 :(得分:6)
以下是使用Google Analytics Universal事件跟踪方法而非GA标准事件跟踪的更新方式。
可以从queryString中提取整个UTM字符串(在那里)或从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 );
}
}
答案 6 :(得分:2)
好吧,我没有对它进行测试,但是尝试将这些参数添加到.trackPageview()
方法中,即:
pageTracker._trackPageview("?utm_source=...")
无论如何,你必须传递那些参数。这意味着,你总是会有很长的网址,其中有一些广告系列废话。它不会阻止将错误的URL,索引它们的搜索引擎等加入书签
如果您想要保持对这些参数的控制,请为合作伙伴设置单独的网址,然后重定向到标记的目标网址:
http://example.com/campaigns/1 -> http://example.com/?utm_source=...
答案 7 :(得分:1)
您可以使用Google AnalyticsAPI在您的示例中自定义对_trackPageview的调用。
pageTracker._trackPageview("/inbound/" + campaignSource + "/" + campaignMedium );
然后,所有入站链接都会显示在/ inbound /“伪目录”下的Google Analytics中,并为Campaign Source和Campaign Medium提供单独的“目录”。
答案 8 :(得分:1)
新的(呃)通用分析允许您指定这些参数 - 请参阅此处的文档https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference
查找“广告系列来源”部分,了解设置utm_source参数的示例。