Métricas Boss

Como descobrir e resolver pedidos duplicados no Google Analytics

Da série problemas do dia a dia. Hoje vim trazer um dos maiores problemas enfrentados por e-commerces dentro do Google Analytics: pedidos inflados. Além de triplicar sua receita e sujar suas métricas, acaba com a sua confiança nos dados.

Quais cenários podem gerar esse problema?

Quando a tela de finalização de pedido fica habilitada para que seu usuário possa revisitá-la sempre que quiser. Vamos tomar como exemplo lojas que utilizam a Vtex como plataforma. Ao fechar uma compra, o sistema leva para a seguinte url: https://www.loja.com.br/checkout/orderPlaced/?og=12345.

Os seguintes comportamentos podem gerar a duplicação do pedido:

  • Toda vez que o seu usuário atualizar a página;
  • Restauração do navegador;
  • Ir para uma outra página e retornar via botão voltar do navegador;
  • Abrir o navegador do celular depois de ter realizado uma compra.

Nestes cenários, todos os scripts vinculados a essa compra serão disparados novamente, inclusive sua tag de transação do GA.

Como solução para a plataforma, o ideal é que seja renovada a sessão do usuário após a compra, inclusive redirecionando-o da tela de sucesso após alguns segundos. Isso, além de acabar com o problema, levará o usuário para alguma outra página, não quebrando sua experiência.

Como sugestão, imagino que esse usuário pode ser levado para alguma página que intensifique a experiência. Pode ser algum conteúdo do seu blog ou até mesmo uma página onde você explique a politica de troca :D .

Como eu identifico no GA se meus pedidos estão sendo duplicados?

No Google Analytics, acesse Conversões > Comércio Eletrônico > Transações. Ao abrir o relatório, você verá diversos pedidos. Clique em um dos pedidos. Selecione um período maior do que 1 semana e identifique se o mesmo foi capturado em mais de uma data. Vou deixar aqui embaixo um exemplo que pegamos esses dias aqui na MB.

identificando pedidos duplicados no ga

Agora que aprendemos a identificar o problema, vamos a solução :)

Como resolver o problema de pedidos duplicados dentro do meu google analytics

Para essa solução, partiremos do princípio que você está usando o Google Tag Manager, já o instalou o GA e está disparando a tag de comércio eletrônico através do GTM. Tem post aqui na MB para todos esses passos :D

Para solucionar, buscamos não reinventar a roda. Existem diversos outros posts na web que explicam como fazer isso. Para esse caso, acabei fazendo a adaptação de dois posts: um do @simoahava e outro do @thyng.

O guia da implementação é o seguinte:

  1. Criar variável que retornará uma função que realizará a inserção do transactionId da compra atual no cookie transactionIdHitCallback;
    • Verificar se o transactionId esta presente no dataLayer;
    • Definir um objeto de data;
    • Adicionar a esse objeto a data/hora atual;
    • Definir o tempo de expiração do cookie;
    • Caso cookie já esteja setado na máquina, ele adiciona o transactionId atual dentro do cookie;
    • Escreve o cookie na maquina do usuário userTransactionIds;
  2. Criar variável para bloquear o disparo da requisição de transação para o GA transactionIdIsDuplicated;
    • Identificar se o transactionId esta setado no dataLayer;
    • Verifica se o cookie userTransactionIds existe;
    • Cria um array baseado nas informações que estão dentro do cookie;
    • Caso o id da transação atual esteja dentro do array, retorna “blockTransaction” para o valor da variável;
  3. Criar variável que recebe o cookie userTransactionIds;
  4. Configurar exceção orderPlacedIsDuplicated para bloquear o disparo da tag de transação;
  5. Adicionar a exceção na configuração do disparo da tag;
  6. Adicionar a variável de configuração do Google Analytics à função para o hitCallback da API.

Adicionar uma função ao callback de transação do Google Analytics transactionIdHitCallback

