使用Google Analytics(分析)跟踪广告系列,但没有查询字符串参数?

问题描述 投票:43回答:9

[Google Analytics(分析)中是否有一种无需使用查询字符串参数即可跟踪广告系列的受支持方法。

在Analytics(分析)中,您可以tag a link to your site带有查询字符串参数,例如utm_campaignutm_medium,这些参数包含有关广告系列的信息,以便可以对其进行跟踪。

Google实际上有online tool来帮助创建此类链接。

例如,如果StackOverflow在Experts Exchange上做广告,它们可能具有这样的链接:

http://www.stackoverflow.com/?utm_source=expertexchange&utm_medium=banner&utm_campaign=a-better-expert-exchange

出于多种原因,我不希望这些笨拙的参数出现在我的URL中:

  • 我想鼓励微博,但长链接不鼓励这样做
  • 我不希望人们在其中使用广告系列ID为它们添加书签
  • 我希望人们看到一个干净的URL
  • 我不希望搜索引擎索引这些链接。
  • 我想完全控制将哪些参数发送给Google Analytics(分析),而不是让我的合作伙伴弄乱他们访问我的网站所用的URL

我前一阵子试图找到一种可以设置这些参数的方法。乍一看,Google has a page看起来像解决方案,但实际上不是。该页面描述了如何将查询字符串参数的名称更改为其他名称-例如,使用src代替utm_source,您可以运行:

 pageTracker._setCampSourceKey("src");     

我真的似乎无法弄清楚为什么他们不容易真正地显式设置utm_source键的值-而不仅仅是为其设置替代参数名称。

我记得有一阵子曾经发现有人有种讨厌的骇客,但我现在似乎找不到。我似乎还记得,无论谁拿了一份分析代码的副本,并从本质上将其分支出来,并对其进行了破解。这对我来说不是一个好的解决方案!

是否完全有官方支持的方式来执行此操作,而没有某种讨厌的重定向。

简而言之,我想做这样的事情(ASP.NET MVC网站)。给partnet一个链接到我的网站,并带有如下URL:

 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方法实际上不存在。这只是我理想中想要执行的操作的“伪代码”。

有人成功完成了这样的事情吗?

javascript google-analytics
9个回答
8
投票

solution using push(['_set', 'campaignParams',...似乎仅适用于legacy library 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


30
投票

_ set campaignParams

您的理论“ _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]);

更新2017

This answer详细介绍了如何使用更新的Google Analytics(分析)库analytics.js / Universal Analytics。


11
投票

[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%独立于实际网址的。


7
投票

Trackin API中有一个函数_setAllowAnchor,可让您在锚文本中指定标签,而不是作为查询参数。

_setAllowAnchor

因此您可以使用pageTracker._setAllowAnchor(true); ,GA会理解的。这样可以避免SEO问题。

关于Twitter问题,我建议您使用[http://www.stackoverflow.com/#utm_source=expertexchange]中所述的方法。


7
投票

我将此发布到了Google帮助论坛。

Google请阅读!!!巨大的提升机会!!!这导致许多用户无法使用广告参数。允许从trackPageview(url)上使用的URL读取广告参数。

无论如何,如果没有此功能,我必须使用一种解决方法。而不是将参数附加到URL。我将它们临时添加到URL作为书签。然后我在trackPageview调用之后将其删除。通过将它们添加为书签,不会重新加载页面。请参见以下示例。

Tracking Twitter and Shorten URLs in Google Analytics

7
投票

以下是使用事件跟踪的Google Analytics(分析)通用方法而不是GA标准事件跟踪的更新方法。

整个UTM字符串可以从queryString中提取(如果有的话),或者从Google cookie(__ utmz)中提取,然后使用以下代码传递到Google Analytics(分析)中。

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

然后,在执行您要创建的任何触发器(我使用名为“ widgetTracker”的函数)后,您都可以执行GA事件跟踪器。

这是完整的代码:

ga('send', 'event', 'queryString', 'getQueryString', googleString ); 

3
投票

嗯,我没有测试,但是尝试将这些参数添加到/* 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()

无论如何,您必须以某种方式传递这些参数。这意味着,您将始终拥有很长的URL,并且其中包含某些广告系列内容。它不会阻止为错误的URL加上书签,搜索引擎将其编入索引等。

如果要保持对这些参数的控制,请为合作伙伴设置单独的URL,这些URL重定向到标记的目标URL:

pageTracker._trackPageview("?utm_source=...")

2
投票

在您的示例中,您可以使用Google Analytics(分析)API自定义对_trackPageview的调用。

http://example.com/campaigns/1 -> http://example.com/?utm_source=...

然后所有入站链接将显示在Google Analytics(分析)的/ inbound /“伪目录”下,并带有一个单独的“目录”,分别用于“广告系列来源”和“广告系列媒体”。


2
投票

新的通用分析使您可以指定这些参数-请参见此处的文档pageTracker._trackPageview("/inbound/" + campaignSource + "/" + campaignMedium );

查找“广告系列源”部分,获取设置utm_source参数的示例。

© www.soinside.com 2019 - 2024. All rights reserved.