AMZ123跨境卖家导航
拖动LOGO到书签栏,立即收藏AMZ123
首页跨境头条文章详情

如何排除掉谷歌分析师GA4里的重复购买次数

4235
2023-03-18 15:00
2023-03-18 15:00
4235

如果你使用的是WordPress建站系统,且按照我之前写的转化价值追踪教程安装了GTM4WP插件的话,那么,你就可以继续看完这个教程,并按照教程去实践,从而排除GA4里的重复购买次数。


为什么会出现重复的购买次数

在使用Google analystics 去追踪woocommerce的转化次数数,你可能会遇到这种情况:purchase事件追踪的数量是远远大于真实的转化次数的。而在GA4的报表中,有一个指标叫做“交易量“,你会发现交易量可以反馈真实的订单数量,但是我们自己追踪到的purchase数据却不准确。这是为什么?

这是因为大部分营销人员在进行购买成功的转化追踪时,采用的是页面被浏览的次数来追踪, 他们通常会采用这样的正则表达式,如:

Page location contains /checkout/order-received (woocommerce的付款成功页面URL)

Page path contains thank-you (shopify付款成功的thank you page)

当然我自己也会这样设置,但是这种设置在以下情形下就会多次触发事件,导致重复记录。

  • 通过电子邮件链接或书签返回页面

  • 刷新付款成功页面

  • 导航到不同的页面并通过后退按钮返回

  • 从关闭的浏览器会话或手机上恢复页面

所以想要从根本上解决这个问题,就需要从追踪转化成功的方式来着手。URL的正则表达式已经证明是不靠谱的了,所以只能寻求其他的追踪方式。

直到我找到了这个老外的教程,英文好的同学可以直接看原文,我也按着这个教程走了一遍

https://www.simoahava.com/analytics/prevent-google-analytics-duplicate-transactions-with-customtask/

注意:前方高能预警,这套解决方案再次涉及到了大量的代码使用,调用逻辑和参数,变量之间的关系。实践起来有些烧脑,如果你有技术的同事,可以让让技术同学一起协助解决。

再次强调,使用这套方案的前提是你已经在网站安装了transactionId的数据层变量,并在GTM创建了相应的变量。如果没有transactionID的变量,那么这套方案,你便无法使用。


排除重复购买的原理

页面会刷新,但是交易ID是唯一的,如果我们以交易ID为维度,去记录购买次数,不就可以拿到100%正确的购买成功次数了吗。

实现的思路是在创建一个叫做customtask的变量,它会在每一次事件被触发的时候开始运行,在任务过程中,该方法会在触发事件的模型中查找键值,如果在浏览器存储中找到触发中的交易 ID,此 customTask 会阻止命中被触发,从而防止重复信息到达 Google Analytics。

直接用老外的图来解释吧

图片

需要注意的时, 要使用这个方案, 你必须要要使用增强型电子商务, 对于 Standard Ecommerce,customTask 只会更新浏览器存储,但不会阻止任何内容。


如何排除重复的购买

我先放一张最终的完成图,按照教程实践后, 你的Google tag manger里会增加3个变量,2个触发器,和对purchase的tag修改。如下图所示。

图片

我们先看变量部分,虽然是增加了3个变量,但是这3个变量当中, 需要调用到之前已经创建好了的transactionID变量,所以,我圈出了4个变量名称。因为你有可能需要根据你自己的transactionID的名称来修改其中一个变量中的代码。

图片

触发器里有新增了2个。分别代表着发送transactionID为true 和购买完成

图片

最后就是一个purchase的tag啦,可以看到, 它的触发已经不再依赖于page location的正则表达式了, 而是通过自定义JS来实现。

图片

具体怎么做呢?

首先,创建好3个变量。

第一个变量A:customtask-transaction deduper

图片

以下代码直接复制粘贴进去:









































































