Cara menyemak log pelayan untuk crawler AI

Diterbitkan

Jawapan ringkas

Cari token seperti GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot dan PerplexityBot dalam medan user agent log akses anda, kemudian lihat kod status yang diterima mereka. User agent sahaja tidak membuktikan apa-apa, jadi semak setiap IP sumber berbanding senarai IP yang diterbitkan vendor, atau melalui DNS songsang dan DNS hadapan untuk Google dan Apple.

Robots.txt menyatakan apa yang anda minta crawler lakukan. Log akses anda menunjukkan apa yang sebenarnya berlaku: crawler AI mana yang datang, halaman mana yang diminta, dan apa yang dibalas pelayan anda. Ia bukti paling langsung yang anda ada, dan hanya memerlukan fail log dan terminal. Contoh di bawah menggunakan format log combined yang digunakan secara lalai oleh nginx dan Apache.

Dalam halaman ini
  1. Bagaimanakah rupa lawatan crawler AI dalam log akses?
  2. Bagaimanakah saya mengira lawatan crawler AI?
  3. Apakah yang sebenarnya diterima oleh setiap crawler?
  4. Bagaimanakah saya mengesahkan bahawa lawatan benar-benar datang daripada OpenAI, Anthropic atau Perplexity?
  5. Bagaimanakah saya mengesahkan Googlebot, Applebot dan CCBot?
  6. Bagaimanakah rupa crawler AI palsu?
  7. Apakah yang tidak dapat diberitahu oleh log?

Bagaimanakah rupa lawatan crawler AI dalam log akses?

Dalam format combined, setiap baris mengandungi IP klien, masa, baris permintaan, kod status, saiz respons, perujuk dan user agent. nginx mentakrifkannya sebagai $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent", dan format combined Apache mempunyai medan yang sama. Lawatan crawler latihan OpenAI kelihatan seperti ini:

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"

Token yang dicari ialah yang didokumentasikan vendor: GPTBot, OAI-SearchBot dan ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot dan Claude-User (Anthropic); PerplexityBot dan Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer dan CCBot. Anda tidak akan melihat Google-Extended atau Applebot-Extended. Google menyatakan Google-Extended tidak mempunyai rentetan user agent yang berasingan, dan Apple menyatakan Applebot-Extended tidak menjelajah; kedua-duanya hanyalah token robots.txt.

Bagaimanakah saya mengira lawatan crawler AI?

Memecahkan setiap baris pada aksara petikan berganda meletakkan user agent dalam medan 6. Memadankan medan itu sahaja mengelakkan padanan palsu daripada URL yang kebetulan mengandungi nama bot. Perintah ini mengira lawatan bagi setiap crawler merentas log semasa dan log berputar yang dimampatkan:

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

Laraskan laluan untuk Apache, selalunya /var/log/apache2/access.log* atau /var/log/httpd/access_log*. zcat -f membaca fail biasa dan fail gzip. Jika crawler yang anda jangkakan tiada, itu sahaja bukan bukti ia disekat: ia mungkin tidak melawat dalam tempoh yang diliputi log anda.

Apakah yang sebenarnya diterima oleh setiap crawler?

Lawatan kurang penting daripada jawapan. Crawler yang mendapat 403 pada setiap permintaan telah melawat tetapi tidak membaca apa-apa. Perintah ini menunjukkan kod status, laluan yang paling banyak diminta dan sama ada crawler mengambil 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

Kebanyakannya 200 ialah yang anda mahukan. Banyak 403 atau 429 menunjukkan peraturan firewall atau had kadar. Jawapan 5xx pada robots.txt serius: di bawah RFC 9309, crawler yang mendapat ralat pelayan untuk robots.txt mesti menganggap seluruh laman dilarang.

Jika laman anda berada di belakang CDN, dua perkara berubah. Permintaan yang disekat CDN tidak pernah sampai ke origin anda, jadi ia tidak muncul langsung dalam lognya; semak peristiwa keselamatan CDN sendiri. Dan melainkan anda memulihkan IP pelawat, origin merekodkan alamat CDN. Cloudflare, misalnya, menghantar IP asal dalam pengepala CF-Connecting-IP dan merekodkan IP Cloudflare secara lalai.

Bagaimanakah saya mengesahkan bahawa lawatan benar-benar datang daripada OpenAI, Anthropic atau Perplexity?

Vendor ini menerbitkan julat IP yang digunakan ejen mereka: OpenAI di openai.com/gptbot.json, openai.com/searchbot.json dan openai.com/chatgpt-user.json; Anthropic di claude.com/crawling/bots.json; Perplexity di perplexity.ai/perplexitybot.json dan perplexity.ai/perplexity-user.json. Anthropic menyatakan bahawa IP sumber yang ada dalam senarainya menunjukkan crawler itu datang daripada Anthropic. Tiada satu pun daripada ketiga-tiganya mendokumentasikan pengesahan reverse DNS, jadi gunakan senarai tersebut.

