¿Qué estás buscando?
  • /
  • SEO
  • /
  • SEO y el .htaccess: 20+ códigos listos para copiar y pegar
SEO y el .htaccess: 20+ códigos listos para copiar y pegar

SEO y el .htaccess: 20+ códigos listos para copiar y pegar

El .htaccess es un archivo bastante útil que nos permite establecer varias directivas de configuración para nuestros sitios… y varias de estas directivas pueden ayudar al posicionamiento de tus sitios.

He visto varios tutoriales que muestran algunos códigos, pero no están tan completos. Otros de plano ponen código que no funciona bien! Y aún veo a muchas personas preguntando como redirigir un dominio con www a sin www, como redirigir una página antigua a una nueva y otras dudas que se resuelven fácilmente con un snippet (pequeño código) en el htaccess. Así que aquí he recopilado todos estos códigos, listos para copiar y pegar 😉

Antes de pasar a los códigos, algunos puntos importantes:

  1. El .htaccess afecta al directorio donde está y a todos sus subdirectorios (generalmente está en el directorio raiz, que casi siempre es: /public_html/)
  2. Antes de hacer cualquier cambio asegurate de tener acceso vía FTP o desde el CPanel y haz una copia de seguridad del .htaccess actual. Si editas mal el archivo puedes bloquear el acceso a tu web
  3. En el archivo .htaccess se pueden poner comentarios con el caracter #
  4. Para crear, editar y guardar el htaccess hay que usar un editor de texto plano (notepad, sublime text, nano, vim, etc) y guardar el archivo como «.htaccess», así nada más. Word no sirve.

Ahora sí vamonos con los códigos que he dividido en 4 secciones. Te dejo la tabla de contenidos para que puedas navegar al gusto 🙂

Autorización y Bloqueo

Bloquear referrals molestos

Cada vez es más común tener visitas en Analytics de varios referrals que solo están consumiendo tu ancho de banda. Una solución que he visto que proponen es borrarlos de tus reportes de Analytics para que ya no aparezcan… pero aún así siguen consumiendo recursos de tu servidor. Es mejor bloquearles directamente el acceso 😉

Y si quieres evitar también que estos datos se muestren en Google Analytics, acá un excelente tutorial para crear el filtro necesario. Tiene además una lista de más de cuarenta ‘spambots’ que tal vez quieran bloquear 😉

Si lo hacen, no olviden también bloquearlos desde el htaccess… si solo los filtran de Analytics no podrán saber si están consumiendo sus recursos. (Claro, al menos que analicen los logs por ejemplo, pero eso ya es otra cosa…)

Aquí un código para bloquear a estos 42 referrals que vienen en el link que les puse arriba:

