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

Aviso de afiliados v3.1
Aviso de afiliados v3.2 (móvil)
Entorno de prueba Familia RHELAlmaLinux 9.8Nginx 1.28 + Apache 2.4Verificado el 2026-10-18

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.x

En 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.json

Para 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.x
74.7.x.x IN
34.53.x.x OUT

La 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.

BotEmpresaPeticiones (14 días)Cómo se verificóGrupo de suplantación
ClaudeBotAnthropic10,305Rangos de IP publicados2,387
PerplexityBotPerplexity3,406Rangos de IP publicados2,262
GPTBotOpenAI2,546Rangos de IP publicados2,328
OAI-SearchBotOpenAI1,399Rangos de IP publicados2,347
ChatGPT-UserOpenAI334Rangos de IP publicados2,409
ApplebotApple330Rangos de IP publicados2,372
CCBotCommon Crawl275Rangos de IP publicados2,275
Claude-UserAnthropic10Rangos de IP publicados2,192
Claude-SearchBotAnthropic0Rangos de IP publicados2,297
Perplexity-UserPerplexity0Rangos de IP publicados2,235
Meta-ExternalAgentMeta14,384UA2,339
BytespiderByteDance6,569UA2,336
AmazonbotAmazon3,493UA · DNS inverso2,379
Googlebot (comparación)Google10,545Rangos de IP publicados3,951
bingbot (comparación)Microsoft13,477Rangos de IP publicados1,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.

📊Peticiones semanales de rastreadores de IAPor semana · recuento de registros
GPTBot
OpenAI · recopilación para entrenar modelos
08461,6922,5373,383
9/143,3837 días
9/211907 días
9/283567 días
10/5127 días
10/122,9596 días (hasta 17/10)
ClaudeBot
Anthropic · recopilación para entrenar modelos
02,5545,1087,66310,217
9/146,9767 días
9/2110,2177 días
9/287,7097 días
10/56,9307 días
10/127,2896 días (hasta 17/10)
PerplexityBot
Perplexity · búsqueda
05531,1061,6592,212
9/141,0847 días
9/212,1527 días
9/285337 días
10/52,2127 días
10/121,4836 días (hasta 17/10)
Las cifras son recuentos por UA de los registros de acceso del servidor de origen desde la semana del 14 de septiembre hasta la del 12 de octubre, sin las peticiones desde IP del grupo de suplantación, las dirigidas a URL que buscan vulnerabilidades ni las respondidas con errores como 403 o 429.

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 404

Incluso 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.txtEmpresaUsoSi se bloquea (documentación oficial)
GPTBotOpenAIRecopilación para entrenar modelosSeñal de no usar para entrenar
OAI-SearchBotOpenAIBúsqueda de ChatGPTExcluido de las respuestas de búsqueda de ChatGPT (puede seguir apareciendo como enlace de navegación)
ChatGPT-UserOpenAIPetición de usuarioPuede que no se apliquen las reglas de robots.txt
ClaudeBotAnthropicRecopilación para entrenar modelosEl material posterior se excluye de los datos de entrenamiento
Claude-SearchBotAnthropicMejorar la calidad de la búsquedaPuede reducirse la visibilidad en los resultados de búsqueda
Claude-UserAnthropicPetición de usuarioNo trae páginas para las preguntas de los usuarios
PerplexityBotPerplexityBúsqueda (no entrenamiento)Excluido de los resultados de búsqueda
Perplexity-UserPerplexityPetición de usuarioEn general no sigue robots.txt
Google-ExtendedGoogleEntrenamiento y grounding de GeminiSin efecto en la visibilidad ni el ranking en Google
Applebot-ExtendedAppleEntrenamiento de modelos fundacionalesSin efecto en la visibilidad en las búsquedas de Apple
meta-externalagentMetaEntrenamiento 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.xml

Sin 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.

🧭 El camino de una petición de rastreador de IA
Diagrama explicativo
📌 Petición
📥 Petición
📜 robots.txt
Reglas que los rastreadores automáticos leen primero
GPTBot · ClaudeBotCon Disallow se detiene la recopilación
OAI-SearchBot · PerplexityBotCon Disallow se excluye de las respuestas de búsqueda
ChatGPT-User · Perplexity-UserPuede que las reglas no se apliquen
Peticiones que solo toman prestado el nombre de un botSin garantía de que sigan las reglas
Petición→
🖥️ nginx
UA map · comparación con rangos de IP publicados
El nombre está en el UA map403 por UA
No está en el UA mapPasa si está dentro de los rangos publicados
No está en el UA mapPasa
Nombre de bot permitido + fuera de los rangos403 por comparación de rangos
Respuesta→
📤 Respuesta
Código de estado
403Recopilación para entrenamiento rechazada
200Visible en la búsqueda con IA
200Responde a las preguntas de los usuarios
403Si cambia el nombre, el bloqueo por UA lo deja pasar
Los rastreadores de entrenamiento siguen el Disallow de robots.txt, y si añades sus nombres al UA map de nginx, también se rechazan con un 403 las peticiones que no leyeron las reglas. En los 14 días hubo 2.546 peticiones de GPTBot desde rangos publicados.
Los rastreadores de búsqueda se configuran aparte de los tokens de entrenamiento; si no los bloqueas, tus páginas pueden aparecer en las respuestas de la búsqueda de ChatGPT y de Perplexity (según la documentación oficial). En nginx solo se deja pasar a las peticiones desde dentro de los rangos publicados.
Los bots de petición de usuario traen una página cuando un usuario hace una pregunta, y la documentación de OpenAI y Perplexity indica que las reglas de robots.txt pueden no aplicarse. Para bloquearlos, recházalos por nombre en nginx.
Las peticiones suplantadas solo toman prestado el nombre de un bot, así que el bloqueo por UA las rechaza solo cuando el nombre coincide; si usan el nombre de un bot de búsqueda permitido, solo la comparación de rangos las filtra. En los 14 días, 70 IP se turnaron 23 nombres de bot.

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.conf
nginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successful