function() {// customTask Builder by Simo Ahavavar transactionDeduper = {keyName: '_transaction_ids',cookieExpiresDays: 365};
// DO NOT EDIT ANYTHING BELOW THIS LINEvar readFromStorage = function(key) {if (!window.Storage) {// From: https://stackoverflow.com/a/15724300/2367037var value = '; ' + document.cookie;var parts = value.split('; ' + key + '=');if (parts.length === 2) return parts.pop().split(';').shift();} else {return window.localStorage.getItem(key);}};
var writeToStorage = function(key, value, expireDays) {if (!window.Storage) {var expiresDate = new Date();expiresDate.setDate(expiresDate.getDate() + expireDays);document.cookie = key + '=' + value + ';expires=' + expiresDate.toUTCString();} else {window.localStorage.setItem(key, value);}};
var globalSendHitTaskName = '_ga_originalSendHitTask';
return function(customTaskModel) {
window[globalSendHitTaskName] = window[globalSendHitTaskName] || customTaskModel.get('sendHitTask');var tempFieldObject, dimensionIndex, count, ga, tracker, decorateTimer, decorateIframe, iframe;
customTaskModel.set('sendHitTask', function(sendHitTaskModel) {
var originalSendHitTaskModel = sendHitTaskModel,originalSendHitTask = window[globalSendHitTaskName],canSendHit = true;
var hitPayload, hitPayloadParts, param, val, regexI, trackingId, snowplowVendor, snowplowVersion, snowplowPath, request, originalTrackingId, hitType, nonInteraction, d, transactionId, storedIds;
try {
// transactionDeduperif (typeof transactionDeduper === 'object' && transactionDeduper.hasOwnProperty('keyName') && transactionDeduper.hasOwnProperty('cookieExpiresDays') && typeof sendHitTaskModel.get('&ti') !== 'undefined') {transactionId = sendHitTaskModel.get('&ti');storedIds = JSON.parse(readFromStorage(transactionDeduper.keyName) || '[]');if (storedIds.indexOf(transactionId) > -1 && ['transaction', 'item'].indexOf(sendHitTaskModel.get('hitType')) === -1) {canSendHit = false;} else if (storedIds.indexOf(transactionId) === -1) {storedIds.push(transactionId);writeToStorage(transactionDeduper.keyName, JSON.stringify(storedIds), transactionDeduper.cookieExpiresDays);}}// /transactionDeduper
if (canSendHit) {originalSendHitTask(sendHitTaskModel);}
} catch(e) {originalSendHitTask(originalSendHitTaskModel);}
});
};}


第二个变量B:cookie-_transactionId

这里的名字,请和我保持一模一样,不要改动,因为在其他变量里会调用这个名称。

图片

第三个变量C:transactionId_sent

注意大小写, 要一模一样哦

图片

在这段代码里,调用了之前已经创建过的transactionID的变量,所以这个为主,你自己需要检查下。

整段代码如下:









function() {// Change this to match the keyName you added to customTask:var keyName = '_transaction_ids';
var ids = JSON.parse((!!window.Storage ? window.localStorage.getItem(keyName) : {{cookie - _transactionId}}) || '[]');return ids.indexOf({{Ecommerce_Transaction_ID}}) > -1;}


接下来,是2个触发器

图片

图片

最后, 就是purchase的Tag设置了。

图片

在你照着这套教程去使用的时候,也最好理清一下变量之间的调用关系。

变量B里调用了变量A里的key name:_transaction_ids, 变量C里调用了变量B的名称和已经创建过了的交易ID变量名称。

完成购物的触发器里的事件名称是woocommerce对于购买的事件名purchase,这个应该是写在GTM4WP这个插件里。

按照这个教程做好配置的后, 接下来要做的事情就是等待和调试了。毕竟购物成功这个东西,我可不想刷信用卡去支付购买再测试。因为我已经在GTM里做了屏蔽管理员访问的设置。。。

除此之外,我也看到另外一套解决方案,也是要写代码,但是它用到了一个叫做时间戳的变量, timestamp,这个数据层变量需要技术去操作。由于我的插件不支持这个数据层变量的植入,就无法尝试了,感兴趣的同学可以查看下面这个教程。

https://www.bounteous.com/insights/2020/09/02/duplicate-transactions-google-analytics-and-ga4-properties


