Rastreio de redirecionamentos
Um site tem quatro portas de entrada: http e https, cada um com e sem www. Este rastreio passa pelas quatro, anota cada salto e verifica se todas terminam no mesmo endereço HTTPS.
Um site, quatro endereços
Para uma pessoa, todos estes parecem o mesmo lugar:
http://example.com/ http://www.example.com/ https://example.com/ https://www.example.com/
Um navegador ou um robô de busca vê quatro origens distintas. O esquema pode mudar, o nome do host pode mudar, e nada no projeto da web diz que eles têm de devolver o mesmo conteúdo. Enquanto isso, um panfleto impresso, um favorito antigo e um link num post de fórum de cinco anos atrás vão usar cada um um endereço diferente.
Um redirecionamento liga todos eles. O servidor pula a página e responde com um status de três dígitos na faixa dos 300 mais um cabeçalho Location indicando outro endereço, e o navegador vai para lá. Um site bem arrumado escolhe um dos quatro como endereço real e faz os outros três responderem com um único redirecionamento para ele.
Os códigos de status que levam os visitantes
| Código | Significado | Use para |
|---|---|---|
301 | Movido permanentemente | HTTP para HTTPS, www para sem www, uma página renomeada. Os navegadores guardam em cache e os buscadores transferem a entrada do índice para o novo endereço. |
308 | Permanente, método preservado | Igual ao 301, mas um POST continua sendo POST. Comum em plataformas mais novas. |
302 | Encontrado (temporário) | Um desvio para login, uma página de manutenção, um teste A/B. |
307 | Temporário, método preservado | Igual ao 302 para formulários e APIs. Os navegadores também mostram um 307 para a passagem a HTTPS que eles mesmos fazem por causa do HSTS. |
303 | Ver outro | Mandar o navegador para uma página de resultado depois do envio de um formulário. |
O rastreio mostra o código de cada salto na coluna Caminho, na ordem em que o servidor os devolveu.
Como o rastreio é avaliado
Nosso servidor consulta cada um dos quatro endereços e segue até oito redirecionamentos. O destino alcançado pela maioria é considerado o endereço principal do site, e cada ponto de partida é comparado com ele.
- Endereço final / 1 salto
- A variante é o endereço principal, ou chega lá com um redirecionamento. É isso que você quer.
- 2 saltos ou mais
- Uma cadeia, por exemplo
http://wwwparahttps://wwwparahttps://. Funciona, mas cada salto extra custa uma ida e volta completa, muitas vezes de 100 a 300 ms num celular. - Redirecionamento temporário
- Um 302, 303 ou 307 no caminho. Quando a regra deveria ser permanente, isso deixa os buscadores em dúvida sobre qual endereço manter.
- Endereço diferente
- A variante termina em outro lugar, então o site existe em duas versões. Avaliado como erro.
- Falhou
- Sem resposta. Avaliado como erro para o domínio sem www e como aviso para
www.
Um destino que não é HTTPS é sempre um erro. Na página final, o rastreio também examina o HTML em busca de conteúdo misto, ou seja, scripts, folhas de estilo, frames, destinos de formulário, imagens e mídia ainda endereçados com http://. Os navegadores bloqueiam os quatro primeiros tipos, por isso eles são erros, enquanto imagens e mídia são avisos. Por fim, ele lê o link rel="canonical" e avisa se ele aponta para um nome de host diferente daquele a que os redirecionamentos levam.
Escrever a regra uma vez só
As cadeias aparecem quando duas camadas fazem cada uma metade do trabalho, como um painel de hospedagem que força HTTPS e um plugin que depois tira o www. Mande todas as variantes direto para o endereço final numa única regra.
nginx
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
return 301 https://example.com$request_uri;
}Apache (.htaccess)
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]No Cloudflare, ative “Always Use HTTPS” e adicione uma regra de redirecionamento para o nome de host. O nome www precisa do seu próprio registro DNS e tem de estar coberto pelo certificado, senão os visitantes nem chegam ao redirecionamento. O inspetor de certificado TLS verifica isso.
Só a página inicial é rastreada, e só os redirecionamentos enviados como códigos de status HTTP. Um redirecionamento feito com JavaScript ou com uma tag <meta http-equiv="refresh"> não é seguido, e páginas internas podem obedecer a outras regras. O conteúdo misto é detectado no código-fonte HTML, então recursos que os scripts adicionam depois passam despercebidos.
Perguntas frequentes
Qual é a diferença entre um redirecionamento 301 e um 302?
Um 301 diz que a mudança é permanente. Os navegadores lembram dela e os buscadores substituem o endereço antigo pelo novo. Um 302 diz que o endereço original continua sendo o certo e que o desvio pode acabar. Use 301 ou 308 para as regras de HTTPS e de www.
Meu site deve usar www ou não?
Para o ranqueamento nas buscas, tanto faz. O domínio sem www é mais curto. A forma www pode ser um CNAME, o que algumas configurações de CDN e de hospedagem exigem. O que importa é que um redirecione para o outro.
Cadeias de redirecionamento prejudicam o SEO?
Uma cadeia de dois ou três saltos ainda passa os sinais de ranqueamento, e o Googlebot segue até dez saltos no total. O que você perde é velocidade para cada visitante que entra pelo caminho longo, e cada elo a mais na cadeia é mais uma coisa que pode quebrar.
O que é conteúdo misto?
Uma página HTTPS que carrega um recurso por http:// simples. Os navegadores bloqueiam esses scripts, folhas de estilo e frames, e tentam passar as imagens para HTTPS. Geralmente é resto de uma migração para HTTPS em que endereços antigos ficaram no conteúdo.
Corrigi um redirecionamento, mas meu navegador ainda vai para o endereço antigo. Por quê?
Os navegadores guardam respostas 301 em cache, às vezes por meses. Teste numa janela anônima ou com curl -I http://example.com, ou rode o rastreio de novo aqui. Nosso servidor não guarda cache entre as verificações.