代码之家  ›  专栏  ›  技术社区  ›  echox Petter Nordlander

谷歌分析公司是如何收集数据的?

  •  24
  • echox Petter Nordlander  · 技术社区  · 17 年前

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

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

    例如,由于浏览器的安全设置(跨域脚本),Ajax请求将不可能实现。

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

    8 回复  |  直到 10 年前
        1
  •  26
  •   user456584 Clayton Selby    12 年前

    当HTML页面请求GA.JS文件时,HTTP协议会发送大量关于IP、refer、browers、language、system的数据。不需要使用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。

        2
  •  8
  •   jstats    10 年前

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

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

    从analytics.js文档中,google提到 three main transport mechanisms 它用来发送数据。

    这将指定发送命中的传输机制。选项包括“beacon”、“xhr”或“image”。默认情况下,analytics.js将尝试根据点击量和浏览器功能找出最佳方法。如果您指定了“Beacon”,并且用户的浏览器不支持 navigator.sendBeacon 方法,它将根据命中大小返回到“image”或“xhr”。

    1. 将一些数据发送到谷歌(如Thinker的答案所示)的一种常见和标准方法是将数据作为获取参数添加到跟踪像素。这属于谷歌称之为“图像”传输的范畴。
    2. 其次,如果客户的浏览器支持,谷歌可以使用“信标”传输方法。这通常是我的首选方法,因为它将尝试立即发送信息。或者用谷歌的话说:

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

    1. “xhr”传输机制是Google Analytics将数据发送回家的第三种方式,使用的特定传输机制可能取决于诸如命中大小之类的内容。(我不确定遗传算法中还有哪些因素决定了要使用的最佳传输机制)

    如果您想知道如何强制GA使用特定的传输机制,下面是一个示例代码片段,它强制将此事件命中作为“信标”发送:

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

    希望这有帮助。


    此外,如果您对这个主题很好奇,因为您也希望捕获这些数据并将其发送到您自己的站点,我建议您创建一个绑定到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);
           });
        });
    
        3
  •  6
  •   Yuval Adam    17 年前

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

    请记住,大多数浏览器发送数据,如操作系统、平台、浏览器、版本、区域设置等…他们也有IP,所以他们可以猜测你的位置。我假设他们有一些聪明的算法来决定你是否是一个独特的访客。

    站点上的时间可能是通过使用 onUnload() 事件。

        4
  •  6
  •   Is Learning English    15 年前

    谷歌分析网页提供了谷歌分析服务器如何收集数据的详细信息。 http://code.google.com/apis/analytics/docs/concepts/gaConceptsOverview.html

    所有谷歌分析数据都会被收集并打包到请求URL的查询字符串中,然后发送到谷歌分析服务器。HTTP请求由Google Analytics JS激活的GIF图像(http://www.google-analytics.com//uutm.gif)发出。

        5
  •  4
  •   Quentin    17 年前

    使用Firebug的网络标签很容易就能分辨出来。

    不需要Ajax——因为数据不是从Google中提取的。他们只是将信息编码成一个查询字符串,然后使用它加载一个透明的GIF。

        6
  •  2
  •   miguelr    14 年前

    为了扩展其他很好的答案,Google提供了一个API来跟踪异步“虚拟页面视图”,网站作者在他们的脚本中向Google报告了这些视图。

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

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

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

        7
  •  1
  •   pts    17 年前

    使用 HTTPFox 或 萤火虫 firefox扩展,了解浏览器发送的HTTP请求和收到的响应。

    我不知道谷歌分析是如何工作的,但有一种可能是让浏览器下载图片: <img src="http://my-analytics.com" width="1" height="1"> (使用单个透明像素),并记录所有HTTP请求头(例如 Referer: )在服务器端。

        8
  •  -1
  •   Zabba fl00r    15 年前

    //编辑:参见底部的coment

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

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