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.

como-verificar-se-seus-pedidos-estao-sendo-duplicados-no-google-analytics-e-como-resolver-via-google-tag-manager-1.png

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️⃣6️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”.

configuracao-do-acionador.png

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”.

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

configurando-variavel-de-cookie.png

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.png

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.png

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

Dúvidas? Comentários? Sugestões?

Mande um e-mail para gente contato@metricasboss.com.br, até a próxima :D

Notícias de Digital Analytics para quem não tem tempo de ler notícias.
Junte-se a turma de 9000 leitores ativos

Métricas Boss: © 2021 - Versão 4.0 - Web Analytics é mais que um gráfico bonitinho!

WhatsApp