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.
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.
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.
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:
- 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;
- 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;
- Criar variável que recebe o cookie userTransactionIds;
- Configurar exceção orderPlacedIsDuplicated para bloquear o disparo da tag de transação;
- Adicionar a exceção na configuração do disparo da tag;
- 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”.
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”.
Referência MétricaBoss.