RewriteEngine on
RewriteCond %{HTTP_REFERER} buttons-for-website\.com [NC,OR] RewriteCond %{HTTP_REFERER} darodar\.com [NC,OR] RewriteCond %{HTTP_REFERER} econom\.co [NC,OR] RewriteCond %{HTTP_REFERER} ilovevitaly\.co [NC,OR] RewriteCond %{HTTP_REFERER} kambasoft\.com [NC,OR] RewriteCond %{HTTP_REFERER} lumb\.co [NC,OR] RewriteCond %{HTTP_REFERER} 7makemoneyonline\.com [NC,OR] RewriteCond %{HTTP_REFERER} ranksonic\.info [NC,OR] RewriteCond %{HTTP_REFERER} savetubevideo\.info [NC,OR] RewriteCond %{HTTP_REFERER} see-your-website-here\.com [NC,OR] RewriteCond %{HTTP_REFERER} semalt\.com [NC,OR] RewriteCond %{HTTP_REFERER} priceg\.com [NC,OR] RewriteCond %{HTTP_REFERER} srecorder\.com [NC,OR] RewriteCond %{HTTP_REFERER} descargar-musica-gratis\.net [NC,OR] RewriteCond %{HTTP_REFERER} 54\.186\.60\.77 [NC,OR] RewriteCond %{HTTP_REFERER} lomb\.co [NC,OR] RewriteCond %{HTTP_REFERER} medispainstitute [NC,OR] RewriteCond %{HTTP_REFERER} sq01 [NC,OR] RewriteCond %{HTTP_REFERER} alienpayday [NC,OR] RewriteCond %{HTTP_REFERER} artobox [NC,OR] RewriteCond %{HTTP_REFERER} axisalternativementalhealth [NC,OR] RewriteCond %{HTTP_REFERER} sharebutton\.net [NC,OR] RewriteCond %{HTTP_REFERER} torontoplumbinggroup\.com [NC,OR] RewriteCond %{HTTP_REFERER} tasteidea\.com [NC,OR] RewriteCond %{HTTP_REFERER} paparazzistudios\.com\.au [NC,OR] RewriteCond %{HTTP_REFERER} 76brighton\.co\.uk [NC,OR] RewriteCond %{HTTP_REFERER} powitania\.pl [NC,OR] RewriteCond %{HTTP_REFERER} ilovevitaly\.ru [NC,OR] RewriteCond %{HTTP_REFERER} ilovevitaly\.com [NC,OR] RewriteCond %{HTTP_REFERER} blackhatworth\.com [NC,OR] RewriteCond %{HTTP_REFERER} hulfingtonpost\.com [NC,OR] RewriteCond %{HTTP_REFERER} cenoval\.ru [NC,OR] RewriteCond %{HTTP_REFERER} bestwebsitesawards\.com [NC,OR] RewriteCond %{HTTP_REFERER} website-errors-scanner\.com [NC,OR] RewriteCond %{HTTP_REFERER} adviceforum\.info [NC,OR] RewriteCond %{HTTP_REFERER} baixar-musicas-gratis\.com [NC,OR] RewriteCond %{HTTP_REFERER} buy-forum\.ru [NC,OR] RewriteCond %{HTTP_REFERER} fbdownloader\.com [NC,OR] RewriteCond %{HTTP_REFERER} savetubevideo\.com [NC,OR] RewriteCond %{HTTP_REFERER} smailik\.org [NC,OR] RewriteCond %{HTTP_REFERER} simple-share-buttons\.com [NC,OR] RewriteCond %{HTTP_REFERER} social-buttons\.com [NC] RewriteRule .* – [F]

En caso de querer añadir otro solo hay que agregar otra línea:

RewriteCond %{HTTP_REFERER} savetubevideo\.com [NC,OR] RewriteCond %{HTTP_REFERER} dominiomolesto\.com\.mx [NC, OR] RewriteCond %{HTTP_REFERER} social-buttons\.com [NC]

Poniendo siempre \ antes de los puntos, para «escaparlos» porque son caracteres especiales. Y no olvidar poner el OR para que siga validando las demás reglas.

 

 

ACTUALIZACIÓN

Como eliminar spam de 4webmasters.org

Este referral en especial que ha estado enviándome muchas «visitas». Igual que a varios sitios que controlo. Por alguna razón por más que lo pongo en el htaccess sigue molestando…

Tal vez sea problema mío por no configurarlo bien… pero mientras lo averiguo, aquí tienen este correo donde pueden mandar una lista de todos los sitios que quieren ver eliminados de la base de datos de este crawler (Lo que faltaba, ahora tenemos que pedir que por favooor nos dejen de fastidiar nuestras estadísticas en Analytics… pero bueh…)

[email protected]

Tienen que enviar el correo en inglés, eso sí.

Pero con algo como:

Why don’t you go and fuck yourselves…

Ya en serio:

Hi,

I want some sites to be removed from your crawler’s DB. I’ve attached a .txt with them.

Thanks

Adjuntan su lista de dominios en un .txt y listo 😉

Bloquear acceso por IPs

Order Deny, Allow
Deny from 1.2.3.4
Deny from 5.6.7. #Esto negaría todas las IPs del estilo 5.6.7.1, 5.6.7.2, etc

Bloquear acceso por dominio

