Universal Analytics trae consigo su nueva libreria analytics.js y con ella una nueva forma de configurar la analítica web de nuestras páginas.
En el caso del tracking entre dominios la problemática es la misma a la que ya nos enfrentábamos antes pero la solución es distinta, en cierta manera, un poco más compleja, pero sin duda mucho más flexible y potente.
Recordemos: Cuando intentamos medir el comportamiento de un visitante entre dos dominios de primer nivel (www.dominioa.com y www.dominiob.com) debemos tener presente que la Cookie (llamada _ga) donde Google Analytics guarda el identificativo asociado a la sesión del usuario no puede compartirse. Esto es una consecuencia directa de la naturaleza del protocolo http que impide que se compartan cookies entre diferentes dominios. Esto podemos extrapolarlo también al medio off-line ya que con una configuración analítica correcta podríamos medir procesos de conversión desde el medio off-line al on-line.
La solución a esta problemática pasa porque nosotros enviemos de manera manual el valor de la cookie de un dominio a otro, para ello utilizaremos la propia URL como canal de comunicación, añadiendo a todos los links que vayan de un dominio a otro esta información.
De esta manera Google Analytics podrá saber que el visitante que entra a www.dominioB.com es el mismo que anteriormente estuvo navegando por el www.dominioA.com. El cross-domain tracking es indispensable para medir de manera global la navegación de los usuarios entre una web y una tienda, o en cualquier otro tipo de webs que a pesar de contar con dominios diferentes pertenecen a un mismo proceso de conversión.
Entrando en código
La configuración analítica para realizar un tracking entre dominios correcto requiere de una implementación técnica. Usted como analista puede delegar esta labor a un programador, pero nunca debería abstraerse de esta problemática y debería saber comunicar de manera clara y concisa qué hacer.
Universal analytics nos ofrece el método decorate que nos permite añadir a cualquier enlace el id del visitante. Además añada un hash que tiene una caducidad de 2 minutos. ¿Para qué sirve este hash? Imagine que alguien guarda en sus favoritos una URL decorada con analytics y la comparte. Cualquier persona que accediera a través de este link sería reconocida como el visitante original. Para evitar este problema se añade este hash que hace que el link caduque a los dos minutos:
ga(function(tracker) {
var linker = new window.gaplugins.Linker(tracker);
var output = linker.decorate('//destination.com');
});
Ahora bien, si los links caducan a los dos minutos, a un usuario que estuviera entretenido en nuestra página más de ese tiempo, también se le caducarían. Por lo tanto es necesario refrescar automáticamente los enlaces decorados. ¿Sigue ahí o esto ya ha sido demasiado para usted?
Seguimos, la forma más eficiente de actualizar los links es hacerlo cuando el usuario pulse el ratón o el teclado. Me estoy refiriendo a los eventos mousedown y keydown. (No confundir con el evento click), de esta manera conseguiremos dos cosas:
- Que los enlaces no caduquen.
- Que la sesión se pase tanto si el usuario hace click en un link como si lo abre en una nueva ventana (botón derecho + nueva ventana).
Por ejemplo para un enlace como este:
Enlace al dominio B
El código podría ser algo como este:
var linker;
var myLink = document.getElementById('myLink'); // Add event listeners to link.
addListener(myLink, 'mousedown', decorateMe);
addListener(myLink, 'keydown', decorateMe);
function decorateMe(event) {
event = event || window.event; // Cross browser hoops.
var target = event.target || event.srcElement;
if (target && target.href) { // Ensure this is a link.
ga(function(tracker) { // Only if ga is loaded.
window.linker = window.linker ||
new window.gaplugins.Linker(tracker); // Create linker object using default tracker.
target.href = window.linker.decorate(target.href); // Decorate the HTML link.
});
}
}
// Cross browser way to listen for events.
function addListener(element, type, callback) {
if (element.addEventListener) element.addEventListener(type, callback);
else if (element.attachEvent) element.attachEvent('on' + type, callback);
}
Importante: Antes de ejecutar este código deberíamos esperar a que se cargue por completo la página.
De esta manera nos aseguraremos que la sesión se mantendrá entre ambos dominios. Tan sólo nos quedaría ahora hacer dos cosas más:
1. Modificar el código de seguimiento activando en el métodos create la opción AllowLinker, que avisará a Google Analytics de que le estamos pasando el id de sesión en la URL:
ga('create', 'UA-XXXX-Y', {'allowLinker': true});
2. Añadir ambos dominios como self-referrals: Dentro de los configuración de la propiedad web deberemos incluir ambos dominios dentro de los self-referrals para que no sean consideradas como webs de referencia.
Y esto no es más que el principio, si cree haber entendido todo le animo a que lo aplique ya mismo en sus webs, porque ya se sabe que una cosa es la teoría y otra muy distinta la práctica.
Muy buena guía Iñaki.
Una cuestión, ¿por qué te has decantado por el método decorate? ¿Has probado linkerParam?
Saludos
Hola Ana,
Has probado a hacerlo con Tag Manager?
http://www.lunametrics.com/blog/2013/12/24/cross-domain-tracking-tag-manager/#sr=g&m=o&cp=or&ct=-tmc&st=(opu%20qspwjefe)&ts=1390922774
Ni decorate ni LinkerParam, más sencillo imposible.
Muy buen artículo Ignacio, aprovecho para plantearte una duda. Tenemos una web con muchos cursos de formación, la historia es que en cada una de esas URL, por ejemplo http://www.ejemplo.es/curso-prevencion se genera automáticamente otra URL que es idéntica que la anterior solo que lleva un código al final, es una URL que se crea automáticamente para ofrecerle al usuario que ha visitado la primera URL alguna oferta de ese curso concreto, sería tal que así http://www.ejemplo.es/curso-prevencion?códigoespecífico
Queremos ver como lograr que Analytics nos lo contabilice todo como una visita a la página principal, no por separado, ya que realmente es lo mismo. ¿Esto que comentas en este artículo valdría para ese caso? Gracias de antemano