首页 > 解决方案 > 包含 # 的超链接的 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-analytics

解决方案


如果有人最终来到这里,我设法解决了这个问题。我没有让 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>

推荐阅读