Networking de Profesionales

Bloquear el acceso a user-agents

Guía sobre cómo impedir el acceso a determinados user agents mediante el servidor

Fecha de publicación: 2022-10-19
Última revisión: 2022-11-09

Una práctica SEO habitual, suele ser bloquear el acceso a distintos user-agents. En ocasiones, porque queremos evitar el rastreo, la indexación o la sobrecarga de peticiones que se hacen en la web consumiendo innecesariamente excesivos recursos del servidor, o porque necesitamos bloquear algunos usuarios o bots que no nos conviene que nos rastreen la web.

Es cierto que en muchas ocasiones es necesario pero, de una forma incorrecta, se suelen aplicar estas directrices por medio del robots.txt, cuando es un estándar que cualquier rastreador puede saltarse fácilmente si así quiere hacerlo. En el caso de no querer indexar, Google es capaz de indexar páginas bloqueadas con el robots.txt; en el caso de querer evitar el rastreo o la sobrecarga, puede ser válido siempre y cuando el user-agent decida respetar el robots.txt, que no siempre es así ya que cada user-agent lo respeta o interpreta como quiere.

Debido a esto, la mejor práctica suele ser hacer un bloqueo por medio del servidor, ya que esto no se lo podrá saltar ningún bot, empleando los user-agents especificados, y en el caso de motores de búsqueda como Google, al ver un código de respuesta 403, no solo no lo rastrearán, sino que tampoco lo indexarán.

Recomiendo siempre personalizar los códigos de error, por si un usuario se lo encuentra de forma accidental.

Como sabréis, me gusta mostrar los comandos tanto en apache como en nginx. Así que veamos las opciones en ambos entornos.

Bloquear User agents en Apache

Recomiendo emplear estos códigos lo más arriba posible en el .htaccess, ya que serán de vital importancia para los navegadores a la hora de hacer una petición.

Por lo general, si queremos bloquear el acceso de un user-agent a todo el contenido, vamos a querer bloquear más de uno. También es posible que dicho user-agent tenga espacios, lo cual se representará con un .* debido al regex; aunque hay más comandos que permiten seleccionar el espacio que también son válidos. Por eso, en este código, os pongo un ejemplo para bloquear muchos user agents y, algunos de ellos, con espacios en el nombre:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.* (Screaming.*Frog.*SEO.*Spider|Xenu's|WebCopier|URL_Spider_Pro|WebCopier.*v3.2a|WebCopier.*v.2.2|EmailCollector|EmailSiphon|Zeus.*82900.*Webster.*Pro.*V2.9.*Win32|Zeus|Zeus.*Link.*Scout|Baiduspider-image|Baiduspider).*$ [NC]
RewriteRule ^.*$ - [F,L]

Básicamente lo que indica este código es que en la segunda línea, los que cumplan la condición de ser el user-agent que se exponga a continuación, se someterá al siguiente rewriterule.

Entonces en regex, con la barra | lo que indicamos son alternativas, de esta forma, estamos seleccionando todos los de la lista.

Ese Rewriterule al poner las banderas [F,L] generará ese ansiado código de respuesta 403, pero recordad que podéis utilizarlo incluso para generar otro tipo de redirecciones si esto os resulta útil.

Bloquear el acceso de un directorio

Si quieres bloquear algún directorio específico a algún user-agent, puedes seguir las indicaciones que doy sobre seleccionar URI o parámetro para un rewriterule.
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/no-buscadores/ [NC]
RewriteCond %{HTTP_USER_AGENT} ^.*(Googlebot|Bingbot).*$ [NC]
RewriteRule ^.*$ - [F,L]

De esta forma, todo lo que esté dentro de ese subdirectorio, no será rastreable ni indexable por los buscadores.

Bloquear User Agents en Nginx

En el caso de nginx, en el nginx.conf dentro de server{} se haría con un condicional:
if ($http_user_agent ~ (Xenu's|WebCopier)) {
return 403;
}

Bloquear el acceso de un directorio

Para bloquearlo dentro de un directorio habría que meterlo dentro de un location:
location = /no-rastreo/*{
if ($http_user_agent ~ (AhrefsBot)) {
return 403;
}
}

Auditar que funcionan los códigos

Aunque estoy acostumbrado a trabajar con los códigos que expongo y siempre los verifico para asegurar que publico los ejemplos libres de errores. Siempre se puede escapar algo, o puede ser que no se editen de una forma correcta. Así que siempre recomendaré probar los códigos en un entorno de prueba antes que en la web en producción donde se vaya a implementar.

Para comprobar si la página tiene bloqueo para un user-agent específico, tendremos que irnos al inspeccionador de elementos.

En Chrome podemos hacerlo con Clic derecho > Inspeccionar, o utilizar el atajo rápido Control + Mayus + i.

Independientemente de como se nos muestre, vamos a los 3 puntitos que hay en vertical arriba a la derecha del todo, hacemos clic, vamos a más herramientas y pulsamos en Condiciones de red.

Inspector de elementos en español, condiciones de red

Una vez hemos realizado esto, nos saldrán las opciones de cambiar el almacenamiento en caché, limitaciones de red y el del user-agent. Ahí podremos poner el user-agent que queramos y hacer la comprobación.

Bloquear los user agents por medio de servidor y auditarlo

También tenemos la opción de hacer esta prueba con Screaming Frog.

Bibliografía

¿Quieres contratarme?

Si quieres que te ayude a mejorar gracias al SEO Técnico. ¡Contacta ya!

¡Haz clic para contatar mis servicios!
Tal vez te interesen estos artículos: