Cross-Domain Tracking: Setup Quando Site e Checkout São Domínios Diferentes

Cross-Domain Tracking: Setup Quando Site e Checkout São Domínios Diferentes - ilustração editorial

Análise & Tracking
/
7 min de leitura
/
Atualizado mai 2026

Cross-Domain Tracking: Setup Quando Site e Checkout São Domínios Diferentes

Sem cross-domain configurado, a jornada que passa por dois domínios vira duas sessões. A atribuição quebra, o self-referral aparece e a fonte original some do relatório.

GP
Por Giorgio Pasquale
·
Especialista em mídia paga

TL;DR · Em 3 linhas

O que você precisa configurar antes de confiar em qualquer relatório de atribuição

  • Cross-domain é obrigatório se a jornada passa por 2+ domínios. Site institucional, checkout externo (PagSeguro, Mercado Pago, Stripe) e página de obrigado em domínios distintos quebram o client_id sem linker.
  • Setup tem 3 partes: GA4 Admin > Data Streams > Tagging Settings > Configure your domains, GTM Conversion Linker em todas as páginas, e lista de exclusão de self-referral.
  • Sintoma clássico: Purchase aparece com source/medium do gateway de pagamento. Vejo conta perdendo 20-40% de Purchase atribuível à fonte original por causa disso.

Cross-domain tracking é o assunto que mais aparece quando abro uma conta nova de e-commerce. O cliente jura que o tracking está funcionando, o GA4 mostra Purchase, o Google Ads mostra conversões. Aí eu olho de perto: 30% das compras aparecem com source pagseguro.uol.com.br ou mpago.la. Isso não é fonte de tráfego. Isso é o próprio gateway de pagamento sendo tratado como referrer porque a sessão quebrou no meio da jornada.

O problema não é raro. Quase todo e-commerce no Brasil que usa gateway externo sofre disso de alguma forma. E a maioria descobre tarde, depois de meses confiando em relatórios que mentem por omissão. Esse post explica o que é cross-domain, por que o GA4 quebra sem ele, e como configurar do jeito certo em três pontos: GA4 stream, GTM Conversion Linker e lista de exclusão de self-referral.

O que é cross-domain tracking e quando importa

Cross-domain tracking é o conjunto de configurações que faz o GA4 reconhecer que o mesmo usuário visitou dois (ou mais) domínios distintos como parte da mesma sessão. Sem essas configurações, cada domínio é uma sessão nova, com um client_id novo, e qualquer evento que dispara no segundo domínio aparece atribuído ao primeiro domínio como referrer.

Importa toda vez que a jornada do usuário passa por mais de um domínio. E quando digo domínio, é o domínio raiz, não subdomínio. app.empresa.com.br e www.empresa.com.br são o mesmo domínio. empresa.com.br e checkout.pagseguro.uol.com.br são domínios diferentes e exigem cross-domain.

Antes de assumir que está tudo certo, vale revisar o setup base do GA4 para mídia paga. Cross-domain é uma camada que se monta em cima de um GA4 já bem configurado, não substitui o básico.

20-40%Purchase mal atribuído sem cross-domain

Faixa que vejo em contas de e-commerce com gateway externo sem cross-domain. As conversões aparecem com source pagseguro ou mpago.la em vez da fonte real (Google, Meta, orgânico).

Cenários comuns onde cross-domain entra em jogo

Os três cenários que mais aparecem na prática:

1. E-commerce com gateway externo. Você tem uma loja em minhaloja.com.br, o cliente clica em “Finalizar compra”, é redirecionado para checkout.pagseguro.uol.com.br ou www.mercadopago.com.br/checkout, paga e volta para minhaloja.com.br/pedido-confirmado. Três domínios na mesma jornada (na verdade dois, porque o último já é o seu).

2. Multi-site corporativo. Grupo que tem marca-mae.com.br, linha-a.com.br e linha-b.com.br e quer rastrear o usuário que navega entre as três marcas. Cross-domain é o que conecta os perfis.

3. SaaS com login em domínio separado. Marketing site em produto.com, app em app.produto.io. Quase ninguém configura cross-domain entre os dois e perde toda a atribuição do funil de trial.

