सर्वर लॉग में AI क्रॉलर कैसे जांचें

प्रकाशित

संक्षिप्त उत्तर

अपने एक्सेस लॉग के user agent फ़ील्ड में GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot और PerplexityBot जैसे टोकन खोजें, फिर देखें कि उन्हें कौन-से status code मिले। अकेला user agent कुछ साबित नहीं करता, इसलिए हर स्रोत IP को वेंडर की प्रकाशित IP सूची से मिलाएं, या Google और Apple के लिए रिवर्स और फ़ॉरवर्ड DNS से।

robots.txt बताता है कि आप क्रॉलरों से क्या करने को कहते हैं। आपका एक्सेस लॉग दिखाता है कि असल में क्या हुआ: कौन-से AI क्रॉलर आए, उन्होंने कौन-से पेज मांगे, और आपके सर्वर ने क्या जवाब दिया। यह आपके पास सबसे सीधा सबूत है, और इसके लिए लॉग फ़ाइलों और एक टर्मिनल के सिवा कुछ नहीं चाहिए। नीचे के उदाहरण वह combined लॉग फ़ॉर्मैट इस्तेमाल करते हैं जो nginx और Apache डिफ़ॉल्ट रूप से इस्तेमाल करते हैं।

इस पेज पर
  1. एक्सेस लॉग में AI क्रॉलर का विज़िट कैसा दिखता है?
  2. मैं AI क्रॉलर के विज़िट कैसे गिनूं?
  3. हर क्रॉलर को असल में क्या मिला?
  4. मैं कैसे पक्का करूं कि विज़िट सच में OpenAI, Anthropic या Perplexity से आया?
  5. मैं Googlebot, Applebot और CCBot को कैसे सत्यापित करूं?
  6. नकली AI क्रॉलर कैसे दिखते हैं?
  7. लॉग आपको क्या नहीं बता सकते?

एक्सेस लॉग में AI क्रॉलर का विज़िट कैसा दिखता है?

combined फ़ॉर्मैट में हर पंक्ति में क्लाइंट IP, समय, अनुरोध की पंक्ति, status code, जवाब का साइज़, रेफ़रर और user agent होते हैं। nginx इसे $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" के रूप में परिभाषित करता है, और Apache का combined फ़ॉर्मैट वही फ़ील्ड रखता है। OpenAI के ट्रेनिंग क्रॉलर का एक विज़िट ऐसा दिखता है:

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"

खोजने लायक टोकन वही हैं जिन्हें वेंडर दस्तावेज़ित करते हैं: GPTBot, OAI-SearchBot और ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot और Claude-User (Anthropic); PerplexityBot और Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer और CCBot। Google-Extended या Applebot-Extended आपको कभी नहीं दिखेंगे। Google कहता है कि Google-Extended की कोई अलग user agent स्ट्रिंग नहीं है, और Apple कहती है कि Applebot-Extended क्रॉल नहीं करता; दोनों सिर्फ़ robots.txt टोकन हैं।

मैं AI क्रॉलर के विज़िट कैसे गिनूं?

हर पंक्ति को दोहरे उद्धरण चिह्न पर बांटने से user agent फ़ील्ड 6 में आ जाता है। सिर्फ़ उसी फ़ील्ड से मिलान करने पर उन URL से झूठे नतीजे नहीं आते जिनमें संयोग से किसी बॉट का नाम होता है। यह मौजूदा लॉग और रोटेट किए गए, कंप्रेस्ड लॉग में हर क्रॉलर के विज़िट गिनता है:

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 के लिए पाथ बदलें, अक्सर /var/log/apache2/access.log* या /var/log/httpd/access_log*। zcat -f सादी और gzip दोनों फ़ाइलें पढ़ता है। अगर कोई अपेक्षित क्रॉलर नहीं दिखता, तो यह अकेले ब्लॉक का सबूत नहीं है: हो सकता है वह आपके लॉग की अवधि में आया ही न हो।

हर क्रॉलर को असल में क्या मिला?

