Cookies e identificación de usuarios

Para que Google Analytics determine que dos hits diferentes pertenecen al mismo usuario, con cada hit se debe enviar un identificador único asociado a ese usuario.

Para ello, la biblioteca analytics.js utiliza el campo ID de cliente, una cadena única generada aleatoriamente que se almacena en las cookies del navegador. De este modo, las visitas posteriores al mismo sitio se pueden asociar al mismo usuario.

De forma predeterminada, analytics.js usa una cookie propia llamada _ga para almacenar el ID de cliente, pero el nombre, el dominio y la hora de caducidad de la cookie se pueden personalizar. La biblioteca analytics.js también crea otras cookies, como _gid, AMP_TOKEN y _gac_<property-id>. Estas cookies almacenan otros identificadores generados de forma aleatoria e información de campaña relativa al usuario.

El uso de cookies permite a analytics.js identificar a los usuarios únicos en diferentes sesiones de navegación, pero no en diferentes navegadores o dispositivos. Si tu sitio dispone de un sistema de autenticación propio, puedes usar la función de ID de usuario, además del ID de cliente, para identificar a un usuario de un modo más preciso en todos los dispositivos que usa para acceder a tu sitio.

En esta guía se explica cómo personalizar la configuración de las cookies y cómo configurar el campo ID de usuario para medir de forma más precisa la actividad de usuario en diferentes sesiones.

En la tabla siguiente se muestran los valores predeterminados de los campos de cookie que usa analytics.js:

Nombre del campo Tipo de valor Valor predeterminado
cookieName text _ga
cookieDomain text Resultado de la siguiente expresión JavaScript:
document.location.hostname
cookieExpires integer 63072000 (dos años, en segundos)
cookieUpdate boolean true
cookieFlags text

Para cambiar cualquiera de estos valores, puedes especificarlos en el objeto fieldObject que envías en el comando create. Por ejemplo:

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',
});

El campo de cookie más habitual es cookieDomain. Por eso, el comando create acepta el campo cookieDomain como tercer parámetro opcional para mayor comodidad:

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

La etiqueta de Google Analytics recomendada asigna la cadena 'auto' al campo cookieDomain:

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

Especificar 'auto' como cookieDomain permite que se configuren automáticamente los dominios de cookie, es decir, que analytics.js determine automáticamente el mejor dominio de cookies que se debe usar.

La configuración automática de dominios de cookie define la cookie _ga en el dominio del nivel más alto que puede. Por ejemplo, si la dirección de tu sitio web es blog.example.co.uk, analytics.js definirá .example.co.uk como dominio de las cookies. Además, si analytics.js detecta que estás ejecutando un servidor de forma local (por ejemplo, localhost), asignará automáticamente el valor 'none' a cookieDomain.

Cada vez que se envía un hit a Google Analytics, la hora de caducidad de las cookies se actualiza para que sea la hora actual más el valor del campo cookieExpires. Es decir, si usas el tiempo predeterminado de cookieExpires de dos años y un usuario visita tu sitio cada mes, su cookie nunca caducará.

Si asignas un valor de 0 (cero) segundos a cookieExpires, la cookie se convertirá en una cookie de sesión y caducará cuando finalice la sesión de navegador en curso.

Cuando se asigna el valor true (predeterminado) a cookieUpdate, analytics.js actualiza las cookies cada vez que se carga la página. De esta forma, la caducidad de las cookies cambia en función de la visita más reciente al sitio web. Por ejemplo, si a la cookie de una página se le asigna una caducidad de una semana y un usuario la visita utilizando el mismo navegador cada cinco días, la caducidad se actualiza tras cada visita y, por lo tanto, la cookie nunca caduca.

Si se asigna el valor false, las cookies no se actualizan al cargar la página, lo que implica que su caducidad se fija en función de la primera vez que un usuario visitó el sitio.

Añade marcas adicionales a la cookie cuando se configura. Las marcas deben estar separadas por punto y coma.

No se debe acceder directamente a la cookie que define analytics.js, ya que el formato puede cambiar más adelante. En lugar de ello, los programadores deben usar readyCallback para esperar a que se cargue analytics.js y, a continuación, obtener el valor clientId almacenado en el objeto de seguimiento.

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

Inhabilitar las cookies

En algunos casos, es mejor usar un mecanismo de almacenamiento propio (como localStorage o un service worker) para mantener el ID de cliente en varias sesiones sin usar cookies. Si quieres inhabilitar analytics.js para que no defina cookies, debes asignar el valor 'none' al campo storage.

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

Si almacenas el campo clientId, no olvides definir el campo cliendId al crear el objeto de seguimiento.

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

Para inhabilitar las cookies _gac_<property-id>, asigna el valor false al campo storeGac en el comando create:

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

Usar localStorage para almacenar el ID de cliente

En el siguiente código de ejemplo se muestra cómo se puede modificar la etiqueta JavaScript para usar localStorage y almacenar el ID de cliente en vez de usar cookies:

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

ID de usuario

El ID de usuario permite analizar grupos de sesiones en varios dispositivos utilizando una cadena de ID única, fija y sin información personal identificable que represente a un usuario. Para saber por qué deberías usar los IDs de usuario, consulta Ventajas del ID de usuario.

Para implementar el ID de usuario con analytics.js:

  1. Proporciona un ID de cadena único, fijo y sin información personal identificable para representar a cada usuario que haya iniciado sesión. Normalmente, este ID lo proporciona un sistema de autenticación.
  2. Configura el ID de usuario en el objeto de seguimiento:
ga('create', 'UA-XXXXX-Y', 'auto', {
  userId: USER_ID
});
ga('send', 'pageview');

Gestionar la autenticación después de cargar la página

Al crear aplicaciones de página única u otros sitios web dinámicos que gestionan el inicio de sesión de los usuarios tras la carga inicial de la página, no es posible configurar el valor del ID de usuario en el objeto de seguimiento durante la creación.

En esos casos, puedes usar el comando set para definir el valor en el objeto de seguimiento en cuanto se conozca.

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

Los hits enviados antes de configurar el campo userId no incluirán valores de ID de usuario. Sin embargo, gracias a un proceso llamado unificación de sesión, Google Analytics puede asociar esos hits con el usuario correspondiente durante el procesamiento.