Demasiadas redirecciones (bucle infinito)

Cuando el navegador dice que la página redirige demasiadas veces: causas habituales y qué revisar en DNS, SSL y servidor.

Síntoma y contexto

El navegador muestra un mensaje del tipo demasiadas redirecciones, ERR_TOO_MANY_REDIRECTS o simplemente no carga la web aunque el servidor parece encendido. Lo que ocurre por debajo es una cadena de respuestas HTTP 301 o 302: cada URL te manda a otra, y esa otra te devuelve a la primera. El navegador corta la cadena tras unos quince saltos y muestra error.

Este fallo es muy habitual tras activar HTTPS, al migrar a Cloudflare, al cambiar la URL canónica en WordPress o al mezclar redirección de www con forzado de HTTPS en dos sitios distintos (CDN y servidor). A veces solo afecta a usuarios logueados o a una ruta concreta como /wp-admin, lo que indica plugin o regla demasiado amplia.

No confundas el bucle con una web caída: en un bucle el servidor responde, pero las reglas se contradicen. La guía de web que no carga cubre timeouts y errores 5xx; aquí el foco es la cadena de redirecciones.

Causas probables

  1. Cloudflare SSL en Flexible con origen que fuerza HTTPS. El visitante habla HTTPS con Cloudflare, pero Cloudflare llama al origen por HTTP. Si el origen redirige todo a HTTPS, Cloudflare vuelve a pedir HTTP y el bucle no termina.
  2. Doble forzado de www. El DNS o CDN redirige dominio.comwww.dominio.com y el servidor hace lo contrario www → apex.
  3. WordPress: URL de sitio y URL de inicio distintas. Campos siteurl y home inconsistentes en base de datos o en wp-config.php generan redirecciones cruzadas.
  4. Reglas duplicadas en .htaccess o nginx. Dos bloques que reescriben http→https y luego https→http, o reglas heredadas de un hosting anterior.
  5. Plugin de SSL o caché agresivo. Plugins que "arreglan" mixed content redirigiendo todo sin excluir admin o API.
  6. Cookie de sesión o HSTS corrupta. Menos frecuente, pero una cookie de "siempre https" combinada con un origen temporal en http puede buclear en un subconjunto de usuarios.

Checklist copiable

BUCLE DE REDIRECCIONES - [tu-dominio.com]
Fecha: ___________

1. URL QUE FALLA (exacta)
   ___________

2. VARIANTES PROBADAS (marca bucle S/N)
   [ ] http://dominio.com        bucle: ___
   [ ] https://dominio.com       bucle: ___
   [ ] http://www.dominio.com    bucle: ___
   [ ] https://www.dominio.com   bucle: ___

3. CDN / DNS
   [ ] Cloudflare proxy (naranja)  [ ] DNS only  [ ] Sin CDN
   Modo SSL Cloudflare: Flexible / Full / Full strict: ___

4. CADENA curl -I (pegar)
   curl -I http://dominio.com
   curl -I https://dominio.com
   (Location: de cada respuesta)

5. CAMBIOS RECIENTES (48 h)
   [ ] Activé SSL  [ ] Migré hosting  [ ] Cambié www
   [ ] Instalé plugin  [ ] Otro: ___

6. PRUEBA INCOGNITO
   [ ] Mismo fallo sin extensiones

Qué capturar antes de escribir

La salida de curl -I para http y https del dominio afectado, con las cabeceras Location visibles. Captura del panel Cloudflare (modo SSL y una regla de redirección si existe). Si es WordPress, indica si cambiaste recientemente URL en Ajustes → Generales, sin pegar contraseñas de admin.

No hace falta acceso SSH para el primer diagnóstico. Con la cadena de redirecciones suele bastar para ver si el conflicto es Flexible/Full o www/apex.

Comandos útiles

# Ver solo cabeceras y redirecciones (Linux/macOS)
curl -I -L --max-redirs 5 https://tudominio.com

# Ver redirecciones sin seguirlas (para contar saltos)
curl -I https://tudominio.com
curl -I http://tudominio.com
curl -I https://www.tudominio.com

En Chrome o Firefox: pestaña Red → recargar → primera petición del documento → columna de redirecciones. Busca patrones que alternen entre http y https o entre www y sin www.

Pasos por escenario

Cloudflare delante del origen

Entra a SSL/TLS → Overview. Si el origen ya tiene certificado válido, usa Full o Full (strict), no Flexible. Flexible es la causa número uno de bucles con WordPress y nginx forzando HTTPS. Tras cambiar, espera un minuto y prueba en incógnito.

Revisa Rules → Redirect Rules y Page Rules legacy. Dos reglas que fuerzan https y www en distinto orden pueden chocar con las del servidor.

WordPress

Comprueba que WP_HOME y WP_SITEURL en wp-config.php, o los valores en la base de datos, usan el mismo esquema (ambos https) y el mismo host (ambos con o sin www). Mezclar https://www en uno y https://sin-www en otro genera bucle clásico.