Fail-fail ini berkongsi satu bentuk, senarai prefixes yang mengandungi entri ipv4Prefix atau ipv6Prefix, jadi satu skrip kecil boleh menyemak IP berbanding mana-mana daripadanya:

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

Untuk menyenaraikan IP yang mendakwa sebagai crawler tertentu, jalankan awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' pada log dan salurkan hasilnya melalui sort | uniq -c | sort -rn. Semak setiap satu berbanding senarai yang sepadan. Senarai berubah, jadi ambil yang terkini dan jangan menyimpan salinan lama.

Bagaimanakah saya mengesahkan Googlebot, Applebot dan CCBot?

Google, Apple dan Common Crawl mendokumentasikan semakan DNS songsang dan DNS hadapan. Cari nama hos bagi IP itu, semak domainnya, kemudian cari nama hos tersebut dan sahkan ia menunjuk kembali kepada IP yang sama:

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

Bagi Google, nama hos mesti berakhir dengan googlebot.com, google.com atau googleusercontent.com, bergantung pada crawler; Google juga menerbitkan julatnya, dengan Googlebot dalam common-crawlers.json. Bagi Apple, ia mesti berada dalam applebot.apple.com, dengan julat dalam applebot.json. Bagi Common Crawl, ia mesti berada di bawah crawl.commoncrawl.org, dan Common Crawl memberi amaran bahawa crawler lain secara palsu mendakwa nama CCBot.

Bagaimanakah rupa crawler AI palsu?

Pengikis sering meminjam user agent crawler yang terkenal untuk melepasi penapis. Tanda-tanda lazim:

Masalah sebaliknya juga wujud: crawler yang menggunakan user agent pelayar biasa tidak boleh dikenal pasti daripada baris log langsung. Pada 2025 Cloudflare menyatakan ia telah memerhatikan Perplexity menjelajah dengan user agent seperti pelayar yang tidak diisytiharkan daripada IP di luar julat yang diterbitkannya; Perplexity menolak penerangan itu dan menisbahkan sebahagian trafik kepada perkhidmatan pihak ketiga. Log sahaja tidak dapat menyelesaikan kes seperti ini, dan itulah sebabnya pengesahan melalui julat IP yang diterbitkan penting dalam kedua-dua arah.

Apakah yang tidak dapat diberitahu oleh log?

Log menunjukkan apa yang sampai ke pelayan anda. Ia tidak menunjukkan apa yang disekat CDN anda sebelum origin, sama ada halaman yang memulangkan 200 mengandungi teks atau hanya cangkerang skrip, atau sama ada sesebuah crawler akan dibenarkan jika ia datang hari ini. Ia juga hanya meliputi tempoh yang anda simpan, dan laman yang sunyi mungkin jarang dilawati crawler AI.

Dalam akaun AISeeWhy anda boleh memuat naik log akses dalam format combined (biasa atau .gz, sehingga 50 MB); ia dianalisis dan dibuang, dan permintaan setiap crawler AI dikira bersama kod statusnya serta disemak berbanding julat IP yang diterbitkan vendor.

Soalan lazim

Mengapa saya tidak nampak Google-Extended dalam log saya?

Google menyatakan Google-Extended tidak mempunyai rentetan user agent yang berasingan. Penjelajahan dilakukan oleh crawler sedia ada Google, dan token itu hanya mengawal cara kandungan boleh digunakan. Perkara yang sama berlaku untuk Applebot-Extended, yang menurut Apple tidak menjelajah.

Bolehkah saya mempercayai user agent dalam log saya?

Tidak. Sesiapa sahaja boleh menghantar sebarang user agent. Anggaplah ia satu dakwaan dan sahkannya dengan julat IP yang diterbitkan vendor atau, untuk Google, Apple dan Common Crawl, carian DNS songsang dan DNS hadapan.

Log saya tidak menunjukkan lawatan crawler AI. Adakah saya disekat?

Belum tentu. Crawler mungkin belum melawat, CDN anda mungkin menyekatnya sebelum origin, atau log anda mungkin hanya merekodkan alamat IP CDN. Semak peristiwa keselamatan CDN anda dan uji halaman dengan user agent setiap crawler.

Adakah trafik ChatGPT-User ialah crawler?

OpenAI menyatakan ChatGPT-User digunakan untuk tindakan pengguna tertentu dan tidak digunakan untuk menjelajah web secara automatik. Lawatannya biasanya berlaku selepas seseorang bertanya kepada ChatGPT tentang sesuatu halaman, jadi bilangannya kecil.

Sumber

Artikel lain