Misurazione interdominio

Questa guida descrive come misurare gli eventi in più domini utilizzando analytics.js.

Panoramica

La libreria analytics.js utilizza un ID client univoco per determinare se un utente è nuovo o di ritorno. Un utente viene considerato di ritorno se un hit con un ID cliente corrispondente è già stato inviato alla stessa proprietà.

Per impostazione predefinita, l'ID client è memorizzato nei cookie del browser, il che significa che è possibile accedervi solo dalle pagine sullo stesso dominio. Per monitorare lo stesso ID client per un determinato utente in domini diversi, utilizza il monitoraggio interdominio.

Per condividere un ID client tra più domini, puoi aggiungerlo come parametro di query agli URL che puntano dal dominio corrente (il dominio di origine) al dominio di destinazione da misurare. Quando un utente fa clic su un link o invia un modulo nel dominio di origine e accede al dominio di destinazione, il codice nella pagina di destinazione può accedere all'ID client leggendolo dall'URL.

Ottenere l'ID client sul dominio di origine

Per recuperare un ID client sul dominio di origine, utilizza il metodo get:

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

Una volta che disponi dell'ID client sul dominio di origine, puoi aggiungerlo ai link che rimandano al dominio di destinazione.

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

Impostare l'ID client sul dominio di destinazione

Puoi indicare a un oggetto tracker sul dominio di destinazione quale ID client utilizzare specificando il campo ID client nel comando create:

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

Se esiste già un ID client nel dominio di destinazione, questo metodo lo sovrascriverà.

Rilevamento della condivisione di URL

Un potenziale problema durante il trasferimento dell'ID cliente in un URL è che gli utenti condividono gli URL ed è possibile che un utente condivida un URL contenente un ID cliente appartenente a qualcun altro.

Un modo per evitare questo problema è aggiungere un timestamp all'ID client. In questo modo potrai rilevare quando l'URL è stato creato in origine e, se è trascorso troppo tempo, considerare l'ID client non valido. Oltre al timestamp, puoi aggiungere la stringa dello user agent o altri metadati specifici del browser o del dispositivo. Nel dominio di destinazione, quindi, se i metadati non corrispondono, saprai che l'ID client ha avuto origine da qualcun altro.

Ignorare gli auto-referral

Viene creata una nuova campagna referral ogni volta che il referrer documento di una pagina proviene da un nome host che non corrisponde a nessuna delle voci dell'elenco Esclusione referral della tua proprietà.

Per impostazione predefinita, l'elenco di esclusione dei referral include solo il dominio che hai fornito al momento della creazione iniziale della proprietà. Per evitare che vengano generate nuove campagne referral quando gli utenti passano da un dominio all'altro, devi aggiungere una voce per ciascun dominio che vuoi misurare nell'elenco di esclusione referral.

Iframe

La tecnica descritta sopra richiede un codice JavaScript che viene eseguito dopo il caricamento di analytics.js. Poiché gli elementi <iframe> di solito esistono nella pagina prima del caricamento di analytics.js, spesso non è possibile aggiungere l'ID client all'URL nel parametro sorgente dell'iframe.

Per risolvere questo problema, puoi configurare la pagina all'interno dell'iframe in modo che ritarda la creazione del tracker fino a quando non riceve i dati dell'ID client dalla pagina principale. Nella pagina principale, lo configuri in modo che invii l'ID client alla pagina iframe utilizzando postMessage.

Ecco un esempio del codice della pagina principale su 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>

Ed ecco il codice che riceverebbe il messaggio nell'iframe ospitato su 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
  });
});

È possibile che analytics.js non venga caricato nella pagina principale e che la pagina nell'iframe non riceva mai l'ID client. Il modo in cui gestisci questo caso dipende da quanto è importante la corrispondenza degli ID cliente.

Se vuoi acquisire dati solo quando sai che gli ID cliente sono gli stessi, il codice riportato sopra è sufficiente. Se vuoi acquisire i dati nella pagina nel frame indipendentemente dal fatto che ricevano l'ID client dalla pagina principale, dovrai aggiungere un elemento di riserva.

Il seguente codice utilizza un timeout sulla pagina nell'iframe per gestire il caso in cui la pagina principale sia lenta o non riesca a inviare l'ID client:

// 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);