Cookie e identificazione utente

Per consentire a Google Analytics di determinare che due hit distinti appartengono allo stesso utente, con ogni hit deve essere inviato un identificatore univoco associato a quell'utente.

A tal fine, la libreria analytics.js esegue questa operazione tramite il campo ID client, una stringa univoca generata in modo casuale che viene memorizzata nei cookie del browser, in modo che le visite successive allo stesso sito possano essere associate allo stesso utente.

Per impostazione predefinita, analytics.js utilizza un singolo cookie proprietario denominato _ga per archiviare il Client-ID, ma il nome, il dominio e la scadenza del cookie possono essere personalizzati. Altri cookie creati da analytics.js includono _gid, AMP_TOKEN e _gac_<property-id>. Questi cookie memorizzano altri ID e informazioni della campagna generati in modo casuale relativi all'utente.

L'utilizzo dei cookie consente a analytics.js di identificare utenti unici nelle sessioni di navigazione, ma non di identificare utenti unici su browser o dispositivi diversi. Se il sito dispone di un proprio sistema di autenticazione, puoi utilizzare la funzionalità User-ID, oltre al Client-ID, per identificare in modo più preciso un utente su tutti i dispositivi che utilizza per accedere al sito.

Questa guida spiega come personalizzare le impostazioni dei cookie e come impostare il campo User-ID per misurare con maggiore precisione l'attività utente tra le sessioni.

La seguente tabella mostra i valori del campo cookie predefiniti utilizzati da analytics.js:

Nome campo Tipo di valore Valore predefinito
cookieName testo _ga
cookieDomain testo Il risultato della seguente espressione JavaScript:
document.location.hostname
cookieExpires numero intero 63072000 (due anni, in secondi)
cookieUpdate boolean true
cookieFlags testo

Per modificare uno qualsiasi di questi valori, puoi specificarlo nel fieldObject passato il comando create. Ad esempio:

ga('create', 'UA-XXXXX-Y', {
  'cookieName': 'gaCookie',
  'cookieDomain': 'blog.example.co.uk',
  'cookieExpires': 60 * 60 * 24 * 28  // Time in seconds.
  'cookieUpdate': 'false',
  'cookieFlags': 'SameSite=None; Secure',
});

Il campo cookie più comune da impostare è cookieDomain, di conseguenza il comando create accetta il campo cookieDomain come terzo parametro facoltativo per praticità:

ga('create', 'UA-XXXXX-Y', 'blog.example.co.uk');

Il tag di Google Analytics consigliato imposta la stringa 'auto' per il campo cookieDomain:

ga('create', 'UA-XXXXX-Y', 'auto');

Se specifichi 'auto' come cookieDomain, viene attivata la configurazione automatica del dominio dei cookie, che indica a analytics.js di determinare automaticamente il dominio dei cookie migliore da utilizzare.

La configurazione automatica del dominio dei cookie imposta il cookie _ga sul dominio di livello più elevato possibile. Ad esempio, se l'indirizzo del tuo sito web è blog.example.co.uk, analytics.js imposterà il dominio dei cookie su .example.co.uk. Inoltre, se analytics.js rileva che stai eseguendo un server in locale (ad es. localhost), imposta automaticamente cookieDomain su 'none'.

Ogni volta che viene inviato un hit a Google Analytics, la scadenza del cookie viene aggiornata in modo da corrispondere all'ora corrente più il valore del campo cookieExpires. Ciò significa che se utilizzi la durata predefinita di cookieExpires di due anni e un utente visita il tuo sito ogni mese, il suo cookie non scade mai.

Se imposti il tempo cookieExpires su 0 (zero) secondi, il cookie si trasforma in un cookie basato su sessione e scade al termine della sessione del browser corrente:

Se cookieUpdate è impostato su true (valore predefinito), analytics.js aggiorna i cookie a ogni caricamento pagina. In questo modo la scadenza dei cookie viene aggiornata in base alla visita più recente al sito. Ad esempio, se la scadenza dei cookie è impostata su una settimana e un utente visita il sito utilizzando lo stesso browser ogni cinque giorni, la scadenza dei cookie verrà aggiornata a ogni visita e quindi non scadrà mai.

