301-vs-302-vs-307-vs-308-redirect-guide-2026.html
< BACK

301 vs 302 vs 307 vs 308: a matriz de decisão de códigos de redirecionamento para migrações de SEO

Quatro códigos de redirecionamento HTTP, quatro comportamentos significativamente diferentes, e um erro de SEO consistente que aparece em toda migração: usar como padrão 302 porque é o que o framework acontece de emitir. Aqui está a matriz de decisão real para 301 vs 302 vs 307 vs 308, mais o custo real de acertar errado.

Os quatro códigos em uma frase cada

301 Moved Permanently: o redirecionamento permanente canônico. Cacheável. O método pode mudar de POST para GET. O padrão para movimentações permanentes de URL.

302 Found: redirecionamento temporário. Cacheável mas com revalidação. O método pode mudar de POST para GET. Usado por frameworks como padrão; quase nunca a chamada certa para movimentos permanentes de SEO.

307 Temporary Redirect: como 302 mas o método é preservado. POST continua POST. Usado para movimentos temporários onde o método importa (raro em SEO de marketing site; comum em APIs).

308 Permanent Redirect: como 301 mas o método é preservado. POST continua POST. O substituto da era HTTP/2 para 301 quando a preservação de método importa. Frameworks modernos (Next.js, Vercel) emitem 308 por padrão para chamadas redirect().

Por que isso importa para SEO

Google afirmou publicamente que 301 e 308 transferem o sinal completo de PageRank. 302 e 307 transferem de forma menos confiável — a suposição embutida na interpretação do Google é que um redirecionamento temporário aponta para um destino temporário, então o sinal canônico deve permanecer na URL original. Em uma migração, isso é exatamente o oposto: você quer que o sinal canônico se mova.

Impacto no mundo real: um site que implementa redirecionamentos de migração como 302 em vez de 301 normalmente perde 20-40% do tráfego orgânico nos primeiros 60 dias após a transição. A correção não é sutil, mas também nem sempre é detectada porque os 302s funcionam para os usuários (o navegador os segue, a página carrega). O Search Console sinaliza o problema no relatório de Coverage sob "Page with redirect", mas a maioria das equipes ignora esse relatório durante o pânico pós-transição.

A matriz de decisão

Três perguntas. Responda-as em ordem; o resultado determina o código.

Pergunta 1: O movimento é permanente?

Se sim (a URL está se movendo para sempre, a URL antiga não retornará): use 301 ou 308. Se não (a URL retornará, isso é temporário): use 302 ou 307.

Pergunta 2: A URL está recebendo solicitações POST?

Se sim (envios de formulário, chamadas de API, POSTs JSON): use 307 ou 308 (método preservado). Se não (navegação do navegador, clique em link): 302 ou 301 funcionam bem.

Pergunta 3: Qual é o padrão do framework?

Pilhas modernas: Next.js redirect() emite 308 por padrão, vercel.json [[redirects]] usam 308 a menos que permanent: false seja definido, Netlify _redirects usam 301 a menos que explicitamente informado o contrário. Apache mod_rewrite usa 302 por padrão, o que pega todo mundo na primeira vez. Sempre verifique o padrão do seu framework antes de contar com ele.

Os quatro erros mais comuns

  • Usar 302 por padrão porque Apache/Express/Flask emitem isso como padrão para o helper redirect(). Solução: defina explicitamente 301 em todas as regras de redirecionamento para uma movimentação permanente.
  • Usar 307 pensando que é o 301 moderno. Não é — 307 é o 302 moderno (temporário, preservador de método). Para movimentações permanentes use 308 ou 301.
  • Misturar 301 e 302 no mesmo mapa de redirecionamento. Escolha um (301 para migrações) e use-o em todos os lugares; códigos mistos confundem o relatório do Search Console.
  • Esquecer que 308 preserva o método POST. Se sua URL antiga era um endpoint de envio de formulário e você a redireciona com 308 para a nova URL, os dados POST fluem. Se você usar 301, o navegador converte POST para GET e o envio do formulário é perdido. Conhecer a diferença evita uma classe real de bugs.

Quando usar qual, na prática

Redirecionamentos de migração (domínio antigo → novo domínio, slug antigo → novo slug): use 301. O mais simples, mais amplamente suportado e explicitamente declarado pelo Google como uma transferência completa de PageRank.

Movimentações permanentes onde a preservação de método importa (endpoints POST, envios de formulário): use 308. A transferência de PageRank é idêntica a 301; a única diferença é que POST permanece POST.

Movimentações temporárias (teste A/B, redirecionamentos geográficos, manutenção): use 302. A transferência de PageRank reduzida é o comportamento correto porque a URL de origem deve manter seu sinal de classificação.

Movimentos temporários com preservação de método (endpoints de API sob failover temporário): use 307.

Como configurar cada código em plataformas comuns

Vercel (vercel.json)

Bloco [[redirects]]. Configure permanent: true para 308 (padrão), permanent: false para 307. Para forçar 301 use statusCode: 301 explicitamente. A maioria dos deploys modernos do Vercel padronizam 308, o que funciona bem para migrações; a escolha conservadora para SEO é 301 para máxima compatibilidade com crawlers e indexadores mais antigos.

Netlify (netlify.toml ou _redirects)

Sintaxe _redirects: /old-url /new-url 301 para permanente, /old-url /new-url 302 para temporário. Adicione ! para forçar o status: /old-url /new-url 301!.

Apache (.htaccess)

Redirect 301 /old-url /new-url para permanente. RewriteRule com flag [R=301,L] para redirects em estilo rewrite.

Nginx

return 301 https://example.com/new-url; dentro de um bloco location. Para correspondência de padrões: rewrite ^/old/(.*)$ /new/$1 permanent; (a flag permanent emite 301; a flag redirect emite 302).

Verificando os códigos em produção

Três comandos que todo engenheiro deve manter na memória muscular. curl -I https://example.com/old-url retorna o código de status nos headers da resposta. curl -ILk segue redirects e loga cada código de status pelo caminho (pega cadeias).

Para verificação em massa em centenas de URLs, é scriptável: um loop fetch do Node.js que lê um CSV de URLs antigas e loga status + destino final. Ou use o endpoint DataForSEO on-page Instant Pages, que retorna o rastreamento completo de redirect.

O resumo

301 para movimentações permanentes (padrão para migrações SEO). 308 quando a preservação de método importa e a movimentação é permanente. 302 para movimentações temporárias. 307 para movimentações temporárias com preservação de método. Os padrões do framework nem sempre estão certos; verifique-os no momento do deploy.

Leitura relacionada: 410 vs 404 cobre o caso de aposentadoria (URLs desaparecendo para sempre, não sendo movidas). A mesma migração geralmente precisa de ambas as decisões.

< BACK