使用测量协议发送事件到Google Analytics 4时,client_id应该是什么?

27
我在客户端使用Google Analytics 4 (GA4)来跟踪各种不同的事件。然而,有两种情况我无法在客户端进行覆盖:
  1. 用户在由第三方(在这种情况下为Stripe)托管的付款页面上完成结账。
  2. 由支持团队进行的退款。
这些事件通过使用Webhook在服务器端处理。对我来说,最直接的解决方案似乎是让服务器将事件发送到GA4(而不是客户端发送)。我认为应使用Measurement Protocol进行此操作。
通过Measurement Protocol提交每个事件都需要一个client_id。当客户端提交事件时,这是一个自动生成的ID,用于跟踪特定设备。
因此,我的问题是在服务器端提交事件时client_id应该是什么?
在提交服务器端事件时,是否应该使用相同的client_id来将服务器识别为一个设备?我已经阅读了一些人提议为每个事件使用随机生成的client_id,但这将导致每个服务器端事件都被识别为新用户...其中一个答案提议使用请求中的client_id作为cookie。但是,对于上述两个示例,由于请求由第三方Webhook而不是用户发起,因此不存在此cookie。

我当然可以将client_id存储在数据库中,但在第二个示例中,退款是由支持团队提供的。因此,在概念上,将该事件与用户的client_id关联起来会感到奇怪,因为client_id只是一种识别用户设备的方式?也就是说,这里并不是用户的设备触发了退款事件。

另一个退款事件的示例是,用户A与用户B一起购买,并在一周后由用户B退款。在这种情况下,client_id应该是用户A还是用户B的ID?同样,使用存储的client_id会感到奇怪。因为如果用户A在两台设备上登录,那么应该使用哪个client_id呢?

2个回答

13

好问题。是的,您使用测量协议的目的在这里是一个适当的解决方案。

  1. 不要硬编码客户端ID。这将在报告中造成混乱。用户为基础的报告 (GA) 要求客户端ID能够唯一地标识用户。尽力而为。
  2. GA 将客户端ID存储在 cookie 中。您应该在每个客户端访问 BE 时方便快捷地访问它。cookie 名称为 _ga。GA4 将测量 ID 添加到 cookie 名称中。这是 Google 的文档:https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage 但是,如果您检查 "collect" 命中并查看它们的有效负载,您可以很容易地找到它。还有另一个名为 _gid 的 cookie,其中包含不同的值。那将是一个唯一的客户端 ID。如果可以,请也设置它,但不要将其用于普通客户端 ID。它有不同的用途。以下是在 stack 上查看 cookie 的方法:

enter image description here

这是在网络中的表现。您将需要它进行适当的调试。主要是为了确保 FE 客户端 ID 与 BE 客户端 ID 相同:

enter image description here

  1. 注意当cookie未设置时的情况。通常这意味着用户使用广告拦截器。即使缺乏有关用户的上下文,你的分析师仍需要知道事务是否发生。你仍然可以正确跟踪它们。

    3.1 最简单的解决方案是为它们提供一个“AnonymousUser”客户端ID,然后附加一个随机数,以便既表明用户是匿名的,又能够使Google Analytics将其分开。

    3.2 更好的解决方案是为这样的用户创建一个指纹客户端ID。例如,使用连接的字符串的哈希值作为客户端ID,该字符串包括他们的用户代理、IP地址、语言环境和屏幕分辨率。如果谷歌分析库无法做到这一点,那就由你的分析师实际工作来定义唯一用户。

    3.3 最后,你最好的解决方案之一是自己生成客户端ID,并保持GA的格式,可能添加一个指示符,表明它是在你的端生成的,以便将来更容易调试,并将其设置为Cookie。只需使用不同的Cookie名称,以便广告拦截器不会知道要阻止它。

  2. 如果你想表明此次点击是通过服务器发送的,那么这是个好主意。使用自定义维度即可。但先与你的分析师同步。也许他们不想要这样做,或者可能希望将它放在其他维度。

现在,这非常琐碎。还有更深入的方法来提高数据质量,例如将订单ID、事务ID、用户ID粘合在一起,使用它们来生成客户端ID,为未来进行自定义客户端跟踪。但我必须说,这比90%以上的Shopify客户端要好。

此外,对于更深入的生产用途,GA4并不足够好。很多东西仍然非常基础和缺乏。我建议专注于Universal Analytics,并将GA4作为备份,等到Google使GA4足够好以取代UA时再使用它。除非你正在从其他地方下载数据,而不是使用GA的界面进行分析。


非常感谢您详细的回答!您提出了一些非常有用的概念,我一定会参考。我已经在我的问题中添加了一个编辑,以更详细地阐述为什么我认为cookie提供的client_id在某些情况下不起作用。如果我的问题和/或编辑中有任何不清楚的地方,请告诉我。非常感谢! - Marnix.hoh
1
然而,行为跟踪的概念坚持使用客户端ID。没有此ID或带有损坏的数据将成为无法使用的混乱。它还会严重扭曲报告结果。最好不要使用一个客户端ID绑定该数据。您可以将其绑定到真实用户ID,但在GA中会很复杂。将其存储在数据库中并不优雅。清理它也会很麻烦。在这种情况下,最好随机生成它,但最好找到一种方法来获取cookie,例如将其作为可选字段包含其中。但是如果它是由第三方发送的,则更加困难。 - BNazaruk
3
感谢您的评论。令我惊讶的是,虽然GA也提供电子商务跟踪,但它并没有提供处理这些服务器事件的清晰方法。似乎特别是退款案例是许多电子商务网站都会遇到的问题。无法跟踪这些事件将导致不正确的收入数据... - Marnix.hoh
3
有没有一种不使用浏览器获取client_id的方法?例如,服务器端应用程序。 - HeelMega
1
感谢您提供的所有信息,对于我的打扰表示抱歉。我正在使用MP发送成功注册事件,并使用推荐的事件。我按照这里所说的方法进行操作,即在注册时将_ga cookie值保存在我的数据库中。在进行MP请求时,将其用作client_id。当查看GA中的转化时,它显示每个sign_up事件都来自Direct。感觉我的服务器事件与基于client_id的其他事件没有连接起来。这是正常现象还是我漏掉了什么? - Cous
显示剩余5条评论

2
似乎this页面(屏幕截图中的相关部分)建议同时发送数据和client_iduser_id。然而,它未能解决client_id是必填字段的事实,如此处所述。
我认为随机生成此字段可能是安全的。至少在我的端上似乎可以这样做,但请注意我不确定这对归因是否有任何影响。

GA4 Help Page

在上面的图像中,设备ID指的是客户端ID

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