PAYATHON 2026

GA 退款导致交易数与转化率增加,如何修复?

支付阿杰

结论

不能用金额为负数的 transaction hit 表示退款。Google Analytics 仍会把它视为一笔新交易。tr 为负数只会减少收入,不会抵消交易次数,所以 Transactions 和电商转化率都会增加。

应使用 Enhanced Ecommerce 的退款动作:

  • 全额退款只需提供原始 transaction_id。
  • 部分退款需要提供被退商品的商品 ID 和数量,这是 GA 标准模型的要求。
  • 如果拿不到商品明细,标准退款功能就无法准确表示任意金额的部分退款。这种情况下,可以用自定义指标记录佣金调整,或者从一开始就把 affiliate 佣金建模为可退款的虚拟商品。

为什么负数交易行不通

下面的请求仍是 transaction 类型:

v=1
&t=transaction
&tid=ORDER-123
&cid=CLIENT-ID
&ti=ORDER-123
&tr=-25.00
&ta=advertiser

tr=-25.00 的含义只是新交易的收入为负数。GA 不会因为金额带有负号就将其识别为退款,也不会自动找到并修改原交易。

最终结果相当于:

原交易:Transactions +1,Revenue +100
负数交易:Transactions +1,Revenue -25
合计:Transactions 2,Revenue 75

收入可能看起来是对的,但交易数已经从 1 变成 2,电商转化率也会失真。重复使用原交易 ID,通常也无法让普通交易 hit 变成对历史交易的修改。

使用 Enhanced Ecommerce 提交全额退款

Enhanced Ecommerce 通过 event hit 发送退款,并用 pa=refund 指定退款动作。全额退款只需关联原交易 ID,不必重新发送商品价格。

v=1
&t=event
&tid=ORDER-123
&cid=CLIENT-ID
&ec=Ecommerce
&ea=Refund
&ni=1
&pa=refund
&ti=ORDER-123

URL 编码后的示例:

curl -X POST 'https://www.google-analytics.com/collect' \
  --data 'v=1&t=event&tid=UA-XXXXX-Y&cid=CLIENT-ID&ec=Ecommerce&ea=Refund&ni=1&pa=refund&ti=ORDER-123'

各参数的含义如下:

  • t=event:将退款作为事件发送,不新增交易。
  • pa=refund:指定 Enhanced Ecommerce 的退款动作。
  • ti=ORDER-123:必须与原交易的 transaction ID 一致。
  • ni=1:将事件标记为 non-interaction,防止退款事件影响跳出率。

用于全额退款时,这种方式不会把退款计为新交易。

部分退款为什么需要商品信息

Enhanced Ecommerce 处理部分退款时,不是直接按任意金额冲减交易收入,而是根据退回的商品和数量计算退款。

典型请求如下:

v=1
&t=event
&tid=UA-XXXXX-Y
&cid=CLIENT-ID
&ec=Ecommerce
&ea=Partial Refund
&ni=1
&pa=refund
&ti=ORDER-123
&pr1id=PRODUCT-456
&pr1qt=1

其中的关键参数是:

pr1id=PRODUCT-456
pr1qt=1

GA 先用商品 ID 匹配原交易中的商品,再结合退款数量处理部分退款。如果原交易没有发送商品数据,或者 affiliate network 只返回被拒绝的佣金金额,GA 就没有计算部分退款所需的信息。

因此,不能只发送:

pa=refund&ti=ORDER-123&tr=-25.00

然后期待 GA 按金额处理部分退款。tr 不能替代 Enhanced Ecommerce 部分退款所需的商品参数。

没有商品明细时的可行方案

方案一:把佣金作为虚拟商品发送

如果系统关心的是 affiliate 佣金,而非顾客实际购买的商品,可以在记录原始转化时创建一个虚拟商品,例如:

Product ID: COMMISSION-ORDER-123
Product name: Affiliate commission
Price: 25.00
Quantity: 1

原始购买请求可以使用类似参数:

pa=purchase
&ti=ORDER-123
&tr=25.00
&pr1id=COMMISSION-ORDER-123
&pr1nm=Affiliate%20commission
&pr1pr=25.00
&pr1qt=1

整笔佣金被拒绝时,就可以按这个虚拟商品退款。

不过,如果只拒绝部分佣金,例如原佣金是 25.00,后来扣回 7.50,一个数量为 1 的虚拟商品仍无法准确表示这次退款。不要在事后修改商品单价来凑出退款金额,因为退款使用的商品模型应与原交易保持一致。

如果业务允许,也可以在原始交易中将佣金拆成多个确定的计费单位。但这种设计容易带来数量膨胀和舍入问题,需要先验证报表效果及参数限制。

方案二:使用自定义指标记录佣金调整

对于只有调整金额、没有商品信息的 affiliate 数据,这种做法通常更实用。

可以发送一个普通事件,将退款金额写入 hit 范围的自定义指标:

v=1
&t=event
&tid=UA-XXXXX-Y
&cid=CLIENT-ID
&ec=Affiliate
&ea=Commission adjustment
&el=ORDER-123
&ni=1
&cm1=-7.50

这里的 cm1 是预先在 GA 后台配置好的自定义指标。之后可以在自定义报告、Looker Studio 或数据仓库中计算:

Net Commission = Original Commission + Commission Adjustment

这种方式有几个好处:

  • 不会增加交易数;
  • 可以记录任意金额的部分扣款;
  • 不依赖商品 ID、商品价格或退款数量;
  • 可以保留每次调整的时间和订单标识。

相应的限制是,标准 Revenue 指标不会被直接改写,净佣金需要通过自定义报表或外部计算获得。

不建议采用的处理方式

不要继续发送负数 transaction hit。它只会产生一笔收入为负数的新交易,无法撤销原交易。

也不建议用过滤器排除负数交易。过滤器或许能避免交易数增加,但通常也会同时排除负收入,依然无法得到正确的净收入。

GA 中已经处理的数据,一般不能靠重新发送 hit 直接修改或删除。退款动作是一条后续调整记录,并非对历史原始 hit 的原地编辑。

实施建议

如果可以控制新交易的采集格式,可以迁移到 Enhanced Ecommerce,并在原始购买发生时保存以下关联信息:

  • GA client_id;
  • affiliate network 的订单 ID;
  • GA transaction ID;
  • 广告主;
  • 原始佣金;
  • 商品 ID、价格和数量(如果可以获得);
  • 后续拒付或退款金额。

处理规则可以设为:

整笔佣金取消
    -> Enhanced Ecommerce full refund

有商品 ID 和退款数量
    -> Enhanced Ecommerce partial refund

只有扣减金额,没有商品明细
    -> 自定义 Commission Adjustment 指标

问题中提到的普通 Ecommerce plugin 和 Enhanced Ecommerce 都属于 Universal Analytics 体系。如果仍在查看历史 UA 数据,上述规则适用。如果系统正在重新开发,应按 GA4 的 purchase 和 refund 事件模型设计,同时考虑将原始交易与佣金调整保存在自己的数据库中。GA 适合用于分析和展示,不应作为 affiliate 结算数据的唯一账本。

备注:内容仅供参考。