307 Temporary Redirect: qué es y cuándo usarla
Qué es una redirección 307 Temporary Redirect, cómo conserva estrictamente el método HTTP frente a una 302, dónde aparece (HSTS y traslados temporales) y cómo la trata Google para el SEO.
Idiomas
1 señal de evidencia en esta página
- Herramienta activa relacionadaHTTP Status & Redirect Checker
Una 307 Temporary Redirect significa para Google lo mismo que una 302: una señal débil y temporal que no transfiere el posicionamiento de la URL original al destino, así que no hay una razón de posicionamiento para preferir una sobre la otra. Su única diferencia real frente a una 302 es una garantía de la especificación: una 307 no debe cambiar el método ni el cuerpo de la solicitud, por lo que un POST sigue siendo un POST. Esto importa para formularios, API y frameworks modernos (Next.js usa 307 por defecto), pero no para las redirecciones normales de páginas GET. La 307 que más confunde no es una redirección en absoluto: es el artefacto exclusivo del navegador que produce HSTS al actualizar http a https, con un cuerpo de 0 bytes que el servidor nunca envió; un comprobador de redirecciones o una solicitud sencilla con curl (no solo una sesión de incógnito nueva, que no puede anular un dominio de la lista de precarga HSTS) muestra el código de estado real.
TL;DR — Una 307 es una redirección temporal, igual que una 302: envía a las personas y a los motores de búsqueda a una URL nueva por ahora, sin indicar a Google que traslade el posicionamiento de la URL antigua a la nueva. Lo único que la diferencia de una 302 es esto: una 307 promete no cambiar el tipo de solicitud. Si alguien envía un formulario (un POST), sigue siendo un POST. En los enlaces sencillos de una página a otra es invisible; solo importa para formularios y aplicaciones. Y la «307» que a veces ves en el navegador al actualizar a https no es una redirección real en absoluto.
Qué es una redirección 307
Cuando una URL se ha trasladado a otro sitio por ahora —no de forma permanente—, el servidor puede responder con una 307 Temporary Redirect y señalar la nueva ubicación al navegador. Es la misma idea básica que una 302: es temporal, así que Google no la trata como una señal para transferir el posicionamiento de la URL original a la nueva, como sí hace con una redirección permanente. Es una señal débil que no establece la canonicalización, no una garantía de que la URL original conserve sus posiciones o siga indexada para siempre. Usarías una redirección temporal para una página caída por mantenimiento, una campaña estacional o cualquier situación que planees revertir más adelante.
Evidence for this claim Google treats 307 as equivalent to 302 for Search while noting that the HTTP semantics differ. Scope: Google Search redirect handling; clients still need the semantically appropriate status code. Confidence: high · Verified: Google: HTTP status codes and SearchQué diferencia una 307 de una 302
En realidad solo hay una diferencia, y la mayoría de la gente nunca se la encuentra. Una solicitud web tiene un método —normalmente GET (solo obtener una página), pero a veces POST (enviar datos, como al enviar un formulario). Una 307 garantiza que el navegador conserve el mismo método al seguir la redirección. Los navegadores antiguos a veces convertían un POST en un GET en una 302, lo que podía romper el envío de un formulario. Una 307 elimina ese riesgo por norma. Evidence for this claim RFC 9110 defines 307 Temporary Redirect as a temporary move and requires clients not to change the request method when following it automatically. Scope: HTTP semantics for real server 307 responses, not browser-internal HSTS displays. Confidence: high · Verified: IETF: RFC 9110 §15.4.8 — 307 Temporary Redirect
Para la inmensa mayoría de las redirecciones —cuando alguien hace clic en un enlace a una página—, esto no cambia nada, porque en ambos casos son solicitudes GET.
¿Una 307 perjudica al SEO?
No. La documentación de Google dice que una 307 es «equivalente a» una 302. Ambas son temporales, así que ninguna transfiere el posicionamiento de la página antigua a la nueva como lo hace una redirección permanente (una 301). No hay ninguna penalización secreta ni ninguna mejora secreta: una 307 se trata exactamente igual que una 302.
La «307» que no es una redirección
Aquí está la parte que confunde a la gente. Si tu sitio fuerza https (una función de seguridad llamada HSTS), tu navegador a veces mostrará una «307» en sus herramientas de desarrollo cuando visites la versión http de una página. Tu servidor nunca la envió: el navegador se la inventó para explicar que saltó directamente a la versión segura por su cuenta. Incluso muestra una respuesta de 0 bytes, que es la pista reveladora.
Así que, si una herramienta de auditoría o tu navegador marca una 307 inesperada, no te asustes pensando que tu servidor está mal configurado. Una ventana de incógnito nueva suele borrar la memoria HSTS aprendida por el navegador y mostrar el código de estado real, pero no siempre: algunos dominios vienen en la lista de precarga HSTS integrada en los navegadores, que el modo incógnito no borra. Un comprobador de redirecciones o una solicitud con curl es una forma más fiable de ver qué devuelve realmente tu servidor.
¿Quieres conocer el lenguaje de la especificación, lo que ha dicho John Mueller, la mecánica completa de HSTS y cómo devolver realmente una 307? Cambia a la pestaña Avanzado.
TL;DR — Una 307 es una redirección temporal que, según RFC 9110, «MUST NOT change the request method» (traducción) «NO DEBE cambiar el método de solicitud» —la única garantía firme que una 302 no ofrece—. Para el SEO es irrelevante: la documentación de Google la enumera como «Equivalent to
302» (traducción) «equivalente a302» (una señal débil y temporal), y Mueller ha dicho que la elección entre 307 y 302 «doesn’t really matter» (traducción) «no importa realmente» para las búsquedas; la cuestión es si la redirección debe funcionar para tráfico POST/API. La 307 que realmente confunde a la gente es el artefacto HSTS: una «redirección» exclusiva del navegador, de 0 bytes, que el servidor nunca envió y que se produce cuando el navegador actualiza http a https por su cuenta. Tiene dos casos sin relación funcional, y mantenerlos separados es todo el trabajo.
Una 307 tiene dos casos completamente distintos
Esta es la idea organizadora de todo lo que sigue y procede directamente de mi guía de códigos de estado, donde la 307 tiene dos entradas separadas: «Redirección temporal 307: tiene la misma funcionalidad que una redirección 302, excepto que no puedes alternar entre POST y GET» y «Política HSTS 307: obliga al cliente a usar HTTPS al realizar solicitudes en lugar de HTTP». Comparten un número y casi nada más:
- 307 como redirección temporal real emitida por el servidor —elegida deliberadamente (o establecida como valor predeterminado por un framework) para conservar el método y el cuerpo HTTP en una solicitud que no sea GET.
- 307 como artefacto HSTS del navegador —no es una respuesta del servidor. El navegador actualiza internamente http a https y etiqueta esa actualización como una 307.
Confundir estos dos casos es la fuente más habitual de confusión con las 307. Los explicaré uno por uno.
Caso 1: la 307 real: qué exige exactamente la especificación
RFC 9110 (la especificación vigente de semántica HTTP) no deja lugar a dudas en §15.4.8:
Evidence for this claim RFC 9110 defines 307 Temporary Redirect as a temporary move and requires clients not to change the request method when following it automatically. Scope: HTTP semantics for real server 307 responses, not browser-internal HSTS displays. Confidence: high · Verified: IETF: RFC 9110 §15.4.8 — 307 Temporary Redirect“The 307 (Temporary Redirect) status code indicates that the target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI.” (traducción) «El código de estado 307 (Temporary Redirect) indica que el recurso de destino reside temporalmente bajo un URI diferente y que el agente de usuario NO DEBE cambiar el método de solicitud si realiza una redirección automática a ese URI».
Ese «MUST NOT» es un requisito firme, no una sugerencia. Compáralo con la sección 302 (§15.4.3), que documenta abiertamente el desorden histórico que la 307 se creó para solucionar: la ambigüedad histórica POST→GET de la sección 302 y su remisión a la 307 como solución. En otras palabras, la 307 existe específicamente para eliminar la ambigüedad POST→GET que los clientes antiguos tenían con las 302.
MDN expone la versión práctica de esta misma distinción:
“The difference between
307and302is that307guarantees that the client will not change the request method and body when the redirected request is made. With302, older clients incorrectly changed the method toGET.307and302responses are identical when the request method isGET.” (traducción) «La diferencia entre307y302es que307garantiza que el cliente no cambiará el método ni el cuerpo de la solicitud cuando se realice la solicitud redirigida. Con302, los clientes antiguos cambiaban incorrectamente el método aGET. Las respuestas307y302son idénticas cuando el método de solicitud esGET».
Esa última frase es la que más importa para el SEO. Casi todas las redirecciones que le interesan a un SEO —una página antigua hacia una nueva— son solicitudes GET, y para las solicitudes GET una 307 y una 302 son literalmente idénticas. La garantía de conservar el método solo importa cuando el método no es GET: reenvíos de formularios, endpoints de API, destinos de webhooks y envíos POST de procesos de pago o autenticación. La especificación garantiza el método y el cuerpo, pero no determina por sí sola cómo gestionará exactamente cada cliente las cabeceras, las credenciales o las solicitudes de origen cruzado al repetirla; por eso debes comprobarlo con tu cliente real en vez de asumir un comportamiento idéntico byte a byte. Si comparas ambos códigos directamente para un traslado normal de página, esa comparación se trata a fondo en el artículo específico sobre 302 frente a 307: este artículo da por conocido el concepto básico de redirección temporal del análisis detallado de la 302 y se centra en lo que es único de la 307.
302 frente a 303 frente a 307, en una tabla
Las tres están en la categoría «temporal» de RFC, pero no se comportan igual en los dos ejes que realmente importan: la conservación del método y la caché:
| Código | Método en la redirección automática | ¿Se puede guardar heurísticamente en caché? |
|---|---|---|
| 302 Found | Puede cambiar POST a GET (comportamiento histórico de los clientes; no es un requisito de RFC) | No |
| 303 See Other | Obtiene deliberadamente el destino con GET o HEAD | No |
| 307 Temporary Redirect | NO DEBE cambiar el método | No |
Ninguna de las tres se puede guardar heurísticamente en caché de forma predeterminada: una 307 (al igual que una 302 y una 303) necesita una señal explícita de frescura (Cache-Control, Expires, etc.) para que una caché la almacene sin volver a preguntar.
Caso 1, continuación: cómo trata Google una 307 real en el SEO
Versión corta: exactamente igual que una 302. La documentación de Google sobre códigos de estado HTTP enumera la fila de la 307 como «Equivalent to 302» y la fila de la 302, que hereda su comportamiento, explica lo que significa:
Google explica que los rastreadores siguen la redirección y usan el destino como una señal débil para procesarlo.
«Débil» es la palabra clave: una redirección temporal no consolida la canonicalización en el destino como lo hace una permanente. La documentación de Google sobre Redirecciones y Búsqueda de Google agrupa 302, 303 y 307 bajo «temporal» y describe directamente el comportamiento: “Googlebot follows the redirect, but the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” (traducción) «Googlebot sigue la redirección, pero el pipeline de indexación no usa la redirección como señal de que el destino de la redirección deba ser canónico». En la misma página, con el mismo encuadre de intención, dice: La misma página recomienda una redirección temporal cuando solo se quiere enviar a los usuarios a otra página por un tiempo.
Evidence for this claim Google's indexing pipeline does not use a temporary 302, 303, or 307 redirect as a signal that the redirect target should be canonical. Scope: redirect crawling, indexing, and canonicalization Confidence: high · Verified: Redirects and Google SearchInmediatamente después de las filas de la 307 y la 308, Google añade la salvedad que merece quedar grabada en la pared:
Google recuerda que los códigos tienen semánticas distintas y recomienda usar el apropiado para que otros clientes también se beneficien.
Así que Google agrupa 307 y 302 para el posicionamiento, pero aun así te dice que elijas el código semánticamente correcto. Esa es toda la respuesta de SEO. Evidence for this claim Google treats 307 as equivalent to 302 for Search while noting that the HTTP semantics differ. Scope: Google Search redirect handling; clients still need the semantically appropriate status code. Confidence: high · Verified: Google: HTTP status codes and Search John Mueller lo expresó aún más claramente en el episodio 51 del programa Fuera de registro de la Búsqueda («Hablemos de redirecciones»), al explicar que «with 307, 308, it also forwards POST requests» —a diferencia de 301/302, que reenvían solicitudes GET— y rematar con esta idea:
Mueller resume que la elección importa poco para el SEO y más bien debe comprobarse si funciona para las API.
No hay ninguna ventaja de posicionamiento en cambiar tus redirecciones temporales a 307. La única razón válida para elegirla es conservar el método y el cuerpo, o —como preferencia general para estar preparado para el futuro— la que explicaré al final.
Caso 1, continuación: valores predeterminados de frameworks y CDN
Cada vez más preguntas del tipo «¿por qué es una 307?» no surgen de decisiones deliberadas, sino de los valores predeterminados de los frameworks. La función redirect() de Next.js usa una 307 por defecto, y la documentación explica expresamente el motivo bajo un encabezado titulado literalmente «Why does redirect use 307 and 308?»: «The redirect() method uses a 307 by default, instead of a 302 temporary redirect, meaning your requests will always be preserved as POST requests.» (traducción) «El método redirect() usa una 307 por defecto, en lugar de una redirección temporal 302, lo que significa que tus solicitudes siempre se conservarán como solicitudes POST». (Next.js usa específicamente una 303 dentro de Server Actions y ofrece una permanentRedirect() independiente para el caso 308). Si ves 307 que no has escrito a mano, comprueba si tu framework o plataforma edge las está estableciendo como valor predeterminado para redirecciones que no sean GET: normalmente esa es la explicación y normalmente es correcto.
Caso 2: la «307 fantasma» de HSTS que tu servidor nunca envió
Este es el territorio genuinamente poco cubierto y donde un artículo específico sobre 307 se gana su lugar. Cuando un sitio envía una cabecera Strict-Transport-Security (HSTS), le dice al navegador: a partir de ahora, cárgame siempre mediante https. En la siguiente solicitud a la versión http, el navegador actualiza a https por sí mismo, sin hablar con el servidor, y muestra esa actualización interna como una «307» en las herramientas de desarrollo y en los rastreadores.
John Mueller explicó la mecánica en su sitio personal:
Mueller describe una actualización HSTS interna que el navegador presenta como 307 aunque el servidor no la haya enviado.
El cuerpo de 0 bytes es la pista: como añade Mueller, esa 307 es solo un marcador interno, no una redirección real. Mi propia guía de redirecciones explica la consecuencia práctica para las auditorías: «When web servers require clients to only use HTTPS connections (HSTS policy), Google won’t see the 307 because it’s cached in the browser. The initial hit (without cache) will have a server response code that’s likely a 301 or a 302. But your browser will show you a 307 for subsequent requests which makes it more difficult to troubleshoot. You will need to use a fresh Incognito session to see the returned status code.» (traducción) «Cuando los servidores web exigen que los clientes usen únicamente conexiones HTTPS (política HSTS), Google no verá la 307 porque está almacenada en la caché del navegador. El primer acceso (sin caché) tendrá un código de respuesta del servidor que probablemente será 301 o 302. Pero tu navegador te mostrará una 307 en las solicitudes posteriores, lo que dificulta la resolución de problemas. Necesitarás usar una sesión de incógnito nueva para ver el código de estado devuelto».
Qué ve realmente Googlebot con HSTS (y cómo evolucionó la historia)
Conviene leer juntas dos declaraciones de Google separadas por cinco años. En diciembre de 2015, Zineb Ait Bahajji (entonces en Google) dijo, según Search Engine Roundtable, Zineb describió el 307 HSTS como una actualización interna y dijo que Googlebot veía una redirección 301. En octubre de 2020, el encuadre de Mueller en un vídeo de Ask Google Webmasters (a través de Search Engine Journal) fue algo diferente: Mueller indicó que Googlebot no interactúa con esas 307 HSTS porque generalmente no son redirecciones reales. En cualquier caso, el rastreador no está viendo la misma «307» que una persona ve en las herramientas de desarrollo: las herramientas y la infraestructura de rastreo cambiaron (Fetch as Google se retiró para dar paso a Inspección de URL), pero el principio subyacente se mantuvo durante al menos una década: en el caso HSTS no existe una 307 real emitida por el servidor. Trata la declaración de 2020 como la orientación actual; la de 2015 es historia útil.
La conclusión operativa importante es esta: HSTS es una comodidad del navegador, no un mecanismo para descubrir páginas mediante el rastreo. Los propietarios de sitios siguen necesitando una redirección real del lado del servidor (una 301 genuina) para http→https si quieren que esa ruta funcione para los rastreadores.
Cómo trata Bing una 307
¿Sinceramente? Hay un vacío en la documentación. No he encontrado ninguna declaración pública de Bing que se refiera a la 307 por su nombre, ni específicamente a la 307 provocada por HSTS. La orientación de Bing sobre redirecciones (la publicación de 2011 Gestión de redirecciones — 301s, 302s y canónicas y la de 2020 Migración de sitios con Bing) solo cubre la división entre redirecciones permanentes y temporales 301/302: no menciona 307, 308 ni HSTS. Así que, en vez de suponer que Bing y Google se comportan igual, hay que decirlo claramente: Bing no ha publicado nada específico sobre la 307. El fenómeno sigue siendo real y relevante para los rastreadores independientemente del motor —Screaming Frog incluye precisamente una opción «Respetar la política HSTS» porque HSTS afecta al rastreo—, pero eso es documentación de una herramienta, no una declaración de Bing.
Cuándo elegir deliberadamente una 307
Elige una 307 (en lugar de una 302) siempre que perder el método o el cuerpo original pueda romper algo:
- Endpoints de API y destinos de webhooks que reciben POST/PUT/PATCH.
- Flujos de envío de formularios (POST) que redirigen después del procesamiento.
- Envíos POST de procesos de pago o inicio de sesión entre hosts.
- Cualquier caso en el que la solicitud lleve un cuerpo que no puedas permitirte perder.
Para un traslado sencillo de una página a otra, una 302 y una 307 son indistinguibles para Google, así que cualquiera sirve desde el punto de vista del SEO. Si estás tratando con la versión permanente de esta misma lógica de conservación del método, esa es la relación entre 301 y 308: 308 es a 301 lo que 307 es a 302.
Mi preferencia declarada, tomada de la guía de redirecciones , es más concreta que el habitual «da igual»: «my preferred order would be: 307 / 302 / 303 > Meta refresh 0 / HTTP refresh 0.» (traducción) «mi orden de preferencia sería: 307 / 302 / 303 por encima de Meta refresh 0 / actualización HTTP 0». Coloco la 307 primera entre las opciones temporales: usarla de forma coherente significa que siempre estás a salvo en lo relativo a conservar el método, que es aproximadamente el argumento de «integridad» que también planteó Mueller. Y elijas la que elijas, vigila que una 307 real (o el artefacto HSTS) no se convierta en un salto dentro de una cadena de redirecciones más larga: cada salto adicional añade latencia y reduce la eficiencia.
Resumen de IA
Una versión condensada de la versión Advanced:
- Una 307 tiene dos casos sin relación. (1) Una redirección temporal real, emitida por el servidor, que conserva el método y el cuerpo HTTP; (2) un artefacto del navegador HSTS: una «307» de 0 bytes que el servidor nunca envió y que se produce cuando el navegador actualiza http→https por su cuenta. Mantenerlos separados es todo el trabajo.
- Caso 1: la garantía de la especificación: RFC 9110 dice que una 307 “MUST NOT change the request method.” (traducción) «NO DEBE cambiar el método de solicitud». MDN añade que “307 and 302 responses are identical when the request method is GET” (traducción) «las respuestas 307 y 302 son idénticas cuando el método de solicitud es GET», así que solo importa para POST/PUT/PATCH (formularios y API). La garantía cubre el método y el cuerpo; la gestión de cabeceras, credenciales y solicitudes de origen cruzado al repetirla sigue dependiendo del cliente.
- 302 frente a 303 frente a 307: una 302 puede cambiar históricamente POST a GET, una 303 obtiene deliberadamente el destino con GET/HEAD, una 307 no debe cambiar el método y ninguna de las tres se puede guardar heurísticamente en caché por defecto.
- Respuesta de SEO: la documentación de Google enumera la 307 como «Equivalent to
302» —una señal débil y temporal que no consolida la canonicalización en el destino—. Mueller dice que, para el SEO, «it doesn’t really matter»; la pregunta real es «¿funciona para las API?». - Valores predeterminados de los frameworks:
redirect()de Next.js usa 307 por defecto (303 en Server Actions,permanentRedirect()para 308) para conservar POST: una fuente común de 307 «accidentales» que normalmente es correcta. - Caso 2: HSTS: el navegador muestra una 307 con un cuerpo de 0 bytes; el código real del servidor suele ser 301/302. Googlebot no ve esa 307 (Mueller, 2020: «doesn’t interact with them» (traducción) «no interactúa con ellas»; Zineb, 2015: «sees a 301» (traducción) «ve una 301»). Aun necesitas una 301 real del lado del servidor para http→https. Audita con un comprobador de redirecciones o con
curlsin opciones: una sesión de incógnito nueva normalmente también funciona, pero no para los dominios de la lista de precarga HSTS integrada en el navegador. - Bing: no hay ninguna declaración pública específica sobre la 307: es un vacío documental, no una prueba de paridad.
- Preferencia: no hay ninguna razón de posicionamiento para cambiar a 307; el propio orden de Patrick coloca la 307 primera entre las opciones temporales por preparación para el futuro.
Documentación oficial
Documentación y especificaciones de fuentes primarias.
- Códigos de estado HTTP, errores de red y DNS, y Búsqueda de Google — la fila «307 (temporary redirect) — Equivalent to
302», el lenguaje de «señal débil» de la 302 y la salvedad de que son «semánticamente diferentes». - Redirecciones y Búsqueda de Google — agrupa 302/303/307 como «temporales»; «el pipeline de indexación no usa la redirección como señal de que el destino de la redirección deba ser canonical».
Bing / Microsoft
- Gestión de redirecciones — 301s, 302s y canónicas — la orientación de Bing sobre redirecciones (solo 301/302; no menciona 307/HSTS).
- Migración de sitios con Bing — orientación sobre migraciones, de nuevo solo 301/302.
Especificación HTTP
- RFC 9110 §15.4.8 — Redirección temporal 307 — «MUST NOT change the request method» (traducción) «NO DEBE cambiar el método de solicitud».
- RFC 9110 §15.4.3 — 302 Found — la nota histórica sobre POST→GET que remite a 307.
Referencia técnica
- MDN — Redirección temporal 307 — conservación del método y el cuerpo; «identical when the request method is GET» (traducción) «idénticas cuando el método de solicitud es GET».
Framework
- Next.js — referencia de la función
redirect()— la sección de preguntas frecuentes «Why doesredirectuse 307 and 308?»; usa 307 por defecto (303 en Server Actions).
Herramientas de rastreo
- Screaming Frog — An SEO’s Guide To Crawling HSTS & 307 Redirects — la configuración «Respect HSTS Policy» y la mecánica de HSTS.
Citas de las fuentes
Declaraciones registradas. Cada enlace salta al pasaje citado (o lo documenta).
Documentación de Google: tratamiento SEO
- “307 (temporary redirect) — Equivalent to
302.” (traducción) «307 (redirección temporal): equivalente a 302». — Centro de la Búsqueda de Google, Códigos de estado HTTP, errores de red y DNS, y Búsqueda de Google. Ir a la cita - “By default, Google’s crawlers follow the redirect, and Google systems use the redirect as a weak signal that the redirect target should be processed.” (traducción) «De forma predeterminada, los rastreadores de Google siguen la redirección y los sistemas de Google usan la redirección como una señal débil de que el destino de la redirección debe procesarse» (la fila de la 302 que hereda la 307). Ir a la cita
- “While Google treats these status codes the same way, keep in mind that they’re semantically different. Use the status code that’s appropriate for the redirect so other clients (for example, e-readers, other search engines) may benefit from it.” (traducción) «Aunque Google trata estos códigos de estado de la misma forma, ten en cuenta que semánticamente son diferentes. Usa el código de estado apropiado para la redirección para que otros clientes (por ejemplo, lectores electrónicos y otros motores de búsqueda) puedan beneficiarse de ello». Ir a la cita
- “Googlebot follows the redirect, but the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” (traducción) «Googlebot sigue la redirección, pero el pipeline de indexación no usa la redirección como señal de que el destino de la redirección deba ser canonical». — Centro de la Búsqueda de Google, Redirecciones y Búsqueda de Google. Ir a la cita
Especificación HTTP / MDN: la garantía técnica
- “The 307 (Temporary Redirect) status code indicates that the target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI.” (traducción) «El código de estado 307 (Temporary Redirect) indica que el recurso de destino reside temporalmente bajo un URI diferente y que el agente de usuario NO DEBE cambiar el método de solicitud si realiza una redirección automática a ese URI». — RFC 9110, §15.4.8. Leer la sección
- “For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 307 (Temporary Redirect) status code can be used instead.” (traducción) «Por razones históricas, un agente de usuario PUEDE cambiar el método de solicitud de POST a GET para la solicitud posterior. Si este comportamiento no es deseable, puede usarse en su lugar el código de estado 307 (Temporary Redirect)». — RFC 9110, §15.4.3 (la sección 302). Leer la sección
- “The difference between
307and302is that307guarantees that the client will not change the request method and body when the redirected request is made…307and302responses are identical when the request method isGET.” (traducción) «La diferencia entre 307 y 302 es que 307 garantiza que el cliente no cambiará el método ni el cuerpo de la solicitud cuando se realice la solicitud redirigida… las respuestas 307 y 302 son idénticas cuando el método de solicitud es GET». — MDN, Redirección temporal 307. Ir a la cita
John Mueller, Google: SEO y conservación del método
- “I think for SEO, it doesn’t really matter. It’s more like, I don’t know… Does it work for APIs or not? And usually, APIs are not something that you need to have indexed directly in Search.” (traducción) «Creo que para el SEO realmente no importa. Es más bien, no sé… ¿Funciona para las API o no? Y normalmente las API no son algo que necesites indexar directamente en Search». — el programa Fuera de registro de la Búsqueda, episodio 51, «Hablemos de redirecciones» (17 de noviembre de 2022). PDF de la transcripción
- “And with 307, 308, it also forwards POST requests” (traducción) «Y con 307 y 308 también reenvía las solicitudes POST» (frente a 301/302, que reenvían solicitudes GET). — El mismo episodio.
John Mueller, Google: la «307 fantasma» de HSTS
- “Your server’s not returning a 307, Chrome is just showing it to you as such to explain that it’s doing the redirect for you… the 307 isn’t actually a redirect at all, it’s just a placeholder.” (traducción) «Tu servidor no está devolviendo una 307; Chrome simplemente te la muestra así para explicar que está haciendo la redirección por ti… la 307 en realidad no es una redirección, sino solo un marcador de posición». — John Mueller, HTTPS y HSTS: ¿301, 302 o 307? (sitio johnmu.com, originalmente Google+, junio de 2016). Ir a la cita
- “In short, [Googlebot] doesn’t interact with them. 307 redirects are generally not real redirects.” (traducción) «En resumen, [Googlebot] no interactúa con ellas. Las redirecciones 307 generalmente no son redirecciones reales». — John Mueller, «Pregúntale a Google Webmasters» (octubre de 2020), a través de Search Engine Journal. Ir a la cita
HSTS de 2015 — Zineb Ait Bahajji (Google) (declaración transmitida)
- “With HSTS implemented, Googlebot sees a 301 redirect (try it with Fetch as Google). The 307 is just an ‘internal redirect’.” (traducción) «Con HSTS implementado, Googlebot ve una redirección 301 (pruébalo con Fetch as Google). La 307 es solo una «redirección interna»». — Zineb Ait Bahajji (Google), a través de Twitter, según informó Search Engine Roundtable (diciembre de 2015). Ir a la cita
¿Qué 307 estoy viendo realmente?
Casi todas las preguntas sobre una 307 se reducen a una de dos cosas totalmente distintas. Repásalo paso a paso.
Diagnosing a 307 you didn't expect
Mitos y errores que debes evitar
«Una 307 no transfiere autoridad de enlaces como una 302».
Falso en el planteamiento de que «307 es peor que 302», y es una idea que circula activamente en blogs importantes de SEO. La propia documentación de Google procesa 307 y 302 de la misma forma: ambas son redirecciones temporales no canonicalizadoras y señales «débiles», y el documento de Google sobre HTTP Status Codes llama directamente a la 307 «Equivalent to 302». No existe ninguna base documentada para señalar que una 307 transfiera menos que una 302. El encuadre de Google es que las redirecciones temporales en general no están pensadas para consolidar las señales de posicionamiento en el destino como lo hace una permanente; por tanto, no dejes que la afirmación de que «la 307 retiene la autoridad específicamente» te empuje a hacer cambios innecesarios.
«Una 307 en la pestaña Network significa que mi servidor configuró mal una redirección».
A menudo es falso. Si HSTS está habilitado y el navegador vio antes la cabecera Strict-Transport-Security, muestra una actualización http→https como una 307 simplemente para explicarla: el servidor nunca la devolvió (el cuerpo de 0 bytes es la pista). Una sesión de incógnito nueva suele mostrar el código real, pero no en los dominios de la lista de precarga HSTS integrada en el navegador; en esos casos, prueba con un comprobador de redirecciones o con curl (sin HSTS configurado) antes de buscar una configuración incorrecta que no existe.
«Googlebot ve la misma 307 que me muestra el navegador en un sitio HSTS». No exactamente. Los representantes de Google han dicho que Googlebot ve una 301 (Zineb, 2015) o que no interactúa en absoluto con el mecanismo 307/HSTS (Mueller, 2020). En cualquier caso, no ve la «307» visible para una persona. Sigues necesitando una 301 real del lado del servidor para http→https si importa descubrir esa ruta mediante el rastreo.
«303 y 307 son básicamente intercambiables». Son opuestas en el eje que importa. Una 303 siempre cambia el método a GET (el patrón Post/Redirect/Get); una 307 garantiza que el método no cambie. Es fácil confundirlas porque ambas están en la categoría «temporal», junto a la 302.
«Cambia todas tus redirecciones temporales a 307 para mejorar el posicionamiento». No hay ninguna mejora. La única razón válida para preferir 307 frente a 302 es conservar de verdad el método y el cuerpo (o prepararse en general para el futuro). Convertir todas las 302 en 307 no te aporta nada y puede introducir errores.
«Las 302 siempre convierten POST en GET, así que la 302 está esencialmente rota para los formularios». Es una exageración. La conversión POST→GET fue un problema real para clientes antiguos e incoherentes —precisamente por eso existe la 307 como opción garantizada—, pero los navegadores modernos son mucho más coherentes. Una 307 elimina la ambigüedad por especificación en vez de depender del comportamiento actual del cliente; eso no significa que una 302 esté «rota».
Ver el código de estado real (no el artefacto HSTS)
El navegador oculta una 301/302 real detrás de una 307 fantasma una vez que HSTS está almacenado en caché. curl no aplica HSTS por defecto, así que una invocación sencilla habla directamente con el servidor y muestra la verdad; simplemente no la ejecutes con un archivo de caché --hsts configurado, porque habrás vuelto a introducir la misma reescritura del lado del cliente que intentas descartar.
Rastrear la cadena completa de redirecciones, solo cabeceras
# -s silent, -I headers-only, -L follow redirects, cap the hops
curl -sIL --max-redirs 10 http://example.com/old-page 2>&1 \
| grep -Ei '^(HTTP/|location:)'
# Each "HTTP/…" line is one hop's real status code; each "location:" is where it points.
# An HSTS "307" never appears here — it's browser-only.Comprobar el código de estado de una URL sin seguir la redirección
curl -s -o /dev/null -w "%{http_code}\n" http://example.com/old-pageConsola de Chrome DevTools: detectar una 307 fantasma
Pégalo en la pestaña Console. Una redirección real del servidor expone un indicador redirected y una URL resuelta; la actualización HSTS ocurre antes de que la solicitud salga siquiera del navegador.
// Fetch and report what the network actually did.
fetch("http://example.com/old-page", { redirect: "manual" })
.then(r => console.log("type:", r.type, "status:", r.status, "url:", r.url))
.catch(e => console.log("blocked before request (often HSTS upgrade):", e.message));También puedes leer directamente el registro HSTS de Chrome en chrome://net-internals/#hsts: consulta un dominio para ver si static_upgrade_mode/dynamic_upgrade_mode está forzando https (eso es lo que produce la 307 que ves en la pestaña Network).
Bookmarklet: consulta rápida de cabeceras para la pestaña actual
Arrastra un marcador que contenga esto como URL y haz clic en él en cualquier página para registrar en Console la URL actual, su estado y el estado de la redirección:
javascript:(function(){fetch(location.href,{redirect:"manual"}).then(function(r){console.log("[status]",r.status,"[type]",r.type,"[redirected]",r.redirected,"[url]",r.url);}).catch(function(e){console.log("[error]",e.message);});})();Nota: fetch() del navegador no puede leer los cuerpos de redirecciones opacas de origen cruzado, así que para rastrear con autoridad varios saltos, curl -sIL es la fuente de verdad.
Devolver una 307 real
La finalidad de devolver una 307 (en lugar de dejar que un framework la establezca como valor predeterminado) es garantizar que el método y el cuerpo sobrevivan. Algunas formas habituales de hacerlo explícitamente.
Apache (.htaccess)
# mod_rewrite with an explicit 307 (R=307). Preserves POST body.
RewriteEngine On
RewriteRule ^old-endpoint$ https://example.com/new-endpoint [R=307,L]nginx
# 307 keeps the method; 302 would risk POST→GET on older clients.
location = /old-endpoint {
return 307 https://example.com/new-endpoint;
}Node / Express
app.post("/old-endpoint", (req, res) => {
// res.redirect defaults to 302; pass 307 to preserve the POST + body.
res.redirect(307, "https://example.com/new-endpoint");
});Next.js (App Router) — 307 es el valor predeterminado, así que a menudo no tienes que escribir el código:
import { redirect } from "next/navigation";
// redirect() returns a 307 by default (303 inside a Server Action),
// preserving the request as a POST. Use permanentRedirect() for a 308.
export default function Page() {
redirect("/new-endpoint");
}Cómo es una respuesta 307 sin procesar
HTTP/1.1 307 Temporary Redirect
Location: https://example.com/new-endpoint
Content-Length: 0Cómo se ve la «307 fantasma» de HSTS (solo del navegador)
La misma línea de estado en las herramientas de desarrollo, pero fíjate en las pistas: se origina en el navegador, no en el servidor, y lleva un cuerpo de 0 bytes:
HTTP/1.1 307 Internal Redirect
Location: https://example.com/old-page
Non-Authoritative-Reason: HSTSSi ves Non-Authoritative-Reason: HSTS (Chrome) o una «307» de 0 bytes que desaparece al probar con un cliente que no aplica HSTS, ese es el artefacto, no una redirección enviada por tu servidor. El nombre exacto de la cabecera y la etiqueta de DevTools son detalles de implementación específicos de Chrome, no una garantía de la especificación HTTP o HSTS; trátalos como ilustrativos y no como elementos sobre los que construir automatizaciones para distintos navegadores o versiones.
El método, la duración y el framework de origen
Evalúo una 307 en tres ejes antes de cambiarla:
- Método: ¿debe recibir el destino el método y el cuerpo de la solicitud originales? Si es así, 307 es la redirección temporal que conserva ambos. Una solicitud
GETsencilla de una página a otra normalmente no necesita esa propiedad. - Duración: ¿el traslado es realmente temporal? Conserva la 307 solo mientras esperes que vuelva la URL original. Un traslado permanente necesita una decisión de redirección permanente, no un estado temporal indefinido.
- Origen: ¿la 307 la envió el servidor, la eligió un framework o el navegador sintetizó una actualización HSTS interna? Una «Internal Redirect» de DevTools no es una regla del origen que debas reescribir.
Herramientas para separar las 307s reales de las fantasma
- Redirect Checker: consulta el estado observable por el servidor, el destino y cada salto sin depender del estado HSTS de un navegador concreto.
- Asignador de cadenas de redirección: usa la vista por salto cuando una 307 forma parte de una ruta de redirección más larga.
- Comprobador de cabeceras HTTP: inspecciona
LocationyStrict-Transport-Securityy compara las pistas del edge con las del origen. - curl: ejecuta
curl -I http://example.com/pathfuera de la vista HSTS interna del navegador. Prueba la conservación de POST solo contra un endpoint seguro que controles. - Herramientas de desarrollo del navegador: comprueba si la entrada dice «Internal Redirect» y tiene una transferencia de cero bytes, lo que apunta a una actualización HSTS generada por el navegador.
Validar una 307 después del despliegue
Prueba de estado y destino
Prueba que debes ejecutar: comprueba el origen con Redirect Checker o con curl -I. Resultado esperado: una única 307 con la Location prevista. Interpretación de un fallo: otra capa cambió la regla o el destino. Ventana de monitorización: inmediata. Desencadenante de reversión: aparece un bucle, un destino roto o un hostname no previsto.
Prueba de conservación del método
Prueba que debes ejecutar: envía un POST inocuo a una ruta de prueba controlada e inspecciona lo que recibe el destino. Resultado esperado: el destino recibe POST con el cuerpo original. Interpretación de un fallo: un intermediario convirtió el método o sirvió otro código. Ventana de monitorización: inmediata. Desencadenante de reversión: un formulario, webhook o solicitud de proceso de pago pierde su método o su cuerpo.
Prueba de separación de HSTS
Prueba que debes ejecutar: compara DevTools (o una sesión de incógnito nueva) con una solicitud curl -I que no tenga configurada ninguna caché HSTS. Resultado esperado: una «Internal Redirect» del navegador se distingue de la respuesta real del servidor y HTTP sigue teniendo una redirección del lado del servidor. Interpretación de un fallo: HSTS está ocultando una regla de origen ausente; ten en cuenta que el modo incógnito por sí solo no basta para los dominios de la lista de precarga HSTS integrada en el navegador, porque ese estado persiste independientemente del historial de navegación. Ventana de monitorización: inmediata. Desencadenante de reversión: el cambio del origen elimina la redirección HTTP→HTTPS que funcionaba.
Ponte a prueba: 307 Temporary Redirect
Cinco preguntas rápidas sobre qué es una 307, cómo la trata Google y el artefacto HSTS. Elige una respuesta para cada una y después compruébala.
Recursos que merecen tu tiempo
Mis textos relacionados
- 11 tipos de redirecciones y su impacto en SEO — de aquí proceden la definición de 307, la salvedad de HSTS y mi orden de preferencia (307 / 302 / 303 primero).
- Códigos de estado HTTP y su impacto en SEO — mi artículo con las dos entradas distintas de la 307: el caso de redirección temporal y el caso de política HSTS.
- Guía para principiantes sobre SEO técnico — donde encajan las redirecciones en el panorama general del SEO técnico.
Mis charlas
-
Cómo funciona la Búsqueda (SlideShare) — mi explicación del rastreo, la renderización, la indexación y el posicionamiento, incluido el tratamiento de las redirecciones. (Se aplica mi descargo habitual: «This is my understanding of systems… not going to be 100% complete or accurate.» (traducción) «Esta es mi interpretación de los sistemas… no será 100 % completa ni exacta».)
-
De otros lugares de la industria
-
John Mueller — HTTPS y HSTS: ¿301, 302 o 307? — la explicación de primera mano más clara de la «307 fantasma» de HSTS («your server’s not returning a 307» (traducción) «tu servidor no está devolviendo una 307» ).
-
Fuera de registro de la Búsqueda, episodio 51 — «Hablemos de redirecciones» (PDF de la transcripción) — Mueller y Splitt explican por qué existen 307/308 y por qué «for SEO, it doesn’t really matter» (traducción) «para el SEO realmente no importa» .
-
Google sobre redirecciones 307/HSTS (Search Engine Journal) — resumen del vídeo de Mueller «307 redirects are generally not real redirects» (traducción) «las redirecciones 307 generalmente no son redirecciones reales» .
-
¿Googlebot trata las redirecciones 307 como 301? (Search Engine Roundtable) — declaración de Zineb Ait Bahajji de 2015 sobre lo que ve Googlebot con HSTS.
-
MDN — Redirección temporal 307 — referencia técnica de máxima autoridad sobre la garantía de conservar el método y el cuerpo.
-
Guía SEO para rastrear HSTS y redirecciones 307 (Screaming Frog) — el mejor tratamiento de la configuración del rastreador para las 307 provocadas por HSTS.
-
Next.js — referencia de
redirect()— por qué un framework importante establece 307 como valor predeterminado para redirecciones que no son GET.
Registro de cambios
Actualizado el 8 ago 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.
Actualizado el 6 ago 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.
Actualizado el 5 ago 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.
Actualizado el 17 jul 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.
Try it live
This is a real endpoint on this site — not a simulation.
Hit it from the button, open it in a new tab, or
curl -i it from your terminal, and the server answers with the actual status code this article is about.