谷歌分析如何收集数据?

27

是的,我知道您必须将Google Analytics JavaScript嵌入您的页面。

但是,收集的信息如何提交到Google Analytics服务器?

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

也许有人已经看过令人困惑的Google JavaScript代码了吗?


Google Analytics是如何将数据发送回Google的? - Hortitude
8个回答

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中。

3
但是Google Analytics收集了更多的数据,例如Flash版本等,它们不会随HTTP标头一起发送。 - echox
是的,但它是通过其他方式完成的,我在帖子中添加了解释。 - Thinker
好的,我忽略了Flash版本的utmfl=10.0参数。 谢谢解释。 - echox
2
现在它使用 http(s)://www.google-analytics.com/collect?...(带有其他参数名称)来跟踪访问。我找不到关于新参数名称的文档。 - xOneca
基于事件触发的数据怎么样?GA如何接收这些信息? - darkace
为什么有些数据不能通过AJAX发送?显然,跟踪参数是使用JavaScript组合在一起的...为什么不能通过AJAX发送相同的参数?Google选择像素路线是出于效率考虑吗? - Jake Wilson

9

这里有一些好的答案,它们分别倾向于涉及发送数据的一种方法或另一种方法。然而,上述答案中缺少一个有价值的参考,它涵盖了所有的方法。

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

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

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

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

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

  1. “xhr”传输机制是Google Analytics可以将数据发送回家的第三种方式,使用的特定传输机制可能取决于诸如命中大小之类的事物。(我不确定GA决定使用最佳传输机制的其他因素是什么)

如果您想知道如何强制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);
       });
    });

6

不看代码,我猜他们收集数据是通过异步请求中收到的HTTP头。

请记住,大多数浏览器发送诸如操作系统、平台、浏览器版本、语言环境等数据...此外,他们也有IP地址,因此可以猜测您的位置。我认为他们有某种聪明的算法来决定您是否是独特的访问者。

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


1
关于onUnload()事件,这似乎证明GA不会执行该操作:http://groups.google.com/group/analytics-help-troubleshoot/browse_thread/thread/d142572ddf1fa9dd/38dd640f949e9890?pli=1此外,请前往您的GA并检查访问1个页面视图的平均时间 - 它为0秒。 - tpk

5
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)发起的。

4

使用类似于Firebug的网络选项卡就能够轻松判断。

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


这是不正确的,查询字符串太短无法包含那么多信息。只有一些唯一的ID和关键字被编码了。 - echox

2
为了补充其他非常好的答案,谷歌提供了一个API来跟踪异步“虚拟页面浏览量”,这些浏览量是由网站作者在他们的脚本中向谷歌自行报告的。
_gaq.push(['_trackPageview', 'my_unique_action']);

他们提供这个功能是为了能够跟踪不属于常规页面视图和http请求的操作。
异步跟踪指南: http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#Syntax

1
使用 httpfoxfirebug Firefox 扩展程序来查找浏览器发送和接收的 HTTP 请求。
我不知道 Google Analytics 如何工作,但其中一种可能是让浏览器下载一个图像:<img src="http://my-analytics.com" width="1" height="1">(只有一个透明像素),并在服务器端记录所有的 HTTP 请求头(例如 Referer:)。

-1

//编辑:请查看底部的评论

好的,我在与我的朋友讨论中找到了答案 :-) 提交到Google Analytics的信息有三种方式:

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

1
仅仅因为文件存储在他们的服务器上,并不能神奇地使其具有向他们的服务器发起XMLHttpRequest请求的能力。 - epascarello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接