Após instalar seu certificado SSL, você precisa redirecionar todo o tráfego HTTP para HTTPS. Sem um redirecionamento, os visitantes que acessam http://seudominio.com não usarão a conexão criptografada — mesmo que o HTTPS esteja disponível.
Use um redirecionamento 301 (permanente) para que os mecanismos de busca transfiram todos os sinais de classificação para a URL HTTPS.
Nginx
Adicione um bloco server separado para a porta 80 que redireciona tudo:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Isso preserva o caminho completo da URL: http://example.com/page?q=1 → https://example.com/page?q=1.
Após editar, teste e recarregue:
sudo nginx -t && sudo systemctl reload nginx
Apache
Opção 1: Redirecionamento via VirtualHost (recomendado)
Adicione à sua configuração do Apache:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
Opção 2: .htaccess (hospedagem compartilhada)
Se você não tem acesso à configuração do VirtualHost (hospedagem compartilhada), adicione ao .htaccess do seu site:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Requer que o mod_rewrite esteja habilitado.
Após as alterações:
sudo apachectl configtest && sudo systemctl reload apache2
Verifique o redirecionamento
# Deve retornar 301 com Location: https://...
curl -I http://yourdomain.com
Saída esperada:
HTTP/1.1 301 Moved Permanently
Location: https://yourdomain.com/
HSTS: a trava dupla
Após confirmar que seu redirecionamento funciona, adicione HSTS (HTTP Strict Transport Security). Isso instrui os navegadores a sempre usar HTTPS, mesmo que o usuário digite http://:
Nginx:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
Apache:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Comece com um max-age curto (ex.: 300 segundos) para testar, depois aumente para 2 anos (63072000) quando tiver certeza de que tudo funciona.
Aviso: Uma vez que o HSTS esteja ativo com um
max-agelongo, os navegadores se recusarão a conectar via HTTP mesmo se você remover o HTTPS. Certifique-se de que sua configuração HTTPS é estável antes de definir uma duração longa.
Padrões comuns de redirecionamento
Redirecionar www para non-www + HTTPS
# Nginx: www → non-www, HTTP + HTTPS → HTTPS
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
return 301 https://example.com$request_uri;
}
Redirecionar non-www para www + HTTPS
server {
listen 80;
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
return 301 https://www.example.com$request_uri;
}
Redirecionar um domínio antigo inteiro
server {
listen 80;
listen 443 ssl;
server_name olddomain.com www.olddomain.com;
ssl_certificate /etc/ssl/old-fullchain.pem;
ssl_certificate_key /etc/ssl/old-privkey.pem;
return 301 https://newdomain.com$request_uri;
}
Você precisa de um certificado SSL válido para o domínio antigo também — os navegadores devem estabelecer HTTPS antes de receberem o redirecionamento. Use um certificado SAN que cubra ambos os domínios, ou um certificado separado para o domínio antigo.
Solução de problemas
Loop de redirecionamento (ERR_TOO_MANY_REDIRECTS)
Isso geralmente significa que seu bloco de servidor HTTPS também está redirecionando para HTTPS. Verifique se apenas o bloco da porta 80 possui o redirecionamento — o bloco da porta 443 deve servir o conteúdo normalmente.
Outra causa: um balanceador de carga ou proxy (Cloudflare, AWS ALB) termina o SSL e encaminha HTTP para seu servidor. Seu servidor vê HTTP e redireciona. Corrija verificando o header X-Forwarded-Proto:
# Atrás de um proxy/balanceador de carga
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
URLs HTTP antigos em cache nos mecanismos de busca
Após configurar os redirecionamentos, informe o Google sobre a mudança:
- Atualize
<link rel="canonical">para usarhttps:// - Atualize as URLs do seu sitemap para
https:// - No Google Search Console, adicione a propriedade HTTPS
O Google atualizará gradualmente as URLs indexadas conforme segue os redirecionamentos 301.
Perguntas frequentes
Devo redirecionar www para non-www (ou vice-versa) ao mesmo tempo?
Sim. Escolha uma forma canônica e redirecione a outra. Isso evita conteúdo duplicado nos mecanismos de busca:
# Redirecionar www para non-www (Nginx)
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
O redirecionamento afetará o SEO?
Um redirecionamento 301 transfere sinais de classificação para a URL de destino. O Google recomenda redirecionamentos 301 para migração de HTTP para HTTPS. Pode haver uma pequena flutuação temporária, mas a longo prazo o SEO melhora por causa do sinal de classificação HTTPS.
E quanto ao conteúdo misto após o redirecionamento?
O redirecionamento lida com as URLs das páginas, mas se seu HTML referencia recursos (imagens, scripts, CSS) com URLs http://, os navegadores os bloquearão ou mostrarão avisos. Veja nosso guia de correção de conteúdo misto.
Como testo se meu redirecionamento está funcionando corretamente?
# Verificar cadeia de redirecionamento
curl -ILs http://yourdomain.com | grep -E '^HTTP|^Location'
Saída esperada:
HTTP/1.1 301 Moved Permanently
Location: https://yourdomain.com/
HTTP/2 200
A primeira resposta deve ser 301 com um Location HTTPS, e a resposta final deve ser 200.
Devo redirecionar no nível do DNS ou do servidor?
No nível do servidor (configuração Nginx/Apache ou .htaccess). Redirecionamentos no nível do DNS (como Page Rules do Cloudflare) funcionam, mas adicionam um salto de rede e dão menos controle sobre o comportamento do redirecionamento. Redirecionamentos no nível do servidor são mais rápidos e confiáveis.