Conversão

Por que recebo envios duplicados do formulário?

Por Jake Luo · Publicado em 22 de set. de 2026

Porque o formulário foi mesmo enviado mais de uma vez e nada do lado que recebe percebeu. Uma página manda o mesmo contato duas vezes por pelo menos cinco motivos comuns — um segundo clique, a repetição de uma requisição que já tinha funcionado, um recarregamento, dois tratadores ligados ao mesmo formulário e os robôs — então desativar o botão após o primeiro toque resolve um deles e deixa o resto. A correção duradoura fica do lado que recebe: ignore um envio idêntico do mesmo formulário dentro de uma janela curta e responda a essa repetição exatamente como se ela tivesse sido aceita.

Cinco jeitos de um contato virar três

O instinto é desconfiar do formulário, e o formulário costuma estar bem. Duplicatas são o que acontece quando uma página comum encontra uma rede comum, e o primeiro passo útil não é uma correção — é descobrir qual destes você está vendo, porque eles não têm a mesma resposta.

  1. O visitante apertou enviar duas vezes. Nada mudou visivelmente depois do primeiro toque, então ele apertou de novo. É a causa mais comum e a única que o conselho de sempre, desativar o botão, realmente trata.
  2. Uma requisição foi repetida depois de já ter funcionado. O envio chegou ao seu tratador, o tratador guardou, e a resposta se perdeu na volta. Para quem envia, falhou, então ele tenta de novo. É esta que produz cópias idênticas com alguns segundos de diferença, e nenhum cuidado na página evita isso.
  3. A página foi recarregada ou alcançada de novo com o botão voltar. Um formulário que envia e depois desenha o próprio agradecimento no mesmo lugar vai de bom grado oferecer mandar tudo outra vez quando alguém recarregar. Essas cópias chegam com minutos ou horas de diferença, e isso é a pista.
  4. Duas coisas estão tratando um formulário. O tratador de formulários da própria hospedagem mais um script que um gerador ou um plugin adicionou, cada um mandando a sua cópia. Elas chegam ao mesmo tempo e muitas vezes têm formato diferente — uma leva todos os campos, a outra aparece pela metade.
  5. Não era uma pessoa. Pré-carregadores de links, escâneres de segurança e robôs comuns alcançam endpoints de formulário e às vezes os enviam. Essas cópias são inúteis mais do que apenas repetidas: campos em branco, valores sem sentido ou a mesma carga vinda de muitos endereços. Um campo-armadilha — uma entrada que um humano nunca vê nem preenche — elimina a maioria com quase nenhum esforço.

Duas leituras resolvem quase todos os casos. Olhe o intervalo entre as cópias: simultâneo aponta para dois tratadores ou um robô, alguns segundos para um segundo clique ou uma repetição, minutos ou mais para um recarregamento. Depois olhe se as cópias são idênticas, porque um segundo contato genuíno de uma pessoa real quase sempre difere em algo, nem que seja numa palavra.

A correção pertence ao lado que recebe

Tudo nessa lista, tirando os robôs, é comportamento normal e não um defeito que você possa eliminar. Redes perdem respostas, pessoas clicam duas vezes, navegadores reenviam o que mandaram enviar. Nada disso vai parar, então o que precisa mudar é o que acontece quando o mesmo contato chega pela segunda vez.

O mecanismo é pequeno. Derive uma impressão curta do conteúdo do envio, lembre dela por alguns minutos e, se um conteúdo idêntico chegar de novo dentro dessa janela, não guarde uma segunda cópia. Isso cobre o segundo clique, a repetição de rede e o recarregamento de uma vez, porque não importa qual deles aconteceu — importa só que este contato exato já foi visto.