Subdomínios do mesmo domínio raiz (ex: www.empresa.com e shop.empresa.com) não precisam de cross-domain. O cookie _ga é setado no domínio raiz por padrão e funciona entre subdomínios. Mas eu sempre verifico, porque às vezes o setup força o cookie em domínio específico e quebra mesmo subdomínio.

Por que o GA4 quebra sem cross-domain

O GA4 identifica o mesmo usuário através do client_id, que vive no cookie _ga. Esse cookie é first-party e fica armazenado no domínio que disparou o tag. Quando o usuário sai de siteA.com e entra em siteB.com, o navegador não envia o cookie de siteA.com para siteB.com, porque first-party significa exatamente isso: só vale no domínio que criou.

Sem cross-domain, o que acontece é que siteB.com gera um client_id novo e dispara um evento session_start novo. O referrer do document.referrer aparece como siteA.com. Aí o GA4 mostra siteA.com / referral como fonte da nova sessão. É o famoso self-referral.

1Usuário em site A
Vai pro gateway
Volta pro site A obrigado
Tracking quebrado
(self-referral)

Com cross-domain configurado, o GA4 anexa o client_id na URL como parâmetro _gl quando o usuário sai do domínio. O segundo domínio (ou o retorno ao primeiro depois do checkout) lê esse parâmetro e reusa o mesmo client_id. A sessão continua. A atribuição preserva a fonte original.

1Usuário em site A
Linker injeta _gl na URL
Gateway preserva
Site A obrigado lê _gl e reusa client_id

O detalhe importante: o parâmetro _gl tem tempo de vida curto (poucos minutos). Não é um cookie que persiste. É só o veículo para carregar o ID na transição entre domínios. Se o usuário ficar 30 minutos no checkout, a sessão pode expirar mesmo com cross-domain. Mas para a maioria dos casos, funciona.

Como configurar cross-domain no GA4

O setup no GA4 acontece em um único lugar: Admin > Data Streams > (selecionar o stream Web) > Configure tag settings > Configure your domains. Aí você lista todos os domínios que devem ser tratados como parte da mesma jornada.

No campo “Domain”, entra a regra. Pode ser Contains, Begins with, Ends with, Matches regex. Para a maioria dos casos, Contains resolve. Exemplo de lista típica para um e-commerce que usa Mercado Pago:

  • minhaloja.com.br (seu domínio principal)
  • mercadopago.com.br (checkout MP)
  • mpago.la (encurtador do MP, usado em alguns fluxos)

Para PagSeguro, adicionar pagseguro.uol.com.br e pag.ag. Para Stripe, checkout.stripe.com. Cada gateway tem seus domínios, e o cliente precisa checar todos os usados.

★ Atenção crítica

Self-referral é o sintoma mais comum. Quando você vê pagseguro.uol.com.br / referral ou mercadopago.com.br / referral aparecendo como source/medium de eventos de Purchase, é cross-domain quebrado. Não é o gateway “convertendo”. É o seu próprio gateway sendo lido como referrer da sessão nova que nasceu quando o usuário voltou.

Salvar a configuração. O GA4 começa a injetar o parâmetro _gl automaticamente nos links que apontam para qualquer domínio da lista. Não precisa mexer em código no seu site para isso funcionar, desde que o gtag.js (ou o GA4 Configuration tag no GTM) esteja carregado em todas as páginas envolvidas.

Como configurar GTM Conversion Linker

Se você usa GTM (e deveria, leia o post sobre conversion tracking com Google Ads e GTM), tem uma tag específica que ajuda no cross-domain do lado do Google Ads: o Conversion Linker.

O Conversion Linker é uma tag built-in do GTM que detecta os parâmetros gclid, gbraid e wbraid nas URLs e armazena em cookies first-party (_gcl_aw, _gcl_dc, etc). Esses cookies são o que o Google Ads usa para atribuir a conversão. Sem o Conversion Linker, quando o usuário volta do checkout externo, esses parâmetros somem e a conversão fica sem gclid conectado.

Setup:

  1. No GTM, criar Tag > Conversion Linker.
  2. Configurar para disparar em All Pages (Page View > All Pages).
  3. Em “Enable linking across domains”, marcar e listar os domínios (mesma lista do GA4).
  4. Publicar o container.

Conversion Linker é diferente do cross-domain do GA4. Um cuida do client_id do Analytics. O outro cuida do gclid do Google Ads. Os dois precisam estar ativos para o tracking ficar inteiro.

3configurações que precisam estar ativas

GA4 Configure your domains, GTM Conversion Linker e lista de exclusão de self-referral. Se faltar qualquer uma, o tracking de uma parte da jornada vai quebrar.

Lista de exclusão de self-referral: o passo que ninguém configura

Mesmo com cross-domain configurado certinho, em algumas situações o document.referrer ainda vai vir do gateway de pagamento quando o usuário voltar. Para o GA4 não tratar isso como uma sessão nova com source pagseguro / referral, existe a lista de “unwanted referrals”.

Vai em Admin > Data Streams > (selecionar o stream) > Configure tag settings > List unwanted referrals. Adiciona os mesmos domínios de gateway (pagseguro.uol.com.br, mercadopago.com.br, mpago.la, etc).

Isso diz para o GA4: se a sessão nasceu com referrer desses domínios, não conta como referral. Mantém a atribuição original (a que vinha antes do checkout). É a salvaguarda que pega os casos em que o cross-domain falhou por algum motivo (usuário com cookie bloqueado, sessão expirada, etc).

Vale aplicar a mesma lógica em atribuição no GA4. Se o modelo de atribuição olha para sessões e a sessão está poluída por self-referral, todo o resto degrada junto.

Como debugar e validar o setup

Configurar é metade. A outra metade é validar que está funcionando. Três ferramentas que eu uso:

1. DebugView no GA4. Ativa o modo debug (extensão GA Debugger ou parâmetro ?gtm_debug=1), faz o fluxo completo de compra no site, e acompanha em tempo real. Procura por dois sinais: o client_id precisa ser o mesmo antes e depois do checkout, e o evento Purchase precisa ter o source/medium correto (Google / cpc, não pagseguro / referral).

2. Tag Assistant (Google). Ativa no Chrome, faz o fluxo, e olha cada evento disparado. Confere se o Conversion Linker disparou em todas as páginas e se o GA4 Configuration está ativo nas páginas certas.

3. Inspecionar a URL na transição. Quando o usuário clica para ir ao checkout, a URL precisa ter o parâmetro _gl=... appended automaticamente. Se não tiver, o linker não está injetando, e o problema é antes de tudo. Geralmente significa que o domínio do checkout não está na lista.

Documentação oficial vale a leitura: Set up cross-domain measurement (GA4 Help) e o guia técnico do Simo Ahava sobre cross-domain em GA4, que é o material mais detalhado em inglês. Para casos de checkout específicos e debugging avançado, esse guia do Search Engine Land tem alguns padrões úteis.

Se você está montando o setup do zero, também faz sentido revisar a estrutura de UTMs em paralelo. UTM mal estruturada combinada com cross-domain quebrado é o pior dos mundos para atribuição.

Erros recorrentes que vejo no setup

Os erros que mais aparecem quando audito conta:

1. Lista de domínios incompleta. O cliente lista pagseguro.com.br mas o gateway redireciona para pagseguro.uol.com.br. Resultado: o linker não injeta o _gl e a sessão quebra. Solução: testar manualmente toda a jornada e capturar todos os domínios que aparecem no DevTools > Network.

2. Esquecer subdomínios do gateway. Mercado Pago usa www.mercadopago.com.br, mpago.la (encurtador) e em alguns fluxos secure.mercadopago.com. Listar só o domínio principal não basta. Adicionar todos.

3. Conflito de cookies em ambientes multi-tenant. Algumas plataformas de e-commerce (Shopify, Loja Integrada) setam o cookie _ga com domain específico em vez do raiz. Aí o cookie quebra entre subdomínios do próprio site. Verificar com DevTools > Application > Cookies o domain do _ga.

