Google跟踪代码管理器延迟window.load?

问题描述 投票:10回答:2

我有一个页面在加载时触发ajax调用

$(window).load(function() {
  updateDeliverySlots();
});

我的身体顶部还有Google Tag Manager javascript(我知道目前的建议是将其放在head部分,但我们还没有更新代码,并且不认为这是问题的根源)。

<body>
        <!-- Google Tag Manager -->
<noscript>
    <iframe src="//www.googletagmanager.com/ns.html?id=XXXX" 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.jsid='+i+dl;f.parentNode.insertBefore(j,f);
})
(window,document,'script','dataLayer','XXXX');
</script>
<!-- End Google Tag Manager -->
....
</body>

我对GTM标记中包含的脚本进行的调用之一有疑问。该脚本向第三方发送请求。如果请求因任何原因无法连接(例如服务器关闭),则在请求超时(60秒)之前,我的updateDeliverySlots()函数(以及其中的ajax调用)不会被触发。我还发现页面仍在“加载”(根据浏览器图标)。

我的GTM实现中有什么东西我做错了吗?我的理解是,Google Tags后面的所有内容都应该是异步的,并且与页面的“准备就绪”无关。

javascript jquery ajax google-tag-manager
2个回答
2
投票

当处理到达时,必须获取并运行同步脚本,async scripts可以在处理到达它们之后的任何时间运行。

因此,根据服务器/页面控件之外的时间,异步脚本可以:

  • 在文档完成之前添加同步资源,其时间延迟加载事件
  • 处理页面后添加同步资源,不影响load事件。
  • 添加一个不应该对页面产生重大影响的异步资源(除非它反过来向页面添加同步资源)

您可以在GTM中选择以下几个选项之一来解决此问题:

  1. 修复自定义脚本以使用异步资源
  2. 将射击触发器更改为page view -> window loaded
  3. 使用谷歌提供的标签(如果可用)替换脚本,因为它们应构建为仅使用异步资源
  4. 在GTM中阻止自定义脚本(这也会阻止相关跟踪)
  5. 在GTM代码段上将异步更改为defer

即:

  <!-- Google Tag Manager -->
  <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.defer=true;j.src=
  'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  })(window,document,'script','dataLayer','GTM-XXXXX');</script>
  <!-- End Google Tag Manager -->

由于这会将整个GTM流程移至页面完全解析后,因此会破坏“Google Optimizer”标记和早期页面跟踪。


1
投票

我有同样的问题,GTM确实推迟了其他脚本的执行。使用jquery $(window).load加载它的一个小改动解决了这个问题:

<script>function loadgtm(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).load(function(){loadgtm(window,document,'script','dataLayer','GTMID');});</script>
© www.soinside.com 2019 - 2024. All rights reserved.