Redirecciones JavaScript
Qué es una redirección JavaScript, cómo el pipeline de renderizado de Google la trata de manera diferente a un 301 del lado del servidor, cuándo es un último recurso aceptable, y cómo implementarla y detectarla — además de dónde encajan el meta refresh y la API History.
Idiomas
1 señal de evidencia en esta página
- Herramienta activa relacionadarobots.txt Tester
Una redirección JavaScript envía a usuarios y rastreadores a una nueva URL con código del lado del cliente (window.location.replace() o .href). Es el tipo de redirección menos confiable porque Google solo la ve después del renderizado, que puede retrasarse o fallar por completo, sin un cronograma fijo en ningún caso. El orden oficial de preferencia de Google es del lado del servidor (301/302/307/308) → meta refresh → JavaScript, y sus documentos dicen claramente: solo use redirecciones JS si no puede hacer las otras dos. Una vez que Google la interpreta correctamente, el destino se convierte en una señal de canonicalización, pero eso no es una garantía comprobada de resultados idénticos de PageRank o clasificación en comparación con un 301, así que trátela como un último recurso en lugar de un reemplazo equivalente. Úselas en plataformas restringidas sin acceso al servidor, para páginas de error SPA que apunten a un 404 real, y poco más. Si debe usar una, use window.location.replace() en el <head>, elimine la URL de origen de su sitemap y apunte los enlaces internos al destino final. El meta refresh es una redirección separada a nivel de HTML, y history.pushState()/replaceState() no son redirecciones en absoluto.
TL;DR — Una redirección con JavaScript usa código en la página para enviarte a una URL diferente después de que la página se carga. Funciona para las personas, pero los motores de búsqueda la manejan de forma menos fiable que una redirección “real” del servidor (un 301). Si puedes configurar un 301 en su lugar, hazlo. Reserva las redirecciones con JavaScript para cuando no tengas otra opción.
Qué es una redirección con JavaScript
Una redirección con JavaScript cambia la navegación mediante la ejecución de scripts en lugar de una respuesta HTTP 3xx. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: JavaScript redirects Google puede procesar redirecciones con JavaScript, pero recomienda redirecciones del lado del servidor cuando sea posible. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: Redirects and Search
Hay dos formas generales de enviar a alguien de una URL a otra.
La primera es una redirección del lado del servidor. Antes de que la página siquiera se cargue, el servidor dice “esa página se movió — ve aquí en su lugar” usando un código de estado como 301 (permanente) o 302 (temporal). El navegador y el motor de búsqueda reciben ese mensaje de inmediato.
La segunda es una redirección con JavaScript. La página se carga normalmente, y luego un poco de código se ejecuta en el navegador y te envía a otro lugar. Algo como:
<script>
window.location.replace("https://example.com/new-page/");
</script>Para una persona que hace clic, las dos se sienten casi igual. Para un motor de búsqueda, son muy diferentes — y esa diferencia es toda la razón por la que existe esta página.
Por qué los motores de búsqueda las tratan de manera diferente
Google lee tu página por etapas. Primero rastrea (descarga el HTML sin procesar). Más tarde renderiza la página — ejecutando realmente el JavaScript, como lo haría un navegador. Un 301 del lado del servidor es visible en ese primer paso. Una redirección con JavaScript no es visible hasta el paso de renderizado, que puede llegar mucho más tarde — o, a veces, no llegar en absoluto.
Google lo dice directamente: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (traducción) «Solo usa redirecciones con JavaScript si no puedes hacer redirecciones del lado del servidor o de meta refresh.» (Google Search Central)
Así que una redirección con JavaScript no es mala — solo es menos fiable. Google normalmente llegará eventualmente, pero un 301 real es más rápido y más seguro.
La regla simple
- ¿Puedes configurar un 301 (o 302)? Hazlo. Es el estándar de oro.
- ¿No puedes tocar el servidor, pero puedes editar el
<head>del HTML? Un meta refresh de 0 segundos es la siguiente mejor opción. - ¿Ninguno? Entonces una redirección con JavaScript es un buen último recurso.
Un par de cosas que la gente entiende mal:
- Un meta refresh no es una redirección con JavaScript. Es una etiqueta
<meta>en tu HTML, y Google la maneja antes y de forma más fiable que JS. history.pushState()no es una redirección. Solo cambia lo que hay en la barra de direcciones — no envía a nadie a ningún lugar, y los motores de búsqueda no la siguen.
¿Quieres el tiempo del pipeline de renderizado, los detalles de implementación y cómo encontrar redirecciones JS en un rastreo? Cambia a la pestaña Avanzado.
TL;DR — Una redirección de JavaScript es una redirección del lado del cliente (
window.location.replace(),.href,.assign()) que Google solo procesa después del renderizado — fase tres de rastreo → renderizado → indexación. Una 301 del lado del servidor se ve en el momento del rastreo; una redirección de JS espera en la cola de renderizado, y Google no da un plazo fijo para esa espera — puede ser rápida o puede tardar mucho, y el renderizado puede fallar por completo. El orden de preferencia documentado por Google es del lado del servidor → meta refresh → JavaScript, y los documentos dicen que se deben usar redirecciones de JS solo cuando no se pueden hacer las otras dos. Una vez que Google las interpreta correctamente, el destino se convierte en una señal de canonicalización permanente — incluso Google las usó en su propio blog cuando nada más funcionó — pero eso no es prueba documentada de resultados idénticos de PageRank o posicionamiento en comparación con una 301, por lo que son un último recurso, no una señal de spam. Los usos legítimos son plataformas restringidas sin configuración de servidor y páginas de error de SPA que apuntan a un 404 real. Implementa conwindow.location.replace()en el<head>, elimina la fuente de tu sitemap, reorienta los enlaces internos y confirma que Googlebot puede obtener el JS. El meta refresh es a nivel de HTML (0s = permanente, cualquier retraso = temporal), yhistory.pushState()/replaceState()no son redirecciones en absoluto.
Qué cuenta como redirección de JavaScript
La navegación por script depende del renderizado y la ejecución, por lo que no es equivalente a nivel de protocolo que una redirección HTTP. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: JavaScript redirects El procesamiento es posible, no una garantía de tiempo exacto o indexación. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: Redirects and Search
Una redirección de JavaScript navega el navegador a una nueva URL con código del lado del cliente. Los métodos comunes y cómo difieren:
window.location.replace("url")— navega y elimina la URL original del historial de sesión. Este es el que se debe usar: el botón de atrás omite la fuente de la redirección en lugar de devolver al usuario directamente.window.location.href = "url"— navega pero mantiene la original en el historial, por lo que el botón de atrás regresa a la página que redirige (y puede crear un bucle).document.location.hrefywindow.location.assign("url")se comportan de la misma manera.history.pushState()/history.replaceState()— no son redirecciones. Reescriben la barra de direcciones sin ninguna navegación o señal HTTP, por lo que los rastreadores no las tratan como redirecciones. Las SPA las usan para cambios de URL dentro de la aplicación; necesitan enlaces<a href>reales (o navegaciones reales) para ser rastreables.
La línea divisoria que importa: .replace(), .href y .assign() todos desencadenan
una navegación real del documento (la diferencia entre ellos es solo lo que sucede con
el historial de sesión), mientras que pushState()/replaceState() nunca navegan en absoluto —
tocan el estado del historial y la barra de direcciones y nada más. Ninguno de los cuatro es
un 301 HTTP; “redirección” aquí es una abreviatura de navegación del lado del cliente, no un código de estado.
Meta refresh (<meta http-equiv="refresh" content="0;url=...">) a menudo se
agrupa con las redirecciones de JS, pero es una directiva HTML que se analiza antes de que JavaScript se ejecute — una categoría separada y más confiable, cubierta a continuación.
Cómo procesa Google una redirección de JavaScript
Este es el punto clave. El proceso de Google funciona por etapas, y una redirección de JS y una redirección del lado del servidor se detectan en diferentes momentos:
- Rastreo — Googlebot obtiene la URL y lee el HTML sin procesar. Una 301/302/307/308 del lado del servidor se ve aquí mismo.
- Cola de renderizado — las páginas que devuelven
200esperan para ser renderizadas. Los documentos de Google señalan que la página “may stay on this queue for a few seconds, but it can take longer than that.” (traducción) «puede permanecer en esta cola durante unos segundos, pero puede tardar más que eso.» Google no publica un plazo de nivel de servicio fijo más allá de eso, así que trata la espera como impredecible — puede ser rápida, o puede alargarse — en lugar de asumir un número específico de días o semanas. - Renderizado + indexación — Chromium sin interfaz gráfica ejecuta el JavaScript. Este es el primer momento en que existe una redirección de JS en lo que respecta a Google.
La misma idea que planteo en Rastreo y en SEO de JavaScript se aplica aquí: el renderizado es un paso separado de la obtención, y cualquier cosa que dependa de él hereda ese retraso y ese riesgo.
Y el riesgo es real. Google: “While Google attempts to render every URL Googlebot crawled, rendering may fail for various reasons. This means that if you set a JavaScript redirect, Google might never see it if rendering of the content failed.” (traducción) «Aunque Google intenta renderizar cada URL que Googlebot rastreó, el renderizado puede fallar por varias razones. Esto significa que si configuras una redirección de JavaScript, Google podría nunca verla si el renderizado del contenido falló.» (Google Search Central) Durante la ventana antes de que se procese la redirección — y para siempre, si el renderizado falla — Google puede mantener la página fuente vacía en su índice.
El orden de preferencia oficial de Google
La documentación de redirecciones establece una jerarquía de la más a la menos confiable:
- Redirecciones del lado del servidor — 301/308 (permanentes), 302/307 (temporales). Las mejores para todo: se ven en el momento del rastreo, sin ambigüedad.
- Meta refresh — a nivel de HTML. Un meta refresh de 0 segundos se trata como una redirección permanente (como un 301); cualquier meta refresh retrasado se trata como temporal.
- Redirecciones de JavaScript — último recurso.
Google lo expresa así: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (traducción) «Usa redirecciones de JavaScript solo si no puedes hacer redirecciones del lado del servidor o mediante actualización meta». Las redirecciones permanentes pasan al destino la señal que indica cuál es la URL principal; las temporales mantienen la original en los resultados. (La interacción con la elección de la URL principal se explica en Elección de URL principal).
¿La equidad de enlaces se transmite?
La documentación de redirecciones de Google enumera la navegación de ubicación de JavaScript entre sus métodos de redirección permanente, y dice que el destino se convierte en la señal de canonicalización una vez que Google lo ha interpretado — por lo que la afirmación plana “JS redirects don’t pass PageRank” (traducción) «las redirecciones JS no transmiten PageRank» es falsa. Lo que la documentación no establece es que el resultado sea idéntico, inmediato o tan confiable como un 301 del lado del servidor — describe la señal canónica, no una garantía de un flujo de PageRank equivalente, clasificación o sincronización. El marco honesto: un 301 transmite la señal en el momento del rastreo con casi certeza; una redirección JS la transmite solo si y cuando el renderizado tiene éxito, y Google no promete que el resultado coincida uno a uno con el de un 301. Esa brecha — no la equidad perdida — es el costo real de elegir JavaScript.
Esto también es por lo que las redirecciones JS no son un desencadenante de penalización por sí solas. Solo se convierten en un problema de spam cuando se usan para cloaking — mostrar a los rastreadores una página y redirigir a los usuarios a algo diferente, o enviar a usuarios móviles a un dominio no relacionado. La política de redirecciones engañosas de Google trata sobre esa intención, no sobre la técnica.
Cuándo una redirección de JavaScript es la herramienta adecuada
Hay casos legítimos:
- Plataformas limitadas. Algunos alojamientos compartidos, CDN o configuraciones de CMS no te dan acceso a reglas de redirección del lado del servidor. Una redirección JS es un respaldo válido — y notablemente, Google usó redirecciones JS en su propio blog de Webmaster porque, como dijo Gary Illyes, “that was the only thing we could use for 1:1 redirects, and it works on Google” (traducción) «eso era lo único que podíamos usar para redirecciones 1:1, y funciona en Google» (OnCrawl).
- Manejo de errores en SPA. Google lo respalda explícitamente: “Use a JavaScript redirect to a URL for which the server responds with a
404HTTP status code.” (traducción) «Usa una redirección de JavaScript a una URL para la que el servidor responda con un código de estado HTTP404.» (Google Search Central) Una aplicación de una sola página que resuelve una ruta incorrecta puede redirigir a un endpoint 404 real para que Google procese el error correctamente en lugar de indexar un 404 blando.
Para migraciones de URL permanentes, esta no es la herramienta — usa un 301. Hago el mismo punto en migraciones de sitios: las redirecciones de JavaScript son un último recurso, y Google puede que nunca las vea.
Generadores de sitios estáticos: la trampa de los alias de Hugo
Una sorpresa común: el aliases: del frontmatter de Hugo históricamente ha generado páginas HTML de meta refresh, no redirecciones 301 del lado del servidor — y otros generadores estáticos han hecho cosas similares por defecto. Los valores predeterminados de los generadores cambian entre versiones, así que verifica la salida real de tu versión desplegada actual en lugar de asumir; si aliases: no te está dando 301, necesitas reglas de redirección a nivel de plataforma (_redirects de Netlify, Cloudflare Workers, vercel.json de Vercel) además de (en Hugo) disableAliases: true. Cubro esto en detalle en SEO para Hugo.
Mejores prácticas de implementación
Si una redirección de JavaScript es genuinamente tu única opción:
- Usa
window.location.replace(), no.href. Como dice Search Engine Journal, las redirecciones de JS “typically usewindow.location.replace()function rather thanwindow.location.hrefto avoid UX redirect loops” (traducción) «normalmente usan la funciónwindow.location.replace()en lugar dewindow.location.hrefpara evitar bucles de redirección en la experiencia de usuario» (SEJ). - Ponlo en el
<head>, no en el<body>. Los navegadores analizan el HTML secuencialmente y ejecutan los scripts a medida que los encuentran, así que “position JavaScript redirects in the<head>tag rather than<body>to minimize delay” (traducción) «coloca las redirecciones de JavaScript en la etiqueta<head>en lugar de en el<body>para minimizar el retraso» (OnCrawl). - Redirige al destino final en un solo salto. Una redirección de JS a una página que a su vez hace un 301 a otro lugar crea una cadena; las cadenas desperdician el presupuesto de rastreo y pueden aparecer en GSC como un error de redirección.
- Elimina la URL de origen de tu sitemap.xml. Los sitemaps deben listar URLs canónicas e indexables, no las que redirigen.
- Reapunta los enlaces internos al destino, para que no pasen por la redirección en absoluto.
- Asegúrate de que Googlebot pueda obtener el JS. Si la redirección vive en un script externo bloqueado por
robots.txt, Google no puede renderizarlo y no verá la redirección.
Cómo detectar redirecciones de JavaScript
No se anuncian como un 301 en un encabezado, así que tienes que renderizar:
- Un rastreador con renderizado de JS activado. OnCrawl recomienda rastrear con “JavaScript rendering enabled (5-second timeout minimum)” (traducción) «renderizado de JavaScript habilitado (tiempo de espera mínimo de 5 segundos)»; Screaming Frog y Ahrefs Site Audit pueden renderizar ambos. Sin renderizado, una página con redirección de JS simplemente parece un
200normal. - Chrome DevTools. La pestaña Network (con “Preserve log”) muestra la navegación del lado del cliente; la extensión Redirect Path también lo marca.
- En Search Console, una redirección de JS procesada con éxito aparece en Página con redirección — el mismo estado que cualquier URL redirigida, lo cual es normal para fuentes no canónicas. Sin embargo, esa etiqueta no está garantizada en ninguna comprobación dada: refleja lo que Google obtuvo, renderizó, interpretó y canonizó en el momento muestreado, así que una URL puede mostrar un estado diferente (o ningún estado de redirección todavía) entre comprobaciones sin que eso sea un error de tu parte.
Lo que yo haría realmente
Del lado del servidor primero, siempre. Meta refresh (0 segundos) cuando puedas editar el HTML pero no la configuración del servidor. JavaScript solo cuando ambas opciones estén descartadas — y entonces con window.location.replace() en el <head>, un sitemap limpio y una comprobación de que la redirección realmente se renderiza para Googlebot. Para cualquier cosa permanente o de alto valor, la fiabilidad adicional de un 301 vale casi cualquier esfuerzo para obtenerla.
Resumen de IA
Una versión condensada de la versión avanzada:
- Una redirección JavaScript es del lado del cliente (
window.location.replace(),.href,.assign()). Solo se procesa después del renderizado — fase tres de rastreo → renderizado → indexación — mientras que un 301 del lado del servidor se ve en el momento del rastreo. - La cola de renderizado es el riesgo: una página “puede permanecer en esta cola durante unos segundos, pero puede tardar más”, sin un cronograma de nivel de servicio fijo, y el renderizado puede fallar por completo, en cuyo caso Google puede que nunca vea la redirección y mantenga la página de origen indexada.
- El orden de preferencia de Google: del lado del servidor (301/302/307/308) → meta refresh → JavaScript. Documentación: “Solo usa redirecciones JavaScript si no puedes hacer redirecciones del lado del servidor o meta refresh.”
- El destino se convierte en una señal de canonicalización una vez que Google interpreta una redirección JS — por lo que el mito “JS redirects don’t pass PageRank” (traducción) «las redirecciones JS no transmiten PageRank» es falso — pero Google no documenta que el resultado coincida exactamente con el flujo de PageRank, el ranking o el tiempo de una redirección del lado del servidor. Las redirecciones JS no son un desencadenante de penalización a menos que se usen para cloaking (redirecciones engañosas).
- Usos legítimos: plataformas restringidas (el propio Google las usó en su blog), y páginas de error SPA que redirigen a un 404 real (respaldado por Google).
- Meta refresh ≠ redirección JS: es a nivel de HTML; 0s = permanente, cualquier retraso =
temporal.
history.pushState()/replaceState()no son redirecciones — no hay señal HTTP, los rastreadores no las siguen. aliases:de Hugo son meta refresh, no 301 — una trampa común en los generadores estáticos.- Implementación:
window.location.replace()en el<head>, un solo salto a el destino, elimina la fuente del sitemap, reorienta los enlaces internos, asegúrate de que Googlebot pueda obtener el JS. - Detección: rastreo con renderizado JS activado, Chrome DevTools / Redirect Path, “Página con redirección” en GSC.
Documentación oficial
Orientación de fuentes primarias sobre redirecciones y JavaScript.
- Redirecciones y búsqueda de Google — la jerarquía de preferencias (del lado del servidor → meta refresh → JavaScript), el manejo de permanente vs. temporal, y las reglas de retraso de meta refresh.
- Conceptos básicos de SEO de JavaScript — el pipeline de renderizado y el caso de uso respaldado de redirección SPA-404.
- Soluciona problemas de JavaScript relacionados con la búsqueda — 404 suaves, renderizado y depuración de JS que Google no puede procesar.
- Redirecciones engañosas (políticas de spam) — cuando una redirección cruza hacia el cloaking y se convierte en una violación de la política.
Bing / Microsoft
- Ayuda para webmasters de Bing — punto de entrada para la orientación actual de Bing. (Al momento de escribir esto, Bing no tenía una página de ayuda dedicada a redirecciones en una URL estable; Bingbot renderiza JavaScript de manera menos confiable que Googlebot, lo que hace que las redirecciones solo con JS sean más arriesgadas para la indexación de Bing.)
Citas de la fuente
Declaraciones registradas de Google y de las personas que trabajan en Search. Cada enlace de Google-docs es un enlace profundo que salta al pasaje citado.
Google — el orden de preferencia y el riesgo de renderizado
- “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (traducción) «Solo usa redirecciones JavaScript si no puedes hacer redirecciones del lado del servidor o meta refresh.» — Documentación de Google Search Central. Ir a la cita
- “While Google attempts to render every URL Googlebot crawled, rendering may fail for various reasons. This means that if you set a JavaScript redirect, Google might never see it if rendering of the content failed.” (traducción) «Google trata de renderizar todas las URL rastreadas por Googlebot, pero el renderizado puede fallar por diversos motivos. Por tanto, si configuras una redirección JavaScript, Google podría no verla nunca si falla el renderizado del contenido.» — Documentación de Google Search Central. Ir a la cita
Google — el caso de uso SPA respaldado
- “Use a JavaScript redirect to a URL for which the server responds with a
404HTTP status code (for example/not-found).” (traducción) «Usa una redirección de JavaScript a una URL para la que el servidor responda con un código de estado HTTP404(por ejemplo,/not-found).» — Documentación de Google Search Central. Ir a la cita
Gary Illyes, Google
- Sobre las redirecciones de JS en general: “Js redirects are probably not a good idea though.” (traducción) «Sin embargo, las redirecciones de JS probablemente no sean una buena idea.» (8 de julio de 2020)
- Sobre que Google las usa de todos modos cuando nada más funcionaba: “We used JS redirects on webmasters.googleblog.com because that was the only thing we could use for 1:1 redirects, and it works on Google.” (traducción) «Usamos redirecciones de JS en webmasters.googleblog.com porque era lo único que podíamos usar para redirecciones 1:1, y funciona en Google.» Cobertura
Search Engine Journal — implementación y equidad de enlaces
- “JavaScript redirects typically use
window.location.replace()function rather thanwindow.location.hrefto avoid UX redirect loops.” (traducción) «Las redirecciones de JavaScript suelen usar la funciónwindow.location.replace()en lugar dewindow.location.hrefpara evitar bucles de redirección en la experiencia de usuario.» Leer - “JavaScript redirects are not SEO-friendly and should be avoided when alternatives exist… Only implement JavaScript redirects when server-side alternatives are genuinely unavailable.” (traducción) «Las redirecciones de JavaScript no son compatibles con el SEO y deberían evitarse cuando existen alternativas… Solo implementa redirecciones de JavaScript cuando las alternativas del lado del servidor no estén realmente disponibles.» Leer
Tipos de redirección — hoja de referencia
Cuándo lo ve Google y cómo se trata
| Método | Cuándo lo ve Google | Se trata como | Fiabilidad |
|---|---|---|---|
301 / 308 del lado del servidor | Tiempo de rastreo | Permanente | Máxima |
302 / 307 del lado del servidor | Tiempo de rastreo | Temporal | Máxima |
Meta refresh, 0 segundos | Tiempo de análisis del HTML | Permanente | Alta |
Meta refresh, con retraso (>0s) | Tiempo de análisis del HTML | Temporal | Alta |
| Redirección de JavaScript | Después del renderizado | Sigue la navegación | Mínima |
history.pushState() / replaceState() | — | No es una redirección | n/a |
Métodos de redirección de JavaScript
| Código | Comportamiento del historial | ¿Usarlo? |
|---|---|---|
window.location.replace("url") | Elimina la fuente del historial | Sí — recomendado |
window.location.href = "url" | Mantiene la fuente (bucle del botón atrás) | Evitar para redirecciones |
window.location.assign("url") | Igual que .href | Evitar para redirecciones |
document.location.href = "url" | Alias de .href | Evitar para redirecciones |
Datos rápidos
- El orden de Google: del lado del servidor → meta refresh → JavaScript. Usa JS solo cuando los dos primeros sean imposibles.
- Una vez interpretada, el destino de una redirección de JS es una señal de canonicalización — el mito “JS redirects don’t pass PageRank” (traducción) «las redirecciones JS no transmiten PageRank» es falso. Google no documenta ese resultado como idéntico al de un 301, por lo que el riesgo real es el retraso / el fallo de renderizado, no una penalización documentada de PageRank.
- Las redirecciones de JS no son una penalización a menos que se usen para cloaking.
aliases:de Hugo = meta refresh, no 301.- Una redirección de JS procesada aparece como “Página con redirección” en GSC.
¿Debería usar una redirección de JavaScript? — lista de verificación de decisiones
Recorre esto de arriba a abajo; detente en el primer “sí”.
- ¿Puedo configurar un
301/302/307/308del lado del servidor? → Hazlo. Detente aquí. - ¿Puedo editar el
<head>del HTML pero no la configuración del servidor? → Usa un meta refresh de 0 segundos para movimientos permanentes. Detente aquí. - ¿Ninguno es posible (plataforma bloqueada), o es una página de error de SPA que debería devolver un 404 real? → Una redirección de JavaScript es aceptable. Continúa.
Si estás usando una redirección de JavaScript
- Usa
window.location.replace()(no.href/.assign()). - Coloca el script en el
<head>, lo antes posible. - Redirige directamente al destino final — sin cadena a través de otra redirección.
- Elimina la URL de origen de tu sitemap XML.
- Reapunta los enlaces internos al destino.
- Confirma que el JS de la redirección no está bloqueado en
robots.txtpara que Googlebot pueda renderizarlo. - No estás mostrando a los rastreadores una página y redirigiendo a los usuarios a otra (cloaking).
- Verifica rastreando con el renderizado de JS activado y comprobando “Page with redirect” en GSC.
La redirección JavaScript recomendada
Coloca esto en el <head> para que se ejecute lo antes posible en el orden de análisis:
<head>
<script>
window.location.replace("https://example.com/new-page/");
</script>
</head>replace() es la elección clave: elimina la URL de redirección del historial de sesión,
así que el botón de retroceso no devuelve al usuario directamente a la redirección.
El meta refresh de 0 segundos (la segunda mejor opción cuando no puedes hacerlo en el servidor)
No es JavaScript, pero es el respaldo adecuado cuando puedes editar el HTML y no la configuración del servidor. Google trata un retraso de 0 segundos como una redirección permanente:
<head>
<meta http-equiv="refresh" content="0; url=https://example.com/new-page/">
</head>Qué NO usar como redirección
history.pushState() reescribe la barra de direcciones pero no realiza ninguna navegación y
no envía ninguna señal HTTP — los rastreadores no la seguirán:
// NOT a redirect — only changes the URL bar, no navigation happens
history.pushState({}, "", "/new-page/");Si necesitas que un cambio de ruta en una SPA sea rastreable, dale un enlace <a href> real o
una navegación genuina, no solo una llamada a la API de History.
Página de error de SPA → 404 real (patrón respaldado por Google)
Cuando una aplicación de una sola página resuelve una ruta desconocida, envíala a un endpoint que
devuelva un 404 real para que Google procese el error en lugar de un 404 blando:
// On an unresolved route in your SPA:
window.location.href = "/not-found"; // /not-found must return HTTP 404 Herramientas para encontrar y comprobar redirecciones JavaScript
- Screaming Frog, rastreador SEO — habilita el renderizado de JavaScript (con un tiempo de espera de
renderizado suficiente) para que las páginas con redirección JS no parezcan simples
200. - Auditoría de sitios de Ahrefs — renderiza páginas y muestra redirecciones, cadenas y enlaces internos redirigidos.
- Chrome DevTools — pestaña Network — activa “Preserve log” y observa cómo se dispara la navegación del lado del cliente.
- Redirect Path (extensión de Chrome) — marca las redirecciones del lado del cliente junto con las del lado del servidor en una ventana emergente rápida.
- Google Search Console — Inspección de URLs — mira cómo se rastreó y renderizó una URL concreta, y si Google llegó a “Page with redirect.” (traducción) «Página con redirección».
- GSC — Informe de indexación de páginas — “Page with redirect” (traducción) «Página con redirección» enumera las URL redirigidas; “Redirect error” (traducción) «Error de redirección» muestra cadenas y bucles.
Errores que debes evitar con las redirecciones JavaScript
- Usar
window.location.href(o.assign()) en lugar de.replace()..hrefmantiene la página que redirige en el historial de sesión, por lo que el botón de retroceso devuelve al usuario directamente a la redirección: un bucle. En su lugar: usawindow.location.replace(), que elimina la fuente del historial. - Recurrir a una redirección JS en una migración permanente y de alto valor cuando hay un 301 disponible. Las redirecciones JS solo se procesan después del renderizado, lo que puede retrasarse o fallar por completo: el riesgo equivocado para una página que importa. En su lugar: usa un 301 del lado del servidor; reserva JavaScript para plataformas limitadas y páginas de error de SPA.
- Encadenar la redirección JS en otra redirección en lugar de aterrizar en el destino final en un solo salto. Las cadenas desperdician el presupuesto de rastreo y pueden aparecer como un error de redirección en GSC. En su lugar: apunta la redirección JS directamente a la URL de destino.
- Dejar la URL de origen en el sitemap XML. Los sitemaps deben listar URLs canónicas e indexables, no URLs que redirigen. En su lugar: elimina la fuente del sitemap una vez que la redirección esté activa.
- Permitir que
robots.txtbloquee el script que dispara la redirección. Si Googlebot no puede obtener el JS, no puede renderizar la redirección, y la página de origen puede permanecer indexada indefinidamente. En su lugar: confirma que el script sea rastreable: el probador de robots.txt verifica exactamente esto. - Asumir que el frontmatter
aliases:de Hugo te da un 301. Históricamente ha generado una página HTML con meta refresh, no una redirección del lado del servidor: verifica la salida real de tu versión desplegada en lugar de asumir. En su lugar: usa reglas de redirección a nivel de plataforma (_redirectsde Netlify, Workers de Cloudflare,vercel.jsonde Vercel) además dedisableAliases: true, como se cubre en SEO para Hugo. - Tratar
history.pushState()/replaceState()como una redirección. Solo reescriben la barra de direcciones: sin navegación, sin señal HTTP, y los rastreadores no las siguen. En su lugar: usa un enlace<a href>real o una navegación real para cualquier cosa que deba ser rastreable. - Mostrar a los rastreadores una página y enviar a los usuarios a otro lugar (cloaking). Esto es lo que convierte una redirección JS legítima en una violación de la política de redirecciones engañosas — se trata de la intención, no de la técnica. En su lugar: envía a todos, incluidos los bots, al mismo destino.
Problemas comunes con las redirecciones JavaScript
La URL de origen permanece indexada mucho después de que la redirección esté activa
- Causa probable: la página sigue en la cola de renderizado de Google, o el renderizado falló por completo.
- Solución + verificación: ejecuta una Prueba en vivo en la herramienta Inspección de URLs
de Google Search Console en la URL de origen. Si aún no se ha renderizado, espera: Google
no da un plazo fijo para la cola de renderizado, así que vuelve a verificar periódicamente en lugar
de asumir una ventana específica. Si el renderizado sigue fallando, confirma que el
script de redirección no esté bloqueado (consulta el problema de
robots.txta continuación).
El botón de retroceso vuelve directamente a la página que redirige
- Causa probable: la redirección usa
window.location.hrefo.assign()en lugar de.replace(), por lo que la URL de origen permanece en el historial de sesión. - Solución + verificación: cambia el script a
window.location.replace(). Confírmalo aterrizando en el destino y presionando retroceso: debería omitir el origen de la redirección por completo.
GSC muestra “Rastreado – actualmente no indexado” en lugar de “Página con redirección”
- Causa probable: Google aún no ha renderizado la página, o el renderizado está fallando para esa URL.
- Solución y verificación: rastrea la URL con un rastreador con renderizado de JavaScript (Screaming Frog o Ahrefs Site Audit, con renderizado habilitado) para confirmar que la redirección realmente se ejecuta en el lado del cliente. También verifica que el script de redirección no esté bloqueado en
robots.txt— el probador de robots.txt confirma si Googlebot puede obtenerlo.
Una ruta SPA sin resolver aparece como un 404 suave en GSC
- Causa probable: la ruta redirige a algún lugar, pero el destino no devuelve realmente un estado HTTP
404. - Solución y verificación: apunta la redirección a un endpoint que realmente responda con
404(el patrón recomendado por Google), luego vuelve a ejecutar la Inspección de URLs para ver el cambio de estado de 404 suave a un 404 limpio.
Una página con redirección mediante JavaScript sigue pareciendo un 200 simple en un informe de rastreo
- Causa probable: el rastreador se ejecutó sin el renderizado de JavaScript habilitado, por lo que solo vio la respuesta HTML inicial, no la navegación del lado del cliente.
- Solución y verificación: vuelve a rastrear con el renderizado de JavaScript activado (un tiempo de espera mínimo de 5 segundos es un punto de partida razonable) y confirma que la redirección ahora aparece.
Demostrar que la redirección realmente surtió efecto
| Prueba a ejecutar | Resultado esperado | Interpretación del fallo | Ventana de monitoreo | Disparador de reversión |
|---|---|---|---|---|
| Probador de robots.txt en la URL del script de redirección | El script está Permitido para Googlebot | No permitido — Google no puede obtener el script, por lo que nunca puede renderizar la redirección | Inmediato | Corrige o elimina la regla de robots.txt que bloquea antes de depender de la redirección |
| Rastrear la URL de origen con renderizado de JavaScript habilitado (Screaming Frog / Ahrefs Site Audit) | El rastreador informa una navegación del lado del cliente al destino previsto | La página sigue informando un 200 simple sin navegación — el renderizado no se está ejecutando | Inmediato (un solo rastreo) | Si aún no se ejecuta después de corregir robots.txt, usa un meta refresh de 0 segundos o una redirección del lado del servidor en su lugar |
| Inspección de URLs de GSC — Prueba en vivo en la URL de origen | El resultado renderizado muestra la redirección ejecutándose hacia el destino | El renderizado falla, o el HTML renderizado no muestra navegación | Inmediato para la prueba en vivo en sí | Si la Prueba en vivo falla repetidamente al renderizar, trata esta plataforma como incapaz de soportar una redirección con JavaScript — obtén acceso al servidor o usa meta refresh |
| GSC — Informe de indexación de páginas para la URL de origen | La URL de origen aparece en “Página con redirección” | Sigue apareciendo como indexada, “Rastreada – actualmente no indexada” o contenido duplicado | 2–4 semanas (el estado de indexación se actualiza según el propio cronograma de Google) | Si aún no se clasifica como redirección después de 4+ semanas, revisa las comprobaciones de bloqueo de renderizado anteriores |
| Comprobación manual del botón de retroceso en un navegador después de llegar al destino | El botón de retroceso omite la página de origen por completo | El botón de retroceso vuelve a la página de origen | Inmediato | Cambia el script de .href/.assign() a window.location.replace() |
Ponte a prueba: Redirecciones con JavaScript
Cinco preguntas rápidas sobre cómo funcionan las redirecciones con JavaScript y cuándo usarlas. Elige una respuesta para cada una y luego comprueba.
Recursos que valen tu tiempo
Mis escritos relacionados
- Problemas y mejores prácticas de SEO con JavaScript — el lado del renderizado, que es la razón por la que las redirecciones con JavaScript conllevan su riesgo de tiempo.
- La guía para principiantes del SEO técnico — dónde encajan las redirecciones y el renderizado en el panorama general.
Mis charlas
- Cómo funciona la búsqueda (SlideShare) — mi explicación del rastreo, renderizado, indexación y clasificación — el proceso que convierte una redirección con JavaScript en un evento de fase tres. (Se aplica mi descargo de responsabilidad habitual: “Esta es mi comprensión de los sistemas… no va a ser 100 % completa o precisa.”) (traducción) «Esta es mi comprensión de los sistemas… no va a ser 100 % completa o precisa.»
Del sector
- Redirecciones y la Búsqueda de Google (Google Search Central): la jerarquía de preferencias oficial y el manejo de permanentes frente a temporales.
- Redirecciones engañosas (Google Search Central): la línea de la política de spam que separa una redirección legítima del cloaking.
- Redirecciones JavaScript y SEO: cuándo y cómo usarlas (Search Engine Journal): orientación práctica de implementación y la distinción entre
replace()y.href. - ¿Las redirecciones JavaScript son aptas para SEO? (Search Engine Journal): el resumen de «evitar cuando existen alternativas».
- Redirecciones JavaScript y SEO: la guía definitiva (OnCrawl): orientación sobre la colocación en el encabezado, herramientas de detección y la cita completa de Gary Illyes.
- ¿Las redirecciones JavaScript son malas para el SEO? (Conductor): una respuesta concisa en formato de preguntas frecuentes para la consulta informativa.
- Guía de tipos de redirección (Lumar): una taxonomía más amplia de redirecciones con las redirecciones JS en contexto.
Registro de cambios
Actualizado el 11 ago 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
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 11 ago 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
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 18 jul 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
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.