Medición multidominio

En esta guía se describe cómo medir eventos en diferentes dominios con analytics.js.

Descripción general

La biblioteca analytics.js utiliza un único ID de cliente para determinar si un usuario es nuevo o recurrente. Se considera que un usuario es recurrente si ya se ha enviado a la misma propiedad un hit con un ID de cliente que coincide.

De forma predeterminada, el ID de cliente se almacena en las cookies del navegador, lo que significa que únicamente las páginas del mismo dominio pueden acceder a él. Si quieres hacer el seguimiento del mismo ID de cliente en un determinado usuario y en diferentes dominios, utiliza el seguimiento multidominio.

Para compartir un ID de cliente entre varios dominios, puedes añadirlo como un parámetro de consulta a las URLs que apuntan del dominio actual (dominio de origen) al dominio de destino que quieres medir. Cuando un usuario hace clic en un enlace o envía un formulario en el dominio de origen y accede al dominio de destino, el código de la página de destino puede leer el ID de cliente en la URL.

Obtener el ID de cliente en el dominio de origen

Para recuperar un ID de cliente en el dominio de origen, se utiliza el método get:

ga(function(tracker) {
  var clientId = tracker.get('clientId');
});

Cuando tengas el ID de cliente en el dominio de origen, puedes añadirlo a los enlaces que apuntan al dominio de destino.

<a href="https://destination.com/?clientId=XXXXXX">destination.com</a>

Configurar el ID de cliente en el dominio de destino

Para indicar a un objeto de seguimiento en el dominio de destino qué ID de cliente debe utilizar, puedes especificar el campo ID de cliente en el comando create:

ga('create', 'UA-XXXXX-Y', 'auto', {
  'clientId': getClientIdFromUrl()
});

Si un ID de cliente ya existe en el dominio de destino, este método lo sobrescribirá.

Detectar el intercambio de URL

Un posible problema al transferir el ID de cliente en una URL es que los usuarios comparten las URLs y puede que un usuario comparta una con un ID de cliente que pertenezca a otra persona.

Una forma de evitar este problema es añadir una marca de tiempo al ID de cliente. Esta solución te permite detectar cuándo se creó la URL y, si ha pasado mucho tiempo, puedes considerar que el ID de cliente no es válido. También puedes añadir la cadena de user-agent o metadatos específicos de otro dispositivo o de navegador. Si los metadatos no coinciden en el dominio de destino, sabrás que el ID de cliente se creó para otra persona.

Omitir las autorreferencias

Cuando la URL referente del documento de una página provenga de un nombre de host que no coincida con ninguna de las entradas de la lista de exclusiones de referencias de tu propiedad, se creará una campaña de referencias.

De forma predeterminada, la lista de exclusión de referencias solo incluye el dominio que proporcionaste cuando se creó la propiedad por primera vez. Para evitar que se generen campañas de referencias cuando los usuarios se desplacen de un dominio a otro, debes añadir una entrada por cada dominio que quieras medir en la lista de exclusión de referencias.

Iframes

La técnica descrita previamente requiere que se ejecute el código JavaScript tras cargarse analytics.js. Como en la página suele haber elementos <iframe> antes de que se cargue analytics.js, a menudo no es posible añadir el ID de cliente a la URL en el parámetro de origen del iframe.

La solución a este problema es configurar la página dentro del iframe para retrasar la creación del objeto de seguimiento hasta después de recibir los datos de ID de cliente de la página principal y configurar la página principal para que envíe el ID de cliente a la página iframe con postMessage.

Este es un ejemplo de 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>

Este código permite recibir 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, en cuyo caso la página del iframe nunca recibiría el ID de cliente. El modo de abordar este caso depende de si es muy importante que el ID de cliente coincida.

Si solo quieres capturar datos cuando los IDs de cliente coincidan, el código anterior es suficiente. Ahora bien, si quieres capturar los datos de la página del iframe aunque no recibas el ID de cliente de la página principal, tendrás que agregar un respaldo.

Este código utiliza un tiempo de espera en la página del iframe por si la página principal fuera lenta o no enviara el ID de 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);