Guia · GA4
(not set) no GA4: o que é, por que aparece e como resolver no e-commerce
Guia mantido. Revisado a cada 6 meses; última revisão em . O comportamento do GA4 descrito aqui foi conferido nesta data.
Resumo
- (not set) é o GA4 dizendo: recebi o evento, mas não tenho esse valor. Não é um erro em si, é um sintoma, e a causa muda conforme a dimensão.
- No e-commerce, a causa que mais pesa é a compra enviada pelo servidor sem o identificador e a sessão do navegador: a venda entra, mas sem origem.
- Outras causas comuns: sessão sem page_view (página de destino), Google Ads sem vínculo ou sem gclid, dimensão de item com métrica de evento e dimensão personalizada que não existe naquele evento.
- Uma compra em (not set) é melhor que uma compra perdida: a receita bate, só falta a origem. O conserto é levar a identidade do navegador até o pedido.
- Um salto repentino de (not set) também pode ser fraude: numa loja, era um bot testando cartão em dezenas de pedidos, todos cancelados.
Toda loja que olha o GA4 com atenção uma hora esbarra no (not set). Ele aparece na origem das compras, na página de destino, na campanha do Google Ads, no nome do produto. E quase sempre alguém pergunta se o GA4 está quebrado.
Não necessariamente. (not set) é o GA4 dizendo: recebi o evento, mas não tenho esse valor. É um sintoma. A causa depende de qual dimensão está em (not set).
Por que ele aparece
O GA4 guarda cada informação num escopo: do evento, da sessão, do usuário ou do item. Quando você cruza uma dimensão com um evento que não tem aquele valor, ou que não está ligado àquela sessão, o relatório mostra (not set).
As causas mais comuns no e-commerce
| Onde aparece | Causa provável | Como resolver |
|---|---|---|
| Origem / mídia das compras | Compra enviada pelo servidor sem o client_id e o session_id do navegador |
Guardar o cookie _ga e a sessão no checkout e mandar junto com a compra |
| Página de destino | Sessão sem page_view: a pessoa voltou depois de 30 minutos parada e o primeiro evento foi um clique, ou o evento veio do servidor |
Pouco é normal. Muito é evento de servidor sem sessão |
| Campanha do Google Ads | Contas não vinculadas, marcação automática desligada ou gclid perdido num redirecionamento |
Vincular GA4 e Google Ads, ligar a marcação automática, testar se o gclid chega na página |
| Nome ou categoria do item | Dimensão de item cruzada com métrica do evento (ex.: categoria x receita da compra), ou item enviado sem o campo | Usar a receita do item com dimensão de item; conferir o array items |
| Dimensão personalizada | O parâmetro não vem naquele evento, ou a dimensão foi criada depois (não é retroativa) | Mandar o parâmetro em todos os eventos que vão ser cruzados |
Três coisas que parecem (not set), mas não são:
(direct) / (none)é sessão sem origem identificável, como quem digitou o endereço. O valor existe: é "direto".(other)é o GA4 agrupando valores quando o relatório tem linhas demais.- Gateway de pagamento como origem (a venda atribuída ao site do banco ou do intermediador) é outro problema: falta incluir o domínio na lista de referências indesejadas.
O caso que mais pesa: a compra enviada pelo servidor
Mandar a compra pelo servidor resolve um problema grande: ela deixa de depender da página de obrigado carregar no navegador. Numa loja VTEX que atendemos, a tag do navegador registra entre 84% e 88% dos pedidos; o resto nunca chega (os números).
Mas o servidor não tem o cookie de quem comprou. Se o envio sair do webhook do pedido sem o identificador do navegador, o GA4 recebe a compra, conta a receita e não sabe de qual sessão ela veio. Resultado: origem (not set).
Isso ainda é melhor que perder a venda. Com a compra em (not set), a receita do GA4 bate com a da loja e só falta a origem. Sem o envio pelo servidor, faltam as duas coisas.
O conserto é levar a identidade do navegador até o pedido. No Spark, o identificador do navegador fica guardado junto do checkout e é recuperado na hora em que o webhook do pedido chega. Assim a compra sai pelo servidor já ligada à sessão de quem comprou. O (not set) que sobra é de pedido feito sem cookie nenhum: navegador que bloqueia tudo, pedido criado pelo atendimento, pedido de robô.
Quando o (not set) sobe de repente
Numa loja que atendemos, a fatia de compras em (not set) saltou num único mês. Não era tracking: eram 57 pedidos feitos por um robô testando cartão, todos com o mesmo produto, o mesmo CEP e todos cancelados. Robô não tem cookie, então todos entraram sem origem.
Duas lições:
- Salto de
(not set)também é termômetro de fraude. Antes de mexer na tag, olhe os pedidos daquele dia. - Mande só pedido pago. Se a compra só vai para o GA4 quando o pagamento é aprovado, cancelado e teste de cartão nem entram.
Como medir no BigQuery
Com o export do GA4 para o BigQuery ligado, esta consulta mostra quantas compras chegaram sem sessão e quantas chegaram com sessão, mas sem nenhuma página vista nela:
WITH ev AS (
SELECT
event_name,
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS sessao,
ecommerce.transaction_id
FROM `seu-projeto.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260901' AND '20260930'
),
sessoes AS (
SELECT DISTINCT user_pseudo_id, sessao FROM ev WHERE event_name = 'page_view'
)
SELECT
COUNT(DISTINCT c.transaction_id) AS compras,
COUNT(DISTINCT IF(c.sessao IS NULL, c.transaction_id, NULL)) AS sem_sessao,
COUNT(DISTINCT IF(c.sessao IS NOT NULL AND s.sessao IS NULL, c.transaction_id, NULL)) AS sessao_sem_pagina
FROM ev c
LEFT JOIN sessoes s USING (user_pseudo_id, sessao)
WHERE c.event_name = 'purchase'
Troque o projeto, o número da propriedade e as datas. Compare compras com os pedidos pagos da loja no mesmo período: o que falta ali é venda que nem chegou, um problema diferente do (not set).
Quanto é aceitável
Não existe número oficial. Na prática, eu começo a investigar quando a receita em (not set) passa de uns 5% e, principalmente, quando ela muda de patamar de um dia para o outro. Patamar estável costuma ser estrutural, como pedido de atendimento e navegador sem cookie. Salto quase sempre tem uma causa com data: deploy, troca de checkout, robô.
Veja também Dado bruto do GA4 e Tag quebrada no GA4.
Fontes
- Google: Measurement Protocol do GA4 (consultado em 12/10/2026)
- Google: esquema do export do GA4 para o BigQuery (consultado em 12/10/2026)
Perguntas frequentes
O que significa (not set) no GA4?
Que o GA4 recebeu o evento, mas não tem valor para a dimensão que você está olhando: a origem da sessão, a página de destino, a campanha, o item ou uma dimensão personalizada.
Por que as compras aparecem com origem (not set)?
Na maioria das vezes, porque a compra foi enviada pelo servidor (Measurement Protocol, webhook) sem o client_id e o session_id do navegador de quem comprou. O GA4 conta a venda, mas não consegue ligá-la a uma sessão com origem.
(not set) é a mesma coisa que (direct)?
Não. (direct) / (none) é uma sessão sem origem identificável, como quem digitou o endereço. (not set) é falta do valor no dado. E (other) é outra coisa: agrupamento de valores quando há linhas demais no relatório.
Página de destino (not set) é problema?
Em pequena quantidade é normal: acontece quando a sessão começa sem page_view, por exemplo quando a pessoa volta depois de 30 minutos parada e o primeiro evento é um clique. Em grande quantidade, costuma ser evento enviado pelo servidor sem sessão.
Como reduzir o (not set) da compra?
Guardando o identificador do navegador (cookie _ga) e o número da sessão no checkout e mandando os dois junto com a compra enviada pelo servidor. Mandar só pedido pago também tira cancelado e fraude do número.