6

Evitar contenido duplicado con .htaccess

A los buscadores no les gusta el contenido duplicado. Les gusta tan poco que te penalizan con una bajada en el puesto que ocupará tu página en sus resultados de búsquedas si encuentran el mismo contenido en distintas direcciones dentro de tu web. Pero los buscadores no son perfectos y cuando mandan a sus crawlers a rastrear tu página pueden considerar duplicado un contenido que en realidad no lo es. Por ejemplo, un buscador (pongamos Google, así al azar) puede considerar duplicado un contenido en las siguientes direcciones:

  • http://tudominio.com/hola-mundo.html
  • http://www.tudominio.com/hola-mundo.html

Y si tenemos permalinks, la cosa se agrava:

  • http://tudominio.com/hola-mundo
  • http://tudominio.com/hola-mundo/
  • http://www.tudominio.com/hola-mundo
  • http://www.tudominio.com/hola-mundo/

Es decir, para los buscadores una página en un dominio con www no es la misma que si está en un dominio sin www, y en los permalinks la barra final también influye en la diferenciación. Como el contenido de todas esas direcciones es el mismo, Google te penalizará y te dirá que tienes el mismo contenido hasta en 4 direcciones distintas.

Si nuestro servidor web es Apache, podemos usar .htaccess para solucionar esta duplicidad mediante dos sencillas reglas.

Añadir www al dominio

Abrimos el archivo .htaccess (si no existe, lo creamos en el directorio raíz) y escribimos:

1
2
RewriteCond %{HTTP_HOST} ^tudominio.com [NC]
RewriteRule (.*) http://www.tudominio.com/$1 [L,R=301]

En la línea 1 escribimos la condición que se tiene que dar para que se aplique la regla de la línea 2. En este caso, la condición es que el dominio (HTTP_HOST) se haya escrito «tudominio.com» tal cual, sin nada delante (^). La directiva NC indica que no tenga en cuenta la concordancia de mayúsculas y minúsculas.

Si esta condición se cumple, haremos una redirección 301 al dominio «www.tudominio.com». La directiva R significa redirección, y la directiva L significa que esa es la última regla a tener en cuenta en ese bloque.

Quitar www al dominio

También podemos hacer que nuestro dominio se muestre siempre sin www. En este caso, escribiremos en nuestro .htaccess:

1
2
RewriteCond %{HTTP_HOST} ^www.tudominio.com [NC]
RewriteRule (.*) http://tudominio.com/$1 [L,R=301]

Añadir una barra (slash) al final

Si usamos permalinks, todas nuestras urls deben terminar con barra o sin ella para evitar el contenido duplicado. Si queremos añadir una barra, editamos nuestro .htaccess y escribimos:

1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule (.*) http://www.tudominio.com/$1/ [L,R=301]

La explicación de las condiciones es bastante intuitiva: si no es un fichero (línea 1) y no acaba con una barra (línea 2), aplicamos la regla de la línea 3.

Nota: algunos añaden dos líneas más al bloque, y escriben la regla de la siguiente manera:

1
2
3
4
5
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule (.*) http://www.tudominio.com/$1/ [L,R=301]

La línea 1 establece el directorio raíz, y la línea 3 es similar a la condición de la línea 2, pero comprobando si no es un directorio existente en lugar de un fichero. Dependiendo de la configuración de nuestro Apache podremos necesitarlas.

Quitar la barra (slash) del final

Igual que antes, tan sólo tendremos que quitar la última barra de la condición de la línea 2 y de la redirección de la línea 3:

1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)$
RewriteRule (.*) http://www.tudominio.com/$1 [L,R=301]

Ejemplo completo

A continuación, os dejo un ejemplo de un archivo .htaccess completo (aunque bastante básico) que tendríamos en nuestro site si queremos añadir www al principio y slashs al final.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Options +FollowSymLinks
RewriteEngine on
 
# añadir www
RewriteCond %{HTTP_HOST} ^tudominio.com [NC]
RewriteRule (.*) http://www.tudominio.com/$1 [L,R=301]
 
# añadir slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule (.*) http://www.tudominio.com/$1/ [L,R=301]
 
# un permalink sencillo
RewriteRule ^hola-mundo/$ /hola-mundo.php

Las dos primeras líneas son obligatorias y lo que hacen es iniciar el motor mod_rewrite de apache.

En este ejemplo, si escribimos cualquiera de las variaciones posibles (con o sin www, y con o sin barra final), nos llevará a la página: http://www.tudominio.com/hola-mundo/ y evitaremos el contenido duplicado.

Se recomienda leer la ayuda sobre el módulo mod_rewrite de Apache para obtener más información.

5 comentarios

  1. que excelente aporte esto son detalles que un SEO no debe pasar por elto gracias

  2. Excelente! me sirvio mucho

    gracias

  3. Qué buen aporte, gracias por compartir!

  4. Hola me parece un buen aporte desde hace tiempo andaba buscando la manera de quitar www, ya que me abria de las dos formas. gracias.

  5. Gracias el codigo ha servido de ayuda!

Comentar

*

*

Para añadir código formateado, escribe el código entre <pre lang="php" line="1"> y </pre>

Si quieres un avatar personalizado, créate uno en gravatar.com con tu dirección de correo. Cada vez que comentes con ese correo, aparecerá tu avatar personalizado.