
2020年5月30日
如何使用Google跟踪代码管理器跟踪单页Web应用
更新时间:2020年5月30日。 在常规网站上跟踪页面浏览量非常容易:您只需在每个页面上添加跟踪代码,然后 完成!每次访客单击内部链接时,浏览器窗口都会刷新,并且新的网页浏览匹配会发送到Google Analytics(分析)。
但是,当涉及到单页网站(或Web应用程序)时,默认跟踪将停止工作。无论用户/访问者在您的网站上做什么,都只会跟踪一个页面视图(第一个页面视图)。这种情况听起来很熟悉吗?
Why does this happen? 让 me show you.
在这篇博客中,我’ll说明如何使用Google跟踪代码管理器(包括SP网站)跟踪单页Web应用。该博客文章内容广泛,因此请做好准备。

目录
+显示目录+
什么是单页应用程序(SPA)/网站?
Single Page Application (SPA) is a web application or website that loads all of the resources required 至 navigate throughout the site on the first 页load. As the user clicks links 和 interacts with the 页, subsequent content is loaded 动态ally (and the 页technically does not reload, even though it might look differently).
默认的Google Analytics(分析)跟踪在传统网站上效果很好,因为该代码段代码每次用户加载新页面时都会运行。
但是,在单页网站/应用程序中,所有必需的代码都会加载一次,并且在整个用户会话期间不会重新加载页面。 那 is why you see 只要 one 页view in your GA reports。 URL可能会更改,但这仅是为了提供单独页面的感觉。
SPA不能像预期的那样使用许多网络跟踪工具,因为它们是为传统网站编写的,跟踪代码可以在传统网站上检测到何时加载新页面。
But everything is possible 和 you can track such 页面预览s with Tag Manager as well. Continue reading 和 I’我会告诉你兔子洞有多深。
安装Google跟踪代码管理器
如果你没有’尚未将Google跟踪代码管理器安装到单页Web应用程序或网站上。我有 发表了博客文章 有几种选择供您考虑。也, 检查您的Google跟踪代码管理器是否正常运行.
唐e? Great, let’s proceed.
跟踪SPA的多种方法+如何阅读本指南
破坏者:本指南中介绍了两种技术:使用历史记录更改侦听器(在GTM内),以及每次访问者从一个页面导航到另一页面时,都要求开发人员将综合浏览量推送到数据层。博客文章的前半部分专门介绍“历史更改”(并了解它是否对您有用),而后半部分将介绍如何与开发人员合作。
但是,在我们直接进入配置部分之前,首先需要评估上下文,并找出要选择的跟踪选项。就像我在其他热门博客文章中 表格追踪,使复杂的事情更容易理解,我’ve创建了一个流程图,可以帮助您决定选择哪种跟踪方法(或者在许多情况下,只有一种方法可供您选择)。
如果两种选择都可行,则应与开发人员一起使用’s help + dataLayer.push (因为事实证明它更强大)。继续阅读。
首先,让’快速浏览一下,然后我们’会深入到每一步。
重要: 2020年10月,GTM中的预览模式已更改。因此,工作流程的第一步(如下)也有所变化。预览模式不再消失。而是,使用以下问题开始流程(如下):“从页面A导航到页面B时,您是否看到以GTM预览模式加载的新页面?
您是否完全需要本指南?
上面流程图中的第一个菱形问一个问题: 当您从一页导航到另一页(在同一网站内)时,GTM预览和调试模式是否会快速消失并重新出现?
我知道,这个问题听起来很愚蠢,但请确保100%确定我要您考虑本指南是否正是您所需要的。
What does this question mean? By default, Google Analytics 页面预览 tag fires every time a 页is loaded (meaning that the 页must load completely from scratch). 如果你 navigate from one 页to another, 页B is loaded from zero while 页A is gone.
与页面一起’的代码,还会从头开始加载标签管理器JavaScript代码段。因此,如果您从A页导航到B页,则GTM预览和调试控制台(如果有)’启用)与A页面一起消失(因为该页面现在已被放弃),然后从头开始将其加载到B页面上。
So if on every 页面预览 you notice that the GTM Preview 和 Debug console reloads as well, you’不能与单页应用程序一起使用。阅读我的 GTM初学者指南,而不是。一世’ve explained there how 至 track your first GA 页面预览 with Tag Manager.
另一方面,如果您’re really working with an SPA, every time you navigate from 页A 至 页B, the Preview 和 Debug console stays as it is 和 continues tracking your interactions (e.g. clicks), but not 页面预览s. Why?
那’s,因为在网络跟踪中,“pageview”通常是在加载页面文档和JavaScript跟踪代码(包括Pageview标记)一起加载时。但是,在SPA中,所有后续“pageviews” happen 动态ally, without loading/reloading the 页document. 那’s为什么默认情况下标记管理器和GA均不会跟踪“dynamic” 页面预览s.
因此,您需要进行一些其他配置(甚至在开发人员的帮助下)。
好了,第一个问题已经回答。如果您确实在使用SPA,请让’移动到流程图中的下一个问题。

