Cookies e identificación de usuario

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 el tiempo 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 la 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 realizar un seguimiento más preciso 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 modificar uno de estos valores, puedes especificarlo en el objeto fieldObject que transmites 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 para configurar es cookieDomain. El comando create acepta el campo cookieDomain como un tercer parámetro opcional por motivos de comodidad:

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

El fragmento de seguimiento JavaScript recomendado configura la cadena 'auto' del campo cookieDomain:

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

Especificar 'auto' como cookieDomain permite la configuración automática de dominios de cookie, lo que indica a analytics.js que 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 configurará el dominio de la cookie como .example.co.uk. Además, si analytics.js detecta que ejecutas un servidor localmente (por ejemplo, localhost), configura automáticamente cookieDomain como 'none'.

Cada vez que se envía un hit a Google Analytics, el tiempo de caducidad de la cookie se actualiza según el tiempo 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 web cada dos meses, su cookie nunca caducará.

Si has establecido el tiempo de cookieExpires en 0 (cero) segundos, la cookie se convierte en una cookie basada en sesión y caduca cuando finaliza la sesión de navegador actual.

No se debe acceder directamente a la cookie que configura analytics.js, ya que su formato puede cambiar en el futuro. 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. Puedes evitar que analytics.js configure cookies definiendo el valor del campo storage en 'none'.

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

Si almacenas el campo clientId tú mismo, deberás asegurarte de configurarlo al crear el objeto de seguimiento.

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

Para inhabilitar las cookies de _gac_<property-id>, configura el campo storeGac en false 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');

User ID

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 tales casos, puedes usar el comando set para configurar 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);

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 estos hits con el usuario correspondiente durante el procesamiento.