4. Conversion Linker em só uma página. Tem que estar em All Pages, não só na página de obrigado. Senão o gclid se perde antes de chegar lá.

5. Esquecer de adicionar o domínio em unwanted referrals. Configura o cross-domain bonitinho, mas não adiciona na lista de exclusão. Resultado: o cross-domain funciona em 80% dos casos, e nos 20% que falham, o self-referral mascara a fonte real.

6. Cookie banner que bloqueia o GA4 antes do consent. Se o GA4 não dispara antes do usuário aceitar cookies, o client_id não existe no momento da transição. Para clientes com checkout externo, o consent precisa acontecer cedo (idealmente antes do clique em “comprar”), ou o linker precisa rodar em modo consent-aware. Esse é o caso onde server-side tagging com GTM ajuda, porque move parte da lógica para o servidor.

Para os eventos customizados no GA4 que disparam após o retorno do checkout (ex: purchase na thank you page), tudo isso vale dobrado. Se o evento dispara com client_id novo, a conversão entra como nova sessão com source errado. E os benchmarks de mídia paga que você usa para comparar ficam contaminados.

Perguntas frequentes

Preciso de cross-domain se uso só Shopify ou WooCommerce nativo?

Geralmente não, porque Shopify e WooCommerce nativos rodam o checkout no mesmo domínio (minhaloja.com.br/cart/checkout). Não há transição de domínio. Mas se você usa um app de checkout externo (PagSeguro Transparente, Mercado Pago Checkout Pro, Stripe Checkout hospedado), volta a precisar. Verifique a URL durante o pagamento para saber.

Cross-domain funciona com cookies de terceiros bloqueados?

Funciona, porque o GA4 usa cookies first-party. O _gl que viaja na URL é o mecanismo justamente para contornar a restrição de cookies de terceiros. Mesmo com Safari ITP ou Firefox ETP bloqueando rastreamento, o cross-domain do GA4 continua operando (com algumas limitações de persistência de sessão).

O _gl na URL não polui o relatório de páginas?

Não, porque o GA4 ignora o _gl ao normalizar o page_location nos relatórios. Você vê a URL limpa em “Pages and screens”. O parâmetro só serve para a passagem de ID entre domínios e o GA4 abstrai isso no relatório.

Como sei se o setup está funcionando sem fazer compra de verdade?

Faz uma compra de teste com valor mínimo (R$ 1) ou usa o modo sandbox do gateway. Acompanha em DebugView do GA4 e no Tag Assistant. Olha o client_id dos eventos antes e depois do checkout: tem que ser idêntico. Olha o source/medium do evento Purchase: tem que ser o que trouxe a sessão original (Google / cpc, Meta / paid_social, organic, etc), não o gateway.

Cross-domain para Meta Pixel e Meta CAPI funciona igual?

Não exatamente. O Meta Pixel tem o fbclid e o cookie _fbp, e o mecanismo é parecido mas tem nuances próprias. O ideal para Meta é usar Meta CAPI server-side, que envia o evento direto do seu servidor para o Meta com fbp, fbc e external_id. Aí o cross-domain importa menos, porque o evento crítico (Purchase) sai do servidor independente do que aconteceu no navegador.

Se eu uso Google Ads, ativar cross-domain melhora ROAS?

Não melhora ROAS real, mas melhora ROAS reportado, porque conversões que antes apareciam sem gclid conectado passam a ser atribuídas. Em conta de e-commerce com gateway externo, vejo recuperação de 15-30% nas conversões atribuídas ao Google Ads depois de ativar Conversion Linker corretamente. O efeito prático é que campanhas que pareciam ruins voltam a respirar quando o tracking pega as compras que estavam soltas.

Preciso configurar cross-domain entre domínios .com e .com.br do mesmo negócio?

Sim. empresa.com e empresa.com.br são domínios totalmente distintos para o navegador. Se o usuário cruza entre os dois, precisa de cross-domain configurado em ambos os streams (ou no mesmo stream, se você consolida tudo em um), com a lista de domínios incluindo as duas variantes.

Rolar para cima