Se il criterio viene impostato su false, i cookie non vengono aggiornati a ogni caricamento pagina. In questo modo, la scadenza dei cookie si basa sulla prima visita di un utente al sito.

Se impostato, aggiunge ulteriori flag al cookie. I flag devono essere separati da un punto e virgola.

Non devi accedere direttamente ai set di cookie analytics.js, poiché il formato dei cookie potrebbe cambiare in futuro. Gli sviluppatori dovrebbero invece utilizzare readyCallback per attendere il caricamento di analytics.js e poi memorizzare il valore clientId sul tracker.

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

Disabilitazione dei cookie

In alcuni casi potresti voler utilizzare un meccanismo di archiviazione personalizzato (ad esempio localStorage o un Service Worker) per rendere persistenti l'ID client tra più sessioni senza utilizzare i cookie. Per impedire ad analytics.js di impostare i cookie, imposta il campo storage su 'none'.

ga('create', 'UA-XXXXX-Y', {
  'storage': 'none'
});

Se stai memorizzando il campo clientId autonomamente, devi assicurarti di impostare il campo cliendId quando crei il tracker.

ga('create', 'UA-XXXXX-Y', {
  'storage': 'none',
  'clientId': '76c24efd-ec42-492a-92df-c62cfd4540a3'
});

Per disabilitare i cookie _gac_<property-id>, imposta il campo storeGac su false nel comando create:

ga('create', 'UA-XXXXX-Y', {
  storeGac: false,
});

Utilizzo di localStorage per l'archiviazione dell'ID client

Il seguente esempio di codice mostra come modificare il tag JavaScript per utilizzare localStorage per memorizzare l'ID client anziché i cookie:

var GA_LOCAL_STORAGE_KEY = 'ga:clientId';

if (window.localStorage) {
  ga('create', 'UA-XXXXX-Y', {
    'storage': 'none',
    'clientId': localStorage.getItem(GA_LOCAL_STORAGE_KEY)
  });
  ga(function(tracker) {
    localStorage.setItem(GA_LOCAL_STORAGE_KEY, tracker.get('clientId'));
  });
}
else {
  ga('create', 'UA-XXXXX-Y', 'auto');
}

ga('send', 'pageview');

User-ID

Lo User-ID consente di analizzare gruppi di sessioni su più dispositivi utilizzando una stringa ID univoca e permanente che non consente l'identificazione personale di un utente. Per informazioni sui motivi per cui è consigliabile implementare lo User-ID, consulta Vantaggi dell'utilizzo della funzionalità User-ID.

Per implementare lo User-ID con analytics.js:

  1. Fornisci il tuo ID stringa univoco, permanente e che non consente l'identificazione personale per rappresentare ogni utente che ha eseguito l'accesso. Questo ID viene fornito il più delle volte da un sistema di autenticazione.
  2. Imposta lo User-ID sul tracker:
ga('create', 'UA-XXXXX-Y', 'auto', {
  userId: USER_ID
});
ga('send', 'pageview');

Gestione dell'autenticazione dopo il caricamento pagina

Quando crei applicazioni a pagina singola o altri siti web dinamici che gestiscono l'accesso degli utenti dopo il caricamento iniziale della pagina, il processo di impostazione del valore User-ID sul tracker non può avvenire al momento della creazione.

In questi casi, puoi utilizzare il comando set per impostare il valore sul tracker non appena è noto.

// Creates the tracker and sends a pageview as normal
// since the `userId` value is not yet known.
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');

// At a later time, once the `userId` value is known,
// sets the value on the tracker.
ga('set', 'userId', USER_ID);

// Setting the userId doesn't send data to Google Analytics.
// You must also use a pageview or event to send the data.
ga('send', 'event', 'authentication', 'user-id available');

Quando si utilizza questo approccio, gli hit inviati prima dell'impostazione del campo userId non conterranno valori ID utente. Tuttavia, tramite una procedura nota come unificazione sessioni, Google Analytics è in grado di associare questi hit all'utente corretto al momento dell'elaborazione.