Guía

Frenar scrapers sin bloquear a Google

Cómo distinguir un rastreador que quieres de otro que no, por qué comprobar el User-Agent es peor que inútil, y qué hacer con los que simplemente se portan mejor que tus reglas.

El problema no es el scraping, es distinguirlos

Casi todos los sitios quieren algo de tráfico automatizado. Buscadores, los recolectores de vista previa detrás de los enlaces en mensajería y redes, tu propia monitorización, la integración de un socio, una herramienta de accesibilidad. Casi todos los sitios tienen también tráfico automatizado que no quieren: scrapers de precios, espejos de contenido, bots de inventario y, cada vez más, rastreadores de entrenamiento de IA cuyo valor para ti es cuestión de opinión.

Ambos llegan como peticiones HTTP desde software. Ninguno dirá la verdad sobre sí mismo si no le apetece. Así que todo el problema se reduce a clasificación, y cada error de clasificación cuesta en una dirección distinta.

Bloquea al equivocado y te caes del índice: un error que se tarda semanas en notar y más en deshacer. Deja pasar al equivocado y tus precios estarán en el sitio de un competidor en una hora. No hay un ajuste que sea seguro en ambas direcciones, y por eso esto merece hacerse con cuidado y no deprisa.

Por qué falla comprobar el User-Agent

El User-Agent es una cadena que elige el cliente. Es una afirmación, no una prueba, y tratarla como prueba falla en las dos direcciones a la vez.

Cualquier cosa puede decir que es Googlebot, y los scrapers lo hacen: es una línea de configuración y funciona contra cualquier sitio que compruebe la cadena. Si tu regla es «permitir Googlebot», has escrito «permitir todo lo que diga Googlebot».

Mientras tanto bloquearás rastreadores reales que querías conservar, porque no puedes enumerarlos. Hay decenas de recolectores legítimos con cadenas que nunca has visto, y cada mes nace uno nuevo.

La comprobación correcta no es comparar cadenas. Para los grandes rastreadores es una resolución DNS inversa sobre la dirección que pide, confirmando que resuelve al dominio del operador, seguida de una resolución directa que confirme que ese nombre apunta de vuelta a la misma dirección. Varios operadores publican además listas firmadas de rangos que puedes descargar y cachear.

No es difícil, pero hay que hacerlo para cada rastreador que te importe, mantenerlo cuando cambien los rangos, y cachearlo para no hacer consultas DNS dentro del camino de la petición.

robots.txt es un cartel, no una valla

robots.txt les dice a los rastreadores bien educados qué preferirías. Los buscadores lo respetan porque que los pillen ignorándolo les costaría más de lo que vale el contenido. Un scraper no tiene ese incentivo ni una reputación que proteger.

Peor aún: es un documento público que lista las rutas que consideras lo bastante sensibles como para mencionarlas. Prohibir /admin, /export o /api/internal anuncia que existen. Escríbelo como orientación para rastreadores en los que confías, no como control de seguridad.

Aun así merece la pena mantenerlo. Un robots.txt correcto con directivas de retardo reduce la carga de los rastreadores que sí lo respetan —la mayor parte del volumen en la mayoría de los sitios— y es la única palanca que tienes sobre los rastreadores de IA que publican un token de exclusión.

Qué los separa de verdad

Ordenado por cuánta parte de la respuesta aporta cada uno.

Verificación para los que se pueden verificar. DNS inverso y directo, o una lista publicada de rangos, zanjan a los grandes buscadores de forma concluyente. Esto debe ser un permitir duro, y debe ir por encima de cualquier otra regla.

Huellas de transporte para el resto. Un scraper es un programa: curl, una biblioteca de Python, un navegador headless, un cliente HTTP de Go. Su apretón de manos TLS anuncia cuál, mediante el conjunto ordenado de suites de cifrado y extensiones resumido como JA3/JA3N. Un cliente que dice ser Chrome en Windows mientras presenta una huella que Chrome no produce ya te ha dicho lo que es.