页面URL是否更改(当您从页面A导航到页面B时)?
如果网址未更改,则必须询问开发人员’的帮助。立即跳到本章“与GTM和开发人员一起跟踪SPA’s help”并继续从那里阅读。如果确实更改了URL,则意味着您仍然有机会自行使用“历史记录更改”侦听器。
根据您的网站,URL更改可能看起来有所不同’重新。在某些网站上,URL片段会发生变化(’是井号#之后的网址部分。在其他情况下,URL更改可能看起来很随意,例如在常规网站上(例如 /家/ 至 / home / 联系我们)等
如果你 confirm that the URL changes, let’移至另一步骤。
找出历史记录更改侦听器是否有帮助
First, you need 至 have enabled at least one 历史 Change 触发 on a 页. Theoretically, it should be able 至 catch such URL changes. When the trigger is enabled on a 页, it activates the 历史 Change listener, a function (more like a set of functions) that is lurking somewhere in the background 和 waiting for a moment when the URL 动态ally changes.
侦听器发现更改后,会将“历史事件”推送到数据层(您将在“预览”和“调试”模式下看到它)。
要启用触发器,请转到 扳机 > 新 并输入以下选项。
接下来,前往 变数。 Google跟踪代码管理器提供了一堆与历史记录更改触发器相关的内置变量。在变量部分中,点击配置(在 内置变量)并启用所有 历史相关 变量。
继续执行流程图中的另一个问题。
您是否在GTM预览和调试模式下看到历史记录事件?
现在,让’s enable Google跟踪代码管理器的预览和调试模式 看看听众是否正常。橙色的通知栏应出现在您的帐户中。
启用预览模式后,导航到实现容器的站点,您将在浏览器底部看到一个调试控制台窗口,其中显示有关标签的详细信息,包括它们的触发状态和正在处理的数据。
单击(或滚动)单页Web应用程序(或网站)的各个部分以创建页面URL(换句话说,只需浏览您的单页应用程序/网站)。发生更改后,请在“预览和调试”控制台中仔细查看事件流。
是否 历史 事件出现了吗?如果是的话’好消息!如果没有,请跳至我解释的章节 如何与开发商合作。您将不得不与开发人员合作。
每当访问者导航到您的应用程序/网站的特定部分时, 历史 event will fire. This is a perfect trigger 至 fire the Universal Analytics 页面预览 Tag.
从页面A导航到页面B时,您看到多少个历史记录事件?
我问这个问题的原因是答案是’总是1。您应该期望1,但是,有时单页应用程序的编码方式是“历史记录”侦听器捕获两个或多个事件。例如我’在某些情况下,访问者从 /家/ 至 / 页s / contact /.
结果,发生了两个历史事件:
- 有人追踪了 /家/ 至 /页/
- 另一个抓住了 /页/ 至 / 页s / contact /.
This means that with Tag Manager, you would have tracked two 页面预览s instead of one. Not accurate.
另一个例子是在一个我看到相同的项目中 历史 事件多次出现。每一个“pageview”导致2或3个历史事件。也不准确。
在这种情况下,如果您使用“历史记录更改”侦听器而未对“历史记录”触发器进行任何修改,则数据将变得and肿且不切实际。
这里有三个选项,其中两个涉及开发人员。
- 选项A: 咨询开发商并询问是否’可以通过将双重历史记录或双重历史事件始终减少为1.来解决此问题。
- 选项B: 再次跳到本章 您必须与开发人员一起实施此跟踪.
- 选项C: 尝试 过滤掉一些历史事件.
是否有任何历史变量返回有用的数据?
Since there are several ways how a URL can be 动态ally changed (Simo提到),您可以通过多种方式来检索有关刚刚加载的页面的历史记录信息。让’我们来看两个例子。
当“历史记录”事件出现在GTM预览和调试控制台中时,点击它,然后转到 变数 标签。向下滚动,直到看到与历史记录相关的变量(如果没有)’t,您需要通过转到 变数> Built-in 变数> Configure)。
你看到了什么?
Does the 新历史片段 contain some data? If the URL change involves the hashmark #, 然后 this variable indeed should return some value. 那’s great! We’以后需要在Google Analytics(分析)设置变量中使用该变量。
如果网址(带有#)已更改,但 新历史片段 变量返回未定义, 试试这个解决方案.
如果URL更改不涉及URL片段(#),则检查另一个变量 新历史状态。它包含一些信息吗?一个示例可能如下所示:
虽然这是一个好兆头,但我们不’不需要所有的价值。我们’我只需要一把钥匙, 路径。但是,内置的GTM变量不会’t允许您访问该特定参数,因此,我们’将需要使用以下设置创建数据层变量:
We’一会儿需要这个变量。
但是,如果没有“历史记录变量”返回有关访问者已导航页面的有用数据,请咨询开发人员或 跳到本章.
老实说,我没有’没有看到没有任何历史变量包含有用信息的情况,也许’甚至是不可能的。我不确定 -
#7。使用历史记录监听器通过Google Analytics(分析)跟踪单页应用程序
Alright, so now we have arrived at the step where we will combine everything 至 gether 和 will send those 页面预览s 至 Google Analytics.
如果涉及URL更改,则URL片段(#)
通常,Universal标记会自动获取整页URL的值,并将其传输到Google Analytics(分析)服务器。但是,如果您的URL更改涉及井号(#),则Google Analytics(分析)默认不会捕获它。
We’我需要在 GA设定变数 为了将URL片段值发送到Google Analytics(分析’为什么检查历史记录变量是否包含一些有用的数据很重要。
打开您的GA设置变量(您的Universal Analytics代码使用该变量)。去 更多设置> Fields 至 Set > 页然后输入 {{新 历史片段}}.
If website’s/app’s address contains not 只要 URL fragment but Page Path as well (e.g. //www.example.com/类别1 /产品2/#contact-us),解决方案我’上述ve仅会发送 联系我们 到Google Analytics(分析)和 类别1 /产品2 将被忽略。
因此,如果您的单页网站/应用程序地址不仅包含“ URL片段”,而且还包含“页面路径”,则应将Universal Analytics设置更新为此(在所有Google Analytics(分析)标签或GA设置变量中):
- 代替 页>>>{{新历史片段}}
- 输入 页>>> {{页面路径}} {{新历史片段}}
无论哪种方式,我们都告诉Google Analytics(分析)忽略默认情况下获取的完整页面URL值,并使用的新值 页我们正在发送。
如果URL更改涉及URL片段(#)并且还可能包含查询参数
在某些单页应用程序中’网址可能还包含一些查询参数(例如example.com/?q=product#search)。如果说’在这种情况下,您可以将附加变量与 页 field 至 Google Analytics. 那 variable will return all the query parameters that are present in the URL.
创建一个 JavaScript变数 具有以下设置 window.location.search。
然后转到Google Analytics(分析)设置变量并插入此变量 片段变量之前。最终结果:{{页面主机名}} {{js–window.location.search}} {{新历史片段}}。
附言如果SPA中唯一可能的查询参数是UTM参数,则不要 ’不用担心无需额外发送 页 领域。 Google Analytics(分析)将以另一种方式处理您的流量归因。
如果“新历史记录片段”变量为空,并且您’重新使用新历史状态
正如我在前一章中提到的那样,’完全有可能 新历史片段 变量将没有值。如果说’根据您的情况,您需要更深入地研究数据层中存在的内容。这是预览和调试模式下一个历史事件的示例。当我点击 历史 事件,我切换到 资料层 标签。
如你看到的, gtm.oldUrlFragment 和 gtm.newUrlFragment 是空的。但是,还有许多其他有用的信息,例如,以下两项之一:
那’这就是为什么我们应该创建一个 数据层变量 访问数据层中这些值之一。我在这里没有偏好,所以’由您决定选择哪一个。如果你去 gtm.newUrl,创建以下数据层变量。
如果你 decide 至 go with the SubmitUrl,您需要输入从顶层到底层的完整路径。在这种情况下, gtm.newHistoryState.props.submitUrl (记住它’s case-sensitive).
在 页 字段(属于您的Google Analytics(分析)设置变量),而不是{{页面路径}}和{{新历史记录片段}}(如果输入了参数,则查询参数)。
如果您为DLV指定了其他名称,则该其他名称将在 值 屏幕截图中的字段。
触发
如果您已完全遵循本指南,则您已经创建了一个“历史记录更改”触发器,用于监听所有事件。如果是,则保持原样。如果你没有’创建它,现在就做。
Assign the 历史 trigger 至 your GA 页面预览 tag.
您可能还需要分配默认值 所有页面 trigger 至 the Google Analytics 页面预览 tag if the 历史 初始页面加载发生时,事件不会在预览和调试模式下出现。
这是什么意思?在某些项目中,我’ve seen a 历史 事件发生在 GTM调试 控制台以及初始页面加载。
首先,你看到 页面预览, 然后 DOM准备就绪 事件,然后 历史。 如果说’您的情况下,您应该使用 只要 页面浏览跟踪中的“历史记录更改”触发器(并避免 所有页面)。否则,第一页浏览量将被跟踪两次,因为 所有页面 触发和第二次,因为 历史 事件。
现在,保存Universal Analytics代码,刷新 预览和调试模式, 和 try interacting with various parts of a single 页app/website. Every time you navigate somewhere, a Universal Analytics 页面预览 Tag should fire.
唐’别忘了查看GA实时报告中的数据。

替代选项:使用Google跟踪代码管理器和开发人员跟踪单页应用程序’s help
欢迎来到本指南的第二大章节。您最有可能’由于您的“历史记录更改”跟踪尝试失败或您只是想了解更多信息,因此达到了这一点。
如果(出于某种原因)历史记录更改触发器不是’为您工作(或者有其他原因使您进入本节),’关于如何使用Google跟踪代码管理器跟踪单页网络应用的另一种选择。要求开发者激活 dataLayer.push 每当用户在网站/网络应用程序的页面/状态之间导航时,都应输入代码。
这里’s是开发人员可以使用的示例代码片段:
<script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event':'Pageview', 'pagePath': '/something/contact-us', 'pageTitle': 'Contact us' //some arbitrary name for the 页/state }); </script>
注意: 的‘pagePath’ 和 ‘pageTitle’ parameters (in that code snippet) should be 动态ally changed 至 the address (and title) of the 页a visitor is currently viewing. A developer should take care of that.
无论如何,该代码是什么意思?
每次用户访问页面的特定部分时,开发人员应激活该小段JavaScript代码。它表明一个“Pageview”发生了,新页面的网址是 / something / 联系我们。 如果页面地址包含一些对您的报告很重要的查询参数(不包括UTM参数),请开发人员将这些参数包括在 页Path key as well.
无论如何,你应该使用这个 dataLayer.push as a triggering condition (that activates the GA 页面预览 tag) 和 然后 send the title 和 页path (page over 至 GA.
为此,请完成以下步骤:
- 创建两个变量(并将它们包括在“ GA设置”变量中)
- 创建一个触发器 (and assign it 至 the Universal Analytics 页面预览 tag).
变数
- 标题: dlv– 页Path (dlv代表“Data Layer Variable”)
- 变量类型: 数据层变量
- 数据层变量 名称: 页Path
此变量将读取 页Path 由开发人员推送到数据层。
创建第二个变量:
- 标题: dlv– 页面标题
- 变量类型: 数据层变量
- 数据层变量 名称: 页面标题
触发
- 标题: Custom – 页面预览
- 类型: Custom Event
- 活动名称: Pageview
- 此触发器触发: All events
更新GA设置变量和Universal Analytics标记
转到您要使用的Google Analytics(分析)设置变量’re using in your SPA’的GTM容器,并包括 页Path和页面标题 变量。
- 要设置的字段: page = {{dlv–pagePath}}和title = {{dlv– 页面标题}}
After that, go 至 the Universal Analytics 页面预览 tag 和 add the recently created trigger, 页面预览.
查看报告
一旦实现了单页应用程序/网站跟踪的这些选项之一,检查GA报告就变得至关重要。首先,从实时报告开始。
在Google Analytics(分析)界面的左侧,点击实时> Overview. You should be seeing your own 页面预览s there. 如果你 can’t 阅读本故障排除指南.
Once you start seeing your own 页面预览s, you’ll need 至 wait for a while (from 10-20 minutes up 至 24 hours) until you start seeing those 页面预览s in standard reports as well. By saying “Standard”, I mean 行为> Site Content > All 页s.
流氓转介问题
使用单页面应用程序并将虚拟页面视图发送到Google Analytics(分析)可能会使您的引荐数据混乱。 Simo Ahava已发布解决方案 如何解决流氓转介问题。因此,在按照我的提示操作如何使用Google跟踪代码管理器跟踪单页网络应用程序之后,请转到Simo’s blog 和 implement his solution 至 o. 那 solution is not an alternative 至 what you’在这里学到的。这是一个补充。
如果您已直接向SPA支付了流量(例如来自Google Ads的流量),这一点尤其重要。
使用Google跟踪代码管理器跟踪单页Web应用:结论
The problem with single-page web apps or websites is that regular 页面预览 tracking does not work. All of the necessary code is loaded once 和 the 页does not reload during the entire user session. This is why you see 只要 one 页 view in your GA reports.
但是,这不是死胡同。使用Google跟踪代码管理器中的某些配置(可能还需要开发人员的一些输入),就可以完全跟踪它们。在这篇博客中,我’ve解释了有关如何跟踪单页网站的两个选项:使用GTM’内置的历史记录更改触发器或与开发人员合作。
如果你’不知道选择哪种方法,在这里’s a rule of thumb:
- 如果您有开发资源,则选择开发者的路径是一个更可靠的选择(就跟踪质量而言)。但是,如果这些资源现在不可用,请检查流程图I。’ve包含在本指南的开头。但是,那里’最终仍有机会’最终会要求开发商’的输入。 (如果流程图如此说明)。
顺便说一句,如果您发现有关使用Google跟踪代码管理器跟踪单页Web应用程序的这篇文章很有用,请考虑订阅我的新闻通讯。您’会获得与GTM相关的各种奖金和有用的东西。
我想念什么或您有任何疑问吗?在评论中让我知道。

嗨,朱利叶斯(Julius),在这种情况下,它与通过自定义变量的fragment参数相同,然后将值作为虚拟页面发送到Google Analytics(分析)自定义字段中?
因为,如果我创建了一个自定义变量,我真的不了解使用片段更改历史记录的重要性,而且我认为两者都是相同的,不是吗?
谢谢您的回复!,
马库斯
嘿,马库斯,
说“自定义变量”是什么意思?它是自定义JavaScript变量吗?如果是,那么确定。
带有片段的历史记录更改是非开发人员的解决方案,他们可以轻松跟踪URL更改而无需编写其他JavaScript。如果您了解JavaScript,那么您可以获得几乎相同的结果。
希望我能正确理解您的问题。
朱利叶斯
嘿, that's a good question. Since you're passing the 页面预览 data with an additional "页" parameter, custom dimensions will also be accepted 和 processed by GA.
在 other words, 自订Dimensions will work in the same manner just like with regular 页面预览s.
应该也可以。
老实说,我不确定:)我仍然相信它们应该适用于所有范围。 MeasureSchool的Julian发布了一段有趣的视频,介绍如何调试具有不同范围的GA收集的数据。 随时检查,也许它将为您提供更多见解。
嗨,不错的提示。谢谢。
但是我只是想知道我使用Plan B来声明数据层“ url”作为页面url吗,我是否还会自动获取页面路径,主机名,还是我也应该将它们声明为id数据层?
你有尝试过吗?
谢谢
这取决于您如何在数据层中声明该URL。找出答案的最佳方法是尝试。试试看,看看会发生什么:)
你好朱利叶斯,
首先:有用的文章,谢谢!我为网络应用程序使用了事件+数据层推送方法(用于页面/标题)(没有哈希,没有重新加载),但不幸的是,它仅在大约60%的情况下有效。在60%的情况下,它显示正确的页面/标题,在40%的情况下,它显示默认的uri /元标题。
当我检查GTM的调试模式时,数据层已正确填充。
任何想法?
不,还没有想法。如果您愿意,可以向我发送更多详细信息,请发送电子邮件至julius [analyticsmania.com]。
我需要的信息:
-标题错误的页面的网址
-标题正确的页面的网址
-向我发送指向共享的预览和调试模式的链接。
干杯
你好朱利叶斯,
很棒的文章!
如果我们只想跟踪页面路径而不使用片段。我们可以跳过创建新的历史片段并跳过这一部分吗?:
“选择Google Analytics(分析)设置变量。这次,我不会详细介绍它的工作方式。您可以在我的另一篇博客文章中阅读有关此信息的更多信息。
输入跟踪ID。此处的最佳做法是将其添加为常量。
更多设置> Fields 至 Set > 页>>>{{新历史片段}}”
是的,看来您可以跳过该部分。
你好朱利叶斯,
我已经使用这种方法一年了。我有我的终极问题。
我的情况是使用react的SPA,
当触发“ histroyChange”时,“页面标题”或“ isJWPlayerFoundOnPage”上的变量仍然具有较早页面的值。基本上,任何在常规网站上加载的窗口上具有正确值的变量,都不会在“ historyChange”上进行更新。
因此,我最终得到正确的页面值,但在Google Analytics上页面标题经常不一致。
您有解决方案吗?提前致谢。
是的,与开发人员交谈。要求他们开枪 dataLayer.push every time a state (page) changes. 那 .push should contain Page title 和 other useful information, e.g.:
window.dataLayer.push({
'event':'Pageview',
'pageTitle':'这是页面标题',
'someUsefulInformation':'123abc'
})
之后,创建 自订Trigger, 数据层变量s和use them. 历史 change trigger 和 variables will not be useful in this case. Using dataLayer.push is a very robust solution which increases the quality of your data.
谢谢你的精彩文章。
I have a question, we have multiple subdomains on single domain, using 1 GAID. Only one subdomain is a single-page app. Is that a safer approach 至 create a new 页view trigger 至 只要 fire on this SPA (subdomain) with your solution, 和 create a blocking trigger for current 页面预览 tag not fire on this SPA (subdomain), or it really does not matter?
你好 it depends on the structure of the single-page website + the structure of other sites, their settings, etc. Both approaches can work fine. I'd prefer using one 页面预览 tag 和 set history change triggers 至 fire 只要 on that landing 页.
非常感谢Julius,这很合情理!我将尝试您的建议!
嗨,谢谢你的精彩文章!
但是我们有一个问题:在登录或注册之前,我们有SEF URL,例如/ category / 页。注册或登录后,用户使用#进入“站点的SPA部分”!网址。问题是登录后首页上的分析跟踪会触发两次:
1 - like 页面预览 (because 页reloaded after click on "register" button)
2-类似于历史记录更改(因为成功注册后,我们会有#!thankyou网址片段)
所以-我不知道如何摆脱这种翻倍的数据。也许您知道一些决定?
嗨,一种方法是将您的历史记录更改触发器更新为在url片段等于“ login”(或当时的任何值)时不触发。
好的,谢谢,我会尝试的。
您好,我几乎所有的SPA都与GTM一起使用,唯一的问题是在我们的站点以前是常规站点之前,我们能够对某些页面进行审议,甚至没有任何跟踪脚本(对于例如登录页面)的原因很明显。但是在SPA中,一旦触发了GTM触发器并且页面上已经存在JS脚本,如果用户转到登录页面,就可以在不完全重新加载SPA的情况下删除该页面上的任何跟踪脚本的任何方法?
如果您在注释中搜索“登录”,则Max上面也有类似的情况,当URL片段=“登录”时,答案是不触发。
还有一种类似的逻辑可以触发自定义HTML标记,然后您可以过滤出是否要触发下一个事件,该事件实际上会触发分析或修改要传递的数据层。例如,我们测试最后一个URL与新的URL不同,您也可以测试它不是登录页面。如果满足条件,那么您可以使用所需的任何信息将事件推送到数据层(我们将lastUrl推送到数据层),然后从该事件中触发分析。
我知道什么时候脚本不会在某些SPA页面上触发,但是如果脚本已经在DOM上,那么任何脚本都可以挂上窗口事件。现在,如果我转到该登录页面,即使不再执行脚本,该事件仍然会存在,有什么解决方案吗?
如果容器当天未触发任何操作,则不应将GTM视为跟踪脚本。因此,如果访问者进入登录页面,只需添加阻止触发器即可将您的代码设置为不触发该页面。阻止触发器的规则:
事件名称:。*(启用正则表达式复选框)
条件:New 历史 Fragment包含/ login /(或类似的内容)。
将此触发器添加为您不希望在登录页面上触发的所有标签的例外。
嗨,朱利叶斯!
感谢的职位。这真的很有用。但是我需要你的帮助。我的网站在//之间有#,就像这样www.page.com/#/page/us ...我已经做过您每次在代码中的帖子中所说的所有操作,但是我无法在Analytics(分析)中看到结果
你能帮我吗?
最好的祝福!
嘿, if the tag fires but you still cannot see 页面预览s in the GA Real-time reports, there are several general ways how 至 troubleshoot this 和 fix it //www.toddblog.net/post/google-analytics-real-time-reports-not-working/.
我有一个SPA,该SPA正在大会上的触摸屏上使用,并且任何一天都将有多个用户在使用它。我可以轻松地如上所述跟踪网页浏览量,但是当另一个用户开始使用该应用程序时,如何告诉GA新的会话已开始?我不会在用户会话之间的任何时候刷新浏览器,但是如果需要的话,我可以这样做。我的主要问题是:GA / Tag Manager是否会根据推送自定义综合浏览量事件(我正在使用计划B)直观地知道这是一个单页应用,并且如果刷新页面会注册一个新会话?
嘿,您可以使用Google Analytics(分析)Pageview标记中的“ sessionControl”字段。每次有用户进入时,您都需要刷新页面。刷新后,您可以传递其他字段“ sessionControl”:“开始”(在GA 页面预览标签的“要设置的字段”字段中)。 页面预览标记必须仅在“所有页面”,DOM准备就绪或“窗口加载”触发器上触发(绝对不会在历史记录更改或自定义dataLayer.push上触发)。
这里's more about the session control parameter //developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#sessionControl
你好朱利叶斯,
感谢您的有用指导。在2018年1月3日下午6:38对Liam的答复中,您要求他查看UA标签是否被触发。 (因为他看到历史记录发生了变化,但没有看到Analytics(分析)中的变量)
在Google跟踪代码管理器的“变量”标签中,我看到了新的历史记录片段数据层变量字符串:“定价”
但在代码标签中,它告诉我UA代码不会触发。这是正常的还是这是为什么我在分析中看不到标签“定价”的问题-> behaviour -> site content?
谢谢
吉恩
如果该标签原本应该触发,但绝对不会触发,则绝对不是预期的行为。如果代码未触发,则表明您的触发器配置错误。在预览和调试模式下,单击历史记录更改事件,然后单击应该触发(但没有触发)的代码。您将看到触发器的条件以及满足的条件。这应该为您提供更多错误提示。
非常感谢
嗨-这篇文章非常有用,正是我在寻找什么。我有一个问题。我的网站混合了带有和不带有锚点的页面,但是我想跟踪锚点。我目前已将GTM配置为在“页面浏览量”上触发。我想确保所做的任何事情都不会导致重复计算页面浏览量,所以我也这样做:
1.保留我现有的触发器并添加历史记录更改触发器,
2.删除我现有的触发器,并将其替换为设置为page的历史记录更改触发器>>>{{页面路径}} {{新历史片段}},或
3.还有别的吗?
非常感谢
嘿,您需要结合两个选项:
1. Keep the original 页面预览 trigger 和 add the 历史 Change trigger.
2.将“页面”参数设置为{{页面路径}} {{新历史片段}}
如果{{New 历史片段}}为空(表示没有片段),则变量将返回一个空字符串“”(对您的数据无害)。
你好朱利叶斯,
{{Page Path}}{{新历史片段}}的问题在于{{Page Path}}不包含参数(?example = true)。因此信息将丢失。
//www.domain.com/trousers?sort=newest will be logged as //www.domain.com/trousers if overwrite the standard 页面预览-tracking with a field 页setting it 至 {{页面路径}} {{新历史片段}}
因此正确的方法可以是两个标签或一个javascript变量
还是我想念什么?
干杯
嗨,朱利叶斯! 谢谢 very much for the post. Our website it has been build under Angular (SPA) 和 the URLs look like this: //app.fasttrack.menu/#/shops/16 I followed every step but when I tried 至 enable 预览和调试模式, the orange notification didn´t appear.
您有什么线索吗?
非常感谢西班牙的来临。
Mikel Azkarate
Hey Mikel, most likely, your browser or a 3rd party extension (AdBlock, Ghostery) blocks 3rd party cookies. 读这个 guide //www.toddblog.net/post/google-tag-manager-preview-mode-not-working/
你是对的!非常感谢你!!
感谢您的文章解释清楚!真的很好!
你好朱利叶斯,
快速提问。我已经按照您的建议完成了设置。而且工作正常。但是我有一个问题是,在SPA的所有页面中,历史更改都会触发两次。例如,从登录页面,当我导航到收件箱时,它将发送两个页面视图。这发生在所有页面上。知道我该如何克服吗?
太感谢了
问候,
克山
嘿,在这种情况下,我将向开发人员咨询:
-要么要求看看为什么一次同时进行两个URL更改,然后要求对其进行修复并将其更改为仅一个。
- Ask a developer 至 push every URL change 至 the data layer (just make sure that a developer does not send duplicate events). This guide might be useful //www.bounteous.com/insights/2018/03/30/single-page-applications-google-analytics/
另外,检查在启用历史记录更改触发器的页面上是否没有多个历史记录更改触发器或多个容器。
你好
如果你 have a website where the url does not change (only the content 动态ally reloads) is it better 至 push virtual 页面预览s or track navigating through the app as events? The best practice?
最好的祝福
嘿, the best practice 然后 is 至 ask a developer 至 push the data layer events when the state of your app changes 和 also with that event he/she should push the "fake URL", for example "/dashboard/". Then you could fetch that fake URL with the 数据层变量 和 send it 至 GA 至 gether with the virtual 页面预览.
Hey! Great 文章 but I've a problem with configuration. I'm trying 至 add chat on every 页but without cart 页. I added variables with "路径 页does not contain cart"和it's still not working. It's good when I navigate by clicking on url 路径 和 loading again all app. How 至 configure GTM in 动态ally routing 路径?
SPA的问题在于,如果脚本被触发,只要页面未完全重新加载(使用F5或Refresh),它将激活。因此,如果聊天室已经加载到产品页面中,那么它也将在购物车中可见(因为该页面不会重新加载)。
您应该咨询您的聊天解决方案的开发者/创建者,并询问是否存在某种JavaScript API,可以通过触发一些代码片段来显示/隐藏聊天。
谢谢!
你好朱利叶斯,
我实际上有一个在Wix上完成的网站,并且GTM代码是按照他们的说明放置的,GTM帐户ID刚刚在CMS中引入。
问题是,当您从菜单更改页面时,网页浏览不会触发。如果我重新加载页面,则可以正常工作,但是如果我按菜单中的任何按钮(例如按博客或关于页面),则不会触发综合浏览量。页面的URL随其应有的变化(无哈希,URL随即改变),并且菜单下方的内容也发生变化。但是我的猜测是,当内容更改时,不会重新加载页面。历史更改变量都没有显示任何内容,而我只是无法弄清楚发生了什么。
能否请你帮忙?
谢谢,
卡塔琳娜
你好
我刚刚找到了解决方案。我的网址已更改,没有哈希值,即使历史记录变量未显示页面路径所做的任何更改,这也很棒,因为可以通过“历史记录更改”触发器来捕获- >对某些历史更改进行触发->页面路径匹配RegEx:*,并且此触发器可以添加到“页面浏览量”标记中。以防万一任何人也需要这个:)。
There is a better way 至 track Wix 页面预览s. 读这个
你好朱利叶斯,
非常感谢您分享如此精彩的内容。
One of my client has a ReactJS app 和 want 至 track events 和 页面预览s in it.
我阅读了您的文章,似乎不需要任何特定的库就可以做到。但是我在其他一些网站上看到,使用REactJS似乎必须使用特定的库,例如:
//github.com/faouzioudouh/react-tracker
//www.npmjs.com/package/react-google-tag-manager
您是否已经在ReactJS应用程序上实现了一些Google TAg MAnager和Google Analytics(分析)跟踪?
您认为您提供的实现可以在这种环境下工作吗?
非常感谢
对于React应用程序,最好不要使用我提供的解决方案,并随便使用一些自定义库,或者仅作为开发人员来编写解决方案。每当React应用程序中的状态发生变化时,开发人员应将该更改推送到数据层,例如
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event':'pageview',
'pageUrl':'/ something-something /',
'pageTitle':'页面标题'
});
好。非常感谢 :)
谢了哥们!永远不知道有一个名为HistoryChange的变量。这是我第一次为一个页面应用程序进行GTM设置。继续分享!
感谢这篇优秀的文章!得到了很大的帮助!
我们的网址格式看起来像
//www.domain.com/de-de/shop/suche/#/q/regenhose/
我已将“页面”设置为“ {{页面路径}} {{新历史片段}}”
现在{{Page Path}}和{{New 历史片段}}之间有两个斜杠:
/ de-de / shop / suche // q / regenhose /
您将如何解决?
嘿,
这不是问题,仅仅是化妆品。您可以在“ 页”参数中的{{Page Path}}和{{New 历史片段}}之间输入#,但是如果URL中没有任何片段,例如# homepage.com/#
Hint: 如果你 overwrite the normal 页面预览 with a field 和 the value "{Page Path}}{{New 历史片段}}" the tracking will miss all possible attached query strings
谢谢,蒂尔!本指南确实需要一些更新。希望今年能做到(包括您的建议)。
嗨朱利叶斯,
我的情况如下。
SPA网址lesco.com/myproductrange/#/range;
如果我重新加载URL,它将被捕获为“ / myproductrange /”(因为没有历史记录更改,因此仅“加载了窗口”)。您能否提出解决方案的建议?
Hey. Yes, I have. One of the possible solutions could be 至 try create your own URL variable (where you set it 至 return 只要 URL fragment). 那 could be used in your tracking.
More on URL variable -> //www.toddblog.net/post/url-variable-google-tag-manager/
朱利叶斯 - 谢谢 you so much for the helpful post! I have a 3 step registration process (2 sign ups + 1 thank you 页) 和 I was able 至 finally get virtual 页面预览s 和 goals 至 fire in my SPA!!
While these 页面预览s 和 goals are now firing, one thing unexpected was my GA account started showing 页面预览s from a subdomain it didn't before.
是因为历史变化而引起的?如果是这样,如何将历史更改排除在特定URL的触发范围之外,或者确保历史更改仅在希望的3个页面上触发?
Yes, change the 历史 Change trigger from "Fire on all 历史 Change events" 至 "Some 历史 Change events"和then enter the condition you need (e.g. Page URL contains xxx)
你好朱利叶斯,
Trought you guide i have been able 至 track a pretty complicated website. However, i cant measure the first 页with interaction (imagine a new user jumps in the home, due there are not history changes, i cant get data until the visit other url). If i use other options, 页面预览s are duplicated.
¿有什么事情可以做?
谢谢
也只需使用“所有页面”触发器。
你好朱利叶斯,
I have a question regarding single 页web app. When it is necessary 至 contact developer regarding custom events, do we ask them 至 insert also other information such as name or text or anything else so I can catch those virtual 页面预览s in GTM.Or maybe you have some texts regarding single 页web app beside your 文章.
祝一切顺利
嘿,您要问什么。您绝对应该要求页面URL和页面标题。如果您认为其他有用的内容,请询问。
嘿。很棒的文章。我可以进行设置,并且可以在实时视图中看到URL片段。如何为每个目标设置转化目标?
Hey. By using the destination goals //support.google.com/analytics/answer/1116091?hl=en
嗨!感谢您的文章。
I have traced my SPA with the 历史 Change trigger method, on GA I see my 页面预览s correctly but I have a problem with the sessions.
让 me explain.
我的网站由以下组成:
-实际加载页面的页面
-SPA部分。
在GA上,正确计算了加载页面的会话数,但SPA的页面数为零。
谢谢。
嘿,您在此评论中没有提供很多信息,因此很难猜测。原因有很多,例如:
-您为SPA使用了错误的GA ID
-您实施的“历史记录更改”错误,并且您的GA标签仍未触发。
Start with the GA Real-time reports 和 see whether you see the SPA 页面预览s there.
好的,所以我从不在网站上留下任何消息,但是,该死,这篇文章太好了,它还帮助我为React网站设置了GTM。
非常感谢您的高质量文章!
乐意效劳!
本演练非常有帮助!非常感谢您提供这种宝贵的资源。
我在我们的网站上实现了此功能,我们在博客中运行了无限滚动功能。我注意到,在页面报告中,URL的显示方式如下:
www.example.com/www.example.com/blog-post-name。
我们正在使用GA过滤器将主机名放入页面报告中。在为无限滚动修改GA之前,我们没有遇到上述问题。
您可以分享的任何建议将不胜感激!
谢谢,
肖恩
如果您已经具有“显示完整网址”过滤器,则不要在Google Analytics(分析)设置变量中的“页面”字段中传递主机名。
朱利叶斯,非常有帮助,谢谢。将来,我将更多地参考您的指南,并提及可能受益的人。
嗨,朱利叶斯,您好我想让它在我的网站上正常工作。
我启用了历史记录侦听器,并且在该步骤中它们可以正常工作,并且在url更改时仅触发一次。
在步骤“是否有任何历史变量返回有用的数据?”
我的所有历史记录变量都没有有用的数据。
页面路径变量正在更新。
由于是这种情况-
在我的Google Analytics(分析)变量下:
我可以使用{{Page Path}}作为页面字段值吗?还是必须如上所述使用历史记录变量之一中的数据?
在此先感谢您提供的精彩内容。
Since 页path is updated properly in your case, 然后 you don't need 至 do any configurations on the GA settings variable level. Just fire that 页面预览 tag on every history change 和 GA tag will do the rest. You can check that in your realtime reports.
Note - I set up my GA 页面预览 trigger 至 take place on history changes 和 页面预览s as described.
当历史记录更改时,我将触发页面视图并在我所看到的标签上的Google Analytics(分析)设置下
要设置的字段:[{字段名:“页面”,值:'/ signup-preferences'}]
因此,它似乎工作正常,但我想确保我没有丢失任何东西!再次感谢
Got a similar experience but my 页面预览 trigger fires 只要 on the first 页on Container Load. Is it supposed 至 fire that early? If not how do you prevent that?
感谢朱利叶斯的回应!
我希望使用这些新的历史记录侦听器来帮助创建异常。
我有一个弹出窗口,当dom加载到我的主页时会触发。它已经设置了规则,因此不会显示在/以外的页面上。
问题-如果用户将dom加载到主页上,然后导航到另一个页面-弹出窗口仍然会触发。
关于如何不显示弹出窗口的任何建议?
Update your triggers. If a visitor navigates 至 another 页(that is a virtual 页面预览), 和 you have ONLY DOM ready trigger, 然后 your popup should not appear. So this means that you have more triggers added 至 that popup. Remove them.
巴西问候朱利叶斯!您的文章很有帮助,我仅使用历史记录就可以解决它。但是,我正在尝试创建click事件,但是GA无法识别互动。
我也尝试将其设置为沿用历史,但没有成功。您是否有关于如何在SPA收集点击事件的任何提示?
点击跟踪应该可以工作。最有可能的是,您的设置不正确。
React Native Web路由按钮单击事件未在GTM中获得
嗨,一个问题。在为增强型电子商务实现dL之后,每次用户更改页面后都必须清理数组吗?例如,优惠页面>>lising-图层中可能存在一些尺寸(来自列表页面的报价页面),并随事件一起发送。
dL和SPA的最佳做法是什么?
如果阵列/对象中的某些键可能会更改,则可以选择清除。
你好朱利叶斯,
感谢您提供这篇有用的文章-
您说:“如果页面地址包含一些对您的报告很重要的查询参数(不包括UTM参数),请开发人员也将这些参数包括在pagePath键中。”
对于我尚不清楚是否需要将自定义查询参数的值传递给GA。
For example, a visitor comes 至 our website at the following URL: //www.acme.com/?ref=E6GTJQLXT&utm_campaign=summer+sale&utm_medium=email&utm_source=newsletter, all query parameters are preserved in the URL while browsing the site, should I have something extra send 至 dataLayer if I want 至 pass 'ref' parameter value 至 Google Analytics custom dimension? And if so, why shouldn't I do the same for UTM parameters?
我必须纠正我的话-浏览该网站时查询参数不会保留在URL中,这仅在重定向时发生。
If developer is pushing 至 the data layer all the virtual 页面预览s, you could ask him/her 至 send all query parameters as well.
代替
dataLayer.push({
'event':'custom-pageview',
'pageUrl':'/ 页/',
'pageTitle':'sometitle'
});
您应该要求:
dataLayer.push({
'event':'custom-pageview',
'pageUrl':'/ 页/?ref = E6GTJQLXT&utm_campaign = summer + sale&utm_medium = email&utm_source = newsletter',
'pageTitle':'sometitle'
});
朱利叶斯
开发人员应该在pageUrl变量中发送完整的URI还是仅发送URN?在文章中,您指出了完整的URI,但在上面的注释中,它只是URN。我所知道的是,当GA脚本发送匹配时,该匹配包含完整的URI,例如,它可能是&dl = https%3A%2F%2Fwww.acme.com%2F。
我们到底应该使用什么来传递给GA?
实际上,两者都应该起作用。 GA会自动捕获dl(文档位置)以获取UTM。但是,如果您想在报表中查看其他一些查询参数,则可以将它们包含在pageUrl数据层变量中。
或者,开发人员可以在不使用查询参数的情况下推送pageUrl,并且可以将它们与window.location.search javascript变量一起传递。查阅“如果URL更改涉及URL片段(#)并且还可能包含查询参数”一章,以获取启发。
总结:这里有几种方法可以实现相同的目的。结果将是相同的。选择最适合您的。
抱歉,如果先前的评论有误导性/令人困惑。
非常感谢!我会重新阅读您的文章-
非常感谢您提供有用的文章。
我似乎没有得到的唯一一件事是,如何在GA中设置转化跟踪。
人们落在/ app#/ thankyou上,因此这意味着我可以将GA中的URL / app / thankyou设置为目标。
As GA sees landing on /app/thankyou as a 页面预览.
还是我想简单? GTM总是如此。
再次感谢。
最好的祝福
是的,你是对的。
你好朱利叶斯,
对不起,我迟来了。
它的工作感谢!
我们唯一遇到的问题是,在1.3倍的情况下,转换似乎已经触发。
太多次了,很难弄清为什么会这样。
您以前有经历过吗?
谢谢!
最好的祝福,
布拉姆
感谢您的有用文章。
我的网站上有一个关于我的问题的问题。
Since the 页面预览 uses a custom event trigger, can I use the same trigger 至 fire my Google Ads conversion tracking tag? or is it require another trigger 至 fire my tag?
您可以将多个标签添加到同一触发器。
非常感谢您提供有关GTM的详细文章和系列文章。这是非常有帮助的。
我正在尝试在Angular SPA上设置GTM。我是开发人员。我尝试了两种设置,一种仅基于历史记录,另一种则满足开发人员的需求。当我处于启用调试器的GTM预览模式下时,我看到了GA在两种解决方案中的成功之处,而且每次导航中都看到一个网络调用collect.js。但是,当我尝试在没有GTM预览模式的情况下浏览SPA时,我对GA的搜索没有任何影响。知道我会缺少什么吗?
谢谢!
你好朱利叶斯,
非常感谢您的这篇文章,像往常一样非常有用!
我正在SPA网站上工作,但需要等待页面完全加载后才能触发代码。由于无法使用“页面视图-窗口加载”触发器,该怎么办?
我通常在数据层中的每个“页面”(“ screen_load”)上都有一个自定义事件,但通常无法使用该事件,但该事件使我无法等待页面的全部费用。
请你帮忙