谷歌标记管理器(GTM)间歇性地不在ASP中触发

时间:2014-11-16 22:00:18

标签: google-analytics asp-classic google-tag-manager

Google Analytics /转化/交易表明该标签仅在某些情况下有效 - 如果我执行任务并观察发生的事情和/或调试它总是有效,但当公众/其他人这样做时,它有时会起作用,有时它不会&# 39; t

实施是一步一步,向导方法,租车预订。在流程结束时,我们将预订存储在数据库中,绘制一个Thankyou页面,触发GT GTM以记录GA中的交易,然后我们向用户发送确认电子邮件。

设置: GTM 创建标签"预订价值交易" - Type = Universal Analytics,Enabled Display Advert Features,Track Type = Transaction 添加了2条规则     规则名称=" BookNow" - 条件{{url}}包含thankyou + {{event}}包含gtm.dom     规则名称=" BookNow_Mobile" - 条件{{url}}包含mobileBooking + {{event}}包含gtm.dom

ASP页面

的开头
<!-- Google Tag Manager - data layer def only -->
<script>
    dataLayer = [{ 
        'transactionId': '',
        'transactionTotal': 0.00}];
        transactionProducts = [{
            'name': '',
            'sku': '', 
            'price': 0.00, 
            'quantity': 0 }];
</script>
<!-- End Google Tag Manager - data layer def only -->

稍后在页面中各种ASP代码调用数据库函数等来存储数据并检索数据以供显示并构建数据以填充GTM数据层 最终它产生以下(设置了适当的值):

<script>dataLayer = [{ 'transactionId': '1234', 'transactionTotal': 1000.00}];
transactionProducts = [{'name': 'Some Product Name', 'sku': '5678', 'price': 1000.00, 'quantity': 1 }];
dataLayer.push({'transactionProducts':transactionProducts});</script>

在上面和结束之前(因为把它放在数据层定义下面的顶部看起来像一个问题),插入了GTM脚本的其余部分

<!-- Google Tag Manager -->
<% 'at the bottom of the page because the gtm.DOM async might not be performing like we want %>
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-MyGTM_ID" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>
    (function(w,d,s,l,i){
   w[l]=w[l]||[];
   w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
   var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
   j.async=true;
   j.src='//www.googletagmanager.com/gtm.js?id='+i+dl;
   f.parentNode.insertBefore(j,f);
    }
    )(window,document,'script','dataLayer','GTM-MyGTM_ID');
</script>
<!-- End Google Tag Manager -->

我已经尝试了各种各样的方法来解决这个问题,但我完全被难倒了。 如何让它始终可靠地开火?

1 个答案:

答案 0 :(得分:2)

dataLayer.push()只将数据导入dataLayer;它不会将数据发送给Google。你需要某种标记来激活它以携带dataLayer数据。

通常这是通过标准页面视图跟踪器完成的,但是在页面视图跟踪器触发之前,您必须拥有dataLayer中的所有数据。在标准GTM实现中,一旦GTM容器代码加载完毕,页面视图跟踪器就会触发。感谢页面中的加载顺序如下:

  1. 使用所有电子商务信息声明dataLayer。不使用 dataLayer.push()。你应该拥有所有必要的数据 在页面之前填充电子商务系统中的dataLayer 负载。检索此数据并将其放入dataLayer。
  2. 加载GTM容器。这是GTM提供的标准代码。
  3. 所有这一切都应该在<body>打开标记之后立即完成,而不是在</body>关闭代码之前的页面代码底部。

    如果在加载GTM容器代码之前无法填充dataLayer,则必须在gtm.dom上触发GA事件标记以携带交易数据。

    您对交易数据的不一致解雇可能是由于GTM实施不当导致的竞争条件造成的。