# Redirecionar para uma página de agradecimento após enviar o formulário

> Mande visitantes para sua própria página de agradecimento depois do envio: o redirecionamento 303, o campo _redirect, quais domínios são permitidos e o que o refresh faz.

Publicado em 2026-10-25 · https://ikiform.com/pt-br/guides/html-form-submission/redirect-after-submit

Um formulário não consegue se redirecionar sozinho; o servidor que recebe o envio responde `303 See Other` com um header `Location`, e o navegador carrega essa página. Com o Ikiform, defina **Redirect after submit** (redirecionar após o envio) nas configurações do formulário, ou adicione um input oculto `_redirect` com uma URL `https:` em um dos **Allowed domains** do formulário. Sem nenhum dos dois, os visitantes chegam à página de agradecimento hospedada do Ikiform.

O exemplo é um formulário de pedido de demo cuja página de agradecimento é na verdade um próximo passo: ela pede ao visitante para escolher um horário. Isso torna o destino do redirecionamento mais importante que o normal, e levanta a pergunta de que esta página mais trata: quem pode decidir para onde um formulário manda as pessoas.

## O que muda aqui

O HTML não tem atributo para "vá para cá depois de enviar". O `action` é para onde os dados vão, e a página seguinte é o que o servidor responder. Então o redirecionamento é sempre decisão do servidor que recebe. Quando esse servidor é o Ikiform, há exatamente duas formas de influenciá-lo, e elas não têm o mesmo nível de confiança.

|   | Configuração Redirect after submit | Input oculto `_redirect` |
| --- | --- | --- |
| Quem define | Membros do seu workspace, no painel | Qualquer pessoa que possa editar o HTML da página, ou o navegador do visitante |
| Destinos permitidos | Qualquer URL `http:` ou `https:` | Só `https:`, num domínio permitido ou num subdomínio de um deles |
| Escopo | Um destino para o formulário inteiro | Um por página, então por idioma ou por campanha |
| Quando os dois estão definidos | Prevalece | Ignorado |

As regras rígidas do `_redirect` existem porque o valor dele chega junto com o envio. Sem elas, qualquer um poderia colocar a URL do seu formulário num link que envia e depois joga os visitantes numa página de phishing, que é o que é um open redirect.

Diagrama: Como o Ikiform escolhe para onde mandar o navegador depois de um envio bem-sucedido

1. Se o formulário tem uma URL de Redirect after submit nas configurações, o Ikiform responde com um 303 para ela e não procura mais nada.
2. Caso contrário, se o envio tem um campo _redirect, ou _next, que é uma URL https num domínio permitido sem porta nem credenciais, o Ikiform redireciona para lá.
3. Caso contrário, o Ikiform redireciona para a página de agradecimento hospedada, que tem um link de volta para a sua página quando o envio veio de uma página https num domínio permitido.

A primeira correspondência vence. Um _redirect que não passa nas regras é ignorado em silêncio; nunca vira erro.

## O formulário

`demo.html`:

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <label for="email">Work email</label>
  <input id="email" name="email" type="email" autocomplete="email" required />

  <label for="company">Company</label>
  <input id="company" name="company" autocomplete="organization" required />

  <label for="team_size">Team size</label>
  <select id="team_size" name="team_size">
    <option value="1-10">1 to 10</option>
    <option value="11-50">11 to 50</option>
    <option value="51+">51 or more</option>
  </select>

  <input type="hidden" name="_redirect" value="https://example.com/demo/next-step" />
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Request a demo</button>
</form>
```

Adicione `example.com` em **Allowed domains** do formulário e isto envia, recebe um `303` e chega a `/demo/next-step`. A página de agradecimento é HTML comum no seu site:

`demo/next-step.html`:

```html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="robots" content="noindex" />
    <title>Thanks, pick a time</title>
  </head>
  <body>
    <h1>Thanks. One more step.</h1>
    <p>Pick a time for your demo. You'll get a calendar invite right away.</p>
    <p><a href="https://cal.example.com/acme/demo">Choose a time</a></p>
  </body>