Como 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

La documentación de Anthropic indica que admite la extensión no estándar [Crawl-delay], que se escribe como [Crawl-delay: 1] bajo [User-agent: ClaudeBot]. La documentación de Apple explica que Applebot no sigue crawl-delay, pero ajusta solo la velocidad de rastreo si el sitio se ralentiza o devuelve errores.

Según la documentación de Apple, las páginas con la metaetiqueta nosnippet no se usan como contexto adicional cuando los modelos de IA de los productos de Apple generan respuestas, y en las sugerencias de búsqueda solo se muestra el título. Para archivos que no admiten metaetiquetas, como PDF o imágenes, se envía la misma indicación con la cabecera de respuesta [X-Robots-Tag: applebot: nosnippet].

La documentación de Perplexity indica crear una regla que solo permita las peticiones cuyo UA contenga PerplexityBot o Perplexity-User y cuya IP de origen esté dentro de los rangos JSON publicados, y aplicarla antes que otras reglas de bloqueo. Como los rangos cambian de vez en cuando, recomienda descargarlos de la URL del JSON con regularidad y actualizar la regla.

🤖 Contenido recomendado: rastreadores de IA 5 artículos · 8 referencias
🗂️ WEB
📋 Búsqueda sin clics 📄 Factores de ranking del algoritmo de Google 📄 SEO para JavaScript
📄 Consultar mi IP 📄 Configurar la CDN de Cloudflare
📡 Rastreadores de OpenAI 📡 Rastreadores de Anthropic 📡 Rastreadores de Perplexity 📡 Rastreadores comunes de Google 📡 Applebot 📡 Rastreadores web de Meta 📡 Pay per crawl 📡 Web Bot Auth
No hay resultados.
Documentación oficial de los rastreadores de OpenAI (enlace externo)
Documentación oficial · OpenAI
Overview of OpenAI Crawlers
Documentación oficial sobre el uso de GPTBot, OAI-SearchBot y ChatGPT-User, sus tokens de robots.txt y las URL JSON de sus rangos de IP publicados.
Ver artículo →Artículo actual
Documentación oficial de los rastreadores de Anthropic (enlace externo)
Documentación oficial · Anthropic
Does Anthropic crawl data from the web, and how can site owners block the crawler?
Documentación oficial sobre el uso de ClaudeBot, Claude-User y Claude-SearchBot, el efecto de bloquearlos y la compatibilidad con Crawl-delay.
Ver artículo →Artículo actual
Documentación oficial de los rastreadores de Perplexity (enlace externo)
Documentación oficial · Perplexity
Perplexity Crawlers
Documentación oficial sobre el uso de PerplexityBot y Perplexity-User, sus rangos de IP publicados y cómo permitirlos en el cortafuegos.
Ver artículo →Artículo actual
Documentación oficial de los rastreadores comunes de Google (enlace externo)
Documentación oficial · Google
Google’s common crawlers
Documentación oficial sobre por qué el token Google-Extended solo se usa en robots.txt, sin UA en las peticiones HTTP, y a qué afecta.
Ver artículo →Artículo actual
Documentación oficial de Applebot (enlace externo)
Documentación oficial · Apple
About Applebot
Documentación oficial sobre la diferencia entre Applebot y Applebot-Extended, la verificación por DNS inverso y el tratamiento de nosnippet.
Ver artículo →Artículo actual
Documentación oficial de los rastreadores web de Meta (enlace externo)
Documentación oficial · Meta
Rastreadores web de Meta
Documentación oficial sobre el uso de Meta-ExternalAgent, Meta-WebIndexer y Meta-ExternalFetcher y su configuración en robots.txt.
Ver artículo →Artículo actual
Documentación oficial de Cloudflare Pay per crawl (enlace externo)
Documentación oficial · Cloudflare
What is Pay Per Crawl?
Documentación oficial de la función que envía a las peticiones de rastreadores de IA una respuesta 402 con una cabecera de precio y solo responde con 200 a las que tienen intención de pagar.
Ver artículo →Artículo actual
Documentación oficial de Cloudflare Web Bot Auth (enlace externo)
Documentación oficial · Cloudflare
Web Bot Auth
Documentación oficial sobre cómo un bot se identifica añadiendo una firma Ed25519 a las cabeceras de sus peticiones y cómo registrar un directorio de claves.
Ver artículo →Artículo actual

ℹ️ 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.

Deja una respuesta

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

Demuestra que eres humano: 4   +   6   =