谷歌分析如何收集其数据?

ech*_*hox 24 javascript tracking google-analytics

是的,我知道你必须将谷歌分析JavaScript嵌入你的页面.

但是如何将收集的信息提交给谷歌分析服务器?

例如,由于浏览器安全设置(跨域脚本编写),因此无法进行AJAX请求.

也许有人已经看过令人困惑的谷歌JavaScript代码?

Thi*_*ker 26

当html页面请求ga.js文件时,http协议会发送大量数据,包括IP,引用,浏览器,语言,系统.没有必要使用ajax.

但仍然有一些数据无法通过这种方式实现,因此GA脚本将图像放入带有其他参数的html中,请看一下这个例子:

http://www.google-analytics.com/__utm.gif?utmwv=4.3&utmn=1464271798&utmhn=www.example.com&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=10.0%20r22&utmdt=Page title&utmhid=1805038256&utmr=0&utmp=/&utmac=cookie value

这是GA放入HTML 的空白图像,有时称为跟踪像素.

  • 但谷歌分析收集了更多的数据,例如闪存版本等.它们不会与http标头一起发送. (3认同)
  • 它现在使用`http(s)://www.google-analytics.com/collect?...`(带有其他参数名称)来跟踪访问.我找不到有关新参数名称的文档. (2认同)

jst*_*ats 8

这里有一些好的答案,它们单独倾向于使用一种方法或另一种方法来发送数据.不过,我觉得上述答案中缺少一个有价值的参考资料,并涵盖了所有方法.

谷歌指的是发送数据"传输机制"的不同方法

从Analytics.js文档中,Google提到了它用于发送数据的三种主要传输机制.

这指定了将发送命中的传输机制.选项是'beacon','xhr'或'image'.默认情况下,analytics.js将尝试根据命中大小和浏览器功能找出最佳方法.如果您指定'beacon'并且用户的浏览器不支持该navigator.sendBeacon方法,则它将根据命中大小回退到'image'或'xhr'.

  1. 向Google发送一些数据的常见和标准方法之一(在Thinker的答案中显示)是将数据作为GET参数添加到跟踪像素.这将属于谷歌称之为"图像"传输的类别.
  2. 其次,如果客户端的浏览器支持,Google可以使用"信标"传输方法.这通常是我首选的方法,因为它会尝试立即发送信息.或者用谷歌的话说:

如果您希望在用户导航离开您的网站之前跟踪事件,而不延迟导航,则此功能非常有用.

  1. 'xhr'传输机制是Google Analytics可以将数据发送回家的第三种方式,使用的特定传输机制可能取决于命中大小等内容.(我不确定GA决定使用的最佳传输机制还有哪些其他因素)

如果你很好奇如何强制GA使用特定的传输机制,这里有一个示例代码片段,强制将此事件命中作为"信标"发送:

ga('send', 'event', 'click', 'download-me', {transport: 'beacon'});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


此外,如果您对此主题感到好奇,因为您也希望捕获这些数据并将其发送到您自己的网站,我建议您创建一个绑定到Google Analytics的send,这样您就可以获取有效负载并将其运行到您自己的AJAX中服务器.

    ga(function(tracker) {

       // Grab a reference to the default sendHitTask function.
       originalSendHitTask = tracker.get('sendHitTask');

       // Modifies sendHitTask to send a copy of the request to a local server after
       // sending the normal request to www.google-analytics.com/collect.
       tracker.set('sendHitTask', function(model) {
         var payload = model.get('hitPayload');
         originalSendHitTask(model);

         var xhr = new XMLHttpRequest();
         xhr.open('POST', '/index.php?task=mycollect', true);
         xhr.send(payload);
       });
    });
Run Code Online (Sandbox Code Playgroud)


Yuv*_*dam 6

在不查看代码的情况下,我假设他们的数据是从他们在异步请求中收到的HTTP头中收集的.

请记住,大多数浏览器都会发送操作系统,平台,浏览器,版本,区域设置等数据...而且他们确实拥有IP,因此他们可以猜测您的位置.我假设他们有一些聪明的算法来决定你是否是一个独特的访客.

网站上的时间可能是通过使用onUnload()事件来计算的.


小智 6

Google Analytics网页提供了有关Google Analytics服务器如何收集数据的详细信息.http://code.google.com/apis/analytics/docs/concepts/gaConceptsOverview.html

收集所有Google Analytics数据并将其打包到请求网址的查询字符串中,然后发送到Google Analytics服务器.http请求由Google Analytics JS激活的gif图片(http://www.google-analytics.com/__utm.gif)制作.