Google Analytics中是否支持跟踪广告系列而无需使用查询字符串参数.
在分析你可以标记一个链接到你的网站查询字符串参数,如utm_campaign
和utm_medium
其携带的运动信息,以便他们可以跟踪.
谷歌实际上有一个在线工具来帮助创建这样的链接.
例如,如果StackOverflow在Experts Exchange上做广告,他们可能会有这样的链接:
http://www.stackoverflow.com/?utm_source=expertexchange&utm_medium=banner&utm_campaign=a-better-expert-exchange
出于多种原因,我不希望这些笨拙的参数出现在我的URL中:
我想鼓励叽叽喳喳,长链接不鼓励这样做
我不希望人们使用广告系列ID为他们添加书签
我希望人们看到一个干净的URL
我不希望搜索引擎索引这些链接.
我希望完全控制将哪些参数发送到Google Analytics(分析) - 而不是让我的合作伙伴弄清楚他们访问我网站的网址
我前一段时间试图找到一种可以设置这些参数的方法.谷歌有一个乍一看似乎是解决方案的页面,但实际上并非如此.该页面描述了如何将查询字符串参数的名称更改为其他内容 - 例如,使用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方法实际上不存在.这只是我想要做的事情的"伪代码".
有没有人成功地做过这样的事情?
你的理论"_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(分析)网站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;
这样,您可以在后端创建广告系列数据,然后动态地将其传递给哈希,然后在用户甚至没有注意到它的情况下将其还原.即广告系列跟踪100%独立于真实网址.
在使用解决方案推(["_集","campaignParams",......似乎只为工作,传统图书馆的ga.js.
使用analytics.js,您需要单独指定广告系列参数.例如
ga('set', 'campaignName', 'TheCampaignName...'); ga('set', 'campaignSource', 'someCampaignSource'); ga('set', 'campaignMedium', 'email');
https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#campaignName
_setAllowAnchor
Trackin API中有一个函数,允许您在锚文本中指定标记而不是查询参数.
pageTracker._setAllowAnchor(true);
所以你可以使用http://www.stackoverflow.com/#utm_source=expertexchange
,GA会理解它.这样你就可以避免SEO问题了.
对于Twitter问题,我建议您使用Google Analytics中的跟踪Twitter和缩短网址中描述的方法.
我将其发布到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
以下是使用Google Analytics通用事件跟踪方法而非GA标准事件跟踪的更新方式.
整个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-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