代码之家  ›  专栏  ›  技术社区  ›  Joe's Ideas

用于发送GA购买事件的自定义脚本不再适用于GTM

  •  0
  • Joe's Ideas  · 技术社区  · 6 年前

    我让这个自定义脚本发送一个GA购买事件,工作正常,但后来我切换到谷歌标签管理器,脚本不再工作。

    逻辑是,当有人购买服务时,他们会被定向到一个感谢页面,在该页面中,事务数据会从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/ThankYou页面,我会得到一个控制台错误,说明gtag()不是一个函数。

    所以我尝试了ga(),这不会产生错误,但也不会发送事件。

    然后我读到了关于数据层的内容,所以我尝试用它来包装,而不是用ga()/gtag():

    dataLayer.push({
        'event', 'purchase', {
        "transaction_id": ID,
        "value": value,
        "currency": "USD",
        "items": [
          {
            "id": pkg,
            "name": pkg,
            "quantity": 1,
            "price": value
          }
        ]
      }
    });
    

    这给了我一个javascript错误。似乎我还需要在页面的某个地方放置一个空的数据层变量,但不确定这是如何工作的。

    有什么想法吗?或者,我应该改为通过php发送这个事件吗?(从来没有用过PHP和GA,所以不确定)。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Eike Pierstorff    6 年前

    当您将datalayer.push的代码包含在gtm代码之后(因为gtm初始化datalayer变量),或者如果您在push之前声明datalayer变量(并且在gtm代码之前,如果您在gtm代码之后初始化datalayer,gtm将无法正常工作),则该代码可以工作。

    不知疲倦的西莫·阿哈瓦当然有 blog post on datalayer initialization 这应该能回答你所有的问题。

        2
  •  0
  •   Joe's Ideas    6 年前

    如果将来有人发现了这一点,这就是有效的方法。

    代码:

    <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>
    

    谷歌标签管理器:

    然后我在GTM中创建了一个标签。

    标签类型: 谷歌分析-通用分析

    轨道类型: 交易

    触发: 在感谢页面(脚本所在位置)

    现在,交易正在完美地跟踪:d