25

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

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

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

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

4

8 回答 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的空白图像,有时称为跟踪像素。

于 2009-05-21T09:26:20.373 回答
9

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

谷歌提到了发送数据的不同方法“传输机制”

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

这指定了发送命中的传输机制。选项是“信标”、“xhr”或“图像”。默认情况下,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'});

希望这可以帮助。


另外,如果您对这个主题感到好奇,因为您也想捕获这些数据并将其发送到您自己的站点,我建议您创建一个到 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);
       });
    });
于 2015-11-17T16:38:25.947 回答
6

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

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

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

于 2009-05-21T09:24:47.397 回答
5

谷歌分析网页提供了谷歌分析服务器如何收集数据的详细信息。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)发出。

于 2011-04-07T05:53:17.737 回答
4

使用 Firebug 的 Net 选项卡之类的东西很容易分辨。

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

于 2009-05-21T09:24:18.753 回答
2

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

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

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

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

于 2012-03-21T09:39:11.273 回答
1

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

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

于 2009-05-21T09:23:24.513 回答
-1

//编辑:见底部的评论

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

  1. 项目清单
  2. 可以使用 http 标头的所有信息来分析 HTTP 请求。
  3. cookie 被谷歌分析服务器识别。
  4. ajax 调用在嵌入的 javascript 中完成,以提交显示分辨率、flash 播放器版本等信息。 这些信息不通过 h​​ttp 标头传输。 *这是可能的,因为 ajax 调用是在嵌入的 javascript 的上下文中完成的,所以它没有跨域脚本。这是我的推理错误。**
于 2009-05-21T09:49:28.330 回答