RewriteEngine on
RewriteCond %{HTTP_REFERER} undominio\.com [NC,OR] RewriteCond %{HTTP_REFERER} otrodominio\.com
RewriteRule .* – [F]

Lo mismo que arriba.. si quieren agregar más, solo cuiden la barra \ antes de los puntos y el OR.

Bloquear acceso a archivos

Para bloquear el acceso a los archivos que no tengan ciertas extensiones:

Order deny,allow
Deny from all
<Files ~ «.(xml|css|js|jpe?g|png|gif|pdf|zip|rar)$»>
Allow from all
</Files>

Para bloquear el acceso solo a ciertos archivos:

<FilesMatch «.(htaccess|htpasswd|ini|log)$»>
Order Allow,Deny
Deny from all
</FilesMatch>

Evitar Hotlinking

Hotlinking es cuando alguien enlaza algún archivo desde tu sitio, generalmente imágenes. Así cuando alguien ve esa imagen en el sitio de quien te enlazo, en realidad están jalando esa imagen desde tu sitio y consumiendo tu ancho de banda.

Evitarlo es muy sencillo con este código en el .htaccess. Hasta podemos hacer que cuando alguien enlace una imagen de tu sitio le aparezca otra:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?tudominio\.com [NC] RewriteCond %{HTTP_REFERER} !google. [NC] RewriteCond %{HTTP_REFERER} !search?q=cache [NC] RewriteCond %{HTTP_REFERER} !bing. [NC] RewriteCond %{HTTP_REFERER} !yahoo. [NC] RewriteRule \.(jpe?g|png|gif|bmp) http://i60.tinypic.com/tuimagen.jpg [R,NC,L]

Aquí conviene alojar la imagen a mostrar fuera del mismo servidor. Si no, le estarías mostrando una imagen de tu mismo servidor… consumiendo tu ancho de banda. Lo mismo que queremos evitar!

Con este código permitimos el acceso a imágenes para nuestro dominio tudominio.com (y cualquier subdominio), para los «blank referrers» (que están por ejemplo detrás de un firewall) y a algunos buscadores, a los demás se lo denegamos.

Un código menos agresivo sería algo así:

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?undominio\.com/ [NC,OR] RewriteCond %{HTTP_REFERER} ^http://(.+\.)?otrodominio\.com/ [NC,OR] RewriteCond %{HTTP_REFERER} ^http://(.+\.)?ooootrodominio\.com/ [NC] RewriteRule .*\.(jpe?g|png|gif|bmp)$ http://i60.tinypic.com/tuimagen.jpg [L]

Así solo le evitamos el acceso a ciertos dominios.

Redirecciones

Redirección de un domino sin www a www

RewriteEngine on
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Este código funciona para cualquier dominio.

No hay que olvidar ese R=301! Si no ponemos el 301, por default es una redirección 302. Es decir, temporal, y no es lo óptimo para este caso.

Redirección de un domino con www a sin www

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]

Igual funciona en cualquier dominio.

Redirección de un sitio a HTTPS

Si estamos usando HTTPS y queremos que solo se pueda acceder al sitio con ese protocolo:

RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Redirección permanente de una página a otra

Redireccionar permanentemente una página:

Redirect 301 /servicios-de-seo-diaz/ http://seo-diaz.com/nueva-URL

Redirección permanente de un dominio a otro

Redirect 301 / http://www.nuevositio.com/

Otra opción:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www\.nuevositio\.com/$1 [R=301,L]

Con ambas opciones se redirige toodo el dominio al nuevo, conservando la estructura de las páginas. O sea, tusitio.com/una/pagina.html se redirecciona a nuevositio.com/una/pagina.html.

Creando URLs amigables en HTACCESS

Los famosos permalinks. Por default varios CMS como WordPress ya lo hacen. En otros hay que instalar alguna extensión o módulo. Pero si lo quieres hacer a mano, también se puede.

Aviso, esto es algo un poco complicado para el usuario promedio. Hay que tener para empezar un conocimiento decente de expresiones regulares, así que tal vez quieras iniciar con algún generador de código para usar en estos casos como este o este.