Criar uma variável do tipo “Javascript personalizado”, com o nome “transactionIdHitCallback”, e colar o seguinte script:

function() {
  return function() {
    var d, expires;
    var cvalue = '';

    // Verifica se o transactionId esta presente no dataLayer
    if ({{transactionId}}) {
      // Define um objeto de data
      d = new Date();
      // Adiciona a esse objeto a data/hora atual
      d.setTime(d.getTime() + (2*365*24*60*60*1000)); 
      // Define o tempo de expiração do cookie
      expires = 'expires='+d.toUTCString(); 
      
      // Se o valor(transactionId) existir, adicionar ele dentro do cookie
      if ({{userTransactionIds}}) {
        cvalue = {{userTransactionIds}} + ',';
      }
   	  // Escreve o cookie
      document.cookie = 'userTransactionIds=' + 
            cvalue + {{transactionId}} + '; ' + 
            expires + '; path=/';
    }
  };
}

Criar variável para bloquear o disparo da requisição de transação para o GA transactionIdIsDuplicated

Criar variável do tipo “Javascript personalizado”, com o nome “transactionIdIsDuplicated”, e colar o script abaixo:

    function() {
        // Caso o transactionId não existir, ele não fará nada
        if(!{{transactionId}})
        return;
        
        // Verifica se o cookie com os transactionsId existe
        if({{userTransactionIds}}){
            // Cria um array com os transactionIds;
            var trackedTransactions = {{userTransactionIds}}.split(",");

            // Caso o transactionId já exista dentro do array retorna o bloqueio
            if(trackedTransactions.indexOf({{transactionId}})>-1)
            {
                return "blockTransaction";
            }
        }
    }

Configurar exceção orderPlacedIsDuplicated para bloquear o disparo da tag de transação

Criar acionador do tipo “Evento personalizado”, com o nome “orderPlacedIsDuplicated”. Definir o nome do evento como “orderPlaced”, selecionar a opção do acionador para “Alguns eventos personalizados” e configurar o disparo para toda vez que a variável “transactionIdIsDuplicated” for igual a “blockTransaction”.

configurando acionador

No nosso caso, estamos utilizando um e-commerce que faz o disparo da transação através de um evento personalizado. Geralmente, Vtex e Xtech usam esse escopo. Caso seu e-commerce preencha o dataLayer sem evento personalizado, mudar a configuração para “Page Path”.


mail_outline

Está curtindo o post?

Assine nossa newsletter e fique por dentro das noticias do mercado de Web Analytics.


Criar variável do tipo “Cookie primário” com o nome do cookie “userTransactionIds”.

configurando-variavel-de-cookie

Adicionar a exceção na configuração do disparo da tag

Na sua tag de transação, adicione a exceção que criamos, “orderIdIsDuplicated”.

configurando excecao na tag de transacao

Adicionar a variável de configuração do Google Analytics à função para o hitCallback da API

Primeiro, precisamos entender como funciona o hitCallback do Google Analytics. De maneira prática, o hitCallback nos dá um retorno a toda requisição feita pelo script do Google. Com isso, conseguimos no final de cada requisição trabalhar esse retorno, garantindo que os dados foram com sucesso para dentro do analytics. Caso você queira se aprofundar um pouco mais, segue o link da documentação do Google.

Agora iremos configurar nossa tag do Google Analytics de forma a utilizar o metodo “hitCallback” para receber nossa variável de controle do cookie. E toda vez que um pedido for inserido no Google Analytics, irá adicionar o “transactionId” no cookie que criamos.

configurand hitcallback do ga

Você pode utilizar desse acionador criado para outras tags que mensuram conversão. Esse processo que fizemos, vai te ajudar em mais do que diminuir a discrepância de pedidos no Google Analytics, afinal, pixels do Google Ads, afiliados e Facebook também podem se beneficiar dessa melhoria! :D