ruby-on-rails Google Tag Manager Preview在导航到包含TurboLinks的页面时不显示

yws3nbqq  于 2023-05-30  发布在  Ruby
关注(0)|答案(3)|浏览(129)

我认为GTM没有正确记录我的Rails应用程序的数据。当我使用预览功能时,开发人员工具中的GTM预览数据仅在初始页面加载时显示,随后的页面加载(使用turbolinks)不显示预览数据。如何使用TurboLinks设置GTM?
我已经在标题中设置了我的GTM,如下所示:

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

然后在身体的顶部:

<script>
<% if user_signed_in? %>
  dataLayer.push({'userID': '<%= current_user.id %>'},{'userCategory': 'User'});
<% end %>
</script>

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N7MDCP"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->

<!-- Google Tag Manager trigger for Turbolinks -->
 <script type="text/javascript">
   var url = window.location.href;
   dataLayer.push({
     'event':'pageView',
     'virtualUrl': url
   });
 </script>
 <!-- End Google Tag Manager trigger for Turbolinks -->
q1qsirdb

q1qsirdb1#

这与预览模式如何注入调试器iframe有关。
它在初始页面加载时注入,但由于turbolinks替换了整个主体,因此它也从-ALL-后续页面重新加载中删除了预览面板。
可悲的是,它几乎是如何,没有多少人可以做的。
您的GTM实现可能仍在工作,但Google Tag Manager中的预览模式与turbolinks页面重新加载不兼容。
是的,这使得在turbolinks增强的站点中调试GTM成为一个主要的痛苦。

xienkqul

xienkqul2#

我已经挖掘了很长一段时间同样的问题,这条线索似乎是一个很好的地方离开我的解决方案。
我有Rails 7应用程序,使用turbolinks,大多数页面/表单都使用turbo处理。
发生了什么,在“PageView”触发器类型中,它只适用于重新加载gtm.js的完整页面切换,这是一个“隐藏”触发器。

对于SPA或turbolinks应用程序,您需要将触发器配置为“自定义事件”,事件名称为“pageView”(或任何您想要的),并添加触发器名称:

Ofc,那么你需要具备:

document.addEventListener("turbo:load", function(e) {
        dataLayer.push({
          'event':'pageView',
          'virtualUrl': window.location.href
        });
      });

希望它能帮助别人!快乐编码!

g0czyy6m

g0czyy6m3#

dataLayer.push(
   {'userID': '<%= current_user.id %>'},
   {'userCategory': 'User'}
);

请尝试

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
    'userID': '<%= current_user.id %>',
    'userCategory': 'User'
});

这是未经测试的。
我注意到你使用了大括号'{'

相关问题