Redirecciones web 301 para SEO con .htaccess

Un error que Google no perdona es tener enlaces a nuestro sitio que muestren el error 404 (es decir que el archivo ya no existe o que el navegador web no ha sido capaz de comunicarse con el servidor). Esto suele ocurrir cuando actualizamos sitios web y cambiamos el nombre de las páginas o cambiamos de dominio, hacemos la instalación de algún CMS, etc. Una forma de evitar este problema es utilizar las redirecciones 301 junto con el archivo .htaccess.

Las redirecciones 301 son redirecciones (valga la redundancia) de carácter permanente. Esto quiere decir que si se tiene configurada esta re-dirección en un dominio http://dominio1.com a http://dominio2.com, todo el trafico que va al primero, automáticamente y de forma trasparente para los usuarios y motores de búsqueda se traslada al dominio2.com, junto con el PageRank (por eso es que es valida para SEO). Esto es vital para mantener el posicionamiento en buscadores.

El archivo .htaccess es un archivo de configuración en servidores Apache, el cual permite gestionar las re-direcciones 301, además de muchas otras cosas más. Este archivo se encuentra en el directorio raíz del hosting (regularmente dentro de la carpeta public_html). El extraño nombre lleva delante un punto ya que es la forma de convertir un archivo en oculto en los sistemas Unix.

Redirección básica: un archivo a otro

La redirección más básica es la de un solo archivo a otro, el código es el siguiente:
Redirect 301 /d/file.html /ddd/file.html

Redirigir todo el trafico de un dominio hacia otro

Continuando con el ejemplo del cambio de dominio, supongamos que tienes el dominio-antiguo.com y deseas trasladar todo el trafico que tienes hacia el dominio-nuevo.com, simplemente debes añadir las siguientes reglas en el archivo .htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^dominio-antiguo.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.dominio-antiguo.com$
RewriteRule ^/?$ "http://www.dominio-nuevo.com/" [R=301,L]

Canonización de URLs (Con www ó sin www)

No es lo mismo entrar a http://www.mi-dominio.com que a http://mi-dominio.com y esta es la base del concepto de la canonización. De acuerdo a los expertos los motores de búsqueda interpretan los dominios anteriormente mencionados como dos urls y no como el mismo. Para evitar este problema si queremos que nuestro dominio sea solo accesible con el nombre sin las “www” debemos añadir al .htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.mi-dominio.com$
RewriteRule ^/?$ "http://mi-dominio.com/" [R=301,L]

Ahora si lo que deseamos es que nuestro dominio siempre muestre las “www” escribimos:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^mi-dominio.com$
RewriteRule ^/?$ "http://www.mi-dominio.com/" [R=301,L]

Si el código anterior no funciono puedes intentar con el siguiente (En mi experiencia el código anterior funciona perfecto para sitios hechos en WordPress y por alguna razón a veces no ocurre lo mismo con sitios en Joomla!)
RewriteCond %{HTTP_HOST} ^mi-dominio.com [NC]
RewriteRule ^(.*)$ http://www.mi-dominio.com/$1 [L,R=301]

Redirigir todo el tráfico que llega a las páginas contenidas un folder a una sola página

Supongamos que te dice el gerente comercial: “Oye hemos dejado de vender los 300 productos para niños a través del sitio web, necesitamos que las páginas de cada uno de los productos (las cuales se encuentran en el folder /kids/) dirijan el trafico que les llega a la página http://el-dominio.com/consolidado-kids.php

No te asustes que la solución no será entregar un código con 300 líneas, sino utilizar una expresión regular soportada por .htaccess.

RewriteEngine on
RewriteRule ^kids(.*)$ http://el-dominio.com/consolidado-kids.php [L,R=301]

Recuerda que debes cambiar el nombre de “kids” y http://el-dominio.com/consolidado…. por el nombre del folder y dominio de tu interés.

Redirigir URLs dinámicas con parámetros a una sola URL estática

Ahora imagínate que tienes un catalogo en linea con URLs tales como http://tu-catalogo.com/articulo.asp?identificador=1245 y te solicitan redirigir todas estas páginas a una sola llamada http://tu-catalogo.com/ultimas-ofertas.php, la solución es nuevamente .htaccess.

RewriteEngine on
RewriteCond %{QUERY_STRING} ^identificador=([^&]+)$
RewriteRule articulo.asp http://tu-catalogo.com/ultimas-ofertas.php? [R=301,L]

Debes hacer el cambio de “identificador” por el id que corresponde a tu sitio web (regularmente se utiliza id, itemId, ref, etc), el cambio de la página base (El nombre que aparece después de RewriteRule) y por supuesto, la dirección del dominio que te interese.

Algunos tutoriales que muestran más información

El archivo .htaccess es muy dinámico y potente, existen tantas opciones personalizables solo en los aspectos de re-direcciones y URLs que este post ha quedado corto, así que si te interesa conocer más a fondo esta tecnología puedes ver alguno de los siguientes enlaces:

  1. .htaccess, 301 Redirects & SEO [SeoBook]
  2. SEO Search Engine Friendly Redirects without mod_rewrite [AskApache]

Ambos artículos están en ingles, pero son fáciles de seguir. Busque alguno en español pero no encontre ninguno que cumpliera mis expectativas. Saludos!!

Quizá te pueda interesar >>

14 comentarios

  1. Muy buen artículo pero tengo una duda. Por ejemplo, en mi página al subir el .htaccess con el siguiente código:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^colorkey.es$
    RewriteRule ^/?$ “http://www.colorkey.es/” [R=301,L]

    Da el siguiente error:

    Si intentas acceder a la página con www sin las tres w no hay problema, pero al intentar navegar dentro, es decir, al hacer clic en los enlaces entonces sí que da errores de servidor.

    ¿Hay alguna manera de conseguir la canonización de la URL sin que afecte a los enlaces internos?

  2. Hola! Muy interesante el artículo, sin embargo estoy intentando hacer una redirección de un dominio .net a otro .es y no lo consigo, el código que he puesto es el siguiente:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^speedcoches.net$ [OR]
    RewriteCond %{HTTP_HOST} ^www.speedcoches.net$
    RewriteRule ^/?$ “http://www.speedcoches.es/” [R=301,L]

    El caso es que si te metes en speedcoches.net sale el mismo contenido que en speedcoches.es (con la base de datos actualizada y todo).

    La verdad es que no se que puedo estar haciendo mal, he probado a cambiar el .htaccess de varias formas y nada, el arhivo .htaccess que estoy modificando esta en la carpeta www del dominio speedcoches.net, lo estoy haciendo desde el dominio equivocado o es algún otro tipo de error?

    Gracias por la ayuda 🙂

  3. Para el caso de direccionar le dominio1 al dominio2:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^dominio-antiguo.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www.dominio-antiguo.com$
    RewriteRule ^/?$ “http://www.dominio-nuevo.com/” [R=301,L]

    Puedo cambiar la linea penúltima y ponerla así?:
    RewriteRule ^/?$ “http://dominio-nuevo.com/”
    Para que direccione al dominio2, pero sin www.

    Espero tu respuesta, muchas gracias!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *