Hogyan ellenőrizze a szervernaplóit AI-crawlerek után

Megjelent

Rövid válasz

Keressen az access log user agent mezőjében olyan tokenekre, mint a GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot és PerplexityBot, majd nézze meg, milyen státuszkódokat kaptak. A user agent önmagában semmit sem bizonyít, ezért minden forrás-IP-t vessen össze a szolgáltató közzétett IP-listájával, a Google és az Apple esetében pedig fordított és egyenes DNS-kereséssel.

A robots.txt azt mondja meg, mit kér a crawlerektől. Az access log azt mutatja, mi történt valójában: mely AI-crawlerek jártak ott, mely oldalakat kérték le, és mit válaszolt a szerver. Ez a legközvetlenebb bizonyíték, amellyel rendelkezik, és nem kell hozzá több, mint a naplófájlok és egy terminál. Az alábbi példák az nginx és az Apache alapértelmezett combined naplóformátumát használják.

Ezen az oldalon
  1. Hogyan néz ki egy AI-crawler látogatása az access logban?
  2. Hogyan számolom meg az AI-crawlerek látogatásait?
  3. Mit kapott valójában az egyes crawlerek?
  4. Hogyan ellenőrzöm, hogy egy látogatás valóban az OpenAI-tól, az Anthropictól vagy a Perplexitytől érkezett?
  5. Hogyan ellenőrzöm a Googlebotot, az Applebotot és a CCBotot?
  6. Hogyan néznek ki a hamis AI-crawlerek?
  7. Mit nem mondanak meg a naplók?

Hogyan néz ki egy AI-crawler látogatása az access logban?

A combined formátumban minden sor tartalmazza a kliens IP-jét, az időt, a kérés sorát, a státuszkódot, a válasz méretét, a hivatkozót és a user agentet. Az nginx így definiálja: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent", az Apache combined formátuma pedig ugyanezeket a mezőket tartalmazza. Az OpenAI tanítási crawlerének látogatása így néz ki:

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"

A keresendő tokenek azok, amelyeket a szolgáltatók dokumentálnak: GPTBot, OAI-SearchBot és ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot és Claude-User (Anthropic); PerplexityBot és Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer és CCBot. A Google-Extended és az Applebot-Extended tokent soha nem fogja látni. A Google szerint a Google-Extended nem rendelkezik külön user agent karakterlánccal, az Apple szerint pedig az Applebot-Extended nem crawlol; mindkettő csak robots.txt-token.

Hogyan számolom meg az AI-crawlerek látogatásait?

Ha minden sort a dupla idézőjel mentén bont, a user agent a 6. mezőbe kerül. Ha csak ezt a mezőt illeszti, elkerüli azokat a téves találatokat, amikor egy URL véletlenül tartalmaz egy bot nevét. Ez crawlerenként megszámolja a látogatásokat az aktuális és a rotált, tömörített naplókban:

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

Apache-hoz igazítsa az útvonalat, ez gyakran /var/log/apache2/access.log* vagy /var/log/httpd/access_log*. A zcat -f a sima és a gzip-pel tömörített fájlokat is beolvassa. Ha egy várt crawler hiányzik, az önmagában nem bizonyíték blokkolásra: lehet, hogy egyszerűen nem járt ott a naplói által lefedett időszakban.

Mit kapott valójában az egyes crawlerek?

A látogatásoknál fontosabbak a válaszok. Az a crawler, amely minden kérésre 403-at kap, járt ott, de semmit nem olvasott el. Ezek a parancsok megmutatják a státuszkódokat, a legtöbbször kért útvonalakat, és azt, hogy a crawler lekérte-e a robots.txt-t:

# 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

A többnyire 200-as válasz a kívánatos. Sok 403 vagy 429 tűzfalszabályra vagy sebességkorlátra utal. A robots.txt-re adott 5xx válaszok súlyosak: az RFC 9309 szerint az a crawler, amely a robots.txt-re szerverhibát kap, úgy kell tekintse, hogy az egész webhely tiltott.

Ha a webhelye CDN mögött áll, két dolog változik. A CDN által blokkolt kérések soha nem érik el az origint, ezért egyáltalán nem jelennek meg a naplójában; ezért a CDN saját biztonsági eseményeit nézze meg. Ha pedig nem állítja vissza a látogató IP-jét, az origin a CDN címét naplózza. A Cloudflare például az eredeti IP-t a CF-Connecting-IP fejlécben küldi, és alapértelmezetten Cloudflare-IP-t naplóz.

Hogyan ellenőrzöm, hogy egy látogatás valóban az OpenAI-tól, az Anthropictól vagy a Perplexitytől érkezett?

