在没有查询字符串参数的情况下使用 Google Analytics 跟踪广告系列?

IT技术 javascript google-analytics
2021-03-14 12:33:55

Google Analytics 中是否有一种支持的方式来跟踪活动而无需使用查询字符串参数。

在 Analytics 中,您可以使用查询字符串参数(例如和 )标记指向您网站的链接,这些参数包含有关活动的信息,以便对其进行跟踪。utm_campaignutm_medium

谷歌实际上有一个在线工具来帮助创建此类链接。

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

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

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

  • 我想鼓励twitter,而长链接不鼓励这样做
  • 我不希望人们用广告系列 ID 为他们添加书签
  • 我希望人们看到一个干净的 URL
  • 我不希望搜索引擎索引这些链接。
  • 我想要完全控制发送到谷歌分析的参数 - 而不是让我的合作伙伴搞乱他们访问我网站的 URL

不久前,我试图找到一种可以设置这些参数的方法。Google 有一个页面,乍一看似乎是解决方案,但实际上并非如此。该页面描述了如何将查询字符串参数的名称更改为其他名称 - 例如使用src而不是utm_source运行:

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

有没有人成功地做到了这样的事情?

6个回答

_set campaignParams

您的理论“_setCampaignData”终于存在,形式为 ["_set","campaignParams",...]

如果您有办法以编程方式注入要设置的值(例如,通过重定向时的 cookie 设置,或在服务器端设置并打印到页面上),您可以使用_setAPI 对您要设置的广告系列参数。

格式只是:

_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 年更新

这个答案详细说明了如何使用较新的 Google Analytics 库来实现这一点,analytics.js/Universal Analytics。

我只是添加了一个更简单的方法:)
2021-05-04 12:33:55
这对我来说听起来过于复杂。只需在JS中计算内部ID并更新location.hash并让GA处理它
2021-05-15 12:33:55
这非常复杂:),但显然这种location.hash方法会导致后退按钮出现问题,并且可能会重新编写 cookie。
2021-05-19 12:33:55
恐怕这个解决方案对我不起作用。也许这就是它仍然没有记录的原因,但我参考了许多示例和 _gaq.push(['_set', 'campaignParams', ...]); 方法根本行不通。我知道我的分析工作,因为如果我手动添加查询字符串它工作正常。
2021-05-19 12:33:55
注意,_gaq.push(['_set', 'campaignParams', ...])应该放在_gaq.push(['_trackPageview'])
2021-05-21 12:33:55

Török Gá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% 独立于真实 URL 的。

这似乎弄乱了浏览器历史记录,至少在 FF 3.5 中是这样。按返回到散列版本,再次返回,未散列版本,第三次返回上一页。有什么技巧可以让哈希远离历史?
2021-04-23 12:33:55
我也会担心页面闪烁而触发回发。
2021-05-03 12:33:55
我认为您不需要存储和恢复哈希值。但我相信这是要走的路:处理私有 ID,通过 JS 将活动参数表达到哈希中,并在完成后跟踪浏览量
2021-05-05 12:33:55

使用 push(['_set', '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

哇,我问这个十年了!
2021-05-05 12:33:55

_setAllowAnchorTrackin API 中有一个函数允许您在锚文本中指定标签而不是作为查询参数。

pageTracker._setAllowAnchor(true);

所以你可以使用http://www.stackoverflow.com/#utm_source=expertexchange,GA会理解它。这样您就可以避免 SEO 问题。

对于 Twitter 问题,我建议您使用Tracking Twitter 和 Shorten URLs in Google Analytics 一文中描述的方法

我将此发布到 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
这是我见过的常见解决方法。(您可能想要编辑您的帖子并修复代码)
2021-05-02 12:33:55