繁体   English   中英

dataLayer.push()肯定会在锚点上触发时向谷歌发送数据吗?

[英]Will dataLayer.push() definitely send data to google when triggered on an anchor?

这可能看起来像一个简单的问题,但似乎没有任何我能找到的答案。

我正在编写一个onClick事件处理程序,只需在单击一个锚点时调用dataLayer.push()

dataLayer.push()是同步操作吗?

是否肯定会发送谷歌的GET请求,即使浏览器已经卸载了请求的页面,因为链接被跟踪?

一些浏览器显示连接被取消,一些显示它成功。

我的问题是,如果计算机速度慢,是否可以在发送请求之前卸载页面?

这就是为什么我假设谷歌开始使用eventCallback属性在链接被跟踪后重定向用户。 例如https://developers.google.com/tag-manager/enhanced-ecommerce#product-clicks

此源代码不包含单击处理程序,但暗示onClick事件应该停止传播并让eventCallback函数设置document.location

但是,一旦取消该活动,其所有信息都已消失。

这(在我看来)只是错误的做法。 例如(CTRL或COMMAND)+ Click在浏览器上打开一个新选项卡。 除非onClick事件处理程序允许prorogation继续,否则这将不起作用。

依赖eventCallback也意味着如果google scrips没有加载其中的一个原因(但仍然不太可能),你的链接不起作用。 而且你的网站坏了。

因此,这为onClick事件处理程序提供了正确的方法,以允许事件传播并返回true。

这也意味着dataLayer.push()需要在发送GET请求后才能返回,以使其中的任何一个正常工作。

代码示例:注意:您将在混合环境中获得混合结果。

<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请求将被解雇到谷歌服务器?

谷歌开发者忘记了什么吗?

编辑:更新标题与问题更相关。

datalayer.push不会向Google发送任何内容。 它将具有键/值对的对象推送到数据层阵列。 这可能包含一个事件,该事件反过来触发标记。 是否发送标签取决于标签的设置,而不是dataLayer.push。

因此,当您编写自己的点击处理程序时,您自己负责确保您的标记实际被触发。

如果您使用内置点击处理程序,则可以配置延迟以确保您的标记在链接重定向之前有时间触发

由于链接点击通常会导致浏览器加载新页面并中断任何挂起的HTTP请求,因此您可以选择添加一个小延迟,以允许Tag Manager在重定向到下一页之前正确执行标记。 选中“等待标记”选项将延迟链接的打开,直到所有标记都已触发或指定的超时已过,以先到者为准。

您应该能够混合使用这两种方法(在点击上推送数据,但仍然使用事件的“本机”链接点击处理程序)。

您还可以尝试在Google Analytics代码中指定“beacon”作为传输方法 ,在支持此功能的浏览器上(我认为目前只有Chrome)GA将使用navigator.sendBeacon接口,该接口甚至会发送数据以防页面卸载。

您可能认为Google的解决方案不是很优雅(但简单延迟的优势在于它适用于所有标签,而不仅仅适用于GA),但他们并没有“忘记”这个问题。

此外,如果回调失败,如果由Simo Ahava在某处提出,那么结合GA命中回调和重定向的重定向的解决方案应该是GTM可行的,即使它们在GA中实现可能更麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM