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 web 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 web dispone de un sistema de autenticación propio, puedes usar la función User ID, 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 web.

En esta guía se explica cómo personalizar la configuración de las cookies y cómo configurar el campo User ID para medir de forma más precisa la actividad de los usuarios 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 texto _ga
cookieDomain texto Resultado de la siguiente expresión JavaScript:
document.location.hostname
cookieExpires entero 63072000 (dos años, en segundos)

Para cambiar alguno de estos valores, puedes especificarlos en el objeto fieldObject que transfieres al comando create. Por ejemplo:

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

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

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 cookie que 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 asignará el dominio de cookie .example.co.uk. Además, si analytics.js detecta que estás ejecutando un servidor de forma local (p. ej., 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 sumar el valor del campo cookieExpires a la hora actual. Es decir, si usas el tiempo predeterminado de cookieExpires de dos años y un usuario visita tu sitio web cada dos meses, su cookie nunca caducará.

Si asignas el valor 0 (cero segundos) al campo cookieExpires, la cookie se convierte en una cookie basada en sesión y caduca cuando finaliza la sesión del navegador que está en curso.

No se debe acceder directamente a la cookie que define analytics.js, ya que el formato puede cambiar más adelante. En su lugar, 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 cookies

En algunos casos, es recomendable 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 inhabilitas 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 rellenar 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 ejemplo de código se muestra cómo se puede modificar el fragmento de seguimiento 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

User ID facilita el análisis de grupos de sesiones en varios dispositivos utilizando una cadena de ID única, persistente y no identificable personalmente que representa a un usuario. Para saber por qué debes implementar la función User ID, consulta Ventajas de utilizar la función User ID.

Para implementar la función User ID con analytics.js:

  1. Proporciona un ID de cadena único, persistente y sin identificación personal para representar a cada usuario que haya iniciado sesión. Normalmente, este ID lo proporciona un sistema de autenticación.
  2. Configura el User ID 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 una sola página 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 tan pronto como 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 los valores del 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.