如何使用Google Analytics创建第三方网站的跟踪像素?

8
我们需要跟踪发生在第三方网站上的转化。我们能在那个网站上放置的唯一东西就是一个图像像素和可能用于触发它的一些JS逻辑。
我知道使用Measurement Protocol可以触发转化: https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#visitor 理想情况下,我只需要给第三方提供一个IMG网址即可完成。问题在于CID(客户端唯一ID)。
我可以尝试通过URL参数将CID从我们的网站传递给第三方。但是,有很多情况下无法使用该方法(例如,IMG像素将在电子邮件中,目标URL在印刷物上),或者第三方不愿意麻烦地这样做。在这种情况下,将CID通过这种方式传递是否是最佳实践?
我可以尝试生成CID,但我找不到一个非常简单的方法来执行此操作(例如,var CID= generateCID())。第三方网站有自己的GA页面。我能否使用他们的Google Analytics CID并将其用于图像像素URL中?
什么是最佳的解决方法呢?谢谢!

尽管Google建议使用UUID格式作为客户端ID,但实际上您可以使用任何字符串或数字。推荐使用UUID是因为它避免了冲突。如果您只需要转换的数量而不需要个别用户,则可以为所有像素(或每个转换一个)使用相同的数字。否则,请在JS中生成随机数并使用该数。 - Eike Pierstorff
如果我使用了一个静态跟踪像素,那么这会如何影响目标、事件和用户的跟踪?GA是否认为它们都是由同一个人触发的?目标和事件是否根据需要多次触发?当你说“转化的数量之多”时,你指的是哪个指标/报告? - Vlad
2个回答

4
如果第三方网站已经运行了analytics.js,则最好使用该客户端ID。您可以通过执行以下操作获取它:
var cid;
ga(function(tracker) {
  cid = tracker.get('clientId'));
});

如果analytics.js没有运行,或者由于某些原因无法访问ga变量,您可以随机生成客户端ID。这大致就是Google所做的。它是一个随机的31位整数,附加了当前日期字符串:
var cid = Math.floor(Math.random() * 0x7FFFFFFF) + "." +
          Math.floor(Date.now() / 1000);

通过 tracker.get('clientId') 获取CID,我需要创建一个 setInterval 循环来等待 GA 准备就绪。这让我想到,使用第三方的 CID 没有任何优势,因为该 ID 对于另一个 GA 实例来说是没有意义的。我认为最好还是生成一个新的 CID。 - Vlad
如果ga()还不存在怎么办?我相信我最初尝试在DOM准备就绪时触发它并收到了错误。这就是为什么我添加了setInterval的原因。 - Vlad
那是代码片段的作用。它初始化了 ga() 函数。https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced - Philip Walton
尝试在GA代码片段之后立即运行var cid; ga(function(tracker) { cid = tracker.get('clientId'); }),然后执行alert(cid)。我不知道你怎么看,但我得到的是“undefined”。如果我添加一个暂停,那么它就可以工作了。这告诉我跟踪器对象不会立即准备好,这正是我所期望的,因为代码是异步的。在我看来,ga()等待跟踪器准备好,然后触发function(tracker)回调。 - Vlad
我并不是说tracker对象立即可用,而是说ga()函数可以用于此,因此不需要使用setTimeout,因为您可以使用回调函数来知道何时可以使用跟踪器。 - Philip Walton
显示剩余5条评论

4

仅为补充@Philip Walton的出色答案,Google Analytics期望客户端ID采用随机UUID(版本4),根据官方文档

客户端ID

所有命中类型都需要此项。

这匿名标识特定用户、设备或浏览器实例。对于Web,通常将其存储为带有两年到期时间的第一方cookie。对于移动应用程序,这是为每个应用程序安装的特定实例随机生成的。该字段的值应为随机UUID(版本4),如http://www.ietf.org/rfc/rfc4122.txt中所述。

@broofa提供了一种在JavaScript中生成符合RFC4122的UUID的简单方法此处。为了完整起见,在此引用:

'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
    return v.toString(16);
});

感谢您引用并澄清了有关Google官方要求的内容。 - Vlad
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Vlad
通过使用静态CID来追踪所有的数据,Analytics会认为所有的页面浏览量、事件、维度、指标等都来自同一设备/浏览器。如果你只关心“事件/页面浏览量”的数量,那么这并不重要,但是如果你需要记录会话/用户/回访者等数据,那么你就需要为每个访问者生成一个UUID。此外,目标转化仅在每次访问中发生一次,因此如果客户端ID被共享,你可能会受到每个会话持续时间的限制,并且有可能错过转化。 - Philippe Sawicki
1
这个答案完全有效,可以说是生成客户端ID更好的方法。然而,我想指出的是,不使用UUID v4不会导致您的代码出错或被Google Analytics拒绝。建议是为了最小化重复的风险,而不是为了符合规范的目的。 - Philip Walton
当然,@PhilipWalton的回答是完全有效的 :) - Philippe Sawicki
明白了。非常感谢各位的回答。 - Vlad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接