Menu

Redirección en HTML: meta refresh, JavaScript y 301

Redirige una página a otra con una etiqueta meta refresh en HTML puro, con JavaScript o en el servidor. Aprende la sintaxis de meta refresh, cómo recargar una página automáticamente, por qué una redirección 301 en el servidor es la mejor opción y qué hacen los buscadores con cada una.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Redirigir con una etiqueta meta refresh

En HTML puro, una redirección es una etiqueta <meta http-equiv="refresh"> en el <head> de la página antigua:

<meta http-equiv="refresh" content="0; url=https://example.com/new-page">

El número es el retardo en segundos, luego va un punto y coma, y después url= y la dirección a la que ir. 0 redirige en cuanto carga la página. Aquí tienes un archivo completo de "esta página se ha movido". El retardo está puesto en una hora para que esta vista previa se quede quieta; en una página real usarías 0 o unos pocos segundos:

Dos alternativas hacen la página segura: el enlace visible (para cualquiera cuyo navegador no siga el refresh, y para quienes usan lectores de pantalla y quieren decidir), y <link rel="canonical">, que les dice a los buscadores cuál es la URL real. Si cambias aquí el retardo a 0, la propia vista previa se irá a example.com; pulsa Reset para recuperar el ejemplo.

Recargar una página automáticamente

Omite la URL y la página se recarga sola tras el retardo. content="5" recarga cada 5 segundos. La primera caja de abajo es una pequeña página con esa etiqueta, para que la veas: su hora de carga salta cada 5 segundos, y el texto que escribas en su campo se borra con la recarga. La segunda caja mantiene su reloj al día con JavaScript, y conserva tu texto:

Una recarga vuelve a cargar la página entera, así que lo que estuviera haciendo el lector en ella se interrumpe. Es aceptable para una página con la que nadie interactúa, como una pantalla de estado en una pared. Para paneles, marcadores y feeds, actualiza solo la parte que cambia, como hace la segunda caja.

Redirigir con JavaScript

Cuando la redirección depende de algo que solo sabe el navegador (la elección del usuario, si ha iniciado sesión, el tamaño de pantalla), usa JavaScript:

// Replaces the current page in the history: Back skips it
location.replace('https://example.com/new-page');

// Adds a history entry: Back returns to this page
location.href = 'https://example.com/new-page';

Para una redirección, location.replace es casi siempre lo que quieres. Con location.href, al pulsar Atrás se llega a la página que redirigió, que vuelve a redirigir, y el usuario queda atrapado.

Mejor una redirección en el servidor

Un meta refresh o un script solo se ejecutan después de que el navegador haya descargado la página antigua. Una redirección en el servidor responde a la petición con un código de estado y la nueva dirección, antes de enviar ningún HTML:

  • 301 (movida permanentemente) o 308: la página tiene un nuevo hogar para siempre. Los buscadores trasladan el posicionamiento de la URL antigua a la nueva.
  • 302 (encontrada) o 307: un traslado temporal; la URL antigua sigue siendo la principal.

Cómo configurarla depende de tu alojamiento. Algunas formas habituales:

# Apache (.htaccess)
Redirect 301 /old-page https://example.com/new-page

# nginx (inside a server block)
location = /old-page { return 301 https://example.com/new-page; }

# Netlify or Cloudflare Pages (_redirects file)
/old-page  /new-page  301

Usa un meta refresh cuando no puedas cambiar nada del servidor, por ejemplo en un alojamiento estático sin reglas de redirección. Google trata un meta refresh instantáneo como una redirección permanente y uno con retardo como temporal, así que un retardo 0 es lo más parecido a una 301.

Redirecciones con retardo y accesibilidad

Una redirección con retardo puede llevarse al lector a mitad de una frase. Las pautas de accesibilidad (WCAG) consideran un fallo las redirecciones temporizadas; una redirección instantánea está bien. Si tienes que esperar, dilo en la página ("Serás redirigido en 10 segundos"), e incluye siempre el enlace para que cada persona vaya a su ritmo.

Errores comunes

  • Un bucle de redirección. Dos páginas que se redirigen entre sí hacen rebotar al lector para siempre. Comprueba a dónde envía la página de destino.
  • Una URL relativa que apunta al sitio equivocado. url=new-page se resuelve respecto a la URL actual, así que desde /docs/old va a /docs/new-page. Usa una ruta completa como url=/new-page si tienes dudas.
  • Sin enlace alternativo. Añade siempre un enlace normal a la página nueva en el body.
  • Usar location.href para redirigir. El botón Atrás lleva entonces a un bucle de redirección. Usa location.replace.
  • Usar meta refresh cuando controlas el servidor. Configura una 301; es más rápida y más clara para todas las herramientas.

Preguntas frecuentes

¿Cómo redirijo una página HTML a otra página?

Añade <meta http-equiv="refresh" content="0; url=https://example.com/new"> al <head> de la página antigua, y un enlace normal a la página nueva en el body como alternativa. Si controlas el servidor, es mejor una redirección 301.

¿Cómo redirijo después de 5 segundos en HTML?

Pon como número antes del punto y coma el retardo en segundos: <meta http-equiv="refresh" content="5; url=https://example.com/new">. Avisa al lector en la página de que va a ser redirigido, y dale un enlace.

¿Cómo hago que una página se recargue sola automáticamente?

Usa un meta refresh con retardo y sin URL: <meta http-equiv="refresh" content="30"> recarga la página cada 30 segundos. Recarga la página entera e interrumpe al lector, así que para datos en vivo suele ser mejor actualizar parte de la página con JavaScript.

¿Una redirección con meta refresh es mala para el SEO?

Google la sigue: un meta refresh instantáneo (retardo 0) se trata como una redirección permanente y uno con retardo como una redirección temporal. Una 301 en el servidor sigue siendo la forma recomendada, porque es más rápida y la entienden todos los rastreadores y navegadores.

¿Cómo redirijo con JavaScript?

Usa location.replace('https://example.com/new'). Reemplaza la página actual en el historial, así que el botón Atrás no vuelve a la página que redirigió. location.href = url también funciona, pero mantiene la página antigua en el historial.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR