Después de instalar tu certificado SSL, necesitas redirigir todo el tráfico HTTP a HTTPS. Sin una redirección, los visitantes que accedan a http://yourdomain.com no usarán la conexión cifrada, incluso si HTTPS está disponible.
Usa una redirección 301 (permanente) para que los motores de búsqueda transfieran todas las señales de posicionamiento a la URL HTTPS.
Nginx
Añade un bloque server separado para el puerto 80 que redirige todo:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Esto preserva la ruta completa de la URL: http://example.com/page?q=1 → https://example.com/page?q=1.
Después de editar, prueba y recarga:
sudo nginx -t && sudo systemctl reload nginx
Apache
Opción 1: Redirección VirtualHost (recomendado)
Añade a tu configuración de Apache:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
Opción 2: .htaccess (hosting compartido)
Si no tienes acceso a la configuración de VirtualHost (hosting compartido), añade al .htaccess de tu sitio:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Requiere que mod_rewrite esté habilitado.
Después de los cambios:
sudo apachectl configtest && sudo systemctl reload apache2
Verificar la redirección
# Should return 301 with Location: https://...
curl -I http://yourdomain.com
Resultado esperado:
HTTP/1.1 301 Moved Permanently
Location: https://yourdomain.com/
HSTS: el doble candado
Después de confirmar que tu redirección funciona, añade HSTS (HTTP Strict Transport Security). Esto indica a los navegadores que siempre usen HTTPS, incluso si el usuario escribe http://:
Nginx:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
Apache:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Comienza con un max-age corto (por ejemplo, 300 segundos) para probar, luego auméntalo a 2 años (63072000) una vez que estés seguro de que todo funciona.
Advertencia: Una vez que HSTS está activo con un
max-agelargo, los navegadores se negarán a conectar por HTTP incluso si eliminas HTTPS. Asegúrate de que tu configuración HTTPS sea estable antes de establecer una duración larga.
Patrones comunes de redirección
Redirigir www a sin-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;
}
Redirigir sin-www a 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;
}
Redirigir un dominio antiguo completo
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;
}
Necesitas un certificado SSL válido para el dominio antiguo también: los navegadores deben establecer HTTPS antes de poder recibir la redirección. Usa un certificado SAN que cubra ambos dominios, o un certificado separado para el dominio antiguo.
Solución de problemas
Bucle de redirección (ERR_TOO_MANY_REDIRECTS)
Esto generalmente significa que tu bloque del servidor HTTPS también está redirigiendo a HTTPS. Verifica que solo el bloque del puerto 80 tenga la redirección; el bloque del puerto 443 debe servir contenido normalmente.
Otra causa: un balanceador de carga o proxy (Cloudflare, AWS ALB) termina SSL y reenvía HTTP a tu servidor. Tu servidor ve HTTP y redirige. Solución: verificar la cabecera X-Forwarded-Proto:
# Behind a proxy/load balancer
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
URLs HTTP antiguas en caché en motores de búsqueda
Después de configurar las redirecciones, informa a Google sobre el cambio:
- Actualiza
<link rel="canonical">para usarhttps:// - Actualiza las URLs de tu sitemap a
https:// - En Google Search Console, añade la propiedad HTTPS
Google irá actualizando gradualmente las URLs indexadas a medida que siga las redirecciones 301.
Preguntas frecuentes
¿Debo redirigir www a sin-www (o viceversa) al mismo tiempo?
Sí. Elige una forma canónica y redirige la otra. Esto evita contenido duplicado en los motores de búsqueda:
# Redirect www to non-www (Nginx)
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
¿La redirección afectará el SEO?
Una redirección 301 transfiere las señales de posicionamiento a la URL de destino. Google recomienda las redirecciones 301 para la migración de HTTP a HTTPS. Puede haber una pequeña fluctuación temporal, pero a largo plazo el SEO mejora gracias a la señal de posicionamiento de HTTPS.
¿Qué pasa con el contenido mixto después de redirigir?
La redirección maneja las URLs de las páginas, pero si tu HTML referencia recursos (imágenes, scripts, CSS) con URLs http://, los navegadores los bloquearán o mostrarán advertencias. Consulta nuestra guía de corrección de contenido mixto.
¿Cómo pruebo si mi redirección funciona correctamente?
# Check redirect chain
curl -ILs http://yourdomain.com | grep -E '^HTTP|^Location'
Resultado esperado:
HTTP/1.1 301 Moved Permanently
Location: https://yourdomain.com/
HTTP/2 200
La primera respuesta debe ser 301 con un Location HTTPS, y la respuesta final debe ser 200.
¿Debo redirigir a nivel de DNS o a nivel de servidor?
A nivel de servidor (configuración de Nginx/Apache o .htaccess). Las redirecciones a nivel de DNS (como las Page Rules de Cloudflare) funcionan pero añaden un salto de red y te dan menos control sobre el comportamiento de la redirección. Las redirecciones a nivel de servidor son más rápidas y confiables.