Rastreadores de IA: visitas de GPTBot y ClaudeBot medidas y bloqueo con robots.txt y nginx

Un rastreador de IA es un bot que las empresas de IA usan para recopilar páginas web para entrenar modelos, para la búsqueda con IA y para responder preguntas de los usuarios. Para ver cuántas veces visitan estos bots un servidor con Nginx + Apache, comparé los UA de 14 días de registros de acceso del servidor de origen con los rangos de IP que publica cada empresa: las peticiones desde los rangos oficiales sumaron 18.605, y resumí, según la documentación oficial, cómo bloquearlas o permitirlas en robots.txt y nginx.
El periodo va del 4 al 17 de octubre de 2026; las peticiones que respondió la caché frontal sin llegar al servidor de origen y las que no registraron la IP real no están incluidas en las cifras.
1️⃣ Identificar rastreadores de IA: UA del registro de acceso y rangos de IP publicados
No todas las peticiones registradas como GPTBot vienen de OpenAI. El UA es un texto que escribe y envía quien hace la petición, así que cualquiera puede hacer peticiones con el nombre de GPTBot o ClaudeBot.
Por eso primero cuento las peticiones por nombre de bot según el UA y después las comparo con los rangos de IP que publica cada empresa. Abajo está el recuento de nombres de bots de IA en un día de registros.
grep -oiE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Bytespider|CCBot|Amazonbot|meta-externalagent)/' access.log-20261018 | sort | uniq -c | sort -rn 2968 GPTBot/
2084 ClaudeBot/
622 meta-externalagent/
535 Amazonbot/
167 PerplexityBot/
99 OAI-SearchBot/
30 ChatGPT-User/
21 Claude-User/
17 Claude-SearchBot/
12 Meta-ExternalAgent/
10 Perplexity-User/
7 CCBot/Al contar con [/] detrás del nombre se excluye el texto que no es un nombre, como la dirección de contacto claudebot@ dentro del UA de Claude-SearchBot, y los nombres registrados con otras mayúsculas y minúsculas se cuentan aparte. Después compruebo en la primera columna de qué IP vinieron las peticiones de GPTBot.
grep 'GPTBot/' access.log-20261018 | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 2524 74.7.x.x
428 185.152.x.x
12 34.53.x.x
1 74.7.x.x
1 172.182.x.xEn las peticiones que pasaron por una CDN o un proxy, la primera columna registra la dirección del servidor intermedio, así que esas líneas se comparan con la dirección de la columna X-Forwarded-For al final del registro. OpenAI publica los rangos de IP de GPTBot en un archivo JSON.
curl -s https://openai.com/gptbot.json -o gptbot.jsonPara comprobar si una IP está en el archivo de rangos descargado se usa ipaddress, un módulo estándar de Python.
# inrange.py — comprueba si una IP está en un archivo JSON de rangos
import json, sys, ipaddress
nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for a in sys.argv[2:]:
ip = ipaddress.ip_address(a)
print(a, 'IN' if any(ip in n for n in nets) else 'OUT')Pon las IP que quieras comprobar después del nombre del archivo de rangos.
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUTLa IP que envió 2.524 peticiones estaba dentro de los rangos publicados y la que envió 12 estaba fuera. Anthropic, Perplexity, Apple, Common Crawl, Google y Bing publican archivos de rangos con el mismo formato, y en el caso de Amazonbot comprobé si el DNS inverso termina en crawl.amazonbot.amazon. Es como el control de pasaportes del aeropuerto, que comprueba el pasaporte y no el nombre de la tarjeta de embarque.
Al comparar así los 14 días, 70 IP se turnaban 23 nombres de bot, entre ellos GPTBot, ClaudeBot y Googlebot, para enviar 48.041 peticiones, el 57 % de ellas a URL que buscaban vulnerabilidades, como .php o .env. Las 809 peticiones con el nombre Google-Extended también venían de este grupo; según la documentación de Google, Google-Extended es un token exclusivo de robots.txt sin UA en las peticiones HTTP.
2️⃣ Visitas por UA: 14 días de mediciones y evolución semanal
La tabla muestra las peticiones de los 14 días del 4 al 17 de octubre. Para los bots con rangos publicados solo conté las peticiones desde dentro de los rangos; para los que no comparé con rangos conté por UA, sin el grupo de suplantación.
| Bot | Empresa | Peticiones (14 días) | Cómo se verificó | Grupo de suplantación |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | Rangos de IP publicados | 2,387 |
| PerplexityBot | Perplexity | 3,406 | Rangos de IP publicados | 2,262 |
| GPTBot | OpenAI | 2,546 | Rangos de IP publicados | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | Rangos de IP publicados | 2,347 |
| ChatGPT-User | OpenAI | 334 | Rangos de IP publicados | 2,409 |
| Applebot | Apple | 330 | Rangos de IP publicados | 2,372 |
| CCBot | Common Crawl | 275 | Rangos de IP publicados | 2,275 |
| Claude-User | Anthropic | 10 | Rangos de IP publicados | 2,192 |
| Claude-SearchBot | Anthropic | 0 | Rangos de IP publicados | 2,297 |
| Perplexity-User | Perplexity | 0 | Rangos de IP publicados | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA · DNS inverso | 2,379 |
| Googlebot (comparación) | 10,545 | Rangos de IP publicados | 3,951 | |
| bingbot (comparación) | Microsoft | 13,477 | Rangos de IP publicados | 1,551 |
Entre los rastreadores de IA verificados desde rangos publicados, ClaudeBot fue el que más hizo, con 10.305 peticiones, seguido de PerplexityBot con 3.406 y GPTBot con 2.546. Claude-SearchBot y Perplexity-User tuvieron 0 peticiones desde rangos publicados: todas las peticiones con esos nombres vinieron del grupo de suplantación.
Incluso tras filtrar la suplantación, quedan los bots que no se compararon con rangos. Meta-ExternalAgent fue el que más hizo por UA, con 14.384 peticiones, pero la documentación de rastreadores de Meta que consulté no tiene lista de rangos de IP, así que lo conté solo por UA.
Por semanas, GPTBot osciló entre 12 y 3.383 peticiones, mientras que ClaudeBot se mantuvo entre 6.930 y 10.217 en las cinco semanas.
3️⃣ Qué URL se llevan: tipos de URL y códigos de respuesta
Los rastreadores de IA no se llevan solo el texto de los artículos. En los 14 días, el 21 % de las peticiones de Meta-ExternalAgent fueron de imágenes, y desde los rangos publicados GPTBot pidió el feed RSS 476 veces y ClaudeBot el sitemap 314 veces.
También recopilan las URL de otras versiones de idioma: desde los rangos publicados, 1.111 peticiones de ClaudeBot y 436 de GPTBot fueron a artículos en otros idiomas. Los códigos de respuesta se pueden contar directamente en un día de registros.
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 404Incluso en un solo día casi un tercio son 301, y en los 14 días 5.915 (57 %) de las 10.305 peticiones de ClaudeBot desde rangos publicados fueron 301. De ellas, 4.736 eran peticiones sin [/] al final, así que WordPress respondió con un 301 a la URL con [/] y el mismo artículo se pidió una vez más.
4️⃣ Configurar robots.txt: tokens de entrenamiento y de búsqueda
robots.txt sirve para los bots de entrenamiento y de búsqueda que recopilan de forma automática, pero no para los que traen una página cuando un usuario hace una pregunta. La documentación de OpenAI y de Perplexity advierte que las reglas de robots.txt pueden no aplicarse a las peticiones de ChatGPT-User y Perplexity-User.
Cada empresa divide sus tokens por uso, y según la documentación de OpenAI, bloquear un token no afecta a la configuración de los demás. Abajo están los tokens confirmados en la documentación oficial de cada empresa.
| Token de robots.txt | Empresa | Uso | Si se bloquea (documentación oficial) |
|---|---|---|---|
| GPTBot | OpenAI | Recopilación para entrenar modelos | Señal de no usar para entrenar |
| OAI-SearchBot | OpenAI | Búsqueda de ChatGPT | Excluido de las respuestas de búsqueda de ChatGPT (puede seguir apareciendo como enlace de navegación) |
| ChatGPT-User | OpenAI | Petición de usuario | Puede que no se apliquen las reglas de robots.txt |
| ClaudeBot | Anthropic | Recopilación para entrenar modelos | El material posterior se excluye de los datos de entrenamiento |
| Claude-SearchBot | Anthropic | Mejorar la calidad de la búsqueda | Puede reducirse la visibilidad en los resultados de búsqueda |
| Claude-User | Anthropic | Petición de usuario | No trae páginas para las preguntas de los usuarios |
| PerplexityBot | Perplexity | Búsqueda (no entrenamiento) | Excluido de los resultados de búsqueda |
| Perplexity-User | Perplexity | Petición de usuario | En general no sigue robots.txt |
| Google-Extended | Entrenamiento y grounding de Gemini | Sin efecto en la visibilidad ni el ranking en Google | |
| Applebot-Extended | Apple | Entrenamiento de modelos fundacionales | Sin efecto en la visibilidad en las búsquedas de Apple |
| meta-externalagent | Meta | Entrenamiento de modelos de IA, etc. | Bloqueo con Disallow (ejemplo de la documentación) |
Google-Extended y Applebot-Extended no son bots que rastreen por separado, sino tokens que solo se usan en robots.txt. El rastreo lo hacen los rastreadores habituales de Google y Apple, y estos tokens solo deciden si el contenido recopilado puede usarse para entrenar modelos de IA.
Un robots.txt que rechaza solo la recopilación para entrenamiento y mantiene la visibilidad en la búsqueda con IA es así; la documentación de OpenAI, Perplexity y Meta indica que los cambios pueden tardar hasta 24 horas en aplicarse.
# rechazar la recopilación para entrenamiento
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# permitir los bots de búsqueda con IA
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /El robots.txt actual del servidor Nginx + Apache no tiene ninguna línea dirigida a bots de IA.
curl -s https://example.com/robots.txt# se aplica a todos los bots de buscadores
User-agent: *
# bloquear las páginas de administración (seguridad)
Disallow: /wp-admin/
# permitir las llamadas ajax de la administración (necesarias para el funcionamiento)
Allow: /wp-admin/admin-ajax.php
# añadido: bloquear resultados de búsqueda de spam (protección SEO)
Disallow: /search/
Disallow: /?s=
# indicar la ruta del sitemap (indexación más rápida)
Sitemap: https://example.com/sitemap_index.xmlSin líneas para bots de IA, las 2.546 peticiones de GPTBot desde rangos publicados en los 14 días no recibieron ningún 403: 2.090 se respondieron con 200 y 432 con 301. En el mismo periodo, las peticiones de robots.txt que quedaron en los registros de origen desde rangos publicados fueron 36 de Googlebot, 8 de ClaudeBot y 6 de OAI-SearchBot, y ninguna de GPTBot ni de PerplexityBot. Si responde la caché frontal, las peticiones de robots.txt tampoco quedan en los registros de origen.
5️⃣ Bloquear rastreadores de IA en nginx y sus límites
Aunque se bloqueen en robots.txt, las peticiones que no leen las reglas llegan igual al servidor. En nginx, [map] pone una variable a 1 si el UA contiene el nombre de un bot.
# dentro del bloque http — 1 si el UA contiene el nombre de un bot de entrenamiento
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}En el bloque server se devuelve 403 si esa variable vale 1.
# dentro del bloque server
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# configuración existente a continuación
}Bloquear por UA solo comprueba el nombre, así que las peticiones suplantadas se bloquean junto con el bot real si usan el mismo nombre y pasan si lo cambian. Las peticiones que toman el nombre de un bot de búsqueda permitido solo se filtran comparándolas con los rangos de IP publicados.
Para permitir OAI-SearchBot y rechazar solo las peticiones con ese nombre que vienen de fuera de sus rangos, convierte los rangos publicados en una variable con [geo] y compáralos junto con el UA.
# dentro del bloque http — rangos publicados de OAI-SearchBot (mete todo searchbot.json; aquí solo dos líneas)
geo $oai_search_net {
default 0;
104.210.140.128/28 1;
135.234.64.0/24 1;
}
map $http_user_agent:$oai_search_net $fake_searchbot {
default 0;
~*OAI-SearchBot/.*:0$ 1;
}Si hay una CDN o un proxy delante, la dirección que ve [geo] es la del servidor intermedio, así que restaura la IP real con real_ip antes de comparar. La documentación de Anthropic advierte que bloquear por dirección IP impide también leer robots.txt, por lo que la señal de rechazo puede no llegar bien.
No puse esta configuración en el servidor en producción; solo comprobé la sintaxis con un archivo de configuración de prueba.
nginx -t -p ./ -c nginx-test/nginx.confnginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successfulComo del ejemplo solo se comprobó la sintaxis, no verifiqué las respuestas 403; en los 14 días de registros, 2.347 de las 3.937 peticiones con el nombre OAI-SearchBot vinieron del grupo de suplantación fuera de los rangos publicados.
6️⃣ Cobrar a los rastreadores de IA: Pay per crawl y Web Bot Auth
Pay per crawl es una función de Cloudflare AI Crawl Control con la que el propietario del sitio fija un precio por zona y cobra por cada petición de un rastreador de IA. Según la documentación oficial consultada el 18 de octubre de 2026, está en beta privada, y Cloudflare procesa el pago como comerciante registrado (Merchant of Record).
Los rastreadores que envían su intención de pago en una cabecera de la petición reciben una respuesta 200, y los demás reciben una respuesta [402 Payment Required] con el precio. Si el mismo rastreador se bloquea con WAF o Bot Management, la regla de bloqueo tiene prioridad sobre el cobro.
Los rastreadores que quieren pagar deben identificarse con Web Bot Auth. Con Web Bot Auth, el bot firma sus peticiones con una clave Ed25519 y publica su clave pública en [/.well-known/http-message-signatures-directory] para que quien las recibe verifique la firma.
La firma viaja en tres cabeceras, [Signature-Agent], [Signature-Input] y [Signature], y verifica al bot con una firma criptográfica en lugar de rangos de IP. El formato de registro de acceso por defecto del servidor de origen no guarda las cabeceras de las peticiones, así que no comprobé si las peticiones de rastreadores de IA de esos 14 días llevaban firma.
Las 18.605 peticiones de rastreadores de IA verificadas desde rangos de IP publicados en los 14 días equivalieron al 77 % de las 24.022 peticiones de Googlebot y bingbot desde sus rangos publicados en el mismo periodo. Si conviene añadir tokens de entrenamiento a robots.txt se decide con las cifras sin suplantación, y si añades la comparación de rangos al recuento semanal de registros puedes seguir esa evolución.
🔢 FAQ & contenido recomendado




ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.