← Base de Conhecimento

URL Encoding em Campanhas: O Erro Silencioso Que Corrompe UTMs e Perde Dados

Um único caractere especial sem encode correto destrói semanas de dados de atribuição no GA4. Veja como um traço duplo e um símbolo de porcentagem em utm_campaign custaram 3 semanas de analytics contaminado para uma grande rede varejista — e o checklist que previne isso.

Espaço Reservado · AdSense

O Problema Que Ninguém Vê até Ser Tarde Demais

Era uma campanha de e-mail para base de 480.000 assinantes de uma grande rede varejista. O utm_campaign estava definido no briefing como "Semana do Cliente — 50% OFF". Parecia inofensivo. O disparo foi feito, os cliques chegaram, as conversões aconteceram — e o Google Analytics 4 mostrava tráfego, mas a atribuição de campanha estava fragmentada em ao menos oito variações diferentes: (not set), Semana do Cliente, 50, OFF, entre outros fragmentos sem sentido.

Levou três semanas para identificar a causa raiz. O problema era que o valor do parâmetro UTM não estava codificado corretamente. O traço duplo (—), que é um caractere Unicode diferente do hífen simples (-), e o símbolo % dentro da string foram interpretados pelo servidor e pelos redirecionadores de e-mail de formas distintas, quebrando o parâmetro no meio.

Três semanas de dados contaminados. Uma campanha que movia R$ 2,3 milhões em verbas publicitárias sem dados confiáveis de atribuição.

Quais Caracteres Precisam Ser Codificados em URLs

A especificação RFC 3986 define quais caracteres são "seguros" em URLs e quais precisam de codificação percentual. Para parâmetros de query string — exatamente onde ficam os UTMs — a lista de caracteres que exigem encode é extensa:

  • Espaço%20 (ou + em alguns contextos, mas %20 é mais seguro)
  • &%26 (o & é o separador de parâmetros; dentro de um valor, precisa ser codificado)
  • %%25 (o próprio símbolo de porcentagem precisa de escape)
  • =%3D (separa chave de valor; dentro de um valor, precisa de encode)
  • +%2B
  • #%23 (inicia um fragmento — nunca deve aparecer antes do fragmento intencional)
  • ã, õ, ç e outros caracteres acentuados → UTF-8 percentual: ã = %C3%A3, ç = %C3%A7, õ = %C3%B5
  • Traço duplo (—, em dash)%E2%80%94

O ponto crítico para o marketing de varejo: nomes de campanhas brasileiras frequentemente incluem acentos, o símbolo de porcentagem (50% OFF) e travessões. Toda essa combinação é uma bomba-relógio se não for encodada antes de entrar na URL.

encodeURIComponent vs encodeURI: Qual Usar em UTMs

JavaScript oferece duas funções nativas de codificação, e a confusão entre elas é comum mesmo entre desenvolvedores experientes.

encodeURI(url) codifica uma URL completa, mas preserva os caracteres que têm função estrutural: :, /, ?, &, =, #. É útil quando você tem a URL completa e quer apenas torná-la segura sem destruir sua estrutura.

encodeURIComponent(valor) codifica tudo, inclusive os caracteres estruturais. É a função correta para codificar valores de parâmetros — incluindo os valores de UTMs. Se você quer que utm_campaign=Semana do Cliente — 50% OFF seja transmitido corretamente, o valor deve passar por encodeURIComponent:

const campaign = "Semana do Cliente — 50% OFF";
const encoded = encodeURIComponent(campaign);
// resultado: "Semana%20do%20Cliente%20%E2%80%94%2050%25%20OFF"

const url = `https://loja.com.br/promo?utm_source=email&utm_campaign=${encoded}`;

Nunca use encodeURI para codificar valores de parâmetros. Ela não codifica & e =, o que significa que um valor como A&B seria interpretado como dois parâmetros separados.

Como o GA4 Interpreta Parâmetros Malformados

O Google Analytics 4 processa os parâmetros UTM na chegada do clique. Quando o valor de utm_campaign chega malformado — por exemplo, utm_campaign=Semana%20do%20Cliente%20—%2050 seguido de OFF como se fosse outro parâmetro — o GA4 registra o que consegue interpretar e descarta o restante ou cria sessões com atribuição incorreta.

O resultado prático em relatórios:

  • Uma campanha aparece como várias campanhas diferentes com tráfego fragmentado
  • Sessões atribuídas a (not set) aumentam sem motivo aparente
  • A métrica de conversão por campanha fica subestimada para a campanha real e "vazada" para outras categorias
  • Relatórios de ROAS ficam imprecisos — verba investida vs receita atribuída não bate

Esse tipo de contaminação é especialmente grave em campanhas de alto volume porque os dados contaminados ficam armazenados definitivamente. O GA4 não retroage dados históricos quando o problema é corrigido — você perde aquele período para sempre em termos de análise confiável.

