google-analytics - 包含 # 的超链接的 Google Analytics(分析)跨域测量问题
问题描述
我发现 Google Analytics 存在一些问题,以及它将 GA id 插入跨域测量链接的方式。我可以使用 Google 跟踪代码管理器重现这一点,也可以通过直接加载 GA 脚本来重现这一点。代码在这里:
<html>
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date(); a = s.createElement(o),
m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-111111111-1', 'test.com');
ga('require', 'displayfeatures');
// Load the cross-domain linker plugin.
ga('require', 'linker');
// Define which domains to autoLink.
ga('linker:autoLink', ['test-domain.net']);
ga('send', 'pageview');
</script>
<body>
<a href='http://test-domain.net/#/test-domain/site.html&clicker=true'>Click me</a>
</body>
</html>
我希望 url 的输出是:
http://test-domain.net/#/test-domain/site.html?clicker=true&_ga=2.115223111.1566745105.1588030631-1078940747.1588030631
然而,这样做的结果实际上是
http://test-domain.net/&_ga=2.115223111.1566745105.1588030631-1078940747.1588030631#/test-domain/site.html?clicker=true
只需删除 href 中的哈希,链接看起来就像这样。
http://test-domain.net/test-domain/site.html?clicker=true&_ga=2.81275223.1566745105.1588030631-1078940747.1588030631
如此处所示,这很容易在 JSFiddle 中复制。https://jsfiddle.net/andrewmacnaughton/xa3yp876/1/
我确实意识到我下面的内容可能是使用 GA Cross Domain 的过时版本,但是我通过 GTM 收到完全相同的内容。有没有人在这里有任何想法。我们在将其投入生产时停滞不前,因为我们确信 1:URL 很丑,2 最重要的是:不相信 GA 会正确跟踪事物,因为它看起来像一个无效的 URL。
解决方案
如果有人最终来到这里,我设法解决了这个问题。我没有让 Google 自动将 GA 代码附加到链接中,而是不得不手动装饰它。
<body>
<a id='test' href='http://test-domain.net/test-sss/#/site.html?click=true'>Click me</a>
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date(); a = s.createElement(o),
m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-111111111-1', 'auto');
ga('require', 'displayfeatures');
// Load the cross-domain linker plugin.
ga('require', 'linker');
// Define which domains to autoLink.
// Adds click handler that decorates `destinationLink`.
var destinationLink = document.getElementById('test')
destinationLink.addEventListener('click', function () {
ga(function (tracker) {
var linkerParam = tracker.get('linkerParam');
var uri = buildUrl(destinationLink.getAttribute('href'), linkerParam)
destinationLink.setAttribute('href',uri)
});
});
function buildUrl(baseURL,linkerParam){
return baseURL.indexOf('?')>-1 ? baseURL + '&' + linkerParam : baseURL + '?' + linkerParam
}
</script>
</body>
推荐阅读
- java - 如果存在 task.city,则执行 DDL 更改表时出错
- javascript - 如何在反应中更改 pdf 的高度或宽度(npm react-pdf)
- sql - SQL仅在值与所有先前值不同时获取行号
- javascript - 5天预测在改变城市时不断增加天数
- python - 阻止 selenium/itertools 跳过从 Excel 电子表格输入的行
- matlab - 如何使用 plot3 绘制 3D 矩阵
- django - 如何修复在 Django Rest Framework 中使用 REST API 登录时出现的 CSRF 错误?
- mysql - 线程中未处理的异常由
.wrapper 在 0x10e2d62f0> - ios - iOS WidgetKit:如何显示相册中的图片
- javascript - 如何在 Reactjs 中调用组件?