David Vallejo - Web Analyst

Enviando eventos o páginas a todos los trackers de Google Analytics activos en una página

Web Analytics

A veres se puede dar el caso de que estemos utilizando una medición dual ( o incluso triple ) en nuestros sitios webs, o lo que es lo mismo envíando los datos a más de una cuenta de Google Analytics al mismo tiempo.

Por lo que nos interesa por ejemplo si estamos haciendo un seguimiento de enlaces salientes en nuestra web, estamos midiendo algunos elementos en Ajax o tal vez estemos modificando el bounce rate lanzando un evento de forma automática, que este evento se lance en todos los trackers que tengamos configurados en nuestro sitio web.

Se podría hacer haciendo un _trackEvent para cada nombre de forma manual que tengamos configurado,  pero si cambia por lo que sea puede haber algún problema. Por ello el API del JavaScript de Google Analytics nos ofrece algunos métodos de los que podemos hacer uso para hacerlo todo de forma automática sin tener que andar introduciendo los nombres de los trackers a mano.

Imaginemos que tenemos una implementación del tipo:


<script type="text/javascript">
var 
_gaq _gaq || [];
_gaq.push(['first._setAccount''UA-XXXXX-1']);
_gaq.push(['_trackPageview']);
_gaq.push(['second._setAccount''UA-XXXXX-2']);
_gaq.push(['_trackPageview']);

(function() {
var 
ga document.createElement('script'); ga.type 'text/javascript'ga.async true;
ga.src = ('https:' == document.location.protocol 'https://ssl' 'http://www') + '.google-analytics.com/ga.js';
var 
document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gas);
})();

</script> 

Y queremos enviar nuestros eventos a las 2 cuentas a la vez ( se podría crear una función para las páginas, los tracking sociales, o los tiempos de usuario si fuese necesario )

Para ello crearemos una función como la siguiente:


function globalEvent(catactlabvalinte) {
    var 
trackers _gat._getTrackers();
    var 
debug false;
    for (
0trackers.lengthi++) {
        if (
debug == true)
            
console.log('Sending an event to tracker named: ' _gat._getTrackers()[i]._getName() + ' with this UA: ' _gat._getTrackers()[i]._getAccount());
        
_gat._getTrackers()[i]._trackEvent(catactlabvalinte);
    }

De esta manera si pusiesemos un onclick en un enlace de la siguiente manera:

<a href="https://www.thyngster.com" onclick="globalEvent('Links','Outgoing','https://www.thyngster.com')">David Vallejo</a>

Se enviaría el mismo evento a todos los trackers de Google Analytics activos en la página, independientemente del nombre que tengan o de cuantos sean.
Hay que tener en cuenta que esto tan solo funcionará si ya está cargado totalmente el código de Google Analytics, si quisieramos enviar algo con nuestra función durante la carga de la página deberíamos utilizar _gaq.push para enviar nuestros evento a la cola de google analytics y que se ejecute cuando esté todo disponible.