301 x 302: redirecionamentos permanentes e temporários
Um 301 diz que o recurso mudou de lugar em definitivo e que a nova URL deve substituir a antiga em todo lugar; um 302 diz que a mudança é temporária e que a URL original continua sendo a verdadeira. Os buscadores agem com base nessa diferença, e é por isso que o código errado custa posições.
O que os dois códigos dizem a um cliente
Os dois códigos mandam o cliente para o endereço que está no cabeçalho Location, e para o visitante eles são idênticos. A diferença está no que todo o resto faz com essa informação. Um 301 convida clientes e rastreadores a atualizar os registros deles: trocar o favorito, reescrever o link, indexar o destino em vez da origem. Um 302 pede que continuem usando a URL original e apenas façam um desvio desta vez. Navegadores podem guardar um 301 em cache e parar de perguntar ao servidor; um 302 não é cacheável por padrão, a menos que a resposta diga o contrário.
Quando usar cada um
- Use 301 para uma troca de domínio, uma migração de HTTP para HTTPS, uma canonicalização de sem-www para www, uma reestruturação permanente de URLs, uma página fundida ou renomeada, ou uma página de produto descontinuado apontando para o substituto mais próximo.
- Use 302 para uma página de manutenção, um teste A/B, uma escolha de landing page por região ou idioma que você talvez mude, uma URL de campanha de vida curta, ou um destino temporário de "volte mais tarde".
Nunca use um 301 para algo que você pretende reverter. Como os clientes guardam esse código em cache, visitantes recorrentes podem continuar caindo no destino temporário muito depois de você apagar a regra, e não há como alcançar o cache deles. O erro oposto: deixar um 302 numa mudança permanente faz a URL antiga continuar indexada, a nova competir com ela e os sinais permanecerem divididos.
Consequências para SEO
A documentação do Google afirma que um redirecionamento permanente é um sinal de que o destino do redirecionamento deve ser tratado como a URL canônica, enquanto um redirecionamento temporário não é, então a URL original mantém o lugar dela no índice. Na prática:
- Um 301 consolida a autoridade dos links no destino e, com o tempo, substitui a URL antiga pela nova no índice.
- Um 302 costuma deixar a URL de origem indexada. Os buscadores até tentam interpretar a intenção, então um 302 de longa duração pode acabar sendo tratado como permanente, mas você não deveria contar com um palpite acertado.
- Cadeias de redirecionamento diluem o benefício e deixam o rastreamento mais lento. Aponte as URLs antigas diretamente para o destino final.
- Redirecionar muitas páginas descontinuadas para a página inicial tende a ser tratado como um soft 404 e não como uma mudança de endereço. Redirecione para a página equivalente mais próxima, ou devolva um 410 se nada for equivalente.
- Seja qual for a escolha, mantenha coerência com as suas tags canônicas e com o seu sitemap. Sinais contraditórios são piores do que um sinal levemente inadequado.
307 e 308: as versões que preservam o método
As definições originais de 301 e 302 eram ambíguas quanto ao método HTTP, e os clientes acabaram adotando um comportamento que o padrão hoje descreve como histórico: ao seguir um 301 ou 302 depois de um POST, muitos clientes trocam o método para GET e descartam o corpo. Para uma página isso é inofensivo. Para um endpoint de formulário ou uma API, destrói a requisição e não relata nada.
O 307 Temporary Redirect tem o mesmo significado do 302, e o 308 Permanent Redirect tem o mesmo significado do 301, com uma exigência a mais nos dois: o método e o corpo precisam ser preservados. Então, para URLs que só recebem requisições GET, 301 e 302 estão de bom tamanho e são o que a maioria das ferramentas espera. Para qualquer coisa que aceite POST, PUT, PATCH ou DELETE, use 308 para uma mudança permanente e 307 para uma temporária. Se você quer especificamente que um POST seja seguido por um GET em outra URL, é para isso que serve o 303 See Other.
Como verificar qual código uma URL devolve
- Leia a linha de status e o destino sem seguir o redirecionamento:
A linha de status mostra 301, 302, 307 ou 308, ecurl -sI https://example.com/old-page | grep -Ei "^(HTTP|location|cache-control)"Locationmostra para onde ela aponta. - Siga a cadeia inteira e conte os saltos, para ver se um redirecionamento virou três:
curl -sIL -o /dev/null -w "%{num_redirects} hops, final %{http_code}, %{url_effective}\n" https://example.com/old-page - Teste com um POST se o endpoint aceitar. Se a requisição chegar ao destino como um GET sem corpo, troque a regra para 307 ou 308.
- Mude o código onde ele é gerado. Isso pode ser a aplicação, a configuração do servidor web, uma regra de
.htaccessou a CDN. Se duas camadas redirecionam, a mais externa vence e a regra interna fica invisível. - Verifique com o cache limpo. Um navegador que já guardou um 301 continua obedecendo a ele, então confirme com curl ou em uma janela anônima antes de concluir que a mudança não pegou.
- Depois de uma mudança permanente, mantenha o redirecionamento no lugar. Removê-lo mais tarde deixa órfão todo link e todo favorito que ainda aponta para a URL antiga.
Acompanhar um redirecionamento depois de configurá-lo
Um redirecionamento que muda de código, entra em loop ou perde o certificado TLS deixa a URL de origem ainda respondendo, então nada parece quebrado até o tráfego cair. Verificações externas que registram o código de status exato e seguem a cadeia mostram isso na execução seguinte, e rodá-las de várias redes distingue uma mudança global de regra de um problema regional da CDN. A HostTracker monitora sites desde 2004 e faz verificações a partir de mais de 300 pontos de verificação em 158 cidades. Veja o que uma URL devolve agora com a ferramenta de verificação HTTP, e leia o guia completo da família de redirecionamentos 3xx para os códigos vizinhos destes dois.