Saltar al contenido principal

Guías / Códigos de estado HTTP explicados

301 frente a 302: redirecciones permanentes y temporales

Un 301 dice que el recurso se ha movido de forma permanente y que la URL nueva debe sustituir a la antigua en todas partes; un 302 dice que el traslado es temporal y que la URL original sigue siendo la buena. Los buscadores actúan según esa diferencia, y por eso el código equivocado te cuesta posiciones.

Qué le dicen los dos códigos a un cliente

Los dos códigos envían al cliente a la dirección de la cabecera Location, y para un visitante son idénticos. La diferencia está en qué hace todo lo demás con esa información. Un 301 invita a clientes y rastreadores a actualizar sus registros: cambia el marcador, reescribe el enlace, indexa el destino en lugar del origen. Un 302 les pide que sigan usando la URL original y que solo den un rodeo esta vez. Los navegadores pueden guardar un 301 en caché y dejar de preguntar al servidor; un 302 no es almacenable en caché por defecto salvo que la respuesta diga lo contrario.

Cuándo usar cada uno

  • Usa 301 para un cambio de dominio, una migración de HTTP a HTTPS, una canonicalización de sin www a con www, una reestructuración permanente de URL, una página fusionada o renombrada, o una página de producto retirada que apunta a su sustituta más parecida.
  • Usa 302 para una página de mantenimiento, una prueba A/B, una elección de aterrizaje por país o idioma que quizá cambies, una URL de campaña de vida corta o un destino temporal de "vuelve más tarde".

No uses nunca un 301 para algo que pienses revertir. Como los clientes lo guardan en caché, los visitantes que vuelven pueden seguir cayendo en el destino temporal mucho después de que borres la regla, y no hay forma de meter la mano en sus cachés. El error contrario: deja un 302 en un traslado permanente y la URL antigua se queda indexada, la nueva compite con ella y las señales siguen repartidas.

Consecuencias para el SEO

La documentación de Google afirma que una redirección permanente es una señal de que el destino de la redirección debe tratarse como la URL canónica, mientras que una redirección temporal no lo es, así que la URL original mantiene su sitio en el índice. En la práctica:

  • Un 301 consolida la autoridad de los enlaces en el destino y, con el tiempo, sustituye la URL antigua por la nueva en el índice.
  • Un 302 suele dejar la URL de origen indexada. Los buscadores intentan interpretar la intención, así que un 302 que dura mucho puede acabar tratándose como permanente, pero no deberías confiar en que acierten.
  • Las cadenas de redirecciones diluyen el beneficio y ralentizan el rastreo. Apunta las URL antiguas directamente al destino final.
  • Redirigir muchas páginas retiradas a la portada tiende a tratarse como un soft 404 y no como un traslado. Redirige a la página equivalente más cercana, o devuelve un 410 si no hay nada equivalente.
  • Elijas lo que elijas, mantenlo coherente con tus etiquetas canónicas y con tu sitemap. Las señales contradictorias son peores que una señal algo menos óptima.

307 y 308: las versiones que conservan el método

Las definiciones originales de 301 y 302 eran ambiguas respecto al método HTTP, y los clientes se asentaron en un comportamiento que el estándar describe hoy como histórico: al seguir un 301 o un 302 después de un POST, muchos clientes cambian el método a GET y descartan el cuerpo. Para una página eso es inofensivo. Para un endpoint de formulario o una API destruye la petición y no informa de nada.

307 Temporary Redirect tiene el mismo significado que 302, y 308 Permanent Redirect el mismo que 301, con un requisito añadido en ambos: hay que conservar el método y el cuerpo. Así que para URL que solo reciben peticiones GET, 301 y 302 valen y son lo que espera la mayoría de las herramientas. Para cualquier cosa que acepte POST, PUT, PATCH o DELETE, usa 308 para un traslado permanente y 307 para uno temporal. Si lo que quieres justamente es que a un POST le siga un GET en otra URL, para eso está 303 See Other.

Cómo comprobar qué código devuelve una URL

  1. Lee la línea de estado y el destino sin seguir la redirección:
    curl -sI https://example.com/old-page | grep -Ei "^(HTTP|location|cache-control)"
    La línea de estado muestra 301, 302, 307 o 308, y Location muestra a dónde apunta.
  2. Sigue la cadena entera y cuenta los saltos, para ver si una redirección se ha convertido en tres:
    curl -sIL -o /dev/null -w "%{num_redirects} hops, final %{http_code}, %{url_effective}\n" https://example.com/old-page
  3. Prueba con un POST si el endpoint lo acepta. Si la petición llega al destino como un GET sin cuerpo, cambia la regla a 307 o 308.
  4. Cambia el código allí donde se genera. Puede ser la aplicación, la configuración del servidor web, una regla de .htaccess o la CDN. Si dos capas redirigen a la vez, gana la más externa y la regla interna es invisible.
  5. Comprueba con la caché fría. Un navegador que ya guardó un 301 lo sigue obedeciendo, así que confírmalo con curl o en una ventana privada antes de dar por hecho que el cambio no se aplicó.
  6. Después de un traslado permanente, deja la redirección puesta. Quitarla más tarde deja colgados todos los enlaces y marcadores que sigan apuntando a la URL antigua.

Vigilar una redirección después de ponerla

Una redirección que cambia de código, empieza a hacer bucle o pierde su certificado TLS deja la URL de origen respondiendo, así que nada parece roto hasta que cae el tráfico. Las verificaciones externas que registran el código de estado exacto y siguen la cadena lo sacan a la luz en la siguiente ejecución, y hacerlas desde muchas redes distingue un cambio global de regla de un problema regional de la CDN. HostTracker monitorea sitios web desde 2004 y ejecuta verificaciones desde más de 300 puntos de verificación en 158 ciudades. Mira qué devuelve una URL ahora mismo con la herramienta de verificación HTTP, y lee la guía completa de la familia de redirecciones 3xx para los códigos que rodean a estos dos.

Compruébalo ahora

Ejecuta la comprobación gratuita en tu propio sitio, sin necesidad de cuenta.

HTTP check

Monitoriza esto de forma permanente

Recibe un aviso en cuanto algo falle: HostTracker comprueba desde más de 300 ubicaciones y te avisa por correo, SMS, Slack, Telegram y más.

Funciones de HostTracker

Más en esta sección: Códigos de estado HTTP explicados