Redirección 301

El término redirección 301 se refiere al cambio permanente de una página web de una ubicación a otra. Te explicamos los aspectos técnicos y te mostramos cómo configurar una redirección 301 con el archivo htaccess del servidor.

¿Para qué se utilizan las redirecciones 301?

La redirección 301 es el tipo de redirección más conocido. El número 301 se refiere al código de estado HTTP subyacente. Si bien el código de estado 404 indica que no se puede encontrar el recurso solicitado, los códigos del tipo 300 hacen referencia a redireccionamientos. Por lo general, las redirecciones 301 sirven para evitar errores 404.

Descubre los códigos de estado HTTP más importantes relacionados con las redirecciones:

Código de estado HTTP Explicación
200 OK El servidor ha encontrado y muestra un recurso en la dirección solicitada.
301 Moved Permanently El recurso en la dirección solicitada se encuentra disponible permanentemente en una nueva dirección que devuelve el servidor. La dirección antigua ya no es válida.
302 Found El recurso de la dirección consultada está temporalmente disponible en una nueva dirección que devuelve el servidor. La dirección antigua puede volver a ser válida en el futuro.
303 See Other Similar al código 302, pero solo se permite solicitar direcciones temporales mediante peticiones GET.
307 Temporary Redirect Similar al código 302; a diferencia de 303, se permite al cliente cambiar el método HTTP (GET, POST, PUT, etc.) al solicitar la dirección temporal.
404 Not Found El servidor no puede encontrar un recurso en la dirección solicitada.

Redirección 301 para migrar contenidos

Los contenidos web, también conocidos como recursos, se encuentran en las direcciones web. A veces se migran contenidos, es decir, el contenido permanece igual, pero la dirección cambia. Los contenidos se migran, por ejemplo, cuando se cambia de HTTP a HTTPS, cuando se traslada una página web a un nuevo dominio o cuando se adapta la estructura de enlaces para la optimización de los motores de búsqueda. En cualquier caso, hay que evitar que los usuarios accedan a direcciones sin contenido.

Si el servidor no puede asignar un recurso a una dirección, devuelve el error 404 “Not Found” en HTTP, lo cual resulta molesto para los usuarios, porque no pueden acceder al recurso buscado. Si la dirección es consultada por un web crawler en lugar de por un humano, los errores 404 llevan a la desindexación del recurso asociado. Los administradores de páginas web intentan evitar ambas situaciones en la medida de lo posible.

Redirección 301 para optimizar los motores de búsqueda

Además de los cambios de dirección del contenido web, las redirecciones 301 son esenciales para la optimización de los motores de búsqueda (SEO) y el marketing online. Las redirecciones 301 se utilizan para crear “URL canónicas” y “URL atractivas”, dado la importancia de las URL para el SEO. Además, al acortar URL con un link shortener, al que se recurre muy a menudo para enlazar landing pages en las redes sociales, también se utilizan internamente redirecciones del tipo 301.

¿Por qué las redirecciones 301 son tan importantes para el SEO? A diferencia de las redirecciones 302, 303 y 307, la redirección 301 transfiere el “link juice” de la dirección original a la nueva dirección. Si un motor de búsqueda ha indexado un contenido y lo ha calificado favorablemente, la redirección 301 permite introducir el contenido en la nueva dirección manteniendo su antigua clasificación. Así es como las redirecciones 301 hacen que estrategias SEO complejas sean posibles. De hecho, la estrategia multidominio es un ejemplo de ellas.

¿Cómo funcionan las redirecciones 301?

Las redirecciones 301 entran en juego en el intercambio de información entre servidores web y clientes, específicamente cuando el servidor indica al cliente que el recurso que busca ya no está disponible en la dirección web (URL) que ha solicitado y le remite a la dirección actual en la que se encuentra dicho recurso. El cliente puede ser el navegador de un usuario humano o un bot de un motor de búsqueda.

  1. El cliente intenta acceder al recurso de la dirección URL.
  2. El servidor responde con el código de estado 301 “Moved Permanently” y proporciona la nueva URL para acceder al recurso en la cabecera HTTP location.
  3. El cliente almacena la nueva URL en su caché; los futuros accesos a la antigua URL se redireccionarán automáticamente a la nueva.
  4. El cliente intenta acceder al recurso con la nueva URL.

El proceso puede ilustrarse con la popular herramienta de red cURL en Windows. Accede a la página de inicio de IONOS en http://ionos.es y utiliza la opción –head para mostrar la cabecera HTTP de respuesta:

