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 结算数据的唯一账本。
备注:内容仅供参考。
