Как Google Analytics собирает свои данные? - PullRequest
24 голосов
/ 21 мая 2009

Да, я знаю, что вы должны встроить JavaScript-аналитику Google на свою страницу.

Но как собранная информация отправляется на сервер аналитики Google?

Например, запрос AJAX будет невозможен из-за настроек безопасности браузера (междоменный сценарий).

Может быть, кто-то уже посмотрел на запутанный код JavaScript Google?

Ответы [ 8 ]

26 голосов
/ 21 мая 2009

Когда html-страница запрашивает файл ga.js, протокол http отправляет большой объем данных об IP, ссылке, браузерах, языке, системе. Нет необходимости использовать ajax.

Но все же некоторые данные не могут быть получены таким способом, поэтому скрипт GA помещает изображение в html с дополнительными параметрами, взгляните на этот пример:

<a href="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" rel="noreferrer">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</a> title&utmhid=1805038256&utmr=0&utmp=/&utmac=cookie value

Это чистое изображение, иногда называемое отслеживающим пикселем , которое GA вставляет в HTML.

8 голосов
/ 17 ноября 2015

Здесь есть несколько хороших ответов, которые по отдельности имеют тенденцию использовать тот или иной метод для отправки данных. В приведенных выше ответах есть ценная ссылка, которая, как мне кажется, отсутствует, и охватывает все методы.

Google ссылается на различные методы отправки данных «транспортные механизмы»

Из документации Analytics.js Google упоминает о трех основных транспортных механизмах , которые используются для отправки данных.

Указывает транспортный механизм, с помощью которого будут отправляться попадания. Возможные варианты: «маяк», «xhr» или «изображение». По умолчанию analytics.js будет пытаться определить лучший метод на основе размера попадания и возможностей браузера. Если вы укажете «маяк», а браузер пользователя не будет поддерживать метод navigator.sendBeacon, он вернется к «изображению» или «xhr» в зависимости от размера попадания.

  1. Одним из распространенных и стандартных способов отправки некоторых данных в Google (что показано в ответе Thinker) является добавление данных в качестве параметров GET в пиксель отслеживания. Это подпадает под категорию, которую Google называет «имиджевым» транспортом.
  2. Во-вторых, Google может использовать метод транспорта «маяк», если браузер клиента поддерживает его. Это часто мой предпочтительный метод, потому что он попытается отправить информацию немедленно. Или в словах 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 голосов
/ 07 апреля 2011

Веб-страница Google Analytics предоставляет подробную информацию о том, как сервер Google Analytics собирает данные. http://code.google.com/apis/analytics/docs/concepts/gaConceptsOverview.html

Все данные Google Analytics собираются и упаковываются в строку запроса URL-адреса запроса и отправляются на сервер Google Analytics. Запрос http выполняется с помощью изображения gif (http://www.google -analytics.com / __ utm.gif), активированного Google Analytics JS.

6 голосов
/ 21 мая 2009

Не глядя на код, я предполагаю, что их данные собираются из заголовков HTTP, которые они получают в асинхронном запросе.

Помните, что большинство браузеров отправляют данные, такие как ОС, платформа, браузер, версия, локаль и т. Д. Кроме того, у них есть IP-адрес, чтобы они могли угадать ваше местоположение. И я предполагаю, что у них есть какой-то умный алгоритм, чтобы решить, являетесь ли вы уникальным посетителем или нет.

Время на сайте, вероятно, рассчитывается с использованием события onUnload().

4 голосов
/ 21 мая 2009

Достаточно просто сказать, используя что-то вроде вкладки Net в Firebug.

Ajax не нужен - поскольку данные не извлекаются из Google. Они просто кодируют информацию в строке запроса, а затем загружают прозрачный GIF, используя ее.

2 голосов
/ 21 марта 2012

Чтобы развернуть другие очень хорошие ответы, Google предоставляет API для отслеживания асинхронных "виртуальных просмотров страниц", о которых сами авторы веб-сайтов сообщают в своих скриптах в Google.

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

Они предоставляют его, чтобы можно было отслеживать действия, которые не являются частью обычных просмотров страниц и запросов http.

Руководство по асинхронному отслеживанию: http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#Syntax

1 голос
/ 21 мая 2009

Используйте расширение httpfox или firebug Firefox, чтобы выяснить, какие HTTP-запросы отправляет браузер и какие ответы он получает.

Я не знаю, как работает Google Analytics, но одна из возможностей - заставить браузер загрузить изображение: <img src="http://my-analytics.com" width="1" height="1"> (с одним прозрачным пикселем) и записать все заголовки HTTP-запроса (например, Referer:) на стороне сервера.

0 голосов
/ 21 мая 2009

// редактировать: см. Комментарий внизу

* Хорошо, найдите ответ во время обсуждения с моим другом :-) Информация в Google Analytics предоставляется тремя способами:

  1. Элемент списка
  2. Запрос HTTP может быть проанализирован со всей информацией заголовков http.
  3. Файл cookie распознается сервером Google Analytics.
  4. В встроенном javascript выполняется вызов ajax для отправки такой информации, как разрешение экрана, версия флэш-плеера и т. Д. Эта информация не передается через заголовки http. * Это возможно, потому что вызов ajax выполняется в контексте встроенного javascript, поэтому в нем нет междоменных сценариев. Это была ошибка в моих рассуждениях. **
...