Sin WordPress (nginx, Apache, estático)

Busca un solo punto de verdad para la URL canónica. Lo habitual: redirigir todo a https + www en el CDN, y en el origen no volver a redirigir host. En Apache, un solo bloque RewriteCond para HTTPS suele bastar.

Cómo leer la cadena con curl

Empieza sin seguir redirecciones. Cada respuesta debe mostrar un código (301, 302, 307, 308) y una cabecera Location. Anota el salto completo: esquema (http/https), host (www o apex) y ruta. Si ves un patrón A→B→A, ya tienes el bucle.

# Un salto cada vez (no uses -L todavía)
curl -sI http://tudominio.com | grep -iE 'HTTP/|location:'
curl -sI https://tudominio.com | grep -iE 'HTTP/|location:'
curl -sI http://www.tudominio.com | grep -iE 'HTTP/|location:'
curl -sI https://www.tudominio.com | grep -iE 'HTTP/|location:'

# Seguir como máximo 5 saltos y ver la cadena
curl -sI -L --max-redirs 5 https://tudominio.com

Si curl termina bien pero el navegador sigue en bucle, sospecha de cookie, extensión o HSTS local. Prueba ventana privada y otro dispositivo o red. Si solo falla en un subconjunto de usuarios, el origen puede estar bien y el problema es caché o regla condicional (país, dispositivo, path).

Tabla práctica: modo SSL en Cloudflare

  • Off: casi nunca útil en producción. El visitante puede ir en claro.
  • Flexible: visitante↔Cloudflare en HTTPS, Cloudflare↔origen en HTTP. Si el origen redirige todo a HTTPS, nace el bucle clásico. Evítalo si el origen ya fuerza HTTPS.
  • Full: HTTPS hasta el origen, pero acepta certificado autofirmado o incompleto en origen. Mejor que Flexible; aún no es lo ideal.
  • Full (strict): exige certificado válido en el origen (Let's Encrypt, comercial o Origin Certificate de Cloudflare). Es el modo estable cuando el origen está bien.

Si acabas de activar Flexible para “arreglar el candado” y apareció el bucle, vuelve a Full o Full (strict) y arregla el certificado de origen. Para errores 525/526 del proxy, usa las guías de error 525 y certificado SSL.

WordPress: siteurl y home sin tocar contraseñas

En Ajustes → Generales, Dirección de WordPress (URL) y Dirección del sitio (URL) deben coincidir en esquema y host. Si no puedes entrar al admin porque el bucle también afecta a /wp-admin, no compartas la contraseña de administrador por el formulario. Opciones seguras:

  1. Definir temporalmente WP_HOME y WP_SITEURL en wp-config.php con la URL canónica correcta (mismo https y mismo host).
  2. Renombrar el plugin de redirección o SSL agresivo vía SFTP/panel de archivos (añade un sufijo al nombre de la carpeta) y probar de nuevo.
  3. Si usas un plugin de “forzar HTTPS”, desactívalo mientras Cloudflare o el hosting ya fuerzan HTTPS.

Haz copia de wp-config.php antes de editar. No pegues el contenido completo del archivo en el formulario: basta con indicar qué valores pusiste (sin secretos de base de datos).

HSTS y cookies: cuándo importan

HSTS (cabecera Strict-Transport-Security) hace que el navegador recuerde “siempre HTTPS” para ese dominio. No suele crear el bucle por sí solo, pero puede enmascarar pruebas: crees estar entrando por http y el navegador ya fuerza https. Borra HSTS solo si sabes cómo (chrome://net-internals/#hsts) y tras documentar el estado. En la mayoría de casos basta con incógnito o otro navegador limpio.

Cookies de sesión o de “forzar SSL” de plugins pueden redirigir según una cookie rota. Prueba sin cookies (incógnito) y, si el bucle desaparece, limpia cookies del dominio o desactiva el plugin sospechoso.

Orden de corrección recomendado

  1. Documenta la cadena curl de las cuatro variantes de URL.
  2. Unifica el modo SSL del CDN con lo que hace el origen.
  3. Deja una sola capa forzando www/apex (preferible el CDN).
  4. Alinea URLs de la aplicación (WordPress u otra) con esa canónica.
  5. Prueba en incógnito y con curl. Solo entonces limpia caché de página o purge del CDN.

Cuándo escalar

Escala si tras poner Cloudflare en Full (strict) y unificar www sigue el bucle, o si no tienes acceso al panel del CDN ni al hosting para leer reglas. En el formulario, categoría Web o despliegue, adjunta la salida de curl y las capturas del modo SSL.

Enlaces relacionados: La web no carga, Certificado SSL caducado, Error 525 Cloudflare, El dominio no apunta bien.

¿Sigues atascado después de la checklist?

Escribir el problema Volver al triage