我使用了这个自定义脚本来发送GA购买事件,但工作正常,但是后来我切换到了Google跟踪代码管理器,该脚本不再起作用。
逻辑是,当某人购买服务时,他们会被定向到“谢谢”页面,在该页面中,交易数据从PHP费用中填充到URL中。
然后,该脚本在该页面上触发并读取URL以分配交易信息,并发送至分析:
var pkg,
value,
ID = window.location.href.split("=")[1];
if (window.location.href.indexOf("starter") > -1) {
value = 150;
pkg = "Starter";
} else if (window.location.href.indexOf("professional") > -1) {
value = 250;
pkg = "Professional";
} else if (window.location.href.indexOf("entrepreneur") > -1) {
value = 350;
pkg = "Entrepreneur";
} else {
value = 0;
pkg = "error";
}
if (value > 0) {
// Google Analytics Ecommerce Tracking
gtag('event', 'purchase', {
"transaction_id": ID,
"value": value,
"currency": "USD",
"items": [
{
"id": pkg,
"name": pkg,
"quantity": 1,
"price": value
}
]
});
}
使用GTM,我将此脚本作为“自定义html”标记。
如果我进行测试收费并填充该URL /谢谢页面,则会收到控制台错误,提示gtag()不是函数。
所以我尝试了ga(),它不会产生错误,但也不会发送事件。
然后我阅读了有关dataLayer的内容,因此我尝试将其包装而不是ga()/ gtag():
dataLayer.push({
'event', 'purchase', {
"transaction_id": ID,
"value": value,
"currency": "USD",
"items": [
{
"id": pkg,
"name": pkg,
"quantity": 1,
"price": value
}
]
}
});
这给了我一个JavaScript错误。似乎我可能还需要在页面上的某个地方放置一个空的dataLayer变量,但不确定其工作原理。
有什么想法吗?或者,我应该改为通过PHP发送此事件吗? (不确定如何将PHP与GA一起使用)。
答案 0 :(得分:0)
当您将datalayer.push的代码添加到GTM代码之后(因为GTM初始化了dataLayer变量),或者如果您在推送之前(以及GTM代码之前,如果初始化了)声明了dataLayer变量,则datalayer.push的代码将起作用GTM代码GTM之后的dataLayer无法正常运行)。
不知疲倦的Simo Ahava当然有blog post on datalayer initialization,应该回答您所有的问题。
答案 1 :(得分:0)
如果将来有人发现它,这就是可行的方法。
代码:
<script>
var value, ID, pkg;
// populate variables
// push vars to the datalayer
if (value > 0) {
dataLayer = [];
dataLayer.push({
'transactionId': ID,
'transactionTotal': value,
'transactionProducts': [{
'sku': pkg,
'name': pkg,
'price': value,
'quantity': 1}],
'event' : 'purchase'
});
}
// GTM script here
</script>
GOOGLE标记管理器:
然后我在GTM中创建了一个标签。
标记类型: Google Analytics-通用Analytics(分析)
跟踪类型:交易
触发器:在“谢谢”页面(脚本位于此处)
现在,交易正在完美追踪:D