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.

La libreria analytics.js può farlo 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 data di scadenza del cookie possono essere tutti 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 sull'utente.

L'utilizzo dei cookie consente ad analytics.js di identificare utenti unici nelle sessioni di navigazione, ma non può identificare utenti unici su browser o dispositivi diversi. Se il tuo sito ha 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 tuo 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 dei campi 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 che passi 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 di cookie più comune da impostare è cookieDomain; di conseguenza, per praticità, il comando create accetta il campo cookieDomain come terzo parametro facoltativo:

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, in modo che analytics.js stabilisca 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 dei cookie viene aggiornata in modo da corrispondere all'ora corrente più il valore del campo cookieExpires. Ciò significa che se utilizzi il periodo cookieExpires predefinito di due anni e un utente visita il tuo sito ogni mese, il suo cookie non scade mai.

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

Se cookieUpdate è impostato su true (il valore predefinito), analytics.js aggiornerà i cookie a ogni caricamento pagina. 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 utilizzando lo stesso browser ogni cinque giorni, la scadenza del 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. Per questo motivo, 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 agli insiemi di cookie analytics.js, poiché il formato dei cookie potrebbe cambiare in futuro. Gli sviluppatori dovrebbero utilizzare invece readyCallback per attendere il caricamento di analytics.js, quindi memorizzare il valore clientId nel tracker.

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

Disabilitazione dei cookie

In alcuni casi potresti voler utilizzare il tuo meccanismo di archiviazione (come localStorage o un Service Worker) per mantenere l'ID client tra le sessioni senza utilizzare cookie. Puoi impedire ad analytics.js di impostare i cookie impostando il campo storage su 'none'.

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

Se stai memorizzando autonomamente il campo clientId, assicurati 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 archiviare l'ID client

Il seguente esempio di codice mostra come modificare il tag JavaScript per utilizzare localStorage per archiviare 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 rappresenta un utente, ma non ne consente l'identificazione personale. 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 non personale per rappresentare ogni utente che ha eseguito l'accesso. Questo ID viene fornito molto spesso 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 utilizzi questo approccio, gli hit inviati prima dell'impostazione del campo userId non conterranno valori degli 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.