免责声明
本文链接:
本文经作者许可发布在AMZ123跨境头条,如有疑问,请联系客服。
最新热门报告作者标签
SHEIN发布全球循环报告,7 成用户注重性价比
AMZ123获悉,近日,SHEIN 发布2025 年全球循环性报告,调研覆盖21 个国家、约1.5万名用户,系统分析用户购买决策、穿着习惯、衣物处置与循环参与行为,为服装电商的可持续运营、循环服务设计与消费引导提供数据支撑。核心发现如下:一、影响用户购买决策的因素(一)核心决策因素1、性价比是第一决策前提价格是全球用户最统一、最优先的考量项。71.6% 的用户总是将最优价格作为首要考虑,19.2%经常考虑,合计占比高达 90.8%。在 21 个调研市场中,18 个市场将价格列为第一考量,且这些市场中超过 85% 的用户高度关注价格;其中南非、韩国用户价格敏感度最高,近 95% 总是 / 经常关注价格。
26年美国美妆消费者趋势:关税、AI、社媒影响购物决策
AMZ123获悉,随着新技术与平台不断涌现,不同世代美妆消费者的购物行为愈发复杂,不同产品类别对购买决策的影响也存在显著差异。同时,美国近年的关税政策与持续通胀也对市场格局造成影响,使品牌方面临竞争激烈且充满不确定性的环境。因此,Tinuiti发布了《2026年美妆营销研究报告》,从通胀影响到社交媒体趋势全面分析了消费者行为,以更好理解当前美国市场的美妆消费状况。一、市场现状1. 消费者对价格变化的反应数据显示,2025年美国美妆及个护电商市场规模已达到约610亿美元,电商渠道已占据接近一半的市场份额。随着技术进步和平台多样化,美容消费者的购物路径日益复杂。
25年日本家居电商市场达2.56万亿日元,平均单价提升
AMZ123获悉,近日,根据日本经济产业省发布的“2022-2025年电商市场调查”,2025年日本家居电商市场持续扩张,尽管新建住宅数量下降,消费者对线上购物的需求和高价值产品的偏好推动了市场增长。数据显示,近三年来,日本生活杂货、家具、家居类B2C电商市场规模和渗透率均呈稳步上升趋势,从2022年的2.35万亿日元(29.59%),增长至2025年的2.56万亿日元(32.58%%),同比增长3.62%。在商品行业中排名第三,仅次于“图书、视频及音乐软件”(56.45%)和“家用电器、音视频设备、电脑及周边设备等”(43.03%)。
25年全球美妆市场增长10%,AI与社交电商推动增长
AMZ123获悉,近日,根据尼尔森IQ(NielsenIQ)发布的《2026美妆市场报告》,2025年全球美妆市场同比增长10%,其中电商渠道的增速是线下实体店的六倍。对于品牌来说,加快数字化布局已成为赢得美妆市场的关键。从区域表现来看,北美市场增长10%,西欧增长4%,东欧增长8%,拉丁美洲增长14%,非洲和中东增长16%,亚太地区增长14%。这一趋势表明,无论市场成熟度如何,数字化渠道对全球美妆增长的推动作用普遍存在。AI驱动的产品推荐、社交电商以及直播购物正在改变消费者发现和购买产品的路径。超过50%的消费者正在使用AI购物工具,其中49%已经通过生成式AI获得美妆推荐,53%的消费者通过社交平台完成购买。
国产奶瓶刷打入美国母婴圈,在TikTok卖了200多万
给宝宝洗杯子,大概是所有父母最熟悉也最无奈的日常。不同于成人所用的敞口杯,婴幼儿专用杯包含防呛阀门、吸嘴等特殊饮水结构,复杂配件造就的诸多清洁死角,“滋生”的不光有缝隙处的霉菌刺客,更有为人父母对于“哪儿哪儿不干净”的卫生焦虑。近期在TikTok美区,一款能深入各个死角、分区清洁的杯刷工具正是为“绞杀”这番情绪而来,凭借5合1的全能型卖点迅速突围,成为母婴类目的一匹销量黑马。01母婴类目下的“死角克星”数据显示,在TikTok美区母婴用品类目,一款主打5合1的清洁杯刷以2445件的周销量,登上了大类销量榜第2的位置。虽然乍一看这款刷子与常规款无异,但在洗杯子这件事上,它的专业程度却毋庸置疑。
美国Q4电商销售额达3652亿美元,渗透率创新高
AMZ123获悉,近日,根据Digital Commerce 360对美国商务部数据的分析,2025年第四季度,美国电商销售额首次在单个季度突破3500亿美元大关,达到约3650亿美元,比历史数据高出约150亿美元。数据显示,2025年第四季度美国总零售额为1.461万亿美元,同比增长3.6%。其中,线下零售销售增长3%。分析显示,电商在美国零售市场的渗透率创历史新高,占美国总零售总额的25%。若将餐饮服务等零售销售也计入,美国电商占总零售额的比例为16.6%,未经调整的数据显示占比为18.3%。这是自美国商务部 1999年开始追踪在线销售以来,单季度电商渗透率最高的一次。
意大利对Revolut处以1150万欧元罚款
Fin123获悉,近日,意大利反垄断机构对 Revolut 处以 1150 万欧元的罚款。意大利竞争管理局(AGCM)指出,Revolut向客户散布了关于其投资产品的错误信息,同时未能清晰、完整地披露免佣金投资背后的隐性成本与交易限制。此外,意大利方面指出,Revolut在处理用户银行账户时,采用了激进且不透明的操作手法,包括就账户暂停、限制及冻结等事项提供不完整或误导性信息。此次罚款共涉及三项具体处罚:第一,Revolut Securities Europe UAB 与 Revolut Group Holdings Ltd 因投资服务信息披露不足,被罚500万欧元。
年销售额6.7亿美元!25年TikTok Shop美国站美妆标签Top10
AMZ123获悉,近日,根据Charm.io统计,TikTok Shop美国站上10个美妆类标签在过去12个月内创造了超过6.7亿美元的销售额,这些标签不仅描述产品,更直接激发购买行为。2025年超过7000万件美妆产品通过TikTok Shop售出。在TikTok Shop上,标签成为推动消费的基础形式。例如,#skincare护肤标签一年销售额约1.419亿美元,Dr. Melaxin Peel Shot Glow Rice安瓶套装因配方中的水稻提取物与AHA、BHA化学成分,能清理黑头、净化毛孔并防止痘痘,成为#skincare的代表产品。
亚马逊再调FBA费用,4月17日起生效!
中东战火延宕至今,仍未有“熄火”之意。当地时间4月2日,特朗普在最新表态中发出警告,称美国将在未来两到三周内对伊朗进行猛烈打击,国际油价应声飙涨。截至当天收盘,5月交货的美国WTI原油价格收于每桶111.54美元,上涨11.41%;6月交货的国际基准布伦特原油价格则收于每桶109.03美元,涨幅高达7.78%。在此背景下,一系列“涨价通知”如同多米诺骨牌,正逐级传导至跨境卖家们的利润表上。全链路合规难题现场答疑,4.17 深圳 | 深圳商务局&行业专家坐镇,落地实操一站获取!点击报名AMZ123了解到,当地时间4月2日,亚马逊美国站发布了一则加征物流相关附加费的通知。
因产品数据质量不佳,印度电商每年损失五百亿卢比
AMZ123获悉,近日,据外媒报道,印度电商与快消行业正因产品数据质量不佳而蒙受巨额损失。据GS1印度公司的最新研究,不一致、不完整或不准确的产品信息每年导致约500亿卢比的资金流失。其中,约200亿卢比表现为毛利率下降,原因包括转化率降低、商品上架受限以及销售速度放缓;另有190亿卢比直接用于退货相关成本,涵盖逆向物流、处理与加工等环节。尤其在时尚服装领域,退货问题更为突出。因尺码不合、款式偏好或实物与描述不符,顾客主动退货率通常占总订单的20%至25%。Unicommerce指出,逆向物流会使订单价值额外增加5%至7%,而这还不含原始运费。放眼全球,时尚与鞋类退货率甚至可达30%至40%。
高评分+高销量,10款亚马逊厨房小家电热销产品一览
AMZ123获悉,近日,亚马逊各类产品搜索量增长显著,以下10款产品在亚马逊上销量表现突出,深受消费者欢迎。1. 电热水壶预计销售额:62万美元/月销量:24,200+星级评分:4.5好评数量:47,056+图源:亚马逊产品介绍:这款电热水壶内部无塑料,提升饮用安全性与口感纯净度。产品加热效率较高,可在3分钟内快速烧开一杯水,同时配备自动断电、加热指示灯、防干烧保护功能,保障使用安全。整体外观采用简约设计,宽口壶身与双角度开盖设计便于清洁与加水,精准壶嘴与防烫手柄提升倒水稳定性。
存火灾风险!美国CPSC紧急召回八款插头延长线
AMZ123获悉,近日,美国消费者产品安全委员会(CPSC)发布紧急召回警告,要求消费者立即停止使用“插头延长线”,并已与沃尔玛、eBay和AliExpress等电商平台达成协议,下架相关危险商品。CPSC指出,这类延长线两端均为公头插头,插入电源后裸露插脚可能带电,存在严重触电和火灾风险,因此在任何情况下都不应使用。为防止危险商品继续流入市场,CPSC已推动相关电商平台删除商品链接,同时平台方面承诺将主动识别并下架类似产品。根据CPSC的公告,多家来自中国的卖家和企业涉及销售该类产品,但大多数未回应CPSC关于召回或产品信息的要求。
Stripe与Meta合作,FB广告可完成一键结账
Fin123获悉,近日,Stripe宣布,为Facebook广告商推出全新结账体验,使消费者无需离开应用即可完成购买。通过这项功能,使用Stripe的卖家可以将Facebook广告与支付系统直接连接,买家点击广告中的“立即购买”按钮后,可使用Meta钱包中保存的支付凭证完成一键结账。该流程基于《智能体商务协议》,未来将扩展到包括Instagram广告在内的更多Meta平台。卖家可在Stripe管理平台中通过开关选择启用此功能,并关联其Meta广告账户。启用后,购买过程将完全嵌入广告体验,消除了用户在传统跳转浏览器或应用完成交易时的中断,从而提升购买转化率。
824个品牌中招?疑WOOT封号名单曝光
AMZ123在此前文章中提到,自3月初起,业内陆续有卖家反映收到亚马逊扫号邮件,而这轮扫号的矛头,大多都指向“WOOT刷单”。随后,卖家圈接连传出小号被封、主账号受牵连、资金被冻结等消息。到了4月,这场风波仍未平息,反而有越查越深的迹象。风声渐紧之下,卖家圈最关心的话题也随之变了——这次到底扫到了谁?就在这样的追问声中,AMZ123了解到,一份疑似与此次WOOT封号潮相关的品牌名单,近日开始在卖家圈流传。从目前流出的截图来看,这份名单共列出824个品牌,PUKAOCK、KUKALY、ITSNGBY、TAOOLP、MYTHSIGHT、HOOROLA、DR.FRESH、CYBERBLAZE等多个品牌名均在其中。
26年美国美妆消费者趋势:关税、AI、社媒影响购物决策
AMZ123获悉,随着新技术与平台不断涌现,不同世代美妆消费者的购物行为愈发复杂,不同产品类别对购买决策的影响也存在显著差异。同时,美国近年的关税政策与持续通胀也对市场格局造成影响,使品牌方面临竞争激烈且充满不确定性的环境。因此,Tinuiti发布了《2026年美妆营销研究报告》,从通胀影响到社交媒体趋势全面分析了消费者行为,以更好理解当前美国市场的美妆消费状况。一、市场现状1. 消费者对价格变化的反应数据显示,2025年美国美妆及个护电商市场规模已达到约610亿美元,电商渠道已占据接近一半的市场份额。随着技术进步和平台多样化,美容消费者的购物路径日益复杂。
百亿营收难掩利润“雪崩”,傲基怎么了
在新一轮的财报季中,这位头顶“百亿大卖”、“华南城四少之一”两大光环的跨境大卖,交出了一份“冰火两重天”的成绩单。AMZ123获悉,3月27日,傲基股份发布了2025年业绩公告。报告期内,傲基实现营业收入136.99亿元,同比增长27.9%,继2024年突破百亿营收后再度创下新高。在宏观经济承压、市场充满不确定性的背景下,这无疑是一份亮眼的营收答卷。从业务结构来看,支撑傲基维持百亿营收的,仍是来自商品销售板块的持续增长。财报显示,傲基商品销售全年实现收入95.82亿元,同比增长15.9%,占总收入的69.9%。
《TikTok Shop突破末次触达归因(LTA)ROAS分析报告》PDF下载
在数字化浪潮中,广告主正面临有效衡量广告支出回报率(ROAS)的挑战。传统未次触达归因(LTA)模型因数据收集难度和归因偏差问题已难以满足广告主的需求,因此,探索新的方法来解决这些问题显得尤为重要。
《未来电商报告:品牌独立站五步升级锁定未来确定性增长》PDF下载
调研显示,出海商家针对家居、时尚及消费电子等品类布局比例均超过30%。独立站凭借其高度品牌化、个性化、场景化及功能性等优势,精准契合上述品类对品牌调性、场景交互及沉浸式体验的核心诉求,正成为商家黑五大促期提升销量、构建品牌竞争壁垒的关键载体。
《TikTok Shop达人真实种草力报告》PDF下载
达人正在将文化内容、社群互动与商业转化深度融合,形成一个高度协同的内容商业生态,其价值早已不再局限于内容带来的直接收入。从更广义的商业视角来看,达人价值的核心在于真实影响力-即其内容对商品与服务产生影响并促成转化所形成的整体商业价值,这一能力正构成达人在内容电商体系中的带货价值基础。
《2026年第2季度儿童时尚品类报告》PDF下载
儿童时尚品类概览 主题选品合辑 巴西站点上新 泰国站点上新 菲律宾站点上新 越南站点上新
《TikTok Shop 2025年度报告》PDF下载
2025年,TikTok Shop进一步加快扩张步伐,在巩固欧美成熟市场的同时,积极开拓新兴市场,先后上线德国、意大利、法国、日本等站点。此举不仅为平台带来新增量,也体现出其多元化市场战略的初步成效,以分散地缘政治风险。
《Shopee2025印尼站点X 汽车摩托品类专题》PDF下载
印尼当地汽车保有量并不高,每一千人的机动车保有量仅96人,未来可提升的空间仍大。空间参照系可以看泰国和马来,2024年泰国汽车保有量为322辆/千人,马来西亚为531辆/千人。
《2026年Shopee运动户外类目自行车爆品分享》PDF下载
巴西骑行爱好群体广泛,但平台上热销品呈现出的国际大牌极少,推测可能原因是国际品牌可能主要通过线下经销或自行渠道销售,未深度参与Shopee等本土电商。因此巴西用户在平台上几乎接触不到这些高端品牌产品。平台上巴西用户更倾向购买本土品牌的自行车,可能出于价格实惠和售后便利考虑。
《2025年TikTok生态发展白皮书》PDF下载
2025年,全球内容电商迈入深度跃迁的新周期。TikTokShop正以前所未有的速度拓展市场版图,完成从高速增长向高质量增长的跃迁。在这一进程中,生态结构重构、参与者多元化、全球政策协同等因素叠加,构成内容电商演进的核心变量。
跨境电商干货集结
跨境电商干货集结,是结合亚马逊跨境电商卖家交流群内大家在交流过程中最常遇到的问题,进行收集整理,汇总解答,将会持续更新大家当前最常遇见的问题。欢迎大家加入跨境电商干货集结卖家交流群一起探讨。
侃侃跨境那些事儿
不侃废话,挣钱要紧!
AMZ123跨境电商
专注跨境行业热点事件报道,每日坚持推送原创深度热文
跨境学院
跨境电商大小事,尽在跨境学院。
欧洲电商资讯
AMZ123旗下欧洲跨境电商新闻栏目,专注欧洲跨境电商热点资讯,为广大卖家提供欧洲跨境电商最新动态、最热新闻。
跨境数据中心
聚合海量跨境数据,输出跨境研究智慧。
跨境电商赢商荟
跨境电商行业唯一一家一年365天不断更的媒体!
AMZ123选品观察员
选品推荐及选品技巧分享。
首页
跨境头条
文章详情
如何排除掉谷歌分析师GA4里的重复购买次数
Ada的跨境笔记
2023-03-18 15:00
4238

