Redirección permanente de páginas

Patxi Echarte, November 12th, 2005

Si llevas ya un tiempo trabajando en proyectos web, seguramente te habrá tocado más de una vez actualizar un web a una nueva versión, o cambiar una sección de una url a otra, dentro o fuera del mismo web. Cuando se hacen cosas de este tipo hay que tener en cuenta que puede que algunas de las url que teníamos activas hasta este momento, dejen de funcionar, ya que seguramente habrán cambiado. A primera vista puede no parecer algo muy importante, puesto que seguramente nos habremos esforzado en hacer que todas las páginas sean perfectamente accesibles desde la portada, sin embargo muchas veces olvidamos que cada vez más gente entra por sitios diferentes a la portada en los webs, por ejemplo todos los usuarios que llegan referidos por indexadores como Google.

Por lo tanto, es importante que, cuando se planee cualquier tipo de actualización en un web, que afecte a las url existentes, pensemos y planifiquemos bien la forma en la que las visitas referidas a esas url han de ser redirigidas. En la situación óptima, todas estas visitas a url’s ya no existentes, habría que redirigirlas a las nuevas url’s que representen los contenidos anteriores, y en aquellos casos en los que estos ya no existan, decidir si se redirije a la portada, a una portada de la sección, o incluso a una página de error. De esta forma no estaremos desaprovechando toda la información de la que disponen los indexadores sobre nuestro web, algo que suele costar mucho tiempo y trabajo conseguir.

Para facilitar este tipo de cambios el estándar HTTP/1.1 dispone de un mecanismo ya definido, mediante el cual se puede indicar que una página ha cambiado de url. La mayoría de indexadores como Google, hacen caso de esta opción, de forma que se nos garantiza que utilizándola, las páginas que tengamos indexadas seguirán estándolo y sus url’s serán actualizadas automáticamente.

El método para conseguirlo es muy sencillo, y se basa en la utilización del código de redirección 301. Veamos a continuación algunos ejemplos de uso basándonos en el servidor web Apache.

Hay diferentes sitios en los que se pueden indicar estas redirecciones, en el archivo httpd.conf a nivel de todo el servidor web, dentro de un Virtual Host o lo que es más sencillo de gestionar y modificar, dentro de un archivo .htaccess en la raíz del document_root del dominio.

Un ejemplo sencillo de redirección sería el siguiente, en el que vamos a hacer que todas las peticiones a la página /acercade.html se redirijan a /about.html. Para ello crearíamos un archivo .htaccess en la carpeta de nuestro web (www.example.com) con el siguiente contenido:

Redirect 301 /acercade.html http://www.example.com/about.html
   

Con esta línea indicamos que queremos realizar una redirección 301 (permanente) que conduzca de la página /acercade.html a la página http://www.example.com/about.html. Es necesario indicar el dominio en la url destinataria, que en nuestro caso es el mismo, pero podría ser otro, lo cual nos permitiría redirigir páginas entre webs, o en aquellos casos en los que haya cambiado el nombre del dominio.

Normalmente tendremos un conjunto extenso de direcciones a redireccionar, para lo cual tendríamos que escribir una línea para cada una, sin embargo, es habitual que la mayoría de estas redirecciones cumplan determinados patrones, por lo que existe una directiva de apache de nombre RedirectMatch, que nos permite ahorrarnos la escritura de muchas de ellas. Por ejemplo, si tuviesemos que cambiar las url’s de todas las páginas que están dentro de la sección /productos por /catalogo/productos, se podría utilizar lo siguiente:

RedirectMatch 301 ^/productos(/.*)?$ http://www.example.com/catalogo/productos$1
   

En el caso anterior hemos utilizado una expresión regular para hacer que todas las solicitudes de página que empiecen por /productos se redirijan a la nueva ubicación.

Existe también otro método para efectuar las redirecciones, que se basa en la utilización de las funcionalidades que ofrece el módulo mod_rewrite de apache. Este módulo nos permite encadenar un conjunto de reglas de reescritura sobre las url e indicar acciones sobre ellas. El ejemplo anterior podríamos haberlo realizado también con las siguientes instrucciones:

RewriteEngine ON
RewriteRule ^/productos(/.*)?$ http://www.example.com/catalogo/productos/$1 [R=301,L]
   

En este caso la primera instrucción activa el motor de reescritura, y la seguna corresponde a la primera y única regla de nuestra cadena de reglas, que lo que hace es reescribir la url en base a la misma expresión regular que hemos utilizado en el ejemplo anterior. Los datos del final de la regla, [R=301,L], indican que con la nueva url obtenida hay que realizar una redirección 301 y que no hay que seguir procesando el resto de reglas.

Conclusión

Hemos visto 3 métodos diferentes de redirigir las url hacia sus nuevas ubicaciones mediante apache, cuál utilizar dependerá de cada caso, en función del número de páginas a redirigir y la complejidad que tengan las redirecciones.

Más información

Comparte esta información

4 Comentarios para “Redirección permanente de páginas”

  1. javi dice:

    Muchas gracias, me ha sido muy útil, claro y perfectamente explicado.

    Enhorabuena!

  2. Adrian dice:

    como se hace cuando son varias paginas? Se hace un mismo archivo con diferentes lineas?

  3. Patxi dice:

    Puedes introducir todas las páginas en la configuración de apache o en un archivo .htaccess, también puedes utilizar expresiones regulares si no quieres escribirlas todas y hay algún patrón que se les pueda asignar.

  4. David Rodríguez » Blog Archive » Redirección Permanente 301 en páginas HTML dice:

    […] Me acabo de encontrar con un caso personal en el que tenía que cambiar permanentemente alguna página en .html a una nueva dirección, y al buscar la mejor solución veo que hay cierta incertidumbre en el tema. Trás leer detenídamente algunos artículos sobre las mejores formas de hacer las redirecciones (xeoweb, eslomas, emezeta), llego a la conclusión sin lugar a dudas que la más conveniente es la redirección 301. […]

Deja un comentario