Archivo htaccess

Uno de los problemas fundamentales que nos podemos encontrar en el SEO son los enlaces rotos, páginas 404, redireccionamientos múltiples, cambio no correcto a https, o cambio de dominio sin estrategia de redireccionamiento (migración de dominio).

En algunos de ellos hará falta tocar el código fuente del tema o de las páginas o post, como es en el caso de los enlaces rotos o dobles redireccionamientos. Pero en otros debemos hacerlo con redireccionamientos htaccess

¿Qué es el fichero .htaccess (hypertext Access)?

Es un fichero que se encuentra en la raíz del sitio web, o de cualquier directorio donde haya un index.php, donde le indicamos al servidor distintos comportamientos que debe tener para mostrar la información adecuada al cliente sobre ese mismo directorio o árbol de directorios.

Se trata de un archivo de configuración cuyo nombre será .htaccess y que contendrá los parámetros y directivas adecuados para ordenar al servidor comportamientos en su mismo directorio. Por ello no es uno de los ficheros más importantes de una web sobre un servidor Apache.

¿Para qué sirve el fichero htacces?

Lo podemos utilizar para un montón de situaciones, como por ejemplo:

  • Controlar el acceso al sitio web (por ip) o a carpetas determinadas
  • Evitar el Hotlinking,
  • Cambiar una página de inicio por defecto
  • Forzar el cacheo de nuestra web
  • Compresión Gzip
  • Informar del tiempo de cacheo.
  • Crear URL Amigables…

Pero lo que realmente nos atañe, y que es lo más importante, son los redireccionamientos. Por ello vamos a describirlos a continuación

Nos podemos encontrar distintas necesidades para utilizar redireccionamientos de forma masiva o de forma individual. Lo primero que debemos hacer es una copia del fichero, descargarlo por FTP. Siempre es importante llevar un control de versiones del mismo para no tener ningún problema.

A continuación describimos los siguiente problemas que nos podemos encontrar y por qué debemos hacer la redirección:

Redirección por cambio de dominio

Imaginamos que tenemos dominio1.com y hemos cambiado la web de nombre y lo ponemos como dominio2.com. Para ello necesitamos añadir la siguiente línea de código en el htaccess:

<IfModule mod_rewrite.c>

 RewriteEngine On

 RewriteCond %{HTTP_HOST} ^dominio1.com$ [OR]

 RewriteCond %{HTTP_HOST} ^www.dominio1.com$

 RewriteRule (.*)$ https://dominio2.com/$1 [R=301,L]

</IfModule>

 

De esta forma una la url http://dominio1.com/post1 se redirigirá a https://dominio2.com/post1. Esto es importante dejarlo claro. El segundo dominio dominio2.com tiene certificado ssl y por tanto el redireccionamiento se hace de forma completa al dominio con https. Si no lo hacemos así incurriremos en múltiples redireccionamientos que a la postre son perjudiciales para el SEO.

 

Redirigir dominio sin www a dominio con www. (cambio de sin www a www)

En este caso veremos cómo el dominio https://dominio1.com a https://www.dominio1.com hay que poner el siguiente código:

<IfModule mod_rewrite.c>

RewriteCond %{HTTP_HOST} ^dominio1.com [NC]

RewriteRule (.*) http://www.dominio1.com/$1 [R=301,L,QSA]

</IfModule>

 

En el caso que nuestro dominio ya sea en https pondremos la penúltima línea con https en lugar de http quedando el código de la siguiente forma:

<IfModule mod_rewrite.c>

RewriteCond %{HTTP_HOST} ^dominio1.com [NC]

RewriteRule (.*) https://www.dominio1.com/$1 [R=301,L,QSA]

</IfModule>

 

Redirigir dominio con www a dominio sin www. (Cambio de www a sinwww)

El ejemplo que vamos a poner es el del redireccionamiento del dominio https://www.dominio1.com a https://dominio1.com y que hay que poner el siguiente código:

<IfModule mod_rewrite.c>

RewriteCond %{HTTP_HOST} ^www.dominio1.com [NC]

RewriteRule (.*) http://dominio1.com/$1 [R=301,L,QSA]

</IfModule>

 

Como sucede con el caso anterior, si el dominio tiene https, debemos implementarlo directamente cambiando el http por un https en la penúltima línea, por lo que el código quedaría de la siguiente forma:

<IfModule mod_rewrite.c>

RewriteCond %{HTTP_HOST} ^www.dominio1.com [NC]

RewriteRule (.*) https://dominio1.com/$1 [R=301,L,QSA]

</IfModule>

 

Redireccionamiento de dominios sin https a dominios con https.