如果你使用的是WordPress建站系统,且按照我之前写的转化价值追踪教程安装了GTM4WP插件的话,那么,你就可以继续看完这个教程,并按照教程去实践,从而排除GA4里的重复购买次数。


为什么会出现重复的购买次数

在使用Google analystics 去追踪woocommerce的转化次数数,你可能会遇到这种情况:purchase事件追踪的数量是远远大于真实的转化次数的。而在GA4的报表中,有一个指标叫做“交易量“,你会发现交易量可以反馈真实的订单数量,但是我们自己追踪到的purchase数据却不准确。这是为什么?

这是因为大部分营销人员在进行购买成功的转化追踪时,采用的是页面被浏览的次数来追踪, 他们通常会采用这样的正则表达式,如:

Page location contains /checkout/order-received (woocommerce的付款成功页面URL)

Page path contains thank-you (shopify付款成功的thank you page)

当然我自己也会这样设置,但是这种设置在以下情形下就会多次触发事件,导致重复记录。

  • 通过电子邮件链接或书签返回页面

  • 刷新付款成功页面

  • 导航到不同的页面并通过后退按钮返回

  • 从关闭的浏览器会话或手机上恢复页面

所以想要从根本上解决这个问题,就需要从追踪转化成功的方式来着手。URL的正则表达式已经证明是不靠谱的了,所以只能寻求其他的追踪方式。

