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.

Ou experimente github.com, bbc.co.uk

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ódigoSignificadoUse para
301Movido permanentementeHTTP 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.
308Permanente, método preservadoIgual ao 301, mas um POST continua sendo POST. Comum em plataformas mais novas.
302Encontrado (temporário)Um desvio para login, uma página de manutenção, um teste A/B.
307Temporário, método preservadoIgual 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.
303Ver outroMandar 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://www para https://www para https://. 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.