Esto es necesario cuando se instala un certificado de seguridad SSL. Y es necesario realizarlo porque todos los enlaces internos absolutos y enlaces externos apuntarán sobre la web en http, y si no realizamos la redirección tendremos 2 versiones del dominio.

Este es el código que hay que insertar:

<IfModule mod_rewrite.c>

RewriteCond %{HTTPS} off

RewriteRule (.*) https://www.ejemplo.com/$1 [R=301,L,QSA]

</IfModule>

 

Redirigir una página cualquiera a la url principal

En algunos casos nos encontramos con que el propio CMS ha creado dominio1.com/index.php o dominio1.com/home o dominio1.com/tienda siendo estas iguales que la página principal. Obviamente esto es un problema para el SEO de la web, ya que generaría una cantidad infumable de contenido duplicado. Por ello se debe hacer de la siguiente forma.

Redirect 301 /index.php https://dominio1.com

Esto redireccionaría la página creada llamada index.php a la propia home. Debemos probarlo y cerciorarnos que se hay generado un bucle por lo que la web quedaría out.

Redirigir errores 404 o 500 a otras páginas del sitio

Aquí debemos de sentarnos un minuto a pensar y a analizar. Primero por qué se están sucediendo los errores 404. Estos son páginas que existían y que ya no existen, pero que reciben enlaces, ya sea internos o externos de algún sitio. Lo primero es crear una tabla donde pongamos en un lado las páginas con errores y en el otro las páginas a las que queremos redireccionar esos errores, ya se porque tienen un contenido similar o que es la versión de la nueva página y se ha cambiado la url. Antes de realizar cualquier redireccionamiento debemos cambiar todos los enlaces internos que tengan estas páginas o url antiguas a las urls correctas. Y si podemos también cambiar los externos.

Una vez tengamos todo deberemos hacerlo uno a uno de la siguiente forma: una línea por redireccionamiento o error de la siguiente forma:

Redirect 301 (url del error sin la raíz) (url absoluta de la nueva). Por ejemplo

Si queremos redireccionar https://dominio1.com/post1-viajes-gulliver/ a https://dominio1.com/post1-viajes-de-gulliver-el-grande/ el código sería el siguiente:

Redirect 301 /post1-viajes-gulliver/ https://dominio1.com/post-viajes-de-gulliver-el-grande/

De esta forma estaremos indicando que la dirección url primera ha cambiado su dirección de forma permanente a la url2.

 

¿Qué precauciones debemos tener?

