Acompanhamento de vários domínios

Este guia descreve como acompanhar usuários em todos os seus domínios usando o analytics.js.

Visão geral

A biblioteca do analytics.js usa um ID de cliente exclusivo para determinar se um usuário é novo ou recorrente. Um usuário é considerado recorrente se um hit com um ID de cliente correspondente já foi enviado à mesma propriedade.

Por padrão, o Client-ID é armazenado nos cookies do navegador. Assim, só é possível acessá-lo por páginas no mesmo domínio. Para acompanhar o mesmo Client-ID para um determinado usuário em diferentes domínios, use o acompanhamento de vários domínios.

Para compartilhar um Client-ID em vários domínios, você pode anexá-lo como um parâmetro de consulta a URLs que direcionam do domínio atual (o domínio de origem) para o domínio de destino a ser acompanhado. Quando um usuário clica em um link ou envia um formulário no domínio de origem e navega até o domínio de destino, o código na página de destino pode acessar o ID de cliente lendo-o a partir do URL.

Acesso ao ID de cliente no domínio de origem

Para recuperar um Client-ID no domínio de origem, você usa o método get:

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

Quando você tiver o ID do cliente no domínio de origem, poderá adiciona-lo a links que direcionam para o domínio de destino.

<a href="https://destination.com/?clientId=XXXXXX">destination.com</a>

Configuração do ID do cliente no domínio de destino

Para informar a um objeto de rastreador no domínio de destino qual Client-ID usar, especifique o campo "Client-ID" no comando create:

ga('create', 'UA-XXXXX-Y', 'auto', {
  'clientId': getClientIdFromUrl()
});

Se um ID de cliente já existir no domínio de destino, esse método o substituirá.

Detecção de compartilhamento do URL

Um problema em potencial com a transmissão do ID do cliente em um URL é que os usuários compartilham URLs e é possível que um usuário compartilhe um URL que contenha o ID do cliente de outra pessoa.

Uma forma de evitar esse problema é anexar uma data e hora ao ID do cliente. Assim, você pode detectar quando o URL foi criado originalmente e, se muito tempo tiver transcorrido, considerar o ID do cliente inválido. Além da data e hora, você pode anexar a string de user agent ou outros metadatos específicos do navegador ou do dispositivo. Assim, no domínio de destino, se os metadados não forem correspondentes, você saberá que o Client-ID é de outra pessoa.

Ignorar referências próprias

Uma nova campanha de referência é criada sempre que o referenciador do documento de uma página é proveniente de um nome de host que não corresponde a uma das entradas na lista de exclusão de referências da sua propriedade.

Por padrão, a lista de exclusão de referências inclui apenas o domínio que você forneceu quando a propriedade foi criada pela primeira vez. Para evitar que novas campanhas de referência sejam geradas quando os usuários navegam em vários domínios, adicione uma entrada na lista de exclusão de referências para cada domínio que você deseja acompanhar.

iframes

A técnica descrita acima precisa do código JavaScript que é executado depois do carregamento do analytics.js. Como geralmente os elementos <iframe> existem na página anterior ao carregamento do analytics.js, anexar o ID do cliente ao URL no parâmetro da origem do iframe não costuma ser uma opção.

Para solucionar esse problema, você pode configurar a página no iframe para atrasar a criação do reastreador dele até o recebimento dos dados de ID do cliente da página mãe. Na página mãe, você configura o envio do ID do cliente para a página do iframe usando postMessage.

Veja um exemplo do código na página mãe em source.com:

<iframe id="destination-frame" src="https://destination.com"></iframe>

<script>
ga('create', 'UA-XXXXX-Y', 'auto');
ga(function(tracker) {
  // Gets the client ID of the default tracker.
  var clientId = tracker.get('clientId');

  // Gets a reference to the window object of the destionation iframe.
  var frameWindow = document.getElementById('destination-frame').contentWindow;

  // Sends the client ID to the window inside the destination frame.
  frameWindow.postMessage(clientId, 'https://destination.com');
});
</script>

Veja o código que receberia a mensagem no iframe hospedado em destination.com:

window.addEventListener('message', function(event) {
  // Ignores messages from untrusted domains.
  if (event.origin != 'https://destination.com') return;

  ga('create', 'UA-XXXXX-Y', 'auto', {
    clientId: event.data
  });
});

É possível que o analytics.js não carregue na página mãe e, assim, a página no iframe não receberá o ID do cliente. Como você trata esse caso depende da importância da correspondência dos IDs de cliente.

Se você só deseja capturar dados quando os IDs de cliente forem iguais, o código acima é suficiente. Se você quiser capturar dados na página no iframe independentemente de ele receber ou não o ID do cliente da página mãe, terá que adicionar um substituto.

O código a seguir usa um tempo limite na página no iframe para tratar o caso em que a página mãe é lenta ou não envia o Client-ID.

// Stores whether or not the tracker has been created.
var trackerCreated = false;

function createTracker(opt_clientId) {
  if (!trackerCreated) {
    var fields = {};
    if (opt_clientId) {
      fields.clientId = opt_clientId;
    }

    ga('create', 'UA-XXXXX-Y', 'auto', fields);
    trackerCreated = true;
  }
}

window.addEventListener('message', function(event) {
  // Ignores messages from untrusted domains.
  if (event.origin != 'https://destination.com') return;

  // Creates the tracker with the data from the parent page.
  createTracker(event.data);
});

// Waits for three seconds to receive the client ID from the parent page.
// If that doesn't happen, it creates the tracker as normal.
setTimeout(createTracker, 3000);