विज़िट काउंटर: JavaScript चलाने वाले बॉट
4 नवंबर 2026 की सुबह VosPosts के विज़िट काउंटर पर आकर्षक आँकड़ा दिखा: एक दिन में 3,352 'मानव' विज़िटर, फिर रात एक बजे से पहले 2,272 और। जबकि इस वेबसाइट पर सामान्यतः रोज़ लगभग 400 विज़िट होती हैं। न कोई लेख साझा हुआ था, न कोई लिंक वायरल हुआ था। ये बस बॉट थे, जिन्हें हमारा काउंटर पाठक समझ रहा था।
आगे हम बताते हैं कि यह कैसे पता चला, 'JavaScript चला तो इंसान है' वाला पुराना नियम अब क्यों नहीं चलता और अपने सर्वर लॉग में नकली विज़िटर कैसे खोजें।
जाल: 'JavaScript चला, इसलिए विज़िटर इंसान है'
कई घरेलू विज़िट काउंटर, हमारा भी, एक सरल तरीके पर चलते हैं: सर्वर माँगा गया पेज दर्ज करता है, फिर ब्राउज़र में चलने वाली छोटी स्क्रिप्ट दूसरी रिक्वेस्ट भेजकर विज़िट की 'पुष्टि' करती है। पुराने बॉट केवल HTML डाउनलोड करते थे, कोई कोड नहीं चलाते थे। दूसरी रिक्वेस्ट नहीं आती थी और वे आँकड़ों में शामिल नहीं होते थे।
अब यह फ़िल्टर कारगर नहीं रहा। आज बहुत से बॉट असली ब्राउज़र की तरह JavaScript चलाते हैं:
- सर्च इंजन पेज समझने के लिए उन्हें रेंडर करते हैं। Googlebot नवीनतम Chromium इस्तेमाल करता है; Baiduspider-render, Applebot, Bytespider (ByteDance) और meta-webindexer भी मिलते हैं।
- AdSense का विज्ञापन बॉट (Mediapartners-Google) सामग्री का विश्लेषण करने के लिए पेज खोलता है।
- आधुनिक स्क्रैपर बिना इंटरफ़ेस वाले वास्तविक ब्राउज़र नियंत्रित करते हैं: हेडलेस Chrome, Puppeteer, Playwright और ऑटोमेशन तथा AI एजेंट के लिए बना हल्का इंजन Lightpanda।
स्क्रिप्ट चलने के आधार पर गिनने वाला काउंटर इन्हें पाठकों से अलग नहीं कर सकता। और हैरानी की बात यह कि समस्या हमले से पहले भी थी: 3 नवंबर जैसे बिल्कुल सामान्य दिन की जाँच में पता चला कि मानव मानी गई 621 विज़िट में से 446 वास्तव में बॉट की थीं। यानी दस में सात से अधिक।
हेडलेस ब्राउज़र स्क्रैपर के संकेत
4 नवंबर की बढ़ोतरी में संगठित स्क्रैपिंग के सभी संकेत थे। अकेला कोई संकेत निर्णायक नहीं, लेकिन सभी मिलकर संदेह लगभग खत्म कर देते हैं।
हर पेज के लिए अलग IP पता
हर पेज की रिक्वेस्ट दुनिया के अलग-अलग हिस्सों के अलग IP से आई। यह रेज़िडेंशियल प्रॉक्सी की पहचान है: ऐसे नेटवर्क जो आम घरों के इंटरनेट कनेक्शन से रिक्वेस्ट भेजते हैं, अक्सर मालिकों की जानकारी के बिना। इसलिए IP ब्लॉक करना बेकार है; हज़ारों पते हैं और वे वास्तविक घरों के हैं।
कई साल पुराने ब्राउज़र
यूज़र एजेंट छोटी सूची में घूम रहे थे: Chrome 118 से 120, Firefox 120 और 121 तथा Edge 119 और 120। ये 2023 के अंत के संस्करण हैं। लेकिन Chrome और Firefox लगभग हर चार सप्ताह में अपने-आप अपडेट होते हैं; हमारे असली पाठक Chrome 148 से 156 इस्तेमाल कर रहे थे। तीन साल पुराना ब्राउज़र रखने वाला एक व्यक्ति हो सकता है, मगर एक रात में हज़ारों ऐसे विज़िटर स्क्रैपिंग टूल में कॉपी की गई स्थिर सूची की ओर इशारा करते हैं।
इस क्रम में बिना किसी छिपाव के Lightpanda/1.0 भी दिखाई दिया।
ज़रूरत से ज़्यादा नियमित व्यवहार
- सिर्फ डेस्कटॉप कंप्यूटर, एक भी मोबाइल नहीं, जबकि असली ट्रैफ़िक का अधिकांश हिस्सा फ़ोन से आता है;
- कोई रेफ़रर नहीं: कोई Google, सोशल मीडिया या दूसरी वेबसाइट से नहीं आया;
- अधिकतम पेज निकालने के लिए साइट के आंतरिक सर्च में 2,340 अलग-अलग खोजें;
- एक दिन में 24,772 रिक्वेस्ट, यानी पूरे सर्वर ट्रैफ़िक का 42%।
छिपा जोखिम: विज्ञापन
हेडलेस ब्राउज़र विज्ञापन स्लॉट लोड करने सहित सब कुछ चलाता है। उस दिन बॉट ने हमारे विज्ञापन ब्लॉक 2,939 बार लोड किए। AdSense प्रकाशक के लिए यह गंभीर है: बॉट से बने विज्ञापन प्रदर्शन अमान्य ट्रैफ़िक माने जाते हैं। Google इन्हें कमाई से घटाता है और बार-बार होने पर खाते पर भी असर पड़ सकता है। इसलिए बढ़ा हुआ काउंटर सिर्फ अहंकार का विषय नहीं है।
लॉग में इन बॉट की पहचान
Apache या Nginx के 'combined' फ़ॉर्मैट वाले एक्सेस लॉग में ज़रूरी सारी जानकारी होती है। कुछ कमांड काफी हैं। पहले सबसे आम यूज़र एजेंट देखें:
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -30फिर Chrome संस्करणों का वितरण देखें। सामान्य साइट पर अधिकतर विज़िट नवीनतम चार या पाँच संस्करणों पर होती हैं; पुराने संस्करणों का बड़ा समूह तुरंत दिख जाता है:
grep -oE 'Chrome/[0-9]+' access.log | sort | uniq -c | sort -t/ -k2 -nप्रति घंटे रिक्वेस्ट की संख्या से लहर की शुरुआत और अंत का सही समय पता चलता है:
awk '{print substr($4, 2, 14)}' access.log | sort | uniq -cआखिर में, किसी संदिग्ध पहचान के लिए रिक्वेस्ट की संख्या और अलग-अलग IP की संख्या मिलाएँ। दोनों लगभग बराबर हों तो प्रॉक्सी नेटवर्क मिल गया:
grep -c 'Chrome/119.0.0.0' access.log
grep 'Chrome/119.0.0.0' access.log | awk '{print $1}' | sort -u | wc -lएक उपयोगी बात: 2022 से Chrome मुख्य संस्करण संख्या के बाद केवल .0.0.0 भेजता है। इसलिए Chrome/119.0.0.0 का फ़ॉर्मैट सामान्य है; बॉट की पहचान पुरानी संख्या 119 से होती है।
हमने क्या उपाय किए
ब्लॉक किए बिना गिनती रोकना
पहला स्तर: सर्वर तय करता है कि विज़िट गिनी जाए या नहीं। यूज़र एजेंट खाली हो, खुद को बॉट बताए (bot, spider, crawler, curl या Python जैसे HTTP टूल, हेडलेस ब्राउज़र), या ढाई साल से पुराना Chrome या Firefox बताए, तो उसे मानव विज़िट नहीं माना जाता। सीमा तारीख के आधार पर अपने-आप फिर गणना होती है, इसलिए संस्करण संख्या हाथ से बदलनी नहीं पड़ती:
$jours = (time() - mktime(0, 0, 0, 12, 5, 2023)) / 86400; // Chrome 120, décembre 2023
$version_actuelle = 120 + (int)floor($jours / 28); // une version toutes les 4 semaines
if (preg_match('/Chrome/(d+)./', $ua, $m) && (int)$m[1] < $version_actuelle - 32) {
return true; // navigateur trop ancien pour être un lecteur réel
}एक ज़रूरी सुरक्षा: खाते में लॉगिन किया हुआ उपयोगकर्ता हमेशा गिना जाता है, चाहे ब्राउज़र कोई भी हो। फ़िल्टर अनजान लोगों के लिए है, पुराने कंप्यूटर को अपडेट करना भूल गए वफ़ादार सदस्यों के लिए नहीं।
स्क्रैपर रोकें, सर्च इंजन आने दें
दूसरा स्तर अधिक सख्त है: सर्वर अब स्क्रैपर की पहचान पर 403 त्रुटि लौटाता है, लेकिन वैध क्रॉलर को स्पष्ट छूट देता है। Apache में इसके लिए कुछ पंक्तियाँ काफी हैं:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Lightpanda|HeadlessChrome) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Chrome/1(18|19|20).0.0.0 [OR]
RewriteCond %{HTTP_USER_AGENT} Firefox/12[01].
RewriteCond %{HTTP_USER_AGENT} !(bot|spider|crawl|google|bing|facebook) [NC]
RewriteRule ^ - [F]पहली तीन शर्तें [OR] से जुड़ी हैं; अंतिम शर्त इनके साथ निहित 'और' से जुड़ती है। संदिग्ध पहचान मिलने पर ब्लॉक होता है, बशर्ते यूज़र एजेंट खुद को सर्च इंजन या सोशल नेटवर्क न बताए। लागू करने के बाद हमने दोनों पक्ष जाँचे: स्क्रैपर को 403 मिलता है, जबकि नया Chrome, iPhone, Googlebot, Bingbot और AdSense बॉट सामान्य रूप से पेज पाते हैं।
गलती से Googlebot को ब्लॉक करना बढ़े हुए आँकड़ों से कहीं महँगा पड़ सकता है। प्रोडक्शन में लगाने से पहले हर नियम को सर्च इंजन के यूज़र एजेंट से जाँचें।
ध्यान रखने योग्य सीमाएँ
यूज़र एजेंट एक पंक्ति में नकली बनाया जा सकता है। जिस दिन यह स्क्रैपर खुद को Chrome 155 बताएगा, ये नियम इसे नहीं पकड़ेंगे। यह स्थायी सुरक्षा नहीं, बुनियादी सफ़ाई है: कम मेहनत करने वाले अधिकांश बॉट हटते हैं और आँकड़े फिर उपयोगी बनते हैं। बेहतर पहचान के लिए कई संकेत जोड़ने होंगे (रेफ़रर न होना, हर IP से एक पेज, माउस न हिलना या स्क्रॉल न होना) या विशेष बॉट-पहचान सेवा लेनी होगी।
असल सबक अलग है: जो काउंटर साल में एक बार बड़े उछाल पर झूठ बोलता है, वह संभवतः बाकी दिनों में भी चुपचाप गलत आँकड़े देता है। अगर आपने कभी एक्सेस लॉग नहीं देखे, तो सामान्य दिन के लॉग पर ऊपर की कमांड चलाने के लिए दस मिनट निकालें। नतीजा चौंका सकता है।
Hindi
French
German
English
Spanish
Italian
Japanese
Korean
Norwegian
Chinese