Cuando realizamos redirect masivos habitualmente cometemos errores por eso aconsejamos leer los siguientes puntos que indican las precauciones que debemos tener para no cometer errores:

  • Copia de seguridad del fichero .htaccess
  • Comprobar después de poner un código que no hay un doble redireccionamiento. (para ello hay una extensión de Chrome que podemos instalar: Redirect Path con el que podremos ver todas las redirecciones que se hacen cuando entramos a una web.
  • Comprobar los redirect con Screaming Frog, donde podemos ver también los bucles de redireccionamiento y los redirect múltiples.
  • Si tienes redireccionamientos anteriores y cambias a https, cambia hay que cambiarlos, para que no se haga doble redireccionamiento.
  • Recordemos que en los dobles redireccionamientos se pierde fuerza de los enlaces recibidos, y el Linkjuice se diluye.
  • Tener claro que se realiza un redireccionamiento 301 y no un redirección 302

 

A grandes rasgos es lo que necesitamos para que nos funcione todo de forma correcta al hacer cualquier cambio o migración en nuestra web.

 

Puntúa este artículo
[Total: 3 Average: 5]
Antonio López
Antonio López Tomás
Director SEO en Elblogdelseo | Últimos Post

Antonio López Tomás es fundador y Director SEO en Elblogdelseo.com y en Seostar.es. Profesor de SEO y Marketing digital en varias universidades (Unizar, UMU, UCAM, UNAE, U. Pompeu Fabra...) y Escuelas de negocios (EAE, IEBS. Marketing and Web, Seoworking, AulaCM...). Speaker en eventos de Marketing Digital y Autor de "Pensamientos Viajeros".

12 comentarios
    • Antonio López Tomás
      Antonio López Tomás Dice:

      Hola Wilson. No entiendo la razón de redirigir 3000 urls a la home. No se si es por una compra de dominio o por una migración. Si es por esto segundo, te recomiendo que hagas migración, es decir, que cada url se redireccione a la misma del nuevo dominio. Piénsalo, investígalo y me dices.
      No obstante si quieres redireigir esas 3000 urls de la web a la home del nuevo dominio tienes que implementar este código en el htacces de la web que quieras redirigir:

      RedirectMatch 301 ^(.*)$ https://www.nuevodominio.com/

      Pero que conste que yo no recomiendo esta práctica.

      Responder
    • Antonio López
      Antonio López Dice:

      En teoría el código está bien. Tienes que comprobar que no tengas ningún redireccionamiento adicional que provoque un bucle.

      Responder
      • Raúl
        Raúl Dice:

        Sí, sin embargo nunca sirvió el código. Seguramente puede ser un problema con algún Plugin. Lo digo porque tengo una sospecha con W3 Total Cache, pero nada sin confirmar.

        Al final lo resolví con el Plugin Redirection.

        Gracias…

        Responder
        • Antonio López
          Antonio López Dice:

          Me alegro que finalmente lo hayas conseguido. Hay veces que los Plugin nos juegan malas pasadas, porque no sabemos qué hacer realmente o qué toca. Hay otras veces que suele ser también de CDN…
          Un saludo

          Responder
  1. Raúl
    Raúl Dice:

    Hola, sufrí un ataque en mi web en wordpress y ya lo reestablecí todo pero han quedado indexadas en google unas cuantas url que quiero redireccionar a la página de error.

    Son del tipo de:
    miiweb.com/?bezstywue=todo-tipo-de-parametros1
    miweb.com/?bezstywue=todo-tipo-de-parametros2
    miweb.com/?bezstywue=todo-tipo-de-parametros3

    Bien, lo que yo quiero hacer es lanzar todo lo que empiece por miiweb.com/?bezstywue a un error 404 y así salir de los resultados de google, que es el paso previo que te pide el propio google.

    He probado con cosas com esto pero no lo consigo:
    RedirectMatch 404 ^\?bezstywue(.*)$
    RedirectMatch 404 ^/\?bezstywue/.*$
    RedirectMatch 404 ^/\?bezstywue/.*$

    ¿Podéis ayudarme?
    Gracias un saludo

    Responder
    • Antonio López
      Antonio López Dice:

      Hola Raúl. Primeramente gracias por leer y comentar.
      Definitivamente el problema de los hackeos es sencillo si tienes copia de seguridad, y el problema reside, justamente en el que estás teniendo tu. No obstante. Normalmente cuando haces un restore (sano) de una copia de seguridad, todas las urls que se han creado durante el hackeo dejan de existir y, por tanto, WordPress los muestra como 404. Si no te pasa esto es porque entiendo que algunas siguen estando.

      Prueba con este código: RedirectMatch 404 ^/?bezstywue/.*$ o incluso con esta RedirectMatch 404 ^/?bezstywue.*$ Cualquiera de las dos te debería funcionar. La primera es para cuando bezstywue es un directorio y está acotado en url como tal. La segunda es para enviar a 404 cualquier url que lleve la palabra bestywue. Ojo en ambos casos no hay nada delante del directorio señalado.

      Espero que te sirva. Saludos

      Responder
  2. Mariola
    Mariola Dice:

    Hola Antonio: En tus regla no hablas nada de las redirecciones de la versión sin slash / a la versión con slash/.
    Además he leído en un blog que según el orden en el que creas las reglas en el .htaccess, puede generar cadenas de redirecciones, o hacerse con una única redirección. De esto no he oído hablar a nadie y creo que importa. Por ejemplo en nuestro caso tenemos «cadenas de redirección» y problemas con las versiones con barra / y sin barra/ y no hay manera de encontrar alguien que sepa configurar un .htaccess correcto. Sólo encuentro reglas sueltas que juntas no funcionan como toca. ¿Serías capaz de ayudarme? Mil gracias por anticipado.

    Responder
    • Antonio López
      Antonio López Dice:

      Hola Mariola.
      Tienes razón. Faltan ejemplos y algunas redirecciones y explicaciones.
      Lo intentaré completar en próximas fechas
      Mil gracias por la sugerencia Mariola.

      Responder
  3. Laura P. Núñez
    Laura P. Núñez Dice:

    Hola Antonio que tal? Gracias a tu post he visto como hacer la redirección de un dominio a otro ya que he cambiado de nombre. Veo que es este:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^dominio1.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www.dominio1.com$
    RewriteRule (.*)$ https://dominio2.com/$1 [R=301,L]

    Ok lo pongo en htacess, pero claro esto pisaría las demás reglas 301 que ya tenía hechas en htaccess, entiendo. Sabes si es así?

    Gracias

    Responder
    • Antonio López Tomás
      Antonio López Tomás Dice:

      Hola Laura. Claro, en el momento que pones la redirección completa (como esta que indicas) cada url es redireccionada a la misma url del dominio nuevo. Obviamente si tienes unos cuantos redireccionamientos a medida hechos que no cumplen con esta regla y este código está antes, las otras redirecciones quedarían sin efecto.

      Responder

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja una respuesta

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

*