Checklist de Validação Antes de Disparar uma Campanha

Com base em anos operando campanhas de e-mail para bases multimilionárias no varejo brasileiro, este é o protocolo de validação de URLs que adotamos:

  1. Gere todos os links da campanha com uma ferramenta de URL building — nunca à mão no bloco de notas
  2. Cole cada URL no URL Encoder/Decoder e verifique a versão decodificada para confirmar que o valor original é preservado corretamente
  3. Teste o link no GA4 DebugView — ative o modo debug e clique no link para ver em tempo real como o GA4 interpreta cada parâmetro
  4. Verifique caracteres especiais no nome da campanha: acentos, %, &, #, traços duplos, aspas
  5. Valide redirecionamentos — se a URL passa por encurtadores ou redirecionadores do ESP (plataforma de e-mail), verifique se eles preservam os parâmetros encodados
  6. Teste em pelo menos 3 clientes de e-mail: Outlook tende a corromper URLs longas, Gmail e Apple Mail geralmente preservam
  7. Confirme na campanha ao vivo 30 minutos após o disparo — veja no GA4 Realtime se a fonte/meio aparece corretamente

A Ferramenta Certa para o Trabalho

O URL Encoder/Decoder da Toolbox Dev Design permite colar uma URL completa com UTMs e ver instantaneamente a versão encodada e decodificada lado a lado. Para campanhas de varejo, o fluxo ideal é: escrever o valor do UTM em linguagem natural → encodar → copiar o resultado para o template de e-mail. Nunca o contrário.

Perguntas Frequentes

É possível recuperar os dados de campanha que foram registrados errado no GA4?

Não. O GA4 não permite edição retroativa de dados históricos. Uma vez que uma sessão é registrada com atribuição incorreta, esse dado permanece assim permanentemente. A única saída é corrigir o problema para as coletas futuras e usar anotações no GA4 para documentar o período afetado, facilitando a interpretação futura dos relatórios.

O Google Tag Manager resolve o problema de UTMs malformados automaticamente?

Não automaticamente. O GTM processa os parâmetros que chegam na URL — se o UTM já chega malformado, o GTM vai ler o valor malformado. O GTM pode ajudar a normalizar valores via variáveis JavaScript customizadas após a chegada, mas a solução mais robusta é garantir que a URL saia correta da plataforma de e-mail ou da planilha de UTMs da campanha.

Devo usar hífen ou underline nos valores de UTM?

Ambos são seguros em termos de URL encoding — nem hífen nem underline precisam ser codificados. A escolha é de convenção: hífens são preferíveis para utm_campaign e utm_content porque facilitam a leitura nos relatórios. O importante é ser consistente em toda a organização e documentar o padrão adotado. Nunca use espaços, acentos ou caracteres especiais diretamente — sempre encode ou substitua por hífen.

Plataformas de e-mail como Klaviyo ou RD Station encodam os UTMs automaticamente?

Depende da plataforma e da configuração. Algumas encodam automaticamente, outras não. Algumas encodam o link como um todo mas podem dobrar o encoding (encodar um link já encodado, gerando %2520 em vez de %20). A prática mais segura é sempre testar enviando um e-mail de teste para si mesmo e verificar o link resultante antes do disparo para a base completa.

Caso Real: NuAto no Varejo

Em uma campanha de e-mail para base de 480 mil assinantes de uma rede varejista de grande porte, o briefing definia o nome da campanha como "Semana do Cliente — 50% OFF". O analista de marketing copiou o texto direto do documento de aprovação e colou no campo de utm_campaign da planilha de UTMs. O traço duplo (—) e o símbolo de porcentagem entraram na URL sem nenhum tratamento.

O disparo foi feito sem validação prévia dos links. Nos primeiros três dias, o GA4 mostrava volume de sessões compatível com o esperado, mas a dimensão "Campanha" no relatório de aquisição estava fragmentada em ao menos oito valores diferentes. A equipe de analytics atribuiu inicialmente à "variação normal de plataformas". Somente na terceira semana, durante uma auditoria de ROAS, foi identificado que as conversões estavam sendo atribuídas a campanhas inexistentes como "50" e "OFF".

O impacto foi irreversível nos dados históricos daquele período. A partir desse episódio, implantamos um protocolo de geração de UTMs com validação obrigatória no URL Encoder/Decoder antes de qualquer disparo. O processo acrescenta menos de 10 minutos ao fluxo de aprovação de campanha e elimina completamente essa categoria de erro. Nos 18 meses seguintes, zero ocorrências de UTM malformado em produção.

Carlos Zucolli

30 anos de experiência em varejo, marketing digital e desenvolvimento de soluções para o comércio brasileiro. Sócio da NuAto Comunicação e criador da Toolbox Dev Design. Já gerenciou campanhas para gigantes do Atacarejo, Home Center e Cooperativas de Consumo.

Ver perfil completo →
Espaço Reservado · AdSense
Espaço Publicitário