PAYATHON 2026

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_* 参数无法自动恢复原会话。

备注:内容仅供参考。