dataLayer.push() 在锚点上触发时肯定会向 google 发送数据吗?
Will dataLayer.push() definitely send data to google when triggered on an anchor?
这似乎是一个简单的问题,但在我能找到的任何地方似乎都没有答案。
我正在编写一个 onClick
事件处理程序,它会在单击锚点时简单地调用 dataLayer.push()
。
dataLayer.push()
是同步操作吗?
是否一定会发送到 google 的 GET 请求,即使浏览器由于 link 被跟踪而卸载了请求页面?
有些浏览器显示连接被取消,有些显示连接成功。
我的问题是如果电脑速度慢,是否有可能在发送请求之前页面被卸载?
这就是为什么我假设 google 在关注 link 之后开始使用 eventCallback
属性 来重定向用户。
例如
https://developers.google.com/tag-manager/enhanced-ecommerce#product-clicks
此源代码不包含点击处理程序,但暗示 onClick
事件应停止传播并让 eventCallback
函数设置 document.location
.
但是,一旦您取消活动,所有信息都将消失。
这(在我看来)只是错误的做法。
例如
(CTRL 或 COMMAND)+ 单击在浏览器上打开一个新选项卡。这将不起作用,除非 onClick
事件处理程序允许继续进行。
依赖 eventCallback
还意味着,如果 google 脚本由于可能(但仍然不太可能)的众多原因之一而未加载,您的 link 不会加载工作。你的网站坏了。
因此,这为 onClick
事件处理程序留下了正确的方法来允许事件传播并且 return 为真。
这也意味着 dataLayer.push()
在发送 GET 请求后需要 return 才能正常工作。
代码示例:
注意:您将在混合环境中得到混合结果。
<a href="/somewhere-else">Link</a>
$(document).on('click', 'a', function(event) {
// Is dataLayer.push() guaranteed to fire a GET ?
// data set externally
dataLayer.push(data);
return true;
});
有没有人可以保证 GET 请求会被发送到 google 服务器?
google 开发人员是否在这里忘记了什么?
编辑:更新标题以与问题更相关。
datalayer.push 不会向 Google 发送任何内容。它将具有 key/value 对的对象推送到数据层数组。这可能包含一个事件,该事件又会触发一个标签。标签是否发送取决于标签的设置,而不是dataLayer.push.
因此,当您编写自己的点击处理程序时,您自己有责任确保您的代码确实被触发。
如果您使用 built-in 点击处理程序,您可以 configure a delay to make sure your tag has time to fire before the link redirects:
Since link clicks usually cause the browser to load a new page and
interrupt any pending HTTP request, you have the option to add a small
delay to allow tags fired by Tag Manager to execute properly before
redirecting to the next page. Checking the “Wait For Tags” option will
delay opening of links until all tags have fired or the specified
timeout has elapsed, whichever comes first.
您应该能够混合使用这两种方法(在点击时推送数据,但仍然使用 "native" link 事件的点击处理程序)。
You can also try to specify "beacon" as the transport method 在你的 Google Analytics 标签中,在支持这个的浏览器上(我认为目前只有 Chrome)GA 将使用 navigator.sendBeacon接口,即使页面卸载也会发送数据。
你可能会觉得Google的解决方案不是很优雅(但是简单的延迟有一个好处,它适用于所有标签,而不仅仅是GA),但他们没有"forgotten" 问题。
还有一些解决方案将 GA 命中回调与超时(如果回调失败则重定向,如 Simo Ahava 所提议的那样)也应该适用于 GTM,即使它们在 GA 中实施起来可能更麻烦。
这似乎是一个简单的问题,但在我能找到的任何地方似乎都没有答案。
我正在编写一个 onClick
事件处理程序,它会在单击锚点时简单地调用 dataLayer.push()
。
dataLayer.push()
是同步操作吗?
是否一定会发送到 google 的 GET 请求,即使浏览器由于 link 被跟踪而卸载了请求页面?
有些浏览器显示连接被取消,有些显示连接成功。
我的问题是如果电脑速度慢,是否有可能在发送请求之前页面被卸载?
这就是为什么我假设 google 在关注 link 之后开始使用 eventCallback
属性 来重定向用户。
例如
https://developers.google.com/tag-manager/enhanced-ecommerce#product-clicks
此源代码不包含点击处理程序,但暗示 onClick
事件应停止传播并让 eventCallback
函数设置 document.location
.
但是,一旦您取消活动,所有信息都将消失。
这(在我看来)只是错误的做法。
例如
(CTRL 或 COMMAND)+ 单击在浏览器上打开一个新选项卡。这将不起作用,除非 onClick
事件处理程序允许继续进行。
依赖 eventCallback
还意味着,如果 google 脚本由于可能(但仍然不太可能)的众多原因之一而未加载,您的 link 不会加载工作。你的网站坏了。
因此,这为 onClick
事件处理程序留下了正确的方法来允许事件传播并且 return 为真。
这也意味着 dataLayer.push()
在发送 GET 请求后需要 return 才能正常工作。
代码示例: 注意:您将在混合环境中得到混合结果。
<a href="/somewhere-else">Link</a>
$(document).on('click', 'a', function(event) {
// Is dataLayer.push() guaranteed to fire a GET ?
// data set externally
dataLayer.push(data);
return true;
});
有没有人可以保证 GET 请求会被发送到 google 服务器?
google 开发人员是否在这里忘记了什么?
编辑:更新标题以与问题更相关。
datalayer.push 不会向 Google 发送任何内容。它将具有 key/value 对的对象推送到数据层数组。这可能包含一个事件,该事件又会触发一个标签。标签是否发送取决于标签的设置,而不是dataLayer.push.
因此,当您编写自己的点击处理程序时,您自己有责任确保您的代码确实被触发。
如果您使用 built-in 点击处理程序,您可以 configure a delay to make sure your tag has time to fire before the link redirects:
Since link clicks usually cause the browser to load a new page and interrupt any pending HTTP request, you have the option to add a small delay to allow tags fired by Tag Manager to execute properly before redirecting to the next page. Checking the “Wait For Tags” option will delay opening of links until all tags have fired or the specified timeout has elapsed, whichever comes first.
您应该能够混合使用这两种方法(在点击时推送数据,但仍然使用 "native" link 事件的点击处理程序)。
You can also try to specify "beacon" as the transport method 在你的 Google Analytics 标签中,在支持这个的浏览器上(我认为目前只有 Chrome)GA 将使用 navigator.sendBeacon接口,即使页面卸载也会发送数据。
你可能会觉得Google的解决方案不是很优雅(但是简单的延迟有一个好处,它适用于所有标签,而不仅仅是GA),但他们没有"forgotten" 问题。
还有一些解决方案将 GA 命中回调与超时(如果回调失败则重定向,如 Simo Ahava 所提议的那样)也应该适用于 GTM,即使它们在 GA 中实施起来可能更麻烦。