विज़िट से ज़्यादा जवाब मायने रखते हैं। जिस क्रॉलर को हर अनुरोध पर 403 मिलता है, वह आया तो सही पर कुछ पढ़ नहीं पाया। ये कमांड status code, सबसे ज़्यादा मांगे गए पाथ, और यह दिखाते हैं कि क्रॉलर ने 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

ज़्यादातर 200 वही है जो आप चाहते हैं। बहुत सारे 403 या 429 फ़ायरवॉल नियम या रेट लिमिट की ओर इशारा करते हैं। robots.txt पर 5xx जवाब गंभीर हैं: RFC 9309 के अनुसार robots.txt पर सर्वर एरर पाने वाले क्रॉलर को मान लेना चाहिए कि पूरी साइट disallow है।

अगर आपकी साइट CDN के पीछे है, तो दो चीज़ें बदलती हैं। CDN जिन अनुरोधों को ब्लॉक करता है वे आपके ओरिजिन तक पहुंचते ही नहीं, इसलिए ओरिजिन के लॉग में बिल्कुल नहीं दिखते; इसके बजाय CDN की अपनी सुरक्षा घटनाएं देखें। और जब तक आप विज़िटर का IP बहाल नहीं करते, ओरिजिन CDN का पता लॉग करता है। उदाहरण के लिए Cloudflare मूल IP CF-Connecting-IP हेडर में भेजता है और डिफ़ॉल्ट रूप से Cloudflare का IP लॉग होता है।

मैं कैसे पक्का करूं कि विज़िट सच में OpenAI, Anthropic या Perplexity से आया?

ये वेंडर उन IP रेंज को प्रकाशित करते हैं जो उनके एजेंट इस्तेमाल करते हैं: OpenAI openai.com/gptbot.json, openai.com/searchbot.json और openai.com/chatgpt-user.json पर; Anthropic claude.com/crawling/bots.json पर; Perplexity perplexity.ai/perplexitybot.json और perplexity.ai/perplexity-user.json पर। Anthropic कहती है कि उसकी सूची में मौजूद स्रोत IP बताता है कि क्रॉलर Anthropic से आ रहा है। इन तीनों में से कोई रिवर्स DNS सत्यापन दस्तावेज़ित नहीं करता, इसलिए सूचियों का इस्तेमाल करें।

फ़ाइलों की बनावट एक जैसी है, ipv4Prefix या ipv6Prefix प्रविष्टियों की एक prefixes सूची, इसलिए एक छोटी स्क्रिप्ट किसी भी IP को इनमें से किसी से मिला सकती है:

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

किसी क्रॉलर का दावा करने वाले IP की सूची पाने के लिए लॉग पर awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' चलाएं और नतीजे को sort | uniq -c | sort -rn में भेजें। हर एक को संबंधित सूची से मिलाएं। सूचियां बदलती रहती हैं, इसलिए पुरानी कॉपी रखने के बजाय उन्हें ताज़ा फ़ेच करें।

मैं Googlebot, Applebot और CCBot को कैसे सत्यापित करूं?

Google, Apple और Common Crawl रिवर्स और फ़ॉरवर्ड DNS जांच दस्तावेज़ित करते हैं। IP का होस्टनेम खोजें, उसका डोमेन देखें, फिर उस होस्टनेम को खोजें और पक्का करें कि वह उसी 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

Google के लिए होस्टनेम क्रॉलर के हिसाब से googlebot.com, google.com या googleusercontent.com पर खत्म होना चाहिए; Google अपनी रेंज भी प्रकाशित करता है, जिसमें Googlebot common-crawlers.json में है। Apple के लिए वह applebot.apple.com में होना चाहिए, रेंज applebot.json में हैं। Common Crawl के लिए वह crawl.commoncrawl.org के अंतर्गत होना चाहिए, और Common Crawl चेतावनी देता है कि दूसरे क्रॉलर CCBot नाम का झूठा दावा करते हैं।

नकली AI क्रॉलर कैसे दिखते हैं?