直到我找到了这个老外的教程,英文好的同学可以直接看原文,我也按着这个教程走了一遍

https://www.simoahava.com/analytics/prevent-google-analytics-duplicate-transactions-with-customtask/

注意:前方高能预警,这套解决方案再次涉及到了大量的代码使用,调用逻辑和参数,变量之间的关系。实践起来有些烧脑,如果你有技术的同事,可以让让技术同学一起协助解决。

再次强调,使用这套方案的前提是你已经在网站安装了transactionId的数据层变量,并在GTM创建了相应的变量。如果没有transactionID的变量,那么这套方案,你便无法使用。


排除重复购买的原理

页面会刷新,但是交易ID是唯一的,如果我们以交易ID为维度,去记录购买次数,不就可以拿到100%正确的购买成功次数了吗。

实现的思路是在创建一个叫做customtask的变量,它会在每一次事件被触发的时候开始运行,在任务过程中,该方法会在触发事件的模型中查找键值,如果在浏览器存储中找到触发中的交易 ID,此 customTask 会阻止命中被触发,从而防止重复信息到达 Google Analytics。

直接用老外的图来解释吧

图片

需要注意的时, 要使用这个方案, 你必须要要使用增强型电子商务, 对于 Standard Ecommerce,customTask 只会更新浏览器存储,但不会阻止任何内容。


