Esta guía describe cómo medir eventos en múltiples dominios usando analytics.js.
Descripción general
La biblioteca analytics.js utiliza un ID de cliente único para determinar si un usuario es nuevo o recurrente. Se considera que un usuario regresa si ya se envió un hit con un ID de cliente coincidente a la misma propiedad.
De forma predeterminada, la identificación del cliente se almacena en las cookies del navegador, lo que significa que solo las páginas del mismo dominio pueden acceder a él. Para realizar un seguimiento del mismo ID de cliente para un usuario determinado en diferentes dominios, utilice el seguimiento entre dominios.
Para compartir un ID de cliente entre dominios, puede agregarlo como un parámetro de consulta a las URL que apuntan desde el dominio actual (el dominio de origen) al dominio de destino que desea medir. Cuando un usuario hace clic en un vínculo o envía un formulario en el dominio de origen y navega hasta el dominio de destino, el código de la página de destino puede acceder al ID del cliente leyéndolo desde la URL.
Obtener el ID de cliente en el dominio de origen
Para recuperar una ID de cliente en el dominio de origen, utilice el método get
:
ga(function(tracker) {
var clientId = tracker.get('clientId');
});
Una vez que tenga el ID de cliente en el dominio de origen, puede agregarlo a los enlaces que apuntan al dominio de destino.
<a href="https://destination.com/?clientId=XXXXXX">destination.com</a>
Configuración del ID de cliente en el dominio de destino
Puede decirle a un objeto rastreador en el dominio de destino qué ID de cliente usar especificando el campo de ID de cliente en el comando create
:
ga('create', 'UA-XXXXX-Y', 'auto', {
'clientId': getClientIdFromUrl()
});
Si ya existe un ID de cliente en el dominio de destino, este método lo sobrescribirá.
Detección de uso compartido de URL
Un problema potencial al pasar la ID de cliente en una URL es que los usuarios comparten URL y es posible que un usuario comparta una URL que contenga una ID de cliente que pertenezca a otra persona.
Una forma de evitar este problema es agregar una marca de tiempo a la identificación del cliente. Esto le permite detectar cuándo se creó originalmente la URL y, si ha pasado demasiado tiempo, considerar que la identificación del cliente no es válida. Además de una marca de tiempo, puede agregar la cadena de agente de usuario u otros metadatos específicos del navegador o del dispositivo. Luego, en el dominio de destino, si los metadatos no coinciden, sabrá que la identificación del cliente se originó en otra persona.
Ignorar las autorreferencias
Se creará una nueva campaña de referencia siempre que la referencia del documento de una página provenga de un nombre de host que no coincida con ninguna de las entradas en la lista de Exclusión de referencia para su propiedad.
De forma predeterminada, la lista de Exclusión de referencias incluye solo el dominio que proporcionó cuando se creó la propiedad por primera vez. Para evitar que se generen nuevas campañas de referencia cuando los usuarios navegan entre dominios, debe agregar una entrada para cada dominio que desee medir en la lista de Exclusión de referencia.
marcos flotantes
La técnica descrita anteriormente requiere código JavaScript que se ejecuta después de que se cargue analytics.js. Dado que los elementos <iframe>
normalmente existen en la página antes de que se cargue analytics.js, a menudo no es una opción agregar la ID del cliente a la URL en el parámetro fuente del iframe.
Para resolver este problema, puede configurar la página dentro del iframe para retrasar la creación de su rastreador hasta que reciba los datos de identificación del cliente de la página principal. Y en la página principal, lo configura para enviar la identificación del cliente a la página iframe usando postMessage .
Aquí hay un ejemplo del código de la página principal en source.com
:
<iframe id="destination-frame" src="https://destination.com"></iframe>
<script>
ga('create', 'UA-XXXXX-Y', 'auto');
ga(function(tracker) {
// Gets the client ID of the default tracker.
var clientId = tracker.get('clientId');
// Gets a reference to the window object of the destionation iframe.
var frameWindow = document.getElementById('destination-frame').contentWindow;
// Sends the client ID to the window inside the destination frame.
frameWindow.postMessage(clientId, 'https://destination.com');
});
</script>
Y aquí está el código que recibiría el mensaje en el iframe alojado en destination.com
:
window.addEventListener('message', function(event) {
// Ignores messages from untrusted domains.
if (event.origin != 'https://destination.com') return;
ga('create', 'UA-XXXXX-Y', 'auto', {
clientId: event.data
});
});
Es posible que analytics.js no se cargue en la página principal y luego la página en el iframe nunca recibirá la ID del cliente. La forma en que maneje este caso depende de cuán importante sea que coincidan las identificaciones de los clientes.
Si solo desea capturar datos cuando sabe que los ID de cliente son los mismos, el código anterior es suficiente. Si desea capturar datos en la página en el marco, independientemente de si recibe el ID de cliente de la página principal, deberá agregar una alternativa.
El siguiente código usa un tiempo de espera en la página en el iframe para manejar el caso en el que la página principal es lenta o no puede enviar la ID del cliente:
// Stores whether or not the tracker has been created.
var trackerCreated = false;
function createTracker(opt_clientId) {
if (!trackerCreated) {
var fields = {};
if (opt_clientId) {
fields.clientId = opt_clientId;
}
ga('create', 'UA-XXXXX-Y', 'auto', fields);
trackerCreated = true;
}
}
window.addEventListener('message', function(event) {
// Ignores messages from untrusted domains.
if (event.origin != 'https://destination.com') return;
// Creates the tracker with the data from the parent page.
createTracker(event.data);
});
// Waits for three seconds to receive the client ID from the parent page.
// If that doesn't happen, it creates the tracker as normal.
setTimeout(createTracker, 3000);