Aprendiendo IA
¿Es GPTBot o un impostor? Compruébalo en tus registros
Cualquiera puede llamar a tu web diciendo que es GPTBot, ClaudeBot o el robot de Google: el nombre lo escribe quien hace la petición. En el registro de acceso de twinforce.es, 5.156 de las 36.551 peticiones que en un mes dijeron ser uno de nueve robots de IA o de búsqueda llegaron desde fuera de las direcciones IP que publica cada empresa, y seis de cada diez buscaban ficheros de credenciales. Así se comprueba con las listas oficiales y un script de 32 líneas, y así se les cierra la puerta.
En resumen
- Del 30 de septiembre al 30 de octubre de 2026, 36.551 peticiones al servidor de twinforce.es dijeron ser uno de nueve robots de OpenAI, Anthropic, Google o Perplexity; 5.156, el 14,1 %, llegaron desde IP que esas empresas no publican como suyas.
- 38 direcciones se hicieron pasar por los nueve robots, cambiando de nombre de una petición a otra, y suman 4.672 de las peticiones falsas, el 90,6 %.
- 3.127 peticiones falsas, el 60,6 %, pedían ficheros de credenciales o configuración como `.env` o `.aws/credentials`, rutas de WordPress o paneles de administración; el servidor respondió 404 en 4.396 de las 5.156.
- Claude-SearchBot y Perplexity-User no hicieron ni una visita auténtica en el mes: todo lo que llegó con esos nombres venía de fuera de sus rangos oficiales.
- Para el robot de Google, aceptar cualquier nombre acabado en googleusercontent.com habría dado por buenas 775 peticiones de máquinas de Google Cloud que alquila cualquiera.
Cada visita deja una línea en el registro
Cuando alguien abre una página de tu web, el servidor apunta quién ha llamado, cuándo y qué ha pedido. Lo mismo ocurre cuando llama un robot: los de OpenAI, la empresa de ChatGPT; los de Anthropic, la empresa de Claude; los de Google, y los de Perplexity, la empresa estadounidense del buscador con IA del mismo nombre. Todos dejan su línea en ese fichero.
En Apache, el servidor web de la Apache Software Foundation, cada sitio tiene su `access_log`. En los servidores con panel de control, cada dominio suele tener el suyo en la carpeta de registros del sistema.
Para esta práctica se leyó, sin modificarlo, el registro de twinforce.es desde el 30 de septiembre de 2026 a las 0.08 hasta el 30 de octubre a las 8.23, en hora UTC: un mes. La pregunta era sencilla: de las visitas que dicen venir de un robot de IA o del buscador de Google, cuántas vienen de verdad de esas empresas.
El nombre lo escribe quien llama
Cada robot se presenta con su nombre en el user-agent. OpenAI da como ejemplo el de GPTBot: «Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot», y avisa de que el número de versión puede cambiar.
El problema es que ese texto lo escribe el programa que hace la petición. Cualquiera puede copiar la cadena de GPTBot en su propio programa y llamar a tu web con ella, y el registro la apuntará igual que la auténtica.
Por eso las cuatro empresas publican, además del nombre, la lista de direcciones IP desde las que salen sus robots. Comprobar un robot es cruzar las dos cosas: el nombre que dice y la dirección desde la que llega.
En el formato combinado de Apache, el habitual, las dos están en cada línea del registro: la IP, al principio; el user-agent, entre las dos últimas comillas.
Tres oficios: entrenar, buscar y responder
No todos los robots de IA hacen lo mismo, y cada empresa usa uno distinto para cada tarea. Unos recorren la web para reunir contenido de entrenamiento: GPTBot, que según OpenAI rastrea contenido «that may be used in training our generative AI foundation models», es decir, contenido que puede servir para entrenar sus modelos fundacionales de IA generativa, y ClaudeBot, que según Anthropic recoge contenido que podría contribuir al entrenamiento de sus modelos.
Otros indexan páginas para el buscador del propio asistente: OAI-SearchBot, que según OpenAI sirve para mostrar webs en la búsqueda de ChatGPT; Claude-SearchBot, que según Anthropic mejora la calidad de sus resultados, y PerplexityBot, que según Perplexity «is not used to crawl content for AI foundation models», es decir, no rastrea contenido para entrenar modelos fundacionales.
El tercer grupo no rastrea por su cuenta: visita una página cuando un usuario le pide algo al asistente. Son ChatGPT-User, Claude-User y Perplexity-User. OpenAI aclara que ChatGPT-User «is not used for crawling the web in an automatic fashion», es decir, no recorre la web de forma automática.
OpenAI subraya que cada robot se gestiona por separado: «Each setting is independent of the others», es decir, cada ajuste es independiente de los demás. Puedes dejar que OAI-SearchBot te muestre en la búsqueda de ChatGPT y negar a GPTBot tu contenido para entrenar.
Google tiene un caso aparte, Google-Extended, que no es un robot: según Google, «no tiene una cadena de user-agent de solicitud HTTP independiente» y el rastreo se hace con las de Google. Sirve para decidir si lo rastreado se usa para entrenar Gemini y para la fundamentación de sus respuestas, y según Google «no afecta a la inclusión de los sitios en la Búsqueda de Google». Por eso nunca aparece en un registro.
Las normas para robots no son un candado
| Robot | Empresa | Para qué sirve | Lista oficial de IP | ¿Obedece robots.txt? |
|---|---|---|---|---|
| GPTBot | OpenAI | Entrenamiento | gptbot.json | Sí |
| OAI-SearchBot | OpenAI | Búsqueda en ChatGPT | searchbot.json | Sí |
| ChatGPT-User | OpenAI | Visitas pedidas por un usuario | chatgpt-user.json | Puede no aplicarse |
| ClaudeBot | Anthropic | Entrenamiento | bots.json | Sí |
| Claude-SearchBot | Anthropic | Búsqueda | bots.json | Sí |
| Claude-User | Anthropic | Visitas pedidas por un usuario | bots.json y las IP de salida de la API | Sí |
| PerplexityBot | Perplexity | Búsqueda, no entrenamiento | perplexitybot.json | Sí |
| Perplexity-User | Perplexity | Visitas pedidas por un usuario | perplexity-user.json | Por lo general, no |
| Googlebot | Buscador de Google | common-crawlers.json y DNS en googlebot.com | Sí | |
| Google-Extended | Permiso de entrenamiento de Gemini | No rastrea: es solo un nombre de robots.txt | — |
Los robots que juegan limpio leen primero el robots.txt de la web. Anthropic dice que sus tres robots respetan sus directivas, y también la extensión `Crawl-delay`, que la propia empresa califica de «non-standard», para espaciar las visitas. Google afirma que sus rastreadores habituales siempre respetan las reglas de robots.txt en los rastreos automáticos.
Los que activa un usuario son otra historia. Para ChatGPT-User, OpenAI advierte de que, como esas acciones las inicia un usuario, «robots.txt rules may not apply», es decir, puede que las reglas de robots.txt no se apliquen. Perplexity dice que Perplexity-User «generally ignores robots.txt rules», es decir, suele ignorarlas, por el mismo motivo.
Y Google-Extended solo existe aquí: es el nombre que se escribe en robots.txt para decidir sobre el entrenamiento de Gemini.
Cada empresa publica sus IP en un fichero
Las listas oficiales son ficheros JSON públicos: `gptbot.json`, `searchbot.json` y `chatgpt-user.json`, de OpenAI; `bots.json`, de Anthropic, uno para sus tres robots; `perplexitybot.json` y `perplexity-user.json`, de Perplexity, y `common-crawlers.json`, de Google, para su robot habitual. Google precisa que las direcciones de sus ficheros «se representan en formato CIDR».
Cada fichero lleva la fecha en que se generó, y cambian. De los descargados el 30 de octubre de 2026, el de GPTBot era del 22 de septiembre; el de Anthropic, del 20 de octubre, y el de Google, del 29 de octubre.
Anthropic publica, en realidad, dos listas. La de sus robots, de la que dice: «If a crawler has a source IP address on this list, it indicates that the crawler is coming from Anthropic», es decir, si la IP de un rastreador está en esa lista, viene de Anthropic. Y otra, en la documentación de su API, con las direcciones de salida de las búsquedas y lecturas web que hace Claude como herramientas: el bloque 160.79.104.0/21.
En el registro de twinforce.es, siete peticiones de Claude-User llegaron desde ese bloque con el user-agent estándar de Claude-User. No están en la lista de robots, pero sí entre las IP oficiales de la empresa, así que en esta práctica cuentan como legítimas.
Un script de 32 líneas cruza nombre e IP
| Paso | Qué hace | Por qué |
|---|---|---|
| 1. Descarga las listas | Pide las listas oficiales de los nueve robots, identificándose con un user-agent propio, y convierte cada rango en una red con el módulo `ipaddress`. A Claude-User le suma el bloque de salida de la API de Anthropic. | Las listas cambian: así se usa siempre la de hoy |
| 2. Lee el registro | Recorre el fichero línea a línea, también si está en .gz, y saca de cada una la IP (el primer campo), el user-agent (lo que va entre las dos últimas comillas) y la fecha. | Es el formato combinado de Apache |
| 3. Asigna el robot | Busca en el user-agent el nombre de cada robot y se queda con el primero que encuentra; descarta las líneas sin ninguno y las anteriores a la fecha indicada. | Solo cuentan las peticiones que dicen ser un robot |
| 4. Cruza y cuenta | Comprueba si la IP cae dentro de algún rango oficial de ese robot y suma peticiones e IP distintas, dentro y fuera. | Fuera de rango, la petición es de un impostor |
La comprobación se hace con un script de 32 líneas en Python que solo usa la biblioteca estándar: no hay que instalar nada. Se ejecuta con el registro y la fecha desde la que se quiere contar: `python3 verificar_robots.py access_log 30/Sep/2026`. También lee registros comprimidos en `.gz`.
Hace cuatro cosas, en este orden. El resultado es una tabla por robot con las peticiones y las IP distintas, dentro y fuera de los rangos oficiales.
Para el robot de Google hay una segunda prueba, que se explica más abajo, porque Google ofrece otra forma de verificarlo además de su lista.
Uno de cada siete era un impostor
| Robot | Peticiones que dicen serlo | Desde IP oficial | Impostoras | IP oficiales | IP impostoras |
|---|---|---|---|---|---|
| ClaudeBot (Anthropic) | 13.794 | 13.314 | 480 | 30 | 38 |
| Googlebot | 8.207 | 6.996 | 1.211 | 52 | 68 |
| PerplexityBot | 4.693 | 4.241 | 452 | 12 | 40 |
| GPTBot (OpenAI) | 4.186 | 3.672 | 514 | 56 | 38 |
| OAI-SearchBot (OpenAI) | 2.526 | 2.022 | 504 | 274 | 40 |
| ChatGPT-User (OpenAI) | 1.648 | 1.134 | 514 | 594 | 43 |
| Claude-SearchBot (Anthropic) | 509 | 0 | 509 | 0 | 41 |
| Claude-User (Anthropic) | 508 | 16 | 492 | 3 | 46 |
| Perplexity-User | 480 | 0 | 480 | 0 | 38 |
| Total | 36.551 | 31.395 | 5.156 | — | — |
En el mes analizado, 36.551 peticiones dijeron ser uno de los nueve robots. 5.156 llegaron desde direcciones que no están en las listas oficiales: un 14,1 %, una de cada siete.
Dos nombres no trajeron ni una visita auténtica en todo el mes: Claude-SearchBot y Perplexity-User. Todo lo que llegó con ellos venía de fuera de sus rangos. En el otro extremo, ClaudeBot fue el robot auténtico más activo, y el de Google, el más suplantado, tanto en peticiones como en IP.
Dos limitaciones de la medida. Una herramienta que se ejecuta en el equipo del usuario, como Claude Code, se identifica como Claude-User desde una IP cualquiera, y la comprobación la marca como impostora. Y las listas se descargaron el 30 de octubre. Si algún robot cambió de dirección durante el mes, una IP que fue suya hace semanas podría salir hoy como impostora.
Los mismos disfraces, la misma búsqueda
| Peticiones falsas | Número | Porcentaje |
|---|---|---|
| Total | 5.156 | 100 % |
| Desde las 38 IP que usaron los nueve nombres | 4.672 | 90,6 % |
| Pedían credenciales, configuración, WordPress o paneles | 3.127 | 60,6 % |
| Recibieron un 404 (no encontrado) | 4.396 | 85,3 % |
| Recibieron un 200 (páginas públicas) | 100 | 1,9 % |
Los impostores no son muchos ni distintos. Las 5.156 peticiones falsas salieron de 80 IP, y 38 de ellas usaron los nueve nombres: cambiaban de user-agent de una petición a otra. Esas 38 direcciones hicieron 4.672 peticiones, el 90,6 % de las falsas.
Tampoco venían a leer. 3.127 peticiones, el 60,6 %, pedían ficheros de credenciales o de configuración que una web estática no tiene: `.env`, `.aws/credentials`, `secrets.json`, `firebase-adminsdk.json` o `config/gcp-credentials.json`, además de rutas de WordPress y de paneles de administración. Son barridos automáticos con el disfraz de un robot de IA.
El servidor respondió 404, «no encontrado», en 4.396 de ellas, el 85,3 %. Las 100 que recibieron un 200 pedían páginas públicas, como la portada.
El robot de Google se comprueba de ida y vuelta
| Qué devolvió el DNS inverso | Peticiones | IP |
|---|---|---|
| `*.bc.googleusercontent.com` (Google Cloud), y la vuelta coincide | 775 | 42 |
| Ningún nombre | 424 | — |
| Otros proveedores | 12 | — |
| Total fuera de common-crawlers.json | 1.211 | 68 |
Google ofrece, además de su lista, un método manual. Se hace una consulta de DNS inverso de la IP con el comando `host`, se comprueba que el dominio es «googlebot.com, google.com o googleusercontent.com» y se hace la consulta directa con el nombre obtenido, que debe devolver la misma IP del registro.
Con una IP del robot de Google auténtico: `host 66.249.79.72` responde `crawl-66-249-79-72.googlebot.com.`, y `host crawl-66-249-79-72.googlebot.com` devuelve `has address 66.249.79.72`. El círculo se cierra.
La trampa está en quedarse en «acaba en googleusercontent.com». De las 1.211 peticiones de falso robot de Google, 775, desde 42 IP, resolvían a nombres `*.bc.googleusercontent.com` y pasaban también la vuelta: son máquinas de Google Cloud, que alquila cualquiera. Google no da esa forma de nombre para ninguno de sus robots.
Las formas que sí da son estas: `crawl-…googlebot.com` o `geo-crawl-….geo.googlebot.com` para sus rastreadores habituales; `rate-limited-proxy-….google.com` para los de casos especiales, y `….gae.googleusercontent.com` o `google-proxy-….google.com` para los que activa un usuario. Para el robot de Google, la regla segura exige las dos cosas: un nombre `crawl-…googlebot.com` o `geo-crawl-….geo.googlebot.com` y la IP dentro de `common-crawlers.json`.
Dos capas para cerrar la puerta
| Bloque | Qué pide |
|---|---|
| User-agent: GPTBot · Disallow: / | Que OpenAI no use tu contenido para entrenar sus modelos |
| User-agent: ClaudeBot · Disallow: / | Que Anthropic excluya tu contenido futuro de sus datos de entrenamiento |
| User-agent: Google-Extended · Disallow: / | Que Google no lo use para entrenar Gemini ni para la fundamentación; no afecta a la Búsqueda |
| User-agent: OAI-SearchBot · Allow: / | Seguir apareciendo en la búsqueda de ChatGPT |
| User-agent: Claude-SearchBot · Allow: / | Seguir indexado para las búsquedas de Claude |
| User-agent: PerplexityBot · Allow: / | Seguir apareciendo en los resultados de Perplexity |
La primera capa es para los robots de verdad, que obedecen: el robots.txt. Una decisión habitual es dejar que te encuentren los buscadores de los asistentes y negar el contenido para entrenar. Cada bloque nombra un robot con `User-agent` y le dice qué puede leer: `Disallow: /` le cierra toda la web y `Allow: /` se la abre.
La segunda capa es para los impostores, que no leen robots.txt. En Apache 2.4 se escribe en la configuración del sitio con una condición `<If>` y el operador `-R`, que según la documentación de Apache equivale a comparar la IP del cliente con `-ipmatch`, «but more efficient». Para GPTBot son tres líneas: `<If "%{HTTP_USER_AGENT} =~ /GPTBot/ && ! -R '20.171.206.0/24' && ! -R '20.171.207.0/24'">`, después `Require all denied` y, al final, `</If>`.
Se lee así: si el user-agent contiene GPTBot y la IP no está en ninguno de esos rangos, se deniega la petición. El ejemplo muestra solo dos rangos de la lista de OpenAI; la regla real lleva un `! -R` por cada rango del JSON y hay que actualizarla cuando la empresa regenera su fichero, o generarla con el propio script. Y solo frena a quien usa ese nombre desde fuera del rango, no a cualquier barrido.
Si tu web pasa por Cloudflare, empresa de red de distribución de contenidos y seguridad web, Perplexity publica la misma idea como regla de su cortafuegos, que empareja cada nombre con sus rangos: `(http.user_agent contains "PerplexityBot" and ip.src in {<PerplexityBot IP ranges>})`. La propone para dejar pasar a sus robots auténticos.
La medida de fondo no está en ninguna de las dos capas: no tener `.env` ni credenciales en la carpeta pública de la web. El RFC 9309 lo advierte: robots.txt no es «a substitute for valid content security measures», es decir, un sustituto de las medidas de seguridad de verdad, y listar rutas en él las deja a la vista.
Lo que esta comprobación no resuelve
Las listas de IP cambian, así que la comprobación vale lo que valga la lista del día. Y los robots que activa un usuario, como ChatGPT-User o Perplexity-User, pueden no hacer caso del robots.txt aunque sean auténticos.
Bloquear por IP a los robots de verdad tampoco es buena idea. Anthropic avisa de que hacerlo «may not work correctly or persistently guarantee an opt-out, as doing so impedes our ability to read your robots.txt file», es decir, puede no funcionar bien ni garantizar la exclusión, porque les impide leer tu robots.txt. La regla del servidor debe frenar solo a quien usa el nombre desde fuera de su rango, nunca a los rangos oficiales.
La salida de fondo es que el robot demuestre quién es. Cloudflare describe Web Bot Auth como un método que usa «cryptographic signatures in HTTP messages to verify that a request comes from an automated bot», es decir, firmas criptográficas en los mensajes HTTP para comprobar que una petición viene de un robot. Un nombre se copia; una firma hecha con una clave privada, no.
Conclusión
El user-agent es una tarjeta de visita que puede imprimir cualquiera. En el registro de twinforce.es, una de cada siete peticiones que en un mes dijeron ser un robot de IA o de Google era falsa; casi todas venían de las mismas 38 direcciones cambiando de disfraz, y la mayoría buscaba credenciales. Comprobarlo cuesta un script de 32 líneas y las listas que publican OpenAI, Anthropic, Google y Perplexity; frenarlos, una regla en el servidor que se actualiza con esas mismas listas. Y hay algo que ningún filtro sustituye: no dejar secretos donde un robot, auténtico o no, pueda pedirlos.
Fuentes primarias
- OpenAI — Overview of OpenAI Crawlers (consulta 30-10-2026) ↗
- Anthropic — Does Anthropic crawl data from the web, and how can site owners block the crawler? (consulta 30-10-2026) ↗
- Anthropic — IP addresses (consulta 30-10-2026) ↗
- Google — Verificar las solicitudes de los rastreadores y los fetchers de Google (consulta 30-10-2026) ↗
- Google — Rastreadores habituales de Google (consulta 30-10-2026) ↗
- Perplexity — Perplexity Crawlers (consulta 30-10-2026) ↗
- Cloudflare — Web Bot Auth (consulta 30-10-2026) ↗
- Apache HTTP Server — Expressions in Apache HTTP Server (versión 2.4) ↗
- IETF — RFC 9309: Robots Exclusion Protocol ↗
La continuación natural
Aprende IA a tu ritmo con nuestros cursos gratuitos.
En nuestra plataforma de aprendizaje TAKU podrás acceder a este y muchos otros cursos de manera totalmente gratuita.
APRENDER CON TAKU
Comentarios