Cum cauți crawlere AI în logurile serverului
Caută în câmpul user agent din logul de acces tokenuri precum GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot și PerplexityBot, apoi uită-te la codurile de stare primite. Un user agent singur nu dovedește nimic, așa că verifică fiecare IP sursă în lista de IP-uri publicată de furnizor sau, pentru Google și Apple, prin DNS invers și direct.
Robots.txt spune ce ceri crawlerelor să facă. Logul de acces arată ce s-a întâmplat de fapt: ce crawlere AI au venit, ce pagini au cerut și ce a răspuns serverul tău. Este cea mai directă dovadă pe care o ai și nu necesită nimic în plus față de fișierele de log și un terminal. Exemplele de mai jos folosesc formatul combined, pe care nginx și Apache îl folosesc implicit.
Pe această pagină
- Cum arată în logul de acces o vizită a unui crawler AI?
- Cum număr vizitele crawlerelor AI?
- Ce a primit de fapt fiecare crawler?
- Cum verific dacă o vizită vine cu adevărat de la OpenAI, Anthropic sau Perplexity?
- Cum verific Googlebot, Applebot și CCBot?
- Cum arată crawlerele AI false?
- Ce nu îți pot spune logurile?
Cum arată în logul de acces o vizită a unui crawler AI?
În formatul combined, fiecare linie conține IP-ul clientului, ora, linia cererii, codul de stare, dimensiunea răspunsului, referrerul și user agent-ul. nginx îl definește ca $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent", iar formatul combined din Apache are aceleași câmpuri. O vizită a crawlerului de antrenare al OpenAI arată așa:
20.171.206.5 - - [12/Nov/2026:10:00:01 +0000] "GET /pricing HTTP/1.1" 200 5120 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"
Tokenurile de căutat sunt cele documentate de furnizori: GPTBot, OAI-SearchBot și ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot și Claude-User (Anthropic); PerplexityBot și Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer și CCBot. Nu vei vedea niciodată Google-Extended sau Applebot-Extended. Google spune că Google-Extended nu are un șir user agent separat, iar Apple spune că Applebot-Extended nu face crawling; ambele sunt doar tokenuri robots.txt.
Cum număr vizitele crawlerelor AI?
Dacă împarți fiecare linie după caracterul ghilimele duble, user agent-ul ajunge în câmpul 6. Potrivirea doar pe acest câmp evită rezultatele false din URL-uri care conțin întâmplător numele unui bot. Comanda numără vizitele per crawler în logul curent și în cele rotite, comprimate:
zcat -f /var/log/nginx/access.log* \
| awk -F'"' '{print $6}' \
| grep -Eo 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|bingbot|Applebot|meta-externalagent|meta-webindexer|CCBot' \
| sort | uniq -c | sort -rn
Ajustează calea pentru Apache, adesea /var/log/apache2/access.log* sau /var/log/httpd/access_log*. zcat -f citește atât fișierele simple, cât și pe cele gzip. Dacă lipsește un crawler la care te așteptai, asta nu dovedește singură un blocaj: poate pur și simplu nu a vizitat în perioada acoperită de loguri.
Ce a primit de fapt fiecare crawler?
Vizitele contează mai puțin decât răspunsurile. Un crawler care primește un 403 la fiecare cerere a vizitat, dar nu a citit nimic. Aceste comenzi arată codurile de stare, cele mai cerute căi și dacă crawlerul a preluat robots.txt:
# Status codes returned to PerplexityBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /PerplexityBot/ {split($3, s, " "); print s[1]}' | sort | uniq -c
# Most requested paths for OAI-SearchBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /OAI-SearchBot/ {split($2, r, " "); print r[2]}' | sort | uniq -c | sort -rn | head -20
# Did ClaudeBot fetch robots.txt, and what did it get?
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /ClaudeBot/ && $2 ~ /robots\.txt/ {split($3, s, " "); print s[1]}' | sort | uniq -c
Ce vrei să vezi sunt în mare parte 200. Multe 403 sau 429 indică o regulă de firewall sau o limită de rată. Răspunsurile 5xx pentru robots.txt sunt grave: conform RFC 9309, un crawler care primește o eroare de server pentru robots.txt trebuie să presupună că întregul site este interzis.
Dacă site-ul tău se află în spatele unui CDN, se schimbă două lucruri. Cererile blocate de CDN nu ajung niciodată la origine, deci nu apar deloc în logurile ei; verifică în schimb evenimentele de securitate ale CDN-ului. Iar dacă nu restabilești IP-ul vizitatorului, originea înregistrează adresa CDN-ului. Cloudflare, de exemplu, trimite IP-ul original în antetul CF-Connecting-IP și înregistrează implicit un IP Cloudflare.
Cum verific dacă o vizită vine cu adevărat de la OpenAI, Anthropic sau Perplexity?
Acești furnizori publică intervalele IP folosite de agenții lor: OpenAI la openai.com/gptbot.json, openai.com/searchbot.json și openai.com/chatgpt-user.json; Anthropic la claude.com/crawling/bots.json; Perplexity la perplexity.ai/perplexitybot.json și perplexity.ai/perplexity-user.json. Anthropic spune că un IP sursă din lista sa indică faptul că crawlerul vine de la Anthropic. Niciunul dintre aceste trei documente nu descrie verificarea prin DNS invers, deci folosește listele.
Fișierele au aceeași formă, o listă prefixes cu intrări ipv4Prefix sau ipv6Prefix, așa că un script mic verifică un IP în oricare dintre ele:
python3 - 20.171.206.5 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "log-check"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print(ip, "listed" if any(ip in n for n in nets) else "NOT listed")
EOF
Pentru a lista IP-urile care s-au prezentat drept un anumit crawler, rulează awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' peste log și trimite rezultatul prin sort | uniq -c | sort -rn. Verifică fiecare IP în lista corespunzătoare. Listele se schimbă, așa că preia-le proaspete, în loc să păstrezi o copie veche.
Cum verific Googlebot, Applebot și CCBot?
Google, Apple și Common Crawl documentează o verificare prin DNS invers și direct. Caută numele de gazdă al IP-ului, verifică domeniul lui, apoi caută acel nume de gazdă și confirmă că duce înapoi la același IP:
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
Pentru Google, numele de gazdă trebuie să se termine în googlebot.com, google.com sau googleusercontent.com, în funcție de crawler; Google publică și intervalele sale, cu Googlebot în common-crawlers.json. Pentru Apple, trebuie să fie în applebot.apple.com, cu intervalele în applebot.json. Pentru Common Crawl, trebuie să fie sub crawl.commoncrawl.org, iar Common Crawl avertizează că alte crawlere folosesc fals numele CCBot.
Cum arată crawlerele AI false?
Scraperele împrumută adesea user agent-ul unui crawler cunoscut ca să treacă de filtre. Semne tipice:
- User agent-ul numește un crawler, dar IP-ul nu se află în lista publicată de furnizor sau DNS-ul său invers nu se potrivește.
- Sursa este o rețea rezidențială sau un furnizor de cloud pe care furnizorul nu îl listează.
- Clientul nu cere niciodată robots.txt sau cere căi pe care robots.txt le interzice pentru acel crawler.
- Frecvența sau tiparul cererilor diferă puternic de traficul verificat sub același nume, de exemplu valuri de cereri către endpointuri de căutare sau de autentificare.
Există și problema inversă: un crawler care folosește un user agent obișnuit de browser nu poate fi identificat deloc după linia de log. În 2025, Cloudflare a spus că a observat Perplexity făcând crawling cu user agent-uri nedeclarate, asemănătoare celor de browser, de pe IP-uri din afara intervalelor publicate; Perplexity a contestat această relatare și a atribuit o parte din trafic unui serviciu terț. Logurile singure nu pot lămuri astfel de cazuri, motiv pentru care verificarea după intervalele IP publicate contează în ambele sensuri.
Ce nu îți pot spune logurile?
Logurile arată ce a ajuns la serverul tău. Nu arată ce a blocat CDN-ul înainte de origine, dacă o pagină care a returnat 200 conținea textul sau doar o carcasă de scripturi și nici dacă un crawler ar fi permis dacă ar veni astăzi. Acoperă și doar perioada pe care o păstrezi, iar site-urile liniștite pot vedea rar crawlere AI.
Într-un cont AISeeWhy poți încărca un log de acces în format combined (simplu sau .gz, până la 50 MB); este analizat și apoi șters, iar cererile fiecărui crawler AI sunt numărate împreună cu codurile lor de stare și verificate în intervalele IP publicate de furnizori.
Întrebări frecvente
De ce nu văd Google-Extended în loguri?
Google spune că Google-Extended nu are un șir user agent separat. Crawlingul îl fac crawlerele existente ale Google, iar tokenul controlează doar cum poate fi folosit conținutul. Același lucru se aplică lui Applebot-Extended, care, spune Apple, nu face crawling.
Pot avea încredere în user agent-ul din loguri?
Nu. Oricine poate trimite orice user agent. Tratează-l ca pe o afirmație și confirmă-l cu intervalele IP publicate de furnizor sau, pentru Google, Apple și Common Crawl, printr-o căutare DNS inversă și directă.
Logurile mele nu arată vizite de crawlere AI. Sunt blocat?
Nu neapărat. Poate crawlerul nu a vizitat încă, poate CDN-ul l-a blocat înainte de origine sau poate logurile tale înregistrează doar adresele IP ale CDN-ului. Verifică evenimentele de securitate ale CDN-ului și testează pagina cu user agent-ul fiecărui crawler.
Este traficul ChatGPT-User un crawler?
OpenAI spune că ChatGPT-User este folosit pentru anumite acțiuni ale utilizatorilor și nu pentru a face crawling automat pe web. Vizitele sale urmează de obicei unei persoane care îl întreabă pe ChatGPT despre o pagină, deci sunt puține la număr.
Surse
- nginx: ngx_http_log_module (formatul de log combined)
- Apache HTTP Server 2.4: fișiere de log
- OpenAI: prezentare generală a crawlerelor OpenAI
- Anthropic: Anthropic colectează date de pe web și cum pot proprietarii de site-uri să blocheze crawlerul?
- Perplexity: crawlerele Perplexity
- Google: verificarea crawlerelor și a instrumentelor de preluare Google
- Google: crawlere comune, inclusiv Google-Extended
- Apple: despre Applebot
- Common Crawl: CCBot
- RFC 9309: Robots Exclusion Protocol
- Cloudflare: restabilirea IP-urilor originale ale vizitatorilor
- Cloudflare: Perplexity folosește crawlere ascunse, nedeclarate, pentru a ocoli directivele de interzicere a crawlingului
- Perplexity: agenți sau boți? Despre AI pe web-ul deschis