Aquí solo presentaré un ejemplo sencillo. Quien quiera de veras adentrarse al módulo mod_rewrite de Apache, aquí está la documentación oficial.

RewriteEngine On
RewriteRule ^tienda/([^/]*)/([^/]*)/$ /index.php?categoria=$1&producto=$2 [L]

Esto reescribiría la URL: http://misitio.com/index.php?categoria=categoriaX&producto=productoY
A: http://misitio.com/tienda/categoriaX/productoY/

Mejorar Velocidad

Estos códigos ya los había puesto en esta entrada sobre como mejorar la velocidad de carga de tu web, pero los repito aquí por conveniencia 😉

Habilitar la compresión GZip

<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript text/javascript
</ifmodule>

Habilitar la caché del navegador

ExpiresActive On
ExpiresDefault A0
<FilesMatch “\.(pdf|ppt|doc)$”>
ExpiresDefault A9030400
</FilesMatch>
<FilesMatch “\.(jpg|jpeg|png|gif)$”>
ExpiresDefault A2592000
</FilesMatch>
<FilesMatch “\.(txt|xml|js|css|htm|html|php)$”>
ExpiresDefault A604800
</FilesMatch>

Varios snippets extras para el htaccess

Evitar indexación de archivos

¿Tienes PDFs de pago alojados en tu sitio? ¿O versiones en PDF de tus posts que no son sino duplicados del post?

En ese caso con este código puedes evitar su indexación. Ojo, no basta con bloquear el acceso desde el robots.txt, eso no evita su indexación. Esto SI.

<Files ~ «\.pdf$»>
Header set X-Robots-Tag «noindex, follow»
</Files>

Igual puedes evitar la indexación de ciertos archivos, por ejemplo, a veces Google indexa el archivo robots.txt y no tiene caso. Para evitarlo, este código basta:

<FilesMatch «robots.txt»>
Header set X-Robots-Tag «noindex»
</FilesMatch>

Especificar páginas de error

Para personalizar tu página de error 404 (not found) :

ErrorDocument 404 /pagina-error.html

Lo mismo para otros tipos de errores:

ErrorDocument 403 /adondecreesquevas.html

Evitar listar los contenidos de tus directorios

Si no tienes un archivo index en tus directorios, cuando alguien entra al directorio puede ver el listado de todos los archivos. Para evitarlo solo hay que añadir esta línea al htaccess:

Options -Indexes

Si no lo haces, puede pasar algo así:

Directory Index

No mostrar la «firma» de tu servidor

Por defecto las páginas de error en algunos servidores contienen el número de versión de tu servidor. Y esa información puede ser aprovechada por hackers para vulnerar tu sitio si estás usando una versión antigua. Para evitar que tu servidor muestre esto, solo añade esto al htacces:

ServerSignature Off

 

Si quieres checar una muestra más completa de todo lo que se puede hacer con este archivo, visita este arítuclo: Stupid Htaccess Tricks.

Y si quieres un PDF con el post para que tengas estos códigos a mano, solo comparte 😀

¿Ya conocías tú estos códigos? ¿Hay alguno que se me haya escapado y que valga la pena colocar?

SEO y el .htaccess: 20+ códigos listos para copiar y pegar by

¿Te gustó el post?

Suscríbete AQUÍ

Cero spam. ¡Te lo prometo!

 

¿Qué te pareció el artículo? ¡Vótalo!

1 Estrella2 Estrellas3 Estrellas4 Estrellas5 Estrellas (13 votos, promedio: 4,46 de 5)
Cargando...