A parte fácil de errar é com o que você responde à duplicata. Hospedamos as páginas que os nossos clientes publicam, então os formulários de contato deles enviam todos para um endpoint nosso, e duplicatas eram uma reclamação que voltava: três sites de clientes diferentes, com um contato guardado três vezes, cinco vezes e duas vezes. Ela se repetiu até o endpoint começar a responder à duplicata byte a byte como se tivesse sido aceita. Um endpoint que recusa uma repetição, mesmo com educação e com uma mensagem útil, avisa a página na frente dele que algo deu errado, e aí a lógica de repetição da própria página, ou o visitante lendo o erro, manda mais uma vez. Um endpoint que desduplica mas parece uma falha é um gerador de duplicatas.

Escolher a janela e o que não jogar fora

O tamanho da janela é a única decisão de julgamento de verdade, e ela troca um erro por outro. Curta demais e uma repetição lenta ainda entra. Longa demais e você descarta em silêncio um segundo contato real — a pessoa que escreveu de manhã, não ouviu nada e escreveu de novo com as mesmas palavras. Alguns minutos cobrem as causas mecânicas, que acontecem todas rápido; ficamos com dez, e um formulário de contato é tolerante aqui porque um segundo contato genuíno tão próximo é raro.

Tire a impressão dos campos que o visitante preencheu, e de mais nada. É tentador resumir a requisição inteira, e isso desliga silenciosamente o mecanismo todo, porque um carimbo de tempo, um token de sessão ou um parâmetro de rastreamento mudam a cada envio — então toda duplicata parece única e nada nunca é pego. A mesma cautela vale para qualquer coisa que a sua própria página anexe ao envio depois que o visitante terminou com ele.

Por fim, conte as duplicatas que você descarta em vez de jogá-las fora em silêncio. Um endpoint que desduplica e um caminho de entrega quebrado são idênticos vistos de uma caixa vazia, e um dos dois é bem mais urgente: contatos que nunca chegam é outra investigação, e você quer poder descartar esta rápido em vez de ficar se perguntando se a sua própria correção comeu a mensagem.

Perguntas frequentes

Desativar o botão de enviar depois do primeiro clique resolve isso?
Resolve uma causa de cinco, e ainda assim vale a pena, porque essa causa é a mais comum e a mudança é trivial. Dê ao visitante um sinal imediato de que o toque foi registrado e desative o controle enquanto a requisição está em voo. O que isso não alcança é uma repetição que acontece abaixo da página, um recarregamento, um segundo tratador ou um robô — então trate isso como o acabamento e a checagem do lado que recebe como a correção.
Devo usar um token único por formulário em vez de resumir o conteúdo?
Se você controla as duas pontas, sim: essa é a versão mais forte e é o que as APIs de pagamento fazem. Quem envia gera uma chave quando o formulário é desenhado e a reutiliza em cada repetição, então quem recebe reconhece uma repetição com exatidão em vez de inferir. O motivo para resumir o conteúdo é que isso não exige nada de quem envia, o que importa quando o formulário foi produzido por um construtor de sites, um gerador ou um plugin que você não controla.
Como limpo as duplicatas que já tenho?
Agrupe por conteúdo e não por carimbo de tempo, guarde a mais antiga de cada grupo e leia uma amostra antes de apagar qualquer coisa, porque dois contatos genuinamente distintos podem ser idênticos palavra por palavra quando alguém insiste depois do silêncio. Se as cópias caíram na sua caixa como e-mail, o mesmo agrupamento funciona lá, e vale conferir se a sua resposta foi só para uma delas. Conserte o endpoint primeiro, ou você estará fazendo isso de novo na semana que vem.
Perguntas relacionadas
Por que não recebo contatos pelo meu site?Meu site precisa de um backend?Quanto do tráfego do meu site é realmente bot?Como transformo visitantes do site em cadastros?

Quer que a gente faça isso por você?

A AgentCeres é uma equipe de marketing com IA gerenciada: especialistas redigem o trabalho e você aprova o que vai ao ar. 14 dias de teste grátis, a partir de R$ 99/mês.

Começar teste grátisMais respostas