</html>
```

- `noindex` a mantém fora dos resultados de busca. Ninguém deveria chegar lá pelo Google, e uma página de agradecimento aparecendo como página de entrada nos seus analytics é sinal de que algo aponta para ela.
- O refresh é seguro. Como o Ikiform respondeu com `303`, o navegador carregou esta página com GET, e recarregá-la não envia nada de novo.
- Se você conta conversões nesta página, conte uma vez por sessão. Um refresh ou um favorito a recarrega, e a contagem real é a do painel do Ikiform.

## Redirecionar para outro site

Suponha que você queira pular sua própria página e mandar as pessoas direto para uma ferramenta de agendamento em outro domínio, como `cal.example.com` ou o domínio de um serviço de agendamento. Com `_redirect`, esse domínio teria que estar em **Allowed domains**, e essa lista tem uma segunda função: ela decide quais sites podem enviar ao formulário. Adicionar o domínio de um serviço de agendamento significa que páginas nesse domínio também poderiam enviar ao seu formulário.

Use **Redirect after submit** nas configurações do formulário. Ele aceita qualquer URL, porque só o seu workspace pode defini-lo, e deixa **Allowed domains** listando só os seus próprios sites.

> O Ikiform redireciona para a URL exatamente como informada. Ele não acrescenta o id do envio nem valores de campos, então uma página de agendamento não pode ser pré-preenchida pelo redirecionamento. Peça o e-mail de novo lá, ou coloque o link para a página de agendamento na sua própria página de agradecimento.

## Páginas diferentes para formulários diferentes

A configuração do painel é uma URL por formulário. Quando um formulário aparece em várias páginas que precisam de páginas de agradecimento diferentes, deixe a configuração vazia e dê a cada página seu próprio `_redirect`. Uma página em alemão manda os visitantes para a página de agradecimento em alemão:

`de/demo.html`:

```html
<input type="hidden" name="_redirect" value="https://example.com/de/demo/danke" />
```

### Acrescentando um valor ao redirecionamento

Query strings no `_redirect` são mantidas, então você pode passar o que o visitante escolheu para a página de agradecimento. Defina o valor num listener de submit, que roda depois da validação do navegador e antes de o formulário ser codificado:

`demo.js`:

```js
const form = document.querySelector("form");
const redirect = form.elements.namedItem("_redirect");

form.addEventListener("submit", () => {
  const size = form.elements.namedItem("team_size").value;
  const next = new URL("https://example.com/demo/next-step");
  next.searchParams.set("size", size);
  redirect.value = next.href;
});
```

O visitante chega em `/demo/next-step?size=11-50`, e a página pode mostrar o link de agendamento certo para aquele tamanho de equipe. Use só valores não pessoais: query strings acabam no histórico do navegador, em logs de servidor e nos analytics.

## Redirecionar depois de um envio por fetch

Uma chamada `fetch` recebe JSON, não um redirecionamento, então as regras de redirecionamento do Ikiform não se aplicam. Navegue você mesmo quando a resposta for `ok`:

`Redirecionar a partir de um script`:

```js
const response = await fetch(form.action, {
  method: "POST",
  headers: { Accept: "application/json" },
  body: new FormData(form),
});
const result = await response.json();
if (result.ok) location.assign("/demo/next-step");
```

Use `location.assign` em vez de `location.replace` se o botão voltar deve retornar ao formulário. O [guia sem recarregar](https://ikiform.com/pt-br/guides/html-form-submission/without-page-reload.md) tem o handler completo com erros e estado de carregamento.

## Confira se funciona

1. Em **Allowed domains** do formulário, adicione o domínio do seu site, mais `localhost` enquanto desenvolve. Deixe vazio para aceitar envios de qualquer lugar.
2. Envie o formulário pela sua página no ar. A barra de endereço mostra sua página de agradecimento, e o painel Network mostra o envio respondido com `303`.
3. Aperte refresh na página de agradecimento. O navegador não pede para reenviar, e o painel continua mostrando um envio.
4. Troque o `_redirect` por um endereço num domínio que não é permitido e envie. Você chega à página de agradecimento hospedada do Ikiform, sem erro.
5. Abra **Submissions** no painel. O novo envio está lá com todos os campos que você enviou.

## Pegadinhas

| Problema | Causa e solução |
| --- | --- |
| `_redirect` é ignorado mesmo com o domínio permitido | **Redirect after submit** está definido nas configurações do formulário, e ele sempre prevalece. Limpe-o para usar redirecionamentos por página |
| Funciona em produção, não em `localhost` | `_redirect` precisa ser `https:` sem porta, então `http://localhost:3000/thanks` nunca passa. Teste num deploy de preview, ou aceite a página hospedada localmente |
| A página de agradecimento hospedada não tem link de volta para o seu site | Ela só tem o link de volta quando o envio veio de uma página `https:` em um dos domínios permitidos do formulário. Adicione o domínio, ou redirecione para sua própria página |
| O navegador cai na página de agradecimento do Ikiform em vez da sua | O `_redirect` é ignorado, a menos que o domínio dele esteja em **Allowed domains** e ele seja uma URL `https:`. Adicione o domínio, ou defina **Redirect after submit** nas configurações do formulário. |
| A página de agradecimento aparece nos resultados de busca | Adicione `<meta name="robots" content="noindex">` a ela, e não coloque link para ela na sua navegação |