如何排除重复的购买

我先放一张最终的完成图,按照教程实践后, 你的Google tag manger里会增加3个变量,2个触发器,和对purchase的tag修改。如下图所示。

图片

我们先看变量部分,虽然是增加了3个变量,但是这3个变量当中, 需要调用到之前已经创建好了的transactionID变量,所以,我圈出了4个变量名称。因为你有可能需要根据你自己的transactionID的名称来修改其中一个变量中的代码。

图片

触发器里有新增了2个。分别代表着发送transactionID为true 和购买完成

图片

最后就是一个purchase的tag啦,可以看到, 它的触发已经不再依赖于page location的正则表达式了, 而是通过自定义JS来实现。

图片

具体怎么做呢?

首先,创建好3个变量。

第一个变量A:customtask-transaction deduper

图片

以下代码直接复制粘贴进去:









































































function() {// customTask Builder by Simo Ahavavar transactionDeduper = {keyName: '_transaction_ids',cookieExpiresDays: 365};
// DO NOT EDIT ANYTHING BELOW THIS LINEvar readFromStorage = function(key) {if (!window.Storage) {// From: https://stackoverflow.com/a/15724300/2367037var value = '; ' + document.cookie;var parts = value.split('; ' + key + '=');if (parts.length === 2) return parts.pop().split(';').shift();} else {return window.localStorage.getItem(key);}};
var writeToStorage = function(key, value, expireDays) {if (!window.Storage) {var expiresDate = new Date();expiresDate.setDate(expiresDate.getDate() + expireDays);document.cookie = key + '=' + value + ';expires=' + expiresDate.toUTCString();} else {window.localStorage.setItem(key, value);}};
var globalSendHitTaskName = '_ga_originalSendHitTask';
return function(customTaskModel) {
window[globalSendHitTaskName] = window[globalSendHitTaskName] || customTaskModel.get('sendHitTask');var tempFieldObject, dimensionIndex, count, ga, tracker, decorateTimer, decorateIframe, iframe;
customTaskModel.set('sendHitTask', function(sendHitTaskModel) {
var originalSendHitTaskModel = sendHitTaskModel,originalSendHitTask = window[globalSendHitTaskName],canSendHit = true;
var hitPayload, hitPayloadParts, param, val, regexI, trackingId, snowplowVendor, snowplowVersion, snowplowPath, request, originalTrackingId, hitType, nonInteraction, d, transactionId, storedIds;
try {
// transactionDeduperif (typeof transactionDeduper === 'object' && transactionDeduper.hasOwnProperty('keyName') && transactionDeduper.hasOwnProperty('cookieExpiresDays') && typeof sendHitTaskModel.get('&ti') !== 'undefined') {transactionId = sendHitTaskModel.get('&ti');storedIds = JSON.parse(readFromStorage(transactionDeduper.keyName) || '[]');if (storedIds.indexOf(transactionId) > -1 && ['transaction', 'item'].indexOf(sendHitTaskModel.get('hitType')) === -1) {canSendHit = false;} else if (storedIds.indexOf(transactionId) === -1) {storedIds.push(transactionId);writeToStorage(transactionDeduper.keyName, JSON.stringify(storedIds), transactionDeduper.cookieExpiresDays);}}// /transactionDeduper
if (canSendHit) {originalSendHitTask(sendHitTaskModel);}
} catch(e) {originalSendHitTask(originalSendHitTaskModel);}
});
};}


