Medição de vários domínios

Neste guia, descrevemos como medir eventos em vários domínios usando a analytics.js.

Visão geral

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

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

Para compartilhar um ID do cliente em vários domínios, anexe-o como um parâmetro de consulta a URLs que direcionam do domínio atual (de origem) para o domínio a ser medido. 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 lê e acessa o ID do cliente no URL.

Acesso ao ID do cliente no domínio de origem

Para recuperar um ID do cliente no domínio de origem, use 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á adicioná-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 "rastreador" no domínio de destino qual ID do cliente usar, especifique o campo correspondente no comando create:

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

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

Detecção de compartilhamento do URL

A transmissão do ID do cliente em um URL pode gerar o seguinte problema: quando o usuário compartilha um URL, é possível que acabe compartilhando o ID do cliente de outra pessoa.

Uma maneira de evitar esse problema é anexar um carimbo de data/hora ao ID do cliente. Isso permite que você detecte quando o URL foi criado originalmente e, se tiver passado muito tempo, considere o ID do cliente como 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 ID do cliente é 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 vem de um nome de host que não corresponde às 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. 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ê quer medir.

Iframes

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

Para resolver esse problema, configure a página no iframe para atrasar a criação do rastreador 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 da 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>

Este é 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 a 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ê quer apenas capturar dados quando os IDs de cliente forem iguais, o código acima é suficiente. Se quer capturar dados na página no iframe independentemente de ele receber ou não o ID do cliente da página mãe, adicione 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 ID do cliente.

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