如何从URL中删除_ga查询字符串

时间:2014-07-30 11:56:10

标签: google-analytics

我有一个多域网站,其中有GA跟踪。最近我们转到Universal Analytics并注意到每当域名发生变化时(从美国到韩国/日本),都会在网址上附加_ga = [随机数]

即。来自

  

abc.com

当我点击日语网站时,网址变为

  

japanese.abc.com /?_ GA = 1.3892897.20937502.9237834

  • 为什么会这样?
  • 如何删除网址的_ga部分?

感谢您的帮助。

8 个答案:

答案 0 :(得分:24)

这是跨域跟踪所必需的(即跟踪跨域边界作为一个访问者而不是每个域的一个访问者的人)。如果您想要跨域跟踪,则无法将其删除。 _ga - part是标识会话的客户端ID,因为它不能通过cookie(特定于域)共享,所以当域发生变化时,必须通过url传递它。

由于有人设置您的网站进行跨域跟踪,我猜您实际上想要这个(默认情况下不会发生)。该参数是使用Universal Analytics进行跨域跟踪的必要副作用。如果您确实想要查看linker functions mentioned in the documentation中的任何一个的跟踪代码,请将其删除。

已更新,以回答评论中的问题。

  1. 有没有办法删除_ga字符串并仍然有十字架 域名设施?

    不,目前没有。浏览器供应商致力于更好的交叉方式 域通信因此未来可能会有某些东西,但是 目前参数是最佳方式。

  2. 此外,如果某个用户随机更改_ga值并按下该怎么办? 输入? GA如何记录?

    如果用户碰巧创建之前使用过的客户端ID (高度不太可能)他的访问将归于另一个用户。 实际上,Google Analytics只会将他记录为新用户。

  3. <强>更新

    对于那些喜欢玩的人,我做了proof of concept for cross domain tracking without the _ga parameter。这些方面的东西可以进一步发展,因为它不适合生产使用。

    更新:David Vallejo has a Javascript solution where the _ga parameter is removed via the history API(因此,当它仍然添加时,它适用于最终用户不可见的所有意图和目的)。这是Michael Hampton在下面的答案的更精细版本。

答案 1 :(得分:2)

您无法阻止Google添加代码,但您可以告诉Google Analytics在报告中忽略它。感谢Russ Henneberry:http://blog.crazyegg.com/2013/03/29/remove-url-parameters-from-google-analytics-reports/

它是在Universal发布之前编写的,因此语言已经过时 - 现在您创建了一个新的“视图”(而不是“个人资料”)。创建新视图可确保您在默认视图中仍然拥有原始数据(以防万一您需要),因此它确实是最佳解决方案(请记住,您无法在G Ax中追溯应用新设置) 。祝你好运!

答案 2 :(得分:2)

当我们在两个域名之间拆分网站时,我被要求删除此标记。使用Apache重写规则:

RewriteCond %{QUERY_STRING} _ga
RewriteRule ^(.*)$ $1? [R=301,NC,L]

这会删除标记,但无法将_ga参数传递给Google Analytics。 如果用户不介意短暂刷新,则将此代码添加到每个页面

<?php
list($url, $qs)  = preg_split('/\?/',$_SERVER['REQUEST_URI']);
if (preg_match('/_ga=/', $qs) )  header( "refresh:1;url=${url}" );
?>

会在一秒钟后刷新,删除查询字符串,但允许进行Google Analytics操作。这意味着,当您的用户为您的网址添加书签或复制时,麻烦的_ga内容早已不复存在。

上面的代码将丢弃任何查询字符串。这个版本将删除'_ga'参数。

$urlA = parse_url($_SERVER['REQUEST_URI']);
$qs = $urlA['query'];
if (preg_match('/_ga=/',$qs)) {
   $url = $urlA['path'];
   $newargs = array();
   $QSA = preg_split('/\&/',$qs);
   foreach ($QSA as $e) {
      list($arg,$val) = preg_split('/\=/',$e);
      if ($arg == '_ga') continue; # get rid of this one
      $newargs[$arg] = $val;
   }
   $nqs = http_build_query($newargs);
   header( "refresh:1;url=${url}?${nqs}" );
}

答案 3 :(得分:1)

我正在使用HTML5 history.replaceState()在浏览器的地址栏中隐藏GA查询字符串。

这要求我构建一个删除_ga=值的新网址(您可以用自己喜欢的语言执行此操作)然后只需调用它。

这只会改变地址栏中的URL(以及浏览器的历史记录中的URL)。 Google Analytics(分析)仍会通过查询字符串获取传入的信息,因此您的跟踪仍然有效。

我在Go html / template中执行此操作:

{{if .URL.RawQuery}}
<script>
window.history.replaceState({}, document.title, '{{.ReplacedURL}}');
</script>
{{end}}

答案 4 :(得分:1)

您无法从网站上的网址中删除_ga参数...但您可以使用Google Analytics中的高级过滤器从报告中删除查询参数!

像这样:

1)字段A:请求URI

模式:^(。+)\?_ ga

2)领域B:不需要

3)输出到 - >构造函数

字段:请求URI

模式:$ A1

当_ga是显示的第一个参数时,此过滤器将剥离所有查询参数。使用正则表达式可以获得更多的优势,但这种方法适用于大多数网站。

答案 5 :(得分:0)

查看此页面:https://support.google.com/tagmanager/answer/6107124?hl=en &安培;搜索&#34;使用哈希作为分隔符&#34;

将此值设置为true允许您通过哈希标记而不是通过查询参数

传递值

应该解决它

答案 6 :(得分:0)

处理此问题的一种方法是使用 history.replaceState Javascript 函数在页面加载完成且 Google Analytics 完成其操作后从 URL 中删除查询字符串。但是,如果您过早将其删除,则会影响 GA 功能(一个访问者将显示为多个访问者)。我发现以下 Javascript(延迟 3 秒)

<script defer src="data:text/javascript,async function main() {await new Promise(r => setTimeout(r, 3000));window.history.replaceState({}, document.title, window.location.pathname);}main();"></script>

为了方便起见,我使用了“window.location.pathname”,以便您可以在多个页面上使用相同的脚本。但是,您也可以这样做(对于网站的首页):

<script defer src="data:text/javascript,async function main() {await new Promise(r => setTimeout(r, 3000));window.history.replaceState({}, document.title, '/');}main();"></script>

或者对于子页面:

<script defer src="data:text/javascript,async function main() {await new Promise(r => setTimeout(r, 3000));window.history.replaceState({}, document.title, '/something/something.html');}main();"></script>

我做了“data:text/javascript”而不是真正的内嵌脚本,所以我可以对它应用“defer”,尽管如果您使用足够长的延迟值,这可能不是必需的。

答案 7 :(得分:-1)

您可以过滤掉Google Analytics中的所有(或仅包含)“?_ga =”参数以进行报告。我还强烈建议在基本网址中添加规范 - 或者将参数添加到Google网站站长工具中 - 以避免重复内容。