Universal Analytics (UA) dejará de estar disponible el 1 de julio de 2023, lo que significa que dejará de procesar datos. Las propiedades de Analytics 360 dejarán de funcionar el 1 de octubre de 2023. Migra a Google Analytics 4.

Mediciones multidominio

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En esta guía, se describe cómo medir eventos en varios dominios con 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, el ID de 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 el seguimiento del mismo ID de cliente para un usuario determinado en diferentes dominios, utilice el seguimiento multidominio.

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 al dominio de destino, el código de la página de destino puede acceder al ID de cliente mediante la lectura de la URL.

Obtén el ID de cliente en el dominio de origen

Para recuperar un ID de cliente en el dominio de origen, usa 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, podrá agregarlo a los vínculos que dirijan al dominio de destino.

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

Configura el ID de cliente en el dominio de destino

Puedes indicarle a un objeto de seguimiento del dominio de destino qué ID de cliente debe usar si especificas el campo 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á.

Detecta el uso compartido de URL

Un posible problema con pasar el ID de cliente en una URL es que los usuarios comparten las URL y es posible que un usuario comparta una URL que contiene un ID de cliente que pertenece a otra persona.

Una forma de evitar este problema es agregar una marca de tiempo al ID de cliente. Esto le permite detectar cuándo se creó originalmente la URL y, si ya pasó mucho tiempo, considerar el ID de cliente como no válido. Además de una marca de tiempo, puedes agregar la string usuario-agente, o bien otros metadatos específicos del dispositivo o del navegador. En el dominio de destino, si los metadatos no coinciden, sabrá que el ID de cliente se originó de otra persona.

Ignorar las autoreferencias

Se creará una nueva campaña de referencias cada vez que el referencia de documento de una página provenga de un nombre de host que no coincida con ninguna de las entradas de la lista Exclusión de referencias de su propiedad.

De forma predeterminada, la lista de exclusiones de referencias solo incluye el dominio que usted proporcionó cuando se creó la propiedad por primera vez. Para evitar que se generen nuevas campañas de referencias cuando los usuarios navegan por los dominios, debe agregar una entrada para cada dominio que desee medir en la lista de exclusiones de referencias.

Iframes

La técnica descrita anteriormente requiere de código JavaScript que se ejecuta después de que se carga analytics.js. Dado que los elementos <iframe> suelen existir en la página antes de cargar analytics.js, agregar el ID de cliente a la URL en el parámetro fuente de iframe no suele ser una opción.

Para resolver este problema, puedes configurar la página dentro del iframe para que retrase la creación de la herramienta de seguimiento hasta que reciba los datos de ID de cliente de la página principal. Y en la página principal, la configura para enviar el ID de cliente a la página de iframe mediante postMessage.

Este es 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>

Este es 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 que la página del iframe nunca reciba el ID de cliente. La forma de manejar este caso depende de la importancia de que los ID de cliente coincidan.

Si solo deseas capturar datos cuando sabes que los ID de cliente son los mismos, el código anterior es suficiente. Si deseas capturar datos en la página en el marco independientemente de si recibe el ID de cliente de la página principal, tendrás que agregar un resguardo.

El siguiente código utiliza un tiempo de espera en la página del iframe para controlar el caso en el que la página principal es lenta o no envía 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);