Artigo
19 de set. de 2025
Como detectamos e neutralizamos um caso de piggyback usando GTM + GA4
Detectamos que alguém estava piggybacking nosso container e criamos um detector com Google Tag Manager + GA4, relatório exploratório e alertas automáticos. Guia prático com código e checklist.
Contexto rápido
Detectamos tráfego e eventos vindo de um domínio externo (hipotético https://site-exemplo-falso.com) que estava disparando nosso GTM/GA4 — ou seja, alguém “pegou” nosso código e estava executando tags em outro site (piggyback). A investigação começou pelo relatório de Páginas no GA4 — encontramos um título/URL inesperado que levou até o host suspeito.

Abaixo está o passo a passo técnico que usamos para detectar, validar e gerar alerta sempre que isso acontecer.
1) Diagnóstico inicial (onde vimos o problema)
Relatório: GA4 → Engagement → Pages and screens (Páginas e telas)
Vimos um título/URL com visualizações que não batiam com nosso site.
Ao checar hostnames no GTM Preview / Tag Assistant encontramos site-exemplo-falso.com aparecendo em eventos.
Objetivo: criar um detector automático que envie evento host_suspeito para GA4 e dispare um alerta por e-mail/webhook.
2) Variável no GTM — capturar hostname real (Custom JS)
Criamos uma variável do tipo Custom JavaScript que retorna o hostname atual do container (ou do dataLayer quando enviado pelo site invasor). Nome: hostname.
Observação: esse formato prioriza valores empurrados no dataLayer (útil nos nossos testes quando simulávamos dataLayer.push({ hostname: 'sitefalso.com' })), e cai em document.location.hostname se não houver dado explícito.
3) Trigger de verificação — “host válido” e “host suspeito”
Criamos dois gatilhos principais:
a) Trigger Host válido (Page View)
Tipo: Page View (ou Initialization se quiser bloquear antes de tudo)
Condição (Some Page Views): JS - Hostname matches RegEx
Regex (exemplo):
(adeque os domínios confiáveis do seu ecossistema)
Esse trigger é usado no GA4 - Pageview principal (só dispare pageview normal quando hostname for válido).
b) Trigger Host suspeito (Custom Event)
Tipo: Custom Event
Event name: host_suspeito
This trigger fires on: All Custom Events (se preferir, use Some Custom Events com regex)
Alternativa: também podemos criar um trigger que dispare quando JS - Hostname does not match RegEx (se desejar detectar automaticamente sem dependência de dataLayer.push):
Ex.: Trigger tipo Page View com condição:
4) Tag GA4 para registrar o evento host_suspeito
Criamos uma tag do tipo Google Analytics: GA4 Event:
Measurement ID: use sua config (ou variável {{GA4 - TAG}})
Event name: host_suspeito
Event parameters:
hostname: {{hostname}} ← nossa variável Custom JS
page_location: {{Page URL}} (variável URL do GTM)
outros parâmetros que achar úteis (referrer, client_id, etc.)
Triggering: vincular à trigger Host suspeito (ou ao Custom Event host_suspeito).
5) Como simular o ataque / testar via Console
Do console do Chrome (#DevTools) execute:
Opção A — empurrando hostname diretamente:
Opção B — usando page_hostname (algumas implementações usam esse nome):
Importante: o preview do GTM mostrará o evento. Para o GA4 aparecer no DebugView, verifique:
Tag GA4 configurada corretamente (medição encontrada no container)
O evento host_suspeito foi enviado (DebugView deve mostrar o evento com os parâmetros).
Se não aparecer no DebugView, verifique o Measurement ID e se existe algum bloqueio de consentimento.
6) Relatório exploratório no GA4 (Exploration)
Crie uma Exploração para monitorar:
Dimensão: hostname (ou use event parameter hostname)
Métrica: Event count
Filtro: event name = host_suspeito
Adicione page_location, event_time, user_country como colunas
Ou no relatório padrão: Engagement → Events, clique em host_suspeito e explore parâmetros.
7) Alerta por e-mail / webhook (opcional, recomendado ainda validando isso…)
No GTM criamos uma tag Custom HTML / HTTP Request que chama um webhook quando host_suspeito dispara. Exemplo:
Tag: Custom HTML (ou Fetch/Beacon via Tag template)
No nosso caso usamos um webhook que dispara um e-mail para a equipe com prints e dados (pode ser um Azure Function, Netlify Function, Make/Integromat ou AWS Lambda que faz envio via SMTP/SES).
Trigger: Host suspeito.
8) Ajustes finais que fizemos (resumo prático)
Criamos hostname (Custom JS) que prioriza dataLayer e fallback em document.location.hostname.
Criamos trigger de validação com regex contendo todos os hosts confiáveis.
Criamos um trigger separado para suspeito (ou um evento customizado).
Criamos tag GA4 que registra host_suspeito com parâmetros.
Simulamos via console (dataLayer.push(...)) para validar GTM Preview e GA4 DebugView.
Adicionamos tag webhook para alertas imediatos por e-mail.
Publicamos mudanças (workspace → submit / publish) e monitoramos.
9) Código/regex usados (recapitulando)
Regex hosts confiáveis (exemplo):
Custom JS variable (já mostrado acima).
dataLayer.push de teste:
Payload do webhook (exemplo JSON):
10) Checklist rápido (para replicar)
Criar variável hostname (Custom JS) com fallback.
Definir lista de domínios confiáveis e montar regex.
Criar trigger Host válido (Page View) usando regex.
Criar trigger Host suspeito (Custom Event / Page View not match).
Criar Tag GA4 Event host_suspeito com parâmetros (hostname, page_location).
Criar tag Webhook (ou Custom HTML) para enviar alerta por e-mail.
Testar com dataLayer.push(...) em modo Preview / Tag Assistant.
Publicar container e monitorar GA4 DebugView + Exploration.
11) Observações e boas práticas
Publicar com cuidado: mudanças em triggers de pageview podem afetar contagem de pageviews; prefira testar em ambiente de staging e usar Initialization quando precisar bloquear cedo.
Consentimento: se seu site usa consent mode, verifique se tags e webhooks respeitam leis locais (LGPD/GDPR).
Auditoria periódica: rode relatórios semanais do evento host_suspeito e mantenha um playbook de resposta.
Bloqueio técnico: além de detectar, considere renegar tokens/credentials expostos, trocar secrets e avaliar cláusulas contratuais com fornecedores que possam ter exposto o código.
Conclusão / CTA
Transformamos uma detecção curiosa no GA4 em um fluxo robusto de defesa: detecção (GTM) → registro (GA4) → alerta (webhook / e-mail).
Se quiser que a equipe da Ad Rock faça a implantação completa em seus clientes (ajustando regex, relatórios e webhook), a gente se encarrega de automatizar, documentar e entregar o runbook. 😎