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

Posted

技术标签:

【中文标题】谷歌分析如何收集其数据?【英文标题】:How does google analytics collect its data? 【发布时间】:2010-10-27 21:10:58 【问题描述】:

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

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

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

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

【问题讨论】:

重复***.com/questions/414451/… 【参考方案1】:

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

但是还是有些数据不能这样实现,所以GA脚本把图片放到html中,加上参数,看看这个例子:

@987654321@ title&utmhid=1805038256&utmr=0&utmp=/&utmac=cookie value

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

【讨论】:

但是 google-analytics 收集了更多的数据,例如flash 版本等。它们不与 http 标头一起发送。 是的,但它是用ajax以外的方式完成的,我在帖子中添加了解释。 好的,我监督了 Flash 版本的 utmfl=10.0。谢谢你的解释。 它现在使用http(s)://www.google-analytics.com/collect?...(带有其他参数名称)来跟踪访问。我找不到有关新参数名称的文档。 基于事件触发器的数据怎么样。如何向 GA 发送这些信息?【参考方案2】:

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

Google 将不同的数据发送方法称为“传输机制”

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

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

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

这在您希望在用户离开您的网站之前跟踪事件而不延迟导航的情况下很有用。

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

如果您想知道如何强制 GA 使用特定的传输机制,这里有一个示例代码 sn-p,它强制将此事件命中作为“信标”发送:

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);
       );
    );

【讨论】:

【参考方案3】:

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

请记住,大多数浏览器都会发送诸如操作系统、平台、浏览器、版本、区域设置等数据......而且它们确实有 IP,因此它们可以猜测您的位置。而且我假设他们有某种聪明的算法来决定您是否是唯一访问者。

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

【讨论】:

关于 onUnload() 事件,这似乎证明了 GA 并没有这样做:groups.google.com/group/analytics-help-troubleshoot/… 另外,转到您的 GA 并检查平均访问时间为 1 次网页浏览 - 它是 0。 【参考方案4】:

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

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

【讨论】:

【参考方案5】:

使用 Firebug 的“网络”选项卡之类的东西很容易分辨。

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

【讨论】:

那不正确,查询字符串太短,无法包含这么多信息。只有一些唯一的 id 和关键字编码。【参考方案6】:

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

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

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

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

【讨论】:

【参考方案7】:

使用 httpfoxfirebug Firefox 扩展来确定浏览器发送的 HTTP 请求和接收的响应。

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

【讨论】:

【参考方案8】:

//编辑:见底部评论

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

    列表项 可以通过http头的所有信息来分析HTTP请求。 Google 分析服务器可以识别 Cookie。 在嵌入的 javascript 中进行 ajax 调用,以提交显示分辨率、Flash 播放器版本等信息。 这些信息不通过 h​​ttp 标头传输。 *这是可能的,因为 ajax 调用是在嵌入的 javascript 的上下文中完成的,所以它没有跨域脚本。这是我的推理错误。**

【讨论】:

仅仅因为文件位于他们的服务器上并不能神奇地赋予它向他们的服务器发出 XMLHttpRequest 的能力。

以上是关于谷歌分析如何收集其数据?的主要内容,如果未能解决你的问题,请参考以下文章

从drupal网站删除谷歌分析

网站统计中的数据收集原理及实现

网站数据统计分析之一:日志收集原理及其实现

006-网站统计中的数据收集原理及实现

如何从社交媒体获取数据以使用机器学习对其进行分析?

使用nginx lua实现网站统计中的数据收集