Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does google analytics collect its data?

Tags:

Yes, I know you have to embed the google analytics javascript into your page.

But how is the collected information submitted to the google analytics server?

For example an AJAX request will not be possible because of the browsers security settings (cross domain scripting).

Maybe someone had already a look at the confusing google javascript code?

like image 291
echox Avatar asked May 21 '09 09:05

echox


People also ask

What type of data is collected by Google Analytics?

Google Analytics collects the following information through the default implementation: Number of users. Session statistics. Approximate geolocation.

What are 3 examples of data Google Analytics can collect?

At its most basic, it will collect: Time of visit, pages visited, and time spent on each page of the webpages. Referring site details (such as the URI a user came through to arrive at this site) Type of web browser.

Does Google Analytics collect device data?

Mobile Device Usage in Google AnalyticsGoogle Analytics can be a quick and free way to measure screen resolutions, devices, and the browsers your site's visitors are often using. To see what percentage of your users are on mobile devices open up the Audience tab, and select Mobile and Overview.

What does the Google Analytics tracking code collect?

Every time a user visits a webpage, the tracking code will collect anonymous information about how that user interacted with the page. For the Google Store, the measurement code could show how many users visited a page that sells drinkware versus a page that sells houseware.


2 Answers

When html page makes a request for a ga.js file the http protocol sends big amount of data, about IP, refer, browers, language, system. There is no need to use ajax.

But still some data cant be achieved this way, so GA script puts image into html with additional parameters, take a look at this example:

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

This is a blank image, sometimes called a tracking pixel, that GA puts into HTML.

like image 77
Thinker Avatar answered Nov 04 '22 17:11

Thinker


Some good answers here which individually tend to hit on one method or another for sending the data. There's a valuable reference which I feel is missing from the above answers, though, and covers all the methods.

Google refers to the different methods of sending data 'transport mechanisms'

From the Analytics.js documentation Google mentions the three main transport mechanisms that it uses to send data.

This specifies the transport mechanism with which hits will be sent. The options are 'beacon', 'xhr', or 'image'. By default, analytics.js will try to figure out the best method based on the hit size and browser capabilities. If you specify 'beacon' and the user's browser does not support the navigator.sendBeacon method, it will fall back to 'image' or 'xhr' depending on hit size.

  1. One of the common and standard ways to send some of the data to Google (which is shown in Thinker's answer) is by adding the data as GET parameters to a tracking pixel. This would fall under the category which Google calls an 'image' transport.
  2. Secondly, Google can use the 'beacon' transport method if the client's browser supports it. This is often my preferred method because it will attempt to send the information immediately. Or in Google's words:

This is useful in cases where you wish to track an event just before a user navigates away from your site, without delaying the navigation.

  1. The 'xhr' transport mechanism is the third way that Google Analytics can send data back home, and the particular transport mechanism that is used can depend on things such as the size of the hit. (I'm not sure what other factors go into GA deciding the optimal transport mechanism to use)

In case you are curious how to force GA into using a specific transport mechanism, here is a sample code snippet which forces this event hit to be sent as a 'beacon':

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

Hope this helps.


Also, if you are curious about this topic because you'd like to capture and send this data to your own site too, I recommend creating a binding to Google Analytics' send, which allows you to grab the payload and AJAX it to your own server.

    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);        });     }); 
like image 35
jstats Avatar answered Nov 04 '22 16:11

jstats