26 Respuestas

  1. Un artículo súper completo! Me interesa sobre todo el tema de bloquear referrals. Hay mucho pesado tipo semalt y este tipo de webs que hacen que me salga urticaria cuando veo las veces que me »visitan».

    Gracias y saludos 😉

    1. Jeje sí es bastante molesto… y cada vez salen más :S

      Hay que estar revisando constantemente Analytics para bloquear nuevos referrals… pero al menos hacerlo es sencillo con ese código 🙂

      Saludos!

  2. Muy buen artículo, y muy práctico. He leído un par de veces que sobrecargar este archivo puede afectar al tiempo de carga de tu página, aunque supongo que por meter unos cuantos no pasará nada. ¿Tienes alguna experiencia en este aspecto?

    Por cierto, no conocía tu blog, pero lo he visto a partir de la entrada de Dean Romero y la verdad es que me gusta mucho. Felicidades 🙂

    1. Hey, gracias 🙂

      Pues he trabajado con webs con unas 200-300 líneas en el htaccess y no he notado una carga lenta. Aunque eso sí, no he medido el antes y después así que no sabría decir que tanto puede cargar el servidor 😐

  3. hola, me gustaron los trucos pero me interesaria uno para bloquear por pais

    1. Complicado, se puede hacer por IPs.

      Aquí una página que te genera el htaccess necesario:
      http://incredibill.me/htaccess-block-country-ips

  4. Buen post. Aportas gran información de mucho interés.
    ¡Sigue así compañero!

  5. Muy buen artículo. El tema del bloqueo de referrals me ha servido muy mucho…habrá que estar actualizando el código pero al menos dejan de incordiarnos 🙂

    Bloquearlos a través de IPs vía Cloudfare (incluyendo el rango completo de IPs claro) me han dicho que es otra opción. Yo he hecho las dos por si acaso jaja!

    Gracias y un saludo!

    1. Sí. Es el problema, afortunadamente encontré un sitio donde al parecer están recopilando todos los posibles referrals spam.

      Actualizo el artículo para poner el enlace 😉

  6. Victor

    Magnifico, cuesta encontrar blogs como el tuyo que hablen abiertamente y muestren datos que realmente ayudan, no pseudoayudas retoricas a como ya nos tienen acostumbrados los gurus, a seguir asi tio, tienes un lector asiduo mas!

    1. Muchas gracias Victor!

      Excelente, nos estaremos viendo por acá entonces 😉

  7. Jarem

    Hola Diaz!

    mira pasa que quiero bloquear las visitas a una parte de mi web ( miweb.com/bloqueado ), quiero evitar que ingresen directamente a la url, que cuando escriban ese directorio redirigirlos a miweb.com, en cambio si vienen desde otra web mostrar el contenido, pero lo jodido viene que quiero bloquear el acceso a los visitantes que vienen de ciertas webs, si vienen de dominios bloqueados redirigirlos a miweb.com, es posible hacerlo?

    muchas gracias por tu ayuda

    1. Que tal Jarem.

      Si miweb.com/bloqueado es un directorio, puedes poner ahí un .htaccess con este código:

      RewriteEngine on
      RewriteCond %{HTTP_REFERER} ^$
      RewriteCond %{HTTP_REFERER} dominiobloqueado1\.com [NC,OR]
      RewriteCond %{HTTP_REFERER} dominiobloqueado2\.com
      RewriteRule .* http://miweb.com/ [L,R=301]

      Si es una URL, entonces en el .htaccess principal de tu sitio:
      RewriteEngine on
      RewriteCond %{HTTP_REFERER} ^$
      RewriteCond %{HTTP_REFERER} dominiobloqueado1\.com [NC,OR]
      RewriteCond %{HTTP_REFERER} dominiobloqueado2\.com
      RewriteRule ^bloqueado$ http://miweb.com/ [L,R=301]

      Ten en cuenta que no he probado los códigos 😛
      Pero deberían funcionar.

      1. Jarem

        Gracias por responder y una cosa más, si alguien intenta ingresar directamente a la url bloqueada, verán el contenido o serán redirigidos.

        1. Seràn redireccionados a la pàgina que especifiques, en el ejemplo serìa miweb.com

  8. Miguel

    Hola, esto nada mas es para el servidor apache, si mi sitio web esta en un servidor nginx, puedo hacer todo lo que dices en tu articulo?

    1. Hola Miguel

      Esto funciona solo con apache :S

  9. Genial artículo sobre lo que nos permite hacer el querido .htaccess. Por cierto debo hacer 10.000 redirecciones 301 de un mismo dominio que cambia todas sus urls de productos y demás, crees que es mejor hacerlo en el .htaccess o en el código de las páginas?? puede que con tantas órdenes de 301 haga que tarde más en cargar la web?

    Gracias!

    1. En el código de las páginas va a ser más tardado, sería mejor en el .htaccess y medir los tiempos de carga.
      Aunque si lo que va a cambiar son «patrones» como de tienda.com/categoria-1/producto-1/ a tienda.com/producto-1/ lo mejor sería usar el mod_rewrite

  10. Muchas gracias. me apasiona la forma en que explicas todo… Incluso quiero hacerte una sugerencia, el que hagas un blog donde expliques como realizar la migración de HTTP a HTTPS y sus ventajas ya que leí algo de ello en Search Engine Land pero no se entiende claramente.
    Muchas gracias por tus aportes

  11. Hola,

    Lo primero gracias por tu magnífico post.

    Tengo una web y me gustaría que apareciera la palabra «Blog» en las urls de las entradas ya que cuelgan directamente del dominio.

    Sé cómo hacerlo a través de ir a Permalinks, dejando la «Estructura Personalizada» así

    http://www.midominio.tech/blog/%postname%/

    Lo que ocurre es que se trata de una web muchas entradas en varios idiomas, lo cual hace un total desorbitado para realizar redirecciones una a una.

    Así que me pregunto si hay algún código para poner en el archivo .htaccess que realice todas las redirecciones de forma automática.

    Sería cambiar:

    http://www.midominio.tech/entrada-una ….. a …. http://www.midominio.tech/blog/entrada-una

    Y que no afecte a las páginas que no son entradas de blog, como por ejemplo: http://www.midominio.tech/servicios, http://www.midominio.tech/empresa, http://www.midominio.tech/contacto y otras.

    No sé si estoy pidiendo un imposible y tendré que hacer las redirecciones una a una ya me dirás.

    Gracias. Isabel

    1. Hola Isabel

      Uf, esta parte «Y que no afecte a las páginas que no son entradas de blog, como por ejemplo: http://www.midominio.tech/servicios, http://www.midominio.tech/empresa, http://www.midominio.tech/contacto y otras.»

      Lo complica mucho más. No se puede hacer con una regla en htaccess.

      Pero tampoco es tan complicado, podrías exportar todas tus entradas, sacar las URLs y con Excel, Spreadsheets o algo más sofisticado, crear las Nuevas URLs partiendolas con el delimitador /, luego uniéndolas pero usando «/blog/» en medio y luego crear una formula que automáticamente te genere los «Redirect 301 /url-vieja/ http://www.midominio.tech/blog/url-vieja/» necesarios que copias y pegas en el htaccess y ya está.

  12. Guia SEO

    Muy genial tu articulo man. es posible dexindesar paginas a traves del archivo htaccess?

    1. Borré tu link.
      Tienes una guía de SEO, según, tú dime 😉

  13. Jose

    Hola, me ha parecido muy interesante tu post.

    Me gustaría saber lo siguiente.

    Alguien ha redirigido hacia mi web un dominio sin mi permiso (el dominio con todas las urls)

    He añadido en el htaccess el bloqueo al dominio como dices en tu post. El tema es que ahora el dominio principal que nos redirige ha quedado bloqueado, pero sus urls internas siguen redirigiendo a mi web.

    ¿Cómo puedo bloquear ese dominio por completo con todas las urls?

    Saludos

    1. ¿Qué código usaste para «bloquearlo»?
      Si es dañino mejor envía el dominio a disavow

  • Escribe tu nombre, NO TU KEYWORD.
  • Se aceptan críticas pero no insultos.
Modero TODOS los comentarios, no pierdas tu tiempo haciendo spam :)

Deja una respuesta

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

*

O más bien:
  • Tienes pocas visitas
  • Has sido penalizado y tus visitas han bajado
  • Tus visitas NO convierten: No compran, no se suscriben, etc.
Necesitas una Auditoría SEO

Nunca te enviaré spam.

Top