Javascript 转到Google Tag Manager会破坏我们的虚拟页面浏览量

Javascript 转到Google Tag Manager会破坏我们的虚拟页面浏览量,javascript,jquery,google-analytics,google-tag-manager,Javascript,Jquery,Google Analytics,Google Tag Manager,我最近把公司的网站改成了谷歌标签管理器。由于我们的联系人表单没有具有唯一URL的唯一确认页面,因此我们使用虚拟页面视图来跟踪转换。表单已提交,页面将重新加载新内容和我们的转换跟踪代码 自从迁移到GTM后,我们所有的虚拟页面浏览都停止了工作。现在,当我在我们的网站上提交表单时,我会在控制台日志中看到: ReferenceError: ga is not defined ga('send', 'pageview', '/funnel_G1/premium1.html'); 以前,我们在页面上直

我最近把公司的网站改成了谷歌标签管理器。由于我们的联系人表单没有具有唯一URL的唯一确认页面,因此我们使用虚拟页面视图来跟踪转换。表单已提交,页面将重新加载新内容和我们的转换跟踪代码

自从迁移到GTM后,我们所有的虚拟页面浏览都停止了工作。现在,当我在我们的网站上提交表单时,我会在控制台日志中看到:

ReferenceError: ga is not defined
  ga('send', 'pageview', '/funnel_G1/premium1.html');
以前,我们在页面上直接加载Universal Analytics。现在我们正在通过GTM加载Universal Analytics。这就是所有的改变,我不明白为什么我们的虚拟页面浏览脚本不再工作

这是在表单完成时触发的脚本:

<script type="text/javascript">
$(document).ready(function () {
  ga('send', 'pageview', '/funnel_G1/premium1.html');
});
</script>

$(文档).ready(函数(){
ga('send'、'pageview'、'/funnel_G1/premium1.html');
});

当您移动到GTM时,您可能还正确地删除了页面上的所有GA代码,其中包括标准GA代码段和

ga('create', 'UA-.....');
ga('send','pageview');
代码。删除GA代码段也会删除“GA”对象的创建,这就是您看到错误的原因。使用GTM,您现在需要发送带有标记的事件和页面视图。因此,您可以尝试将事件推送到数据层,以帮助触发触发虚拟页面视图的标记。在您的特定情况下,您可以在提交表单时执行以下操作:

dataLayer.push({
   'event': 'form complete',
   'vpv': '/funnel_G1/premium1.html'
})

然后在GTM中,您需要创建由事件“form complete”触发的pageview标记,该标记还将页面值更改为“vpv”数据层键的值(即/funnel_G1/premium1.html)。

问题在于,GTM异步加载
ga()
函数。如果在加载前调用
ga()
,将遇到此错误

解决方案是以某种方式等待定义
ga()
,或者使用
dataLayer.push()


编辑
我们最终使用的解决方案——我们只是没有在GA中包含分析,而是在源代码中单独包含它们。GTM将处理除GA之外的其他脚本ICNLUDE。此解决方案至少不会破坏整个项目中的
GA()
用法。

OK。谢谢你的建议。我希望避免重写/编辑所有的虚拟页面浏览脚本,因为我们的网站上出现了20多次,而且作为一个.NET静态网站,更改页面上的代码需要开发人员——这就是迁移到GTM的全部原因。是的,我完全明白。这有点痛苦,但我相信最终,这将对各方都有利,因为您的开发人员在未来将较少参与。实际上,GTM默认情况下仍会创建ga对象,除非您在高级配置中通过ga标记中的“全局函数名”设置对其进行重命名(区别在于GTM为跟踪器创建了一个随机名称,这可以通过为跟踪器名称设置一个空值来纠正)。所以我很确定还有另一个问题(我们可以看到URL吗?)。是的,谢谢您的提醒,@EikePierstorff!GTM创建ga对象,但是如果您想继续使用现有的代码,您需要在GTM分配给跟踪器的名称前加上前缀。@nyun,但是您的答案可能仍然会解决问题,dataLayer.push无疑是一种方法:-)