第二个变量B:cookie-_transactionId

这里的名字,请和我保持一模一样,不要改动,因为在其他变量里会调用这个名称。

图片

第三个变量C:transactionId_sent

注意大小写, 要一模一样哦

图片

在这段代码里,调用了之前已经创建过的transactionID的变量,所以这个为主,你自己需要检查下。

整段代码如下:









function() {// Change this to match the keyName you added to customTask:var keyName = '_transaction_ids';
var ids = JSON.parse((!!window.Storage ? window.localStorage.getItem(keyName) : {{cookie - _transactionId}}) || '[]');return ids.indexOf({{Ecommerce_Transaction_ID}}) > -1;}


接下来,是2个触发器

图片

图片

最后, 就是purchase的Tag设置了。

图片

在你照着这套教程去使用的时候,也最好理清一下变量之间的调用关系。

变量B里调用了变量A里的key name:_transaction_ids, 变量C里调用了变量B的名称和已经创建过了的交易ID变量名称。

完成购物的触发器里的事件名称是woocommerce对于购买的事件名purchase,这个应该是写在GTM4WP这个插件里。

按照这个教程做好配置的后, 接下来要做的事情就是等待和调试了。毕竟购物成功这个东西,我可不想刷信用卡去支付购买再测试。因为我已经在GTM里做了屏蔽管理员访问的设置。。。

除此之外,我也看到另外一套解决方案,也是要写代码,但是它用到了一个叫做时间戳的变量, timestamp,这个数据层变量需要技术去操作。由于我的插件不支持这个数据层变量的植入,就无法尝试了,感兴趣的同学可以查看下面这个教程。

https://www.bounteous.com/insights/2020/09/02/duplicate-transactions-google-analytics-and-ga4-properties


咨询
官方微信群
官方客服

扫码添加,立即咨询

加群
官方微信群
官方微信群

扫码添加,拉你进群

更多
订阅号服务号跨境资讯
二维码

为你推送和解读最前沿、最有料的跨境电商资讯

二维码

90% 亚马逊卖家都在关注的微信公众号

二维码

精选今日跨境电商头条资讯

回顶部