Uma tag simples na página de compra aprovada, disparando junto com os pixels que vocês já usam. Ela envia os dados de atribuição do clique para o nosso servidor e melhora a atribuição das vendas nos gerenciadores de anúncio. Instalação em menos de 5 minutos.
Contexto rápido antes do passo a passo.
Quando alguém clica num anúncio (TikTok, Meta, Google) e compra, o navegador guarda identificadores do clique em cookies e na URL. Hoje esses identificadores se perdem no caminho até a venda, e o gerenciador de anúncios não consegue ligar a compra ao anúncio que a gerou.
sendBeacon, sem nenhum impacto no carregamento.Dois passos, no mesmo container onde já ficam os pixels da página de obrigado.
No GTM: Tags → Nova → tipo HTML personalizado. Nomeie como preferir (sugestão: HX - Beacon Purchase) e cole o código da seção 3 abaixo.
Use o mesmo acionador de purchase / compra aprovada que já dispara os pixels na página de obrigado ou confirmação. Nada além disso: sem acionador de pageview genérico, só o evento de compra.
Se o dataLayer de vocês tiver os dados da compra, substitua os null marcados com // OPCIONAL no código pelas variáveis de vocês (ex.: {{DLV - email}}). Com email ou telefone o cruzamento com a venda fica exato. Sem eles a tag continua valendo, o cruzamento é feito por horário e valor.
Salve, teste no modo Preview se quiser (seção 4) e publique o container.
Copie e cole inteiro no campo HTML da tag.
<script>
(function(){
function ck(n){var m=document.cookie.match('(?:^|; )'+n+'=([^;]*)');return m?decodeURIComponent(m[1]):null;}
function qp(n){try{return new URLSearchParams(location.search).get(n)}catch(e){return null}}
var d={
event:'purchase',
order_id: null, // OPCIONAL: id do pedido, via variavel do dataLayer
email: null, // OPCIONAL: email do comprador
telefone: null, // OPCIONAL: telefone do comprador
nome: null, // OPCIONAL: nome do comprador
cpf: null, // OPCIONAL: cpf do comprador
value: null, // OPCIONAL: valor da compra
ttclid: qp('ttclid')||ck('ttclid'),
ttp: ck('_ttp'),
fbclid: qp('fbclid'),
fbc: ck('_fbc'),
fbp: ck('_fbp'),
gclid: qp('gclid'),
page_url: location.href,
referrer: document.referrer||null,
user_agent: navigator.userAgent,
screen: screen.width+'x'+screen.height
};
var u='https://n8n.hx-corp.com/webhook/checkout-beacon-hx';
var b=JSON.stringify(d);
if(navigator.sendBeacon){navigator.sendBeacon(u,b);}
else{try{fetch(u,{method:'POST',headers:{'Content-Type':'text/plain'},body:b,keepalive:true});}catch(e){}}
})();
</script>
null. Pra preencher um deles, troque o null pela variável do GTM de vocês, ex.: email: {{DLV - email}}, · O resto do código não precisa de nenhuma alteração.Duas formas, escolham a mais prática.
Abram o Preview, simulem ou façam uma compra de teste e confiram no DevTools (aba Network) um request POST para n8n.hx-corp.com/webhook/checkout-beacon-hx com status 200.
Avisem a gente na hora do teste. O recebimento aparece no nosso banco em tempo real e confirmamos em minutos se o dado chegou completo.
| Pergunta | Resposta |
|---|---|
| Afeta a velocidade da página? | Não. É um único envio assíncrono de ~1 KB via sendBeacon, que roda em segundo plano sem bloquear nada. |
| Interfere nos pixels atuais? | Não. A tag não toca em nenhum outro script, cookie ou dataLayer. Só lê e envia. |
| E a LGPD? | Nada de novo entra em jogo: são dados da transação que já são processados na operação e que já recebemos pelo webhook de vendas. O beacon só adiciona os identificadores de clique, no mesmo tratamento. |
| Precisa de manutenção? | Não. Instalou, publicou, acabou. Qualquer ajuste futuro é do nosso lado, no endpoint. |
| E se o endpoint estiver fora? | Nada acontece na página. O sendBeacon falha em silêncio, sem erro visível e sem afetar o usuário. |