GEO técnico
Encuentra bots de IA en tus logs (y comprueba que son reales)
Tu analítica no ve los rastreadores de IA. Los logs de tu servidor sí. Aquí tienes comandos para copiar, las listas oficiales de IP y una lista de privacidad.
Actualizado y verificado el 19 de octubre de 2026
Por qué tu analítica no muestra bots de IA
Herramientas como Google Analytics cuentan las visitas con un pequeño script que se ejecuta en el navegador. Un rastreador que solo descarga tu HTML nunca ejecuta ese script, así que nunca aparece.
Tu servidor web anota cada petición, de personas y de bots. Ese registro es tu log de acceso.
Los logs responden a tres preguntas: qué bots te visitan, qué páginas piden y si reciben la página o un error.
Dónde encontrar tus logs
- nginx: el formato estándar “combined” ya tiene todo lo necesario. En Debian y Ubuntu el archivo suele estar en /var/log/nginx/access.log.
- Apache: usa también el formato combined. El formato “common” no tiene user agent, así que con él no verás bots. Añade %{User-agent}i a tu LogFormat.
- ¿Estás detrás de una CDN o un proxy? Entonces el primer campo puede mostrar la IP de tu proxy en cada petición. Configura primero la opción de IP real de tu servidor (o registra la IP reenviada del cliente); si no, todas las comprobaciones de IP de abajo fallarán.
- ¿No tienes acceso a los logs en bruto? Mira el panel de tu hosting o pon una CDN delante de tu web. Más abajo te lo contamos.
Lee una línea del log
Aquí tienes una línea en formato combined, con una IP inventada. Cada parte responde a una pregunta.
203.0.113.7 - - [19/Oct/2026:08:01:02 +0000] "GET /pricing HTTP/1.1" 200 5123 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"- Dirección IP: de dónde vino la petición. Es la que comprobarás con las listas oficiales.
- Hora: cuándo pasó.
- Petición: el método y la página. Aquí GET /pricing.
- Código de estado: 200 es servida, 301/302 redirigida, 403 bloqueada, 404 no encontrada, 5xx error del servidor.
- Bytes: cuánto se devolvió.
- User agent: quién dice ser el visitante. Aquí GPTBot. Cualquiera puede escribirlo, así que por sí solo no prueba nada.
Los bots de IA que debes buscar
Esta lista sale de la documentación de cada empresa, comprobada el 19 de octubre de 2026.
| User agent | Empresa | Qué hace | Sigue robots.txt | Lista de IP |
|---|---|---|---|---|
OAI-SearchBot | OpenAI | Índice de búsqueda | Sí | OAI-SearchBot JSON (se abre en una pestaña nueva) |
GPTBot | OpenAI | Entrenamiento | Sí | GPTBot JSON (se abre en una pestaña nueva) |
ChatGPT-User | OpenAI | Petición de usuario | En parte | ChatGPT-User JSON (se abre en una pestaña nueva) |
Claude-SearchBot | Anthropic | Índice de búsqueda | Sí | Claude-SearchBot JSON (se abre en una pestaña nueva) |
ClaudeBot | Anthropic | Entrenamiento | Sí | ClaudeBot JSON (se abre en una pestaña nueva) |
Claude-User | Anthropic | Petición de usuario | Sí | Claude-User JSON (se abre en una pestaña nueva) |
PerplexityBot | Perplexity | Índice de búsqueda | Sí | PerplexityBot JSON (se abre en una pestaña nueva) |
Perplexity-User | Perplexity | Petición de usuario | No | Perplexity-User JSON (se abre en una pestaña nueva) |
Googlebot | Buscador | Sí | Googlebot JSON (se abre en una pestaña nueva) | |
Google-Agent | Petición de usuario | No | Google-Agent JSON (se abre en una pestaña nueva)Google-Agent JSON (se abre en una pestaña nueva)Google-Agent JSON (se abre en una pestaña nueva) | |
bingbot | Microsoft | Buscador | Sí | bingbot JSON (se abre en una pestaña nueva) |
Applebot | Apple | Buscador | Sí | Applebot JSON (se abre en una pestaña nueva) |
meta-externalagent | Meta | Entrenamiento | Sí | No publicada |
meta-webindexer | Meta | Índice de búsqueda | Sí | No publicada |
meta-externalfetcher | Meta | Petición de usuario | En parte | No publicada |
Amazonbot | Amazon | Entrenamiento | Sí | No publicada |
Amzn-SearchBot | Amazon | Índice de búsqueda | Sí | No publicada |
Amzn-User | Amazon | Petición de usuario | En parte | No publicada |
DuckAssistBot | DuckDuckGo | Índice de búsqueda | Sí | DuckAssistBot JSON (se abre en una pestaña nueva) |
MistralAI-User | Mistral AI | Petición de usuario | Sí | No publicada |
MistralAI-Index | Mistral AI | Índice de búsqueda | No indicado | No publicada |
MistralAI-Training | Mistral AI | Entrenamiento | Sí | No publicada |
CCBot | Common Crawl | Entrenamiento | Sí | CCBot JSON (se abre en una pestaña nueva) |
Google-Extended y Applebot-Extended son tokens de robots.txt, no rastreadores. Nunca aparecen en un log.
Anthropic no publica cadenas de user agent completas. En los logs se ven así: “compatible; Claude-User/1.0; +claudebot@anthropic.com”.
Comandos para copiar
Funcionan con un log en formato combined. Los probamos el 19 de octubre de 2026 con grep y awk en macOS. Cambia access.log por tu archivo.
grep -oE 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|meta-externalagent|Amazonbot|Applebot|DuckAssistBot|MistralAI-User|CCBot' access.log | sort | uniq -c | sort -rnawk -F'"' '{ split($3,a," "); if (match($6,/GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User/)) print substr($6,RSTART,RLENGTH), a[1] }' access.log | sort | uniq -cgrep 'OAI-SearchBot' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | headawk -F'"' '$6 ~ /GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User/ { split($3,a," "); if (a[1] >= 400) print a[1], $2 }' access.logzgrep -c 'GPTBot' /var/log/nginx/access.log.*.gzComprueba cada IP de bot con Python
Este script descarga las listas oficiales de IP e imprime VERIFIED o NOT IN LIST para cada línea de bot. Solo usa la biblioteca estándar de Python.
# Usage: python3 verify_bots.py access.log
import ipaddress, json, re, sys, urllib.request
LISTS = {
"GPTBot": "https://openai.com/gptbot.json",
"OAI-SearchBot": "https://openai.com/searchbot.json",
"ChatGPT-User": "https://openai.com/chatgpt-user.json",
"ClaudeBot": "https://claude.com/crawling/bots.json",
"Claude-User": "https://claude.com/crawling/bots.json",
"Claude-SearchBot": "https://claude.com/crawling/bots.json",
"PerplexityBot": "https://www.perplexity.com/perplexitybot.json",
"Perplexity-User": "https://www.perplexity.com/perplexity-user.json",
"Googlebot": "https://developers.google.com/static/crawling/ipranges/common-crawlers.json",
"bingbot": "https://www.bing.com/toolbox/bingbot.json",
}
cache = {}
def networks(url):
if url not in cache:
req = urllib.request.Request(url, headers={"User-Agent": "log-check/1.0"})
data = json.load(urllib.request.urlopen(req, timeout=20))
cache[url] = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix"))
for p in data["prefixes"]]
return cache[url]
bot = re.compile("|".join(sorted(map(re.escape, LISTS), key=len, reverse=True)))
for line in open(sys.argv[1], errors="replace"):
ua = line.split('"')[5] if line.count('"') >= 6 else line
match = bot.search(ua)
if not match:
continue
try:
ip = ipaddress.ip_address(line.split()[0])
except ValueError:
continue
ok = any(ip in net for net in networks(LISTS[match.group(0)]))
print("VERIFIED " if ok else "NOT IN LIST", match.group(0), ip)¿Es de verdad GPTBot? Comprueba la IP
Un user agent es solo texto. Cualquiera puede enviar “GPTBot”. La propia Perplexity recomienda combinar el user agent con una verificación de IP.
Opción 1: las listas oficiales de IP
OpenAI, Anthropic, Perplexity, Google, Microsoft (Bing), Apple, DuckDuckGo y Common Crawl publican listas JSON con los rangos de IP de sus bots. Si la IP está en la lista, la petición vino de la red de esa empresa. Los enlaces están en la tabla de arriba.
Opción 2: DNS inverso
Google: busca el nombre de host de la IP. Debe terminar en googlebot.com, google.com o googleusercontent.com, y al buscar ese nombre debes obtener la misma IP. Con Bing es igual, con nombres que terminan en search.msn.com.
host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1 ← same IP: real GooglebotQué te dicen los números
- Entrenamiento, búsqueda y peticiones de usuario son cosas distintas. GPTBot y ClaudeBot recogen datos de entrenamiento. OAI-SearchBot, Claude-SearchBot y PerplexityBot crean índices de búsqueda. ChatGPT-User, Claude-User y Perplexity-User piden una página porque alguien pregunta por ella en ese momento.
- Muchas respuestas 403 o 5xx significan que bloqueas o rompes el acceso de la IA. Revisa tu firewall, la configuración de bots de tu CDN y tu robots.txt.
- Las peticiones a robots.txt y llms.txt muestran qué bots leen tus reglas. OpenAI dice que OAI-SearchBot y GPTBot pueden añadir una marca de robots.txt a su user agent cuando piden ese archivo.
- Las peticiones de usuario pueden saltarse robots.txt. Según OpenAI, las reglas de robots.txt pueden no aplicarse a ChatGPT-User, y según Perplexity, Perplexity-User suele ignorarlas.
- Una visita no es una cita. Significa que un bot leyó tu página, no que una respuesta de IA vaya a citarla.
¿Sin acceso al servidor? Usa tu CDN
AI Crawl Control de Cloudflare (antes AI Audit) muestra qué servicios de IA rastrean tu web y qué rastreadores ignoran tus reglas. Según Cloudflare, está disponible en todos los planes.
Cloudflare Logpush puede exportar logs de peticiones con campos como ClientIP, ClientRequestUserAgent, ClientRequestPath y EdgeResponseStatus. Nuestro analizador también lee esas líneas JSON.
Logs y privacidad (RGPD)
Las direcciones IP pueden ser datos personales. El Tribunal de Justicia de la UE lo dijo sobre las IP dinámicas en el caso Breyer (C-582/14, 19 de octubre de 2016), y el considerando 30 del RGPD nombra las direcciones IP como identificadores en línea.
Las IP de los bots son de empresas, pero el mismo log también guarda las IP de tus visitantes. Un enfoque práctico:
- Separa primero las líneas de bots y trabaja con ellas.
- Guarda los logs en bruto solo el tiempo necesario, por ejemplo para seguridad. El RGPD no fija un número de días; dice que no guardes datos personales más tiempo del necesario.
- Guarda totales (bot, día, página, estado, verificado o no) en lugar de IP.
- Acorta o aplica un hash a la IP una vez comprobada.
- No subas logs en bruto a una herramienta externa sin un contrato de encargo de tratamiento. Nuestro analizador funciona en tu navegador, así que no se sube nada.
Esto es información general, no asesoramiento jurídico.
Preguntas frecuentes
¿Cómo sé si ChatGPT visita mi web?
Busca en tu log de acceso OAI-SearchBot (búsqueda de ChatGPT), ChatGPT-User (petición de un usuario) y GPTBot (entrenamiento). Luego compara las IP con las listas de OpenAI.
¿Por qué Google Analytics no muestra GPTBot?
Google Analytics cuenta las visitas con un script en el navegador. Los rastreadores que solo descargan tu HTML no lo ejecutan.
¿Cómo sé si una petición de GPTBot es real?
Compara su IP con openai.com/gptbot.json. Si no está en la lista, trata la petición como no verificada.
¿Qué bots ignoran robots.txt?
Según su propia documentación: los bots que piden una página porque un usuario lo pidió. OpenAI dice que robots.txt puede no aplicarse a ChatGPT-User, Perplexity dice que Perplexity-User suele ignorarlo, y Google dice lo mismo de sus fetchers activados por usuarios.
¿Qué significan los errores 403 para bots de IA?
Tu servidor, firewall o CDN rechazó la petición. Si quieres aparecer en la búsqueda con IA, busca la regla que bloquea al bot y cámbiala.
¿Puedo registrar direcciones IP?
Normalmente sí, con un fin claro como la seguridad, pero las IP pueden ser datos personales. Guarda los logs poco tiempo, almacena totales en lugar de IP y menciona el registro en tu política de privacidad. Esto no es asesoramiento jurídico.
Sigue aprendiendo
Haz que los bots encuentren algo que valga la pena
Rastreado no es citado. Mira cómo leen tu página las herramientas de IA, en 22 puntos.
Analizar mi página