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

时间:2009-05-21 09:20:45

标签: javascript google-analytics tracking

是的,我知道你必须将google analytics javascript嵌入你的页面。

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

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

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

8 个答案:

答案 0 :(得分: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

这是一张空白图片,有时称为tracking pixel,GA放入HTML。

答案 1 :(得分:8)

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

Google指的是发送数据和传输机制的不同方法'

在Analytics.js文档中,Google提到了用于发送数据的three main transport mechanisms

  

这指定了将发送命中的传输机制。选项包括:beacon',' xhr'或' image'。默认情况下,analytics.js将尝试根据命中大小和浏览器功能找出最佳方法。如果您指定“beacon”#39;并且用户的浏览器不支持navigator.sendBeacon方法,它将回退到'图像'或者' xhr'取决于命中大小。

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

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

    1. ' xhr'传输机制是Google Analytics可以将数据发送回家的第三种方式,使用的特定传输机制可能取决于命中大小等内容。 (我不确定GA决定使用的最佳传输机制还有哪些其他因素)
    2. 如果您对如何强制GA使用特定的传输机制感到好奇,下面是一个示例代码段,它强制将此事件命中作为“信标”发送:

      ga('send', 'event', 'click', 'download-me', {transport: 'beacon'});
      

      希望这会有所帮助。

      此外,如果您对此主题感到好奇,因为您也希望将此数据捕获并发送到您自己的网站,我建议您创建一个绑定到Google Analytics'发送,允许您获取有效负载和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);
             });
          });
      

答案 2 :(得分:6)

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

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

网站上的时间可能是使用onUnload()事件计算的。

答案 3 :(得分: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)制作。

答案 4 :(得分:4)

通过使用像Firebug的Net标签这样的东西很容易判断。

不需要Ajax - 因为没有从Google获取数据。他们只是在查询字符串中编码信息,然后使用它加载透明的gif。

答案 5 :(得分:2)

为了扩展其他非常好的答案,Google确实提供了一个API来跟踪网站作者自己在脚本中向Google报告的异步“虚拟网页浏览量”。

_gaq.push(['_trackPageview', 'my_unique_action']);

他们提供它,因此可以跟踪不属于常规页面视图和http请求的操作。

异步跟踪指南: http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#Syntax

答案 6 :(得分:1)

使用 httpfox firebug Firefox扩展程序来确定浏览器发送的HTTP请求以及它收到的响应。

我不知道Google Analytics的工作原理,但有一种可能性是让浏览器下载图像:<img src="http://my-analytics.com" width="1" height="1">(带有单个透明像素),并记录所有HTTP请求标头(例如{{ 1}})在服务器端。

答案 7 :(得分:-1)

//编辑:见底部的咒语

*好的,在与我的一个朋友讨论时找到答案:-) 谷歌分析的信息以三种方式提交:

  1. 列表项
  2. 可以使用http标头的所有信息分析HTTP请求。
  3. 谷歌分析服务器识别cookie。
  4. ajax调用是在嵌入式javascript中完成的,用于提交显示分辨率,Flash播放器版本等信息。 这些信息不会通过http标头传输。 *这是可能的,因为ajax调用是在嵌入式javascript的上下文中完成的,因此它没有跨域脚本。这是我的推理错误。**