As regras exatas, com exemplos de URLs que passam e que falham, estão em [Formulários HTML](https://ikiform.com/pt-br/docs/html.md#redirect-rules). A [visão geral](https://ikiform.com/pt-br/guides/html-form-submission.md#response) explica por que a resposta é um `303` e não um `302` ou `200`.

## Perguntas

### Como redirecionar para outra página depois que um formulário HTML é enviado?

O servidor que recebe o formulário responde com um redirecionamento 303 para a página. Com o Ikiform, defina Redirect after submit nas configurações do formulário, ou adicione um input oculto _redirect com uma URL https em um dos domínios permitidos do formulário.

### Por que meu _redirect é ignorado?

Ou a configuração Redirect after submit do formulário está definida, e ela sempre prevalece, ou a URL não passa nas regras: precisa ser https, num domínio permitido ou num subdomínio de um deles, sem porta, usuário ou senha. Formulários sem domínios permitidos ignoram _redirect.

### Posso redirecionar para outro site depois que o formulário é enviado?

Sim. Coloque a URL na configuração Redirect after submit do formulário, que aceita qualquer URL http ou https. Usar _redirect exigiria adicionar esse site aos seus domínios permitidos, o que também o deixa enviar ao seu formulário.

### A página de agradecimento pode mostrar o que o visitante enviou?

Não pelo redirecionamento do Ikiform, que usa a URL exatamente como informada. Você pode acrescentar valores não pessoais à URL de _redirect num listener de submit, ou mostrar uma mensagem pelo seu próprio script depois de um envio por fetch.

## Mais guias

- [Envio de formulários HTML](https://ikiform.com/pt-br/guides/html-form-submission.md): O que o navegador faz quando um formulário é enviado: quais campos manda, como os codifica, o que o servidor deve responder e como o Ikiform responde.
- [Sem recarregar a página](https://ikiform.com/pt-br/guides/html-form-submission/without-page-reload.md): Envie um formulário com fetch e FormData para o visitante continuar na página, com erros de campo, estado de carregamento, novas tentativas e um plano B quando scripts falham.
- [O atributo action](https://ikiform.com/pt-br/guides/html-form-submission/action-attribute.md): O que o atributo action de um formulário faz, como valores relativos e vazios são resolvidos, como formaction manda um formulário a dois lugares e por que hosts estáticos respondem 405.
- [Validação de formulários](https://ikiform.com/pt-br/guides/html-form-submission/validation.md): Valide um formulário com required, type, pattern e min, estilize erros com :user-invalid e aplique as mesmas regras no servidor com definições de campos.
