Google Analytics 外部支付如何保留 Campaign 来源
结论
不要长期依赖 utm_nooverride。它是旧版 Google Analytics 的历史参数,主要用于 ga.js 时代,不适用于 GA4,也不能替代正确的跨域配置。
如果支付站点由你控制,建议配置 cross-domain measurement(跨域衡量),让商城和支付站点共享同一用户和会话标识。如果支付站点不需要部署 Analytics,可以将支付域名配置为 unwanted referral(GA4)或加入 Referral Exclusion List(Universal Analytics)。这样,用户返回商城时,支付网站就不会被识别为新的来源,原 Campaign 也不会被覆盖。
Campaign 为什么会丢失
常见的访问流程是:
newsletter / external site
↓
shop.example.com
↓
pay.example-payment.com
↓
shop.example.com/payment-success
用户第一次进入商城时,Analytics 会记录 newsletter 或外部网站带来的 Campaign。从支付站点返回商城时,浏览器又发生了一次站外跳转。如果没有配置跨域衡量或引荐排除,Analytics 可能将支付域名识别为新的 referral:
source = pay.example-payment.com
medium = referral
原 Campaign 随后会被新的会话来源取代,购买事件也会归因到支付网站。
通常不建议只在支付成功页补发 utm_source、utm_medium 等参数。这种做法容易产生新会话、重复 Campaign 或错误归因。
推荐方案一:配置 GA4 跨域衡量
如果支付站点由自己控制,而且两个站点都部署了相同的 GA4 数据流,应配置跨域衡量。
进入 GA4 管理界面中的对应 Web 数据流,找到 Google tag 的跨域配置,然后加入两个域名,例如:
shop.example.com
pay.example-payment.com
配置完成后,用户从商城前往支付站点时,Google tag 会在链接中传递类似 _gl 的 linker 参数:
https://pay.example-payment.com/checkout?_gl=...
支付完成后返回商城的链接也需要保留该参数:
https://shop.example.com/payment-success?_gl=...
支付系统、重定向程序和 URL 清理逻辑都不能删除 _gl。两个网站还应使用相同的 GA4 Measurement ID,并确保跳转方式允许 Google tag 装饰 URL。
支付成功并经过服务端验证后,可以发送购买事件:
gtag('event', 'purchase', {
transaction_id: 'ORDER-12345',
value: 199.00,
currency: 'CNY',
items: [
{
item_id: 'SKU-1001',
item_name: 'Example product',
price: 199.00,
quantity: 1
}
]
});
transaction_id 应保持唯一,降低刷新成功页或重复回调造成重复购买记录的风险。
推荐方案二:排除支付域名的引荐
如果支付站点不需要纳入 Analytics 统计,或者无法完整实施跨域衡量,可以阻止支付域名成为新的 referral。
在 GA4 中,将支付域名加入 List unwanted referrals。匹配条件可根据实际域名设置,例如:
Referral domain contains example-payment.com
Universal Analytics 使用属性设置中的 Referral Exclusion List。Universal Analytics 已是旧版产品,新项目应按照 GA4 的方式配置。
引荐排除可以防止支付域名覆盖原来源,但不能无限延长会话。如果支付过程超过会话超时时间,用户返回后仍可能产生新会话。因此,如果两个域名都由自己控制,跨域衡量通常是更完整的方案。
utm_nooverride 是否可以使用
对于仍在使用旧版 Google Analytics 跟踪代码的历史系统,可以在返回地址中添加:
https://shop.example.com/payment-success?utm_nooverride=1
如果 URL 已有查询参数,则使用 &:
https://shop.example.com/payment-success?order_id=12345&utm_nooverride=1
这个参数过去用于告诉旧版 Analytics,不要用本次访问产生的新 Campaign 或 referral 覆盖已有的 Campaign 信息。参数值应明确写为:
utm_nooverride=1
它有以下限制:
- 它是旧版 Google Analytics 的兼容机制,不属于 GA4 的归因配置。
- 它要求浏览器中原有的 Analytics Campaign 信息仍然存在。
- 它无法解决两个域名分别生成不同 client identifier 的问题。
- 它不能可靠处理会话超时、Cookie 限制和跨设备支付。
- 只在支付成功 URL 中写
utm_nooverride而不赋值,并不是可靠的用法。
如果现有系统仍使用旧版 ga.js,可以将 utm_nooverride=1 作为临时兼容措施。如果使用 analytics.js、gtag.js 或 GA4,应优先配置跨域衡量和引荐排除。
实施时还要检查
- 商城和支付站点是否使用相同的 GA4 Measurement ID。
- 后端重定向、URL 白名单或支付平台是否在跳转过程中删除了
_gl。 - 支付返回地址是否意外带上新的
utm_source、utm_medium或utm_campaign。 - 购买事件是否只在服务端确认支付成功后发送。
transaction_id是否唯一,避免刷新成功页时重复计数。- 支付过程是否可能超过 GA 会话超时时间。
- 浏览器的 Cookie、同意管理和广告拦截策略是否允许必要的 Analytics 存储。
对于无法可靠保留浏览器会话的支付流程,还可以在下单时保存原始 Campaign、GA client/session identifier 和订单号之间的对应关系,并在确认支付后通过服务端发送购买事件。服务端事件必须沿用正确的用户和会话标识,仅重新发送 utm_* 参数无法自动恢复原会话。
备注:内容仅供参考。
