Cookies e identificação do usuário

Para que o Google Analytics determine que dois hits diferentes pertencem ao mesmo usuário, é necessário enviar um identificador exclusivo associado a esse usuário específico com cada hit.

A biblioteca do analytics.js faz isso por meio do campo Client-ID, uma string exclusiva gerada aleatoriamente que é armazenada nos cookies dos navegadores. Desse modo, as visitas subsequentes ao mesmo site podem ser associadas ao mesmo usuário.

Por padrão, o analytics.js usa um único cookie primário chamado _ga para armazenar o Client-ID. No entanto, o nome, o domínio e o tempo de validade do cookie podem ser personalizados. Outros cookies gerados pelo analytics.js incluem _gid, AMP_TOKEN e _gac_<property-id>. Esses cookies armazenam outros IDs gerados aleatoriamente e as informações da campanha do usuário.

O uso de cookies permite que o analytics.js identifique usuários únicos em sessões de navegação diferentes. Entretanto, não é possível identificar usuários únicos em navegadores ou dispositivos diferentes. Se seu site tem um sistema próprio de autenticação, você pode usar o recurso User ID, além do Client-ID, para identificar com mais precisão um usuário em todos os dispositivos que ele usa para acessar o site.

Este guia explica como personalizar as configurações de cookies e como definir o campo "User ID" para acompanhar os usuários em sessões diferentes com mais precisão.

A tabela a seguir mostra os valores padrão de campos de cookies usados pelo analytics.js:

Nome do campo Tipo de valor Valor padrão
cookieName texto _ga
cookieDomain texto O resultado da seguinte expressão JavaScript:
document.location.hostname
cookieExpires número inteiro 63072000 (dois anos, em segundos)

Para modificar algum desses valores, especifique-o no fieldObject transmitido ao comando create. Por exemplo:

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

O campo de cookie mais comum a ser definido é cookieDomain. Desse modo, o comando create aceita o campo cookieDomain como um terceiro parâmetro opcional para conveniência:

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

O snippet de acompanhamento JavaScript recomendado define a string 'auto' para o campo cookieDomain:

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

Especificar 'auto' como o cookieDomain permite a configuração automática do domínio de cookies, que diz ao analytics.js para determinar automaticamente o melhor domínio de cookies a ser usado.

A configuração automática do domínio de cookies define o cookie _ga no domínio de nível mais alto possível. Por exemplo, se o endereço do seu website é blog.example.co.uk, o analytics.js definirá o domínio do cookie como .example.co.uk. Além disso, se o analytics.js detectar que você está executando um servidor localmente (por exemplo, localhost), ele definirá o cookieDomain automaticamente como 'none'.

Sempre que um hit é enviado ao Google Analytics, o tempo de validade do cookie é atualizado para ficar definido como o momento atual acrescido do valor do campo cookieExpires. Isso significa que, se você usar o tempo padrão cookieExpires de dois anos e um usuário acessar seu site todos os meses, o cookie dele nunca expirará.

Se você define o tempo cookieExpires como 0 (zero) segundos, o cookie se transforma em um cookie com base na sessão e expira ao final da sessão atual do navegador:

Não acesse diretamente o cookie que o analytics.js define, porque o formato do cookie pode mudar no futuro. Os desenvolvedores devem usar o readyCallback para aguardar o carregamento do analytics.js e, em seguida, receber o valor do clientId armazenado no rastreador.

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

Desativação dos cookies

Em alguns casos, convém usar seu próprio mecanismo de armazenamento (como localStorage ou um service worker) para manter o Client-ID em várias sessões sem usar cookies. Você pode configurar o analytics.js para não definir cookies. Para isso, defina o campo storage como 'none'.

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

Se você mesmo armazena o campo clientId, precisa definir o campo cliendId ao criar o rastreador.

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

Para desativar os cookies _gac_<property-id>, defina o campo storeGac como false no comando create:

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

Uso de localStorage para armazenar o Client-ID

A seguinte amostra de código mostra como você pode modificar o snippet de acompanhamento JavaScript para usar localStorage em vez dos cookies com a finalidade de armazenar o Client-ID:

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

O User ID permite a análise de grupos de sessões, em vários dispositivos, usando um ID de string exclusivo, persistente e sem identificação pessoal que representa um usuário. Para saber por que você deve implementar o User ID, consulte Vantagens de usar o recurso User ID.

Para implementar o User ID com o analytics.js:

  1. Forneça seu próprio ID de string exclusivo, persistente e sem identificação pessoal para representar cada usuário conectado. Esse ID geralmente é fornecido por um sistema de autenticação.
  2. Defina o User ID no rastreador:
ga('create', 'UA-XXXXX-Y', 'auto', {
  userId: USER_ID
});
ga('send', 'pageview');

Autenticação depois do carregamento de página

Quando você cria aplicativos de página única ou outros websites dinâmicos que fazem o login do usuário depois do carregamento da página inicial, o processo de configuração do valor do User ID no rastreador não pode ocorrer no momento da criação.

Nesses casos, você pode usar o comando set para definir o valor no rastreador assim que ele for gerado.

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

Quando você usa essa abordagem, os hits enviados antes da definição do campo userId não contêm valores de User ID. No entanto, por meio de um processo chamado de Unificação de sessão, o Google Analytics pode associar esses hits ao usuário correto no momento do processamento.