Ezek a szolgáltatók közzéteszik az ügynökeik által használt IP-tartományokat: az OpenAI az openai.com/gptbot.json, az openai.com/searchbot.json és az openai.com/chatgpt-user.json címen; az Anthropic a claude.com/crawling/bots.json címen; a Perplexity a perplexity.ai/perplexitybot.json és a perplexity.ai/perplexity-user.json címen. Az Anthropic szerint ha egy forrás-IP szerepel a listáján, az azt jelzi, hogy a crawler az Anthropictól érkezik. E három közül egyik sem dokumentál fordított DNS-es ellenőrzést, ezért használja a listákat.

A fájlok egyforma szerkezetűek: egy prefixes lista ipv4Prefix vagy ipv6Prefix bejegyzésekkel, így egyetlen kis szkript bármelyikükkel összeveti az IP-t:

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

Az egy adott crawlernek kiadott IP-k listázásához futtassa az awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' parancsot a naplón, és vezesse át a sort | uniq -c | sort -rn parancson. Mindegyiket vesse össze a megfelelő listával. A listák változnak, ezért mindig frissen töltse le őket, ne tartson régi másolatot.

Hogyan ellenőrzöm a Googlebotot, az Applebotot és a CCBotot?

A Google, az Apple és a Common Crawl fordított és egyenes DNS-ellenőrzést dokumentál. Keresse meg az IP gazdanevét, ellenőrizze a domainjét, majd keresse meg ezt a gazdanevet, és győződjön meg róla, hogy ugyanarra az IP-re mutat vissza:

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

A Google esetében a gazdanévnek a crawlertől függően googlebot.com, google.com vagy googleusercontent.com végződésűnek kell lennie; a Google a tartományait is közzéteszi, a Googlebotét a common-crawlers.json fájlban. Az Apple esetében az applebot.apple.com alatt kell lennie, a tartományok az applebot.json fájlban találhatók. A Common Crawl esetében a crawl.commoncrawl.org alatt kell lennie, és a Common Crawl figyelmeztet, hogy más crawlerek hamisan használják a CCBot nevet.

Hogyan néznek ki a hamis AI-crawlerek?

A scraperek gyakran kölcsönveszik egy ismert crawler user agentjét, hogy átjussanak a szűrőkön. Jellemző jelek:

A fordított probléma is létezik: az a crawler, amely hétköznapi böngészős user agentet használ, a naplósorból egyáltalán nem azonosítható. 2025-ben a Cloudflare közölte, hogy megfigyelése szerint a Perplexity nem deklarált, böngészőszerű user agentekkel, a közzétett tartományain kívüli IP-kről crawlolt; a Perplexity vitatta ezt a leírást, és a forgalom egy részét egy külső szolgáltatásnak tulajdonította. Az ilyen eseteket a naplók önmagukban nem döntik el, ezért fontos a közzétett IP-tartományok szerinti ellenőrzés mindkét irányban.

Mit nem mondanak meg a naplók?

A naplók azt mutatják, ami elérte a szerverét. Nem mutatják, mit blokkolt a CDN az origin előtt, hogy egy 200-as választ adó oldal tartalmazta-e a szöveget vagy csak egy szkripthéjat, és azt sem, hogy egy crawler ma engedélyt kapna-e. Csak azt az időszakot fedik le, amelyet megőriz, és a csendes webhelyeken ritkán fordulhatnak elő AI-crawlerek.

Az AISeeWhy-fiókban feltölthet combined formátumú access logot (sima vagy .gz, legfeljebb 50 MB); elemzi, majd törli, és megszámolja az egyes AI-crawlerek kéréseit a státuszkódjaikkal együtt, és összeveti őket a szolgáltatók által közzétett IP-tartományokkal.

Gyakran ismételt kérdések

Miért nem látom a Google-Extended tokent a naplóimban?

A Google szerint a Google-Extended nem rendelkezik külön user agent karakterlánccal. A crawlolást a Google meglévő crawlerei végzik, a token csak azt szabályozza, hogyan használható a tartalom. Ugyanez igaz az Applebot-Extended tokenre, amely az Apple szerint nem crawlol.

Megbízhatok a naplóimban szereplő user agentben?

Nem. Bárki küldhet bármilyen user agentet. Tekintse állításnak, és erősítse meg a szolgáltató közzétett IP-tartományaival, a Google, az Apple és a Common Crawl esetében pedig fordított és egyenes DNS-kereséssel.

A naplóimban nincs AI-crawler-látogatás. Blokkolva vagyok?

Nem feltétlenül. Lehet, hogy a crawler még nem járt ott, a CDN blokkolhatta az origin előtt, vagy a naplói csak a CDN IP-címeit rögzítik. Nézze meg a CDN biztonsági eseményeit, és tesztelje az oldalt az egyes crawlerek user agentjével.

A ChatGPT-User forgalma crawler?

Az OpenAI szerint a ChatGPT-User bizonyos felhasználói műveletekhez készült, és nem használják a web automatikus crawlolására. A látogatásai általában azt követik, hogy valaki a ChatGPT-től kérdez egy oldalról, ezért kis számban érkeznek.

Források

További cikkek