301 Moved Permanently
Uso
Cuando se recibe el código de estado 301 Moved Permanently, se espera que los clientes actualicen los enlaces almacenados al nuevo URI. El nuevo URI se indica mediante la cabecera Location y el cliente lo utiliza para la redirección automática.
Esta respuesta es habitual cuando los servidores migran a un nuevo dominio o reorganizan su estructura interna de archivos sin intención de volver al URI anterior.
Cambio de método
Por motivos históricos, los agentes de usuario pueden cambiar POST por GET en una redirección 301. La mayoría de los navegadores hacen exactamente eso, lo que convierte el cambio de método en un comportamiento estándar de facto. El código de estado 308 se creó específicamente para garantizar la conservación del método sin ambigüedad. Para API y aplicaciones modernas, es preferible usar 308 en las redirecciones permanentes cuando deba conservarse el método original.
Mantenga las redirecciones 301 activas durante al menos un año, idealmente de forma indefinida. Google reconoce los 301 con rapidez, pero la transferencia completa de las señales tarda semanas. Los navegadores almacenan en caché las respuestas 301 de forma agresiva según las directivas Cache-Control. Sin cabeceras de caché explícitas, la redirección permanece indefinidamente en la caché del navegador. Eliminar un 301 en el servidor no borra las redirecciones ya almacenadas en caché en los navegadores.
Nota
Use 301 cuando la URL antigua deba dejar de servir contenido de forma permanente. Use rel=“canonical” cuando ambas URL sigan sirviendo contenido pero una sea la preferida para la indexación. Un 301 fuerza todo el tráfico hacia la nueva URL, mientras que canonical es una indicación que los motores de búsqueda siguen, pero no imponen.
Impacto en SEO
Google interpreta un 301 como una señal fuerte de que el destino de la redirección es la URL preferida. Las señales de posicionamiento se transfieren de la URL antigua a la nueva. Use 301 para cambios permanentes de URL, migraciones de dominio y actualizaciones a HTTPS. Google sigue hasta 10 saltos de redirección. El contenido de las URL de redirección intermedias se ignora. Redirigir con un 301 las URL eliminadas a la página de inicio o a una página de categoría genérica es detectado por Google como un soft 404.
Ejemplo
El cliente solicita un recurso HTML. El servidor responde con 301 Moved Permanently e incluye el nuevo URI en la cabecera Location. El cuerpo del mensaje sugiere actualizar los marcadores, aunque los navegadores modernos redirigen de inmediato.
Solicitud
GET /news.html HTTP/1.1
Host: example.com
Respuesta
HTTP/1.1 301 Moved Permanently
Location: http://example.com/feeds/news.html
Content-Type: text/html; charset=UTF-8
Content-Length: 150
<h1>The Newsfeed has moved</h1>
<body>
The newsfeed has moved permanently to
<a href=/feeds/news.html>here</a>.
Please update your bookmarks.
</body>
Referencias de código
.NET
HttpStatusCode.MovedPermanently
Rust
http::StatusCode::MOVED_PERMANENTLY
Rails
:moved_permanently
Go
http.StatusMovedPermanently
Symfony
Response::HTTP_MOVED_PERMANENTLY
Python3.5+
http.HTTPStatus.MOVED_PERMANENTLY
Java
java.net.HttpURLConnection.HTTP_MOVED_PERM
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_MOVED_PERMANENTLY
Angular
@angular/common/http/HttpStatusCode.MovedPermanently