Comportamiento a lo largo de la sesión. Pedir recursos y no ejecutarlos nunca; una cadencia de peticiones regular al milisegundo; un recorrido por el sitio que sigue el sitemap y no la navegación; ningún movimiento de ratón en una página con elementos interactivos. Ninguno es concluyente por sí solo, y juntos casi lo son.

Reputación para el primer contacto. Una dirección recién estrenada no tiene historial contigo. Si la semana pasada scrapeó a otro, esa es la única señal disponible en su primerísima petición.

Aplicación que no se vuelve contra ti

Lo que hagas con un scraper confirmado importa tanto como haberlo detectado.

No sirvas un CAPTCHA. A un scraper decidido le cuesta una fracción de céntimo vía un servicio de resolución, y a ti te cuesta los usuarios reales que también atrapa.

No bloquees buscadores por accidente. Los rastreadores verificados deben permitirse mediante una regla que corra antes de cualquier puntuación, para que un fallo en la puntuación no te cueste tu posición. Compruébalo después de cada cambio, no antes.

Considera un carril lento en lugar de un muro. Servir a un scraper deliberadamente despacio, o desde caché caducada, suele ser mejor que un 403: le cuesta tiempo en vez de avisarle de que cambie de táctica, y no crea el incidente que se produce cuando bloqueas algo que necesitabas.

Limita el ritmo donde es caro. Tu endpoint de búsqueda y tu API de producto merecen límites que tus páginas estáticas no necesitan.

Vigila lo que sirves, no solo lo que bloqueas. Un scraper que ha empezado a colarse se parece exactamente a una semana tranquila en tu panel de bloqueos. Sigue la proporción entre bloqueado y servido a lo largo del tiempo, y alerta sobre la proporción.

Dónde encaja Karma

Karma verifica por su cuenta a los rastreadores legítimos y los excluye de tus veredictos, y de tu factura, porque cobrarte por identificar a Googlebot sería cobrarte por el trabajo propio del producto.

Todo lo demás se puntúa a partir de señales de comportamiento y de transporte, y el veredicto va a tu pasarela para que decidas tú si eso significa un bloqueo, un carril lento o caché caducada. Tus listas de permitidos y denegados siempre están por encima de la plataforma, así que un socio del que dependas puede fijarse antes de que actives nada.

El plan gratuito Detect ejecuta la clasificación con la aplicación desactivada. Aquí en concreto es la forma correcta de empezar, porque el error caro en esta área es descubrir que tus reglas estaban mal por una caída del tráfico de búsqueda tres semanas después.

FAQ

¿Cómo bloqueo scrapers sin bloquear a Googlebot?
Verifica los rastreadores que quieres en lugar de fiarte de su User-Agent. Para los grandes buscadores, haz una resolución DNS inversa sobre la dirección que pide, confirma que resuelve al dominio del operador y luego que ese nombre apunta de vuelta a la misma dirección; varios publican además listas firmadas de rangos. Conviértelo en un permitir duro que corra antes de cualquier puntuación, y puntúa todo lo demás por comportamiento y huellas de transporte.
¿Puedo identificar a Googlebot por su User-Agent?
No, y confiar en ello es peor que no hacer nada. El User-Agent es una cadena que elige el cliente, así que cualquier scraper puede decir que es Googlebot con una línea de configuración: una regla que permite la cadena permite a todos los scrapers que la copian. La comprobación que realmente lo zanja es DNS inverso y directo.
¿robots.txt frena a los scrapers?
No. Expresa una preferencia que los rastreadores bien educados respetan porque su reputación depende de ello; un scraper no tiene reputación que perder y lo ignora. Además es una lista pública de las rutas que consideras sensibles, así que no sirve como control de seguridad. Mantenlo exacto para los rastreadores de confianza y aplica medidas aparte para el resto.
¿Debería bloquear a los rastreadores de IA?
Es una decisión de negocio más que de seguridad, y depende de si aparecer en las respuestas de IA te vale más que el propio contenido. Si decides bloquearlos, robots.txt cubre a los que publican un token de exclusión y lo respetan, y la detección a nivel de sesión cubre a los que no: las mismas señales que atrapan a cualquier otro rastreador no declarado.