curl --head http://ionos.es

El servidor IONOS responde con el código de estado HTTP “301 Moved Permanently”, la cabecera location contiene la nueva dirección: https://www.ionos.es/. Como se puede ver, la página de inicio se encuentra en el subdominio WWW y utiliza el protocolo HTTPS. A continuación, se indica a cURL que siga la redirección 301 con la opción –location:

curl --head --location http://ionos.es

Ahora cURL muestra las cabeceras de dos direcciones. En la segunda solicitud, el servidor responde con el código de estado “200 OK”; el recurso se ha encontrado y el contenido se transmite en el cuerpo de la respuesta. El mismo proceso se ejecuta en segundo plano cuando introduces en tu navegador la dirección.

Crear una redirección 301 con un archivo htaccess

Hemos visto el papel que desempeñan las redirecciones 301 en la comunicación entre el servidor y el cliente, pero ¿cómo se puede crear una redirección 301 en el servidor? Hay varias formas, una de ellas es definiendo las directivas de redirección en el archivo htaccess del servidor Apache. Para que funcione, los módulos de Apache correspondientes deben estar activos:

Directivas Módulo Apache Explicación
Redirect mod_alias Redireciones sencillas
Rewrite mod_rewrite Redirecciones complejas

Redirecciones sencillas para hacer un redirect 301 con el archivo htaccess

En primer lugar, se presenta cómo se pueden crear redirecciones sencillas del tipo 301 en el archivo htaccess. Para ello, se utilizan las directivas de redirección del módulo mod_alias, que sirven para redireccionar una URL del servidor a otra URL El patrón es bastante sencillo:

Redirect 301 "/source_path" "target_URL"

Primero se redirige una URL del servidor a otra URL interna. La barra inclinada indica el comienzo de la ruta URL, es decir, la parte que va después del dominio:

Redirect 301 "/old.html" "/new.html"

Sin embargo, si se quiere hacer referencia a una URL externa, se pone como destinataria:

Redirect 301 "/old.html" "http://example.com/new.html"

También es posible utilizar la directiva redirect para definir redirecciones 301 de directorios enteros en el archivo htaccess. Se redirigen todas las URL que empiezan por “es”:

Redirect 301 "/es/" "http://es.example.com/"

Se puede utilizar el mismo esquema para redireccionar todas las URL de un dominio a otro dominio:

Redirect 301 "/" "http://other.example.com/"

Si se pretende redirigir muchas direcciones individuales que siguen un determinado patrón, registrar cada redirección individualmente puede ser una tarea engorrosa. Para ello, se puede utilizar la directiva RedirectMatch, la cual utiliza una expresión regular para reconocer patrones y referirse a ellos:

RedirectMatch 301 regex URL

A continuación, puedes ver un ejemplo de una entrada RedirectMatch que obtiene la categoría y el ID de los parámetros GET de un artículo y los introduce en su ruta:

RedirectMatch 301 "/article.php?cat=(.*)&id=(.*)" "/articles/$1/$2/"

Imagina que el dominio es example.com. Entonces, la URL http://example.com/article.php?cat=web&id=42 se redirigiría a http://example.com/articles//web/42/.

Redirecciones complejas por medio de un redirect 301 en el archivo htaccess

Utiliza las directivas rewrite del módulo de redirects con Apache mod_rewrite para crear redirecciones 301 en los escenarios más complejos. mod_rewrite se puede utilizar para definir y consultar condiciones de redirección, establecer y leer variables de entorno y determinar reglas de redirección con expresiones regulares.

mod_rewrite permite encadenar reglas de redirección; el módulo proporciona una especie de mini lenguaje de programación para transformar distintas URL y activar redirecciones. El módulo mod_rewrite se debe utilizar con precaución, debido a que un uso incorrecto de él puede generar bucles infinitos.

Las directivas rewrite comienzan con la línea “RewriteEngine on”, van seguidas de condiciones de redirección mediante RewrteCond y de una o más reglas de redirección mediante RewriteRule. Se pueden modificar las condiciones o reglas mediante opciones denominadas “flags”. Para activar una redirección 301, una de las reglas debe contener las flags L,R=301:

RewriteEngine on
RewriteCond TestString CondPattern [flags]
RewriteRule URL_path Substitution [L,R=301]

Entre las reglas y condiciones de redirección hay acceso a numerosas variables de encabezado y servidor con la forma %{HTTP_HOST}, %{REQUEST_URI}, etc., los cuales pueden ser enlazados con operadores y posteriormente procesados con funciones. De este modo, se puede realizar casi cualquier redirección, aunque la sintaxis no sea muy intuitiva.

A continuación, se muestra un ejemplo de redirección 301 utilizando mod_rewrite. Se pretende aplicar URL canónicas para evitar duplicar contenido en una página web. Es decir, sea cual sea la forma en que los visitantes accedan al contenido, todas las URL deben empezar por HTTPS y WWW.

Se definen dos condiciones de redirección, que se vinculan con la flag OR. La primera condición comprueba si HTTPS está desactivado, la segunda comprueba si al dominio le falta el prefijo WWW. Mediante el flag NC, se desactiva la distinción entre mayúsculas y minúsculas. Si una de las dos condiciones es cierta, se redirecciona a la versión HTTPS-WWW de la URL mediante una redirección 301. Se utiliza la expresión regular (.*), que recoge cualquier URL, y se inserta después del dominio utilizando $1:

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [L,R=301]

¿Cuáles son los problemas y peligros de utilizar redirecciones 301?

Las redirecciones 301 son una herramienta estándar en el desarrollo web y el SEO. Sin embargo, hay que tener cuidado a la hora de configurarlos; si las redirecciones se utilizan de forma incorrecta, pueden surgir problemas graves. El servidor puede bloquearse o la página puede perder su posicionamiento en los motores de búsqueda.

Archivo htaccess corrupto al modificarlo manualmente

El archivo htaccess configura los directorios del servidor web de Apache. El más mínimo cambio en el archivo htaccess puede hacer que la página web sea inaccesible, momento en el cual aparece el famoso error 500 de servidor o el problema en WordPress “White Screen of Death”.

Es mejor hacer una copia del archivo htaccess antes de editarlo desde la línea de comandos. Para ello, cambia al directorio web público de la página web y utiliza el comando cp:

cp -a .htaccess _htaccess

Si se producen errores después de haber modificado el archivo htaccess, simplemente restaura la versión anterior:

cp -a _htaccess .htaccess

Redirecciones encadenadas y bucles de redirecciones

Las redirecciones son útiles, pero “cuestan” un ciclo de solicitud-respuesta completo. Utilizar varias redirecciones encadenadas implica que los usuarios tengan que esperar, lo que provoca un aumento de la tasa de rebote. Los motores de búsqueda también valoran negativamente a aquellas páginas que redireccionan varias veces seguidas. Como regla general, se puede efectuar un máximo de tres redirecciones sucesivas.

Los bucles de redirección, en los que dos direcciones se redireccionan la una a la otra sin parar, son fatales. Los bucles de redirección producen el error ERR_TOO_MANY_REDIRECTS en el navegador de los usuarios y no les permite acceder al recurso deseado. Por norma general, conviene probar antes con cURL las nuevas redirecciones, para asegurarse de que se obtiene el resultado deseado.

Envenenamiento de caché involuntario al utilizar la redirección 301

El uso incorrecto de una redirección 301 puede traer dolores de cabeza. A diferencia de las redirecciones temporales del tipo 302, 303 y 307, la redirección 301 encomienda al cliente a almacenar en caché la nueva URL. Si posteriormente se quiere volver a la URL original, los clientes no reciben ningún tipo de aviso y siguen conectándose automáticamente a la nueva URL. Por contrarrestarlo, puedes utilizar redirecciones temporales o asignar el valor adecuado en el encabezado de Cache-Control.

Configura el encabezado de Cache-Control con un valor de hora al definir la regla de redirección 301 en el archivo htaccess. De esta modo, garantizas que los cambios posteriores en el destino de la redirección lleguen a todos los clientes:

ExpiresActive on
ExpiresDefault "access plus 1 hour"
Redirect 301 / https://www.example.com/

Es posible recurrir a un truco para configurar el encabezado de Cache-Control en caso de que se utilicen redirecciones complejas con directivas de rewrite. Se define una variable de entorno limitcache como parte de la regla de redirección 301. A continuación, se configura el encabezado, leyendo la variable de entorno como condición. De este modo, se garantiza una correcta configuración del encabezado al realizar la redirección:

RewriteRule ^.* http://www.example.com/ [L,R=301,E=limitcache:1]
Header always set Cache-Control "max-age=3600" env=limitcache
Consejo

¿Has seguido una redirección 301 y tu navegador se niega a acceder a la dirección original? Basta con añadir un “Query String” con cualquier contenido del tipo ?foo=bar a la dirección antigua y obligar al navegador a cargar la URL.