स्क्रैपर अक्सर फ़िल्टर पार करने के लिए किसी जाने-माने क्रॉलर का user agent उधार ले लेते हैं। आम संकेत:

उलटी समस्या भी है: जो क्रॉलर साधारण ब्राउज़र user agent इस्तेमाल करता है, उसे लॉग की पंक्ति से पहचाना ही नहीं जा सकता। 2025 में Cloudflare ने कहा कि उसने Perplexity को अपनी प्रकाशित रेंज के बाहर के IP से अघोषित, ब्राउज़र जैसे user agent के साथ क्रॉल करते देखा; Perplexity ने इस विवरण से असहमति जताई और ट्रैफ़िक का कुछ हिस्सा किसी तीसरे पक्ष की सेवा का बताया। ऐसे मामलों को लॉग अकेले नहीं सुलझा सकते, इसीलिए प्रकाशित IP रेंज से सत्यापन दोनों दिशाओं में मायने रखता है।

लॉग आपको क्या नहीं बता सकते?

लॉग दिखाते हैं कि आपके सर्वर तक क्या पहुंचा। वे यह नहीं दिखाते कि आपके CDN ने ओरिजिन से पहले क्या ब्लॉक किया, कि 200 लौटाने वाले पेज में टेक्स्ट था या सिर्फ़ स्क्रिप्ट का खोल, या कि क्रॉलर आज आता तो उसे अनुमति मिलती या नहीं। वे सिर्फ़ उसी अवधि को भी समेटते हैं जो आप रखते हैं, और कम ट्रैफ़िक वाली साइटों पर AI क्रॉलर कभी-कभार ही दिख सकते हैं।

AISeeWhy अकाउंट में आप combined फ़ॉर्मैट का एक्सेस लॉग (सादा या .gz, 50 MB तक) अपलोड कर सकते हैं; उसका विश्लेषण होकर उसे हटा दिया जाता है, और हर AI क्रॉलर के अनुरोध उनके status code के साथ गिने जाते हैं और वेंडरों की प्रकाशित IP रेंज से मिलाए जाते हैं।

अक्सर पूछे जाने वाले प्रश्न

मुझे अपने लॉग में Google-Extended क्यों नहीं दिखता?

Google कहता है कि Google-Extended की कोई अलग user agent स्ट्रिंग नहीं है। क्रॉलिंग Google के मौजूदा क्रॉलर करते हैं, और टोकन सिर्फ़ यह नियंत्रित करता है कि कंटेंट कैसे इस्तेमाल हो सकता है। यही Applebot-Extended पर लागू होता है, जो Apple के अनुसार क्रॉल नहीं करता।

क्या मैं अपने लॉग के user agent पर भरोसा कर सकता हूं?

नहीं। कोई भी कोई भी user agent भेज सकता है। उसे एक दावा मानें और वेंडर की प्रकाशित IP रेंज से, या Google, Apple और Common Crawl के लिए रिवर्स और फ़ॉरवर्ड DNS लुकअप से, उसकी पुष्टि करें।

मेरे लॉग में AI क्रॉलर के कोई विज़िट नहीं हैं। क्या मैं ब्लॉक हूं?

ज़रूरी नहीं। हो सकता है क्रॉलर अभी आया न हो, आपके CDN ने उसे ओरिजिन से पहले ब्लॉक कर दिया हो, या आपके लॉग सिर्फ़ CDN के IP पते दर्ज करते हों। अपने CDN की सुरक्षा घटनाएं देखें और पेज को हर क्रॉलर के user agent से टेस्ट करें।

क्या ChatGPT-User का ट्रैफ़िक क्रॉलर है?

OpenAI कहती है कि ChatGPT-User कुछ उपयोगकर्ता कार्रवाइयों के लिए इस्तेमाल होता है और वेब को अपने आप क्रॉल करने के लिए इस्तेमाल नहीं होता। इसके विज़िट आम तौर पर तब आते हैं जब कोई व्यक्ति ChatGPT से किसी पेज के बारे में पूछता है, इसलिए वे कम संख्या में आते हैं।

स्रोत

और लेख