كيف تكتشف كشط الويب: السجلات واستعلامات IP والنقاط العمياء
كيف تكتشف كشط الويب في سجلات الوصول لديك: استعلامات حقيقية عن CCBot وAhrefsBot وعقدة خروج Tor وخادم سحابي، وتتبّع ادعاء Googlebot واحد، وما يفوت عناوين IP.

طلب واحد من كاشط ليس سوى GET. له رمز حالة ومسار وUser-Agent، كأي سطر آخر في سجلك. ولا يظهر الكشط إلا عبر مئات الأسطر وعبر شبكة: سكربت Python على خادم سحابي، أو متصفح بلا واجهة يقوده Puppeteer أو Playwright، أو زاحف لتدريب الذكاء الاصطناعي، أو زاحف SEO مثل AhrefsBot، أو واجهة كشط تبيع بروكسيات متدوّرة بالغيغابايت.
مرّرنا سبعة عناوين IP من فئة الكاشطات عبر واجهة GeoIPHub بتاريخ 2026-10-08. أربعة زواحف موثَّقة (Googlebot وCCBot وClaudeBot وAhrefsBot) جاءت جميعها من شبكات استضافة ونالت allow. ونال خادم Linode سحابي عادي درجة 10، وهو أيضًا allow، ونالت عقدة خروج Tor وخادم Mullvad VPN درجة 100 لكل منهما، أي block. يعطيك عنوان IP الشبكة. أما حكم الكشط فيأتي من سجلاتك.
نعرض أدناه كيف تكتشف بوتات الكشط في سجل الوصول، ونتتبّع سطر سجل واحدًا يدّعي أنه Googlebot، ونوضح أين تعمى بيانات IP، ثم نربط ما تجده بالسماح أو تحديد المعدل أو التحدي أو الحجب. وإن أردت الإشارات الخاصة بـ IP واحدة واحدة أولًا، فمحورنا يغطي اكتشاف البوتات عبر IP، إشارةً إشارة؛ وهذا المقال يطبّقها على الكشط.

كيف تكتشف كشط الويب: المعدل والمسار والعميل والشبكة
لاكتشاف كشط الويب، افحص أربع مجموعات من الإشارات: سرعة طلب العميل (المعدل)، وما يطلبه وبأي ترتيب (المسار)، وما يقوله عن نفسه (العميل)، ومن أين يتصل (الشبكة). تُدرج OWASP الكشط تهديدًا آليًّا مستقلًّا هو OAT-011، وتعرّفه بأنه جمع "محتوى التطبيق و/أو بيانات أخرى لاستخدامها في مكان آخر" (OWASP Automated Threats). وهذا التعريف يتعلق بالنية التي لا تستطيع رؤيتها. أما المجموعات الأربع فهي ما تستطيع رؤيته.
- المعدل. الطلبات في الدقيقة لكل عنوان IP ولكل شبكة. نعني بالشبكة ASN، أو /24 في IPv4 و/64 في IPv6 لتجميع أدق. غالبًا ما تعمل الكاشطات بمعدل ثابت على مدار الساعة؛ أما الناس فيأتون على دفعات وينامون.
- المسار. روابط القوائم والترقيم تُمشى بالترتيب، وخريطة موقع تُقرأ من أولها إلى آخرها، وصفحات المنتجات أو الأسعار فقط، ولا طلبات CSS أو JavaScript أو صور إطلاقًا.
- العميل. ادعاء User-Agent، وغياب ترويسة
Accept-Language، وعدم الاحتفاظ بملفات تعريف الارتباط بين الطلبات، وعلامات الأتمتة. في المتصفح تكونnavigator.webdriverصحيحة حين يعمل Chrome بالخيار--headlessأو--enable-automation(MDN)، مع أن الكاشط المصمم يزيلها. وعلى الحافة، كثيرًا ما تكشف بصمة TLS (JA3 أو JA4) مكتبة HTTP خلف User-Agent يدّعي أنه Chrome. - الشبكة. ما يعيده استعلام IP: عنوان IP لمركز بيانات (استضافة) تضع عليه الواجهة العلم
detection.is_hosting، أو زاحف موثَّق، أو Tor، أو VPN، أو ماسح.
الصعوبة في اكتشاف كشط الويب أن لكل إشارة توأمًا بريئًا. فشبكة CDN تسحب من خادمك الأصلي، ومراقب وقت التشغيل، ومكتب خلف عنوان NAT واحد، وقارئ RSS، كلها تبدو غريبة على محور واحد. وتأتي حجة الكشط من إشارات تتفق معًا.
| الإشارة | شكل الكاشط | الشبيه البريء |
|---|---|---|
| المعدل لكل IP أو شبكة | طلبات ثابتة كل 1 إلى 2 ثانية لساعات | NAT مكتب، أو CGNAT، أو CDN، أو خدمة مراقبة |
| ترتيب الصفحات | page=1, 2, 3 … بالتتابع، أو خريطة الموقع بترتيب الملف | شخص يتصفح النتائج صفحة صفحة، لكن بصفحات أقل بكثير |
| الأصول | HTML فقط، دون CSS أو JS أو صور | قارئات التغذية، ومعاينات الروابط، ومتصفحات النصوص |
| عمق الجلسة | آلاف الصفحات في جلسة واحدة | زحف داخلي لضمان الجودة أو أداة تدقيق SEO خاصة بك |
| User-Agent | اسم زاحف من شبكة لا يستخدمها ذلك الزاحف | زاحف حقيقي على نطاق أُضيف خلال الأيام القليلة الماضية |
| الشبكة | مخرج مركز بيانات أو Tor أو VPN | شبكات VPN المؤسسية، ووكلاء التسوق بالذكاء الاصطناعي، وأدوات مستضافة سحابيًّا |
كيف تعرف إن كان موقعك يتعرض للكشط: اقرأ سجلات الوصول أولًا
لتعرف إن كان موقعك يتعرض للكشط، جمّع سجلات الوصول بحسب الشبكة وابحث عن العملاء الذين يجلبون صفحات كثيرة، ويجلبونها بالترتيب، ولا يحمّلون أبدًا الأصول التي يحمّلها المتصفح. وتصل العلامات الخارجية عادةً أولًا: يظهر نص منتجاتك أو أسعارك على موقع آخر، أو ترتفع كلفة النطاق الترددي والخادم على صفحات القوائم بينما تبقى التحويلات ثابتة. وللتحقق من الخارج، ابحث عن جملة مميزة من صفحتك بين علامتي اقتباس، وراقب ظهور أسعارك مجددًا على مواقع التجميع خلال ساعات من تغييرها. أما السجلات فتخبرك من فعل ذلك.
وهذا ما يبدو عليه الأمر في سجل وصول بصيغة مدمجة. هذه قيم توضيحية وليست حركة حقيقية. العنوان 45.33.32.156 هو مضيف الاختبار العام لـ Nmap على Linode، ولم يرسل هذه الطلبات؛ وهو يقوم مقام "خادم سحابي" لأنه لا يجوز لنا نشر عنوان IP لزائر حقيقي.
# illustrative values, not real traffic
45.33.32.156 - - [08/Oct/2026:03:14:07 +0000] "GET /products?page=34 HTTP/1.1" 200 48211 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:08 +0000] "GET /products?page=35 HTTP/1.1" 200 47960 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:10 +0000] "GET /products?page=36 HTTP/1.1" 200 48377 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:11 +0000] "GET /products?page=37 HTTP/1.1" 200 48102 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:13 +0000] "GET /products?page=38 HTTP/1.1" 200 47815 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
45.33.32.156 - - [08/Oct/2026:03:14:14 +0000] "GET /products?page=39 HTTP/1.1" 200 48290 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
تبرز ثلاثة أشياء. الصفحات تتصاعد واحدة واحدة بفاصل 1 إلى 2 ثانية، عند الثالثة فجرًا. لا يوجد مُحيل ولا طلب .css أو .js واحد بينها. والعميل يسمّي نفسه Googlebot، وهو ما تختبره الأقسام التالية.
لا تحتاج إلى منصة سجلات لإيجاد عملاء كهؤلاء. تعمل هذه الأوامر المختصرة على سجل مدمج قياسي؛ شغّلها أولًا على ساعة مزدحمة واحدة:
# Busiest client IPs
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
# Busiest IPv4 /24 networks (rotating scrapers often stay inside one block)
awk '{split($1,o,"."); print o[1]"."o[2]"."o[3]".0/24"}' access.log | sort | uniq -c | sort -rn | head -20
# Busiest User-Agents
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -20
# Clients with more than 100 page requests and zero asset requests
awk '{ if ($7 ~ /\.(css|js|png|jpe?g|webp|svg|woff2?)(\?|$)/) a[$1]++; else p[$1]++ }
END { for (ip in p) if (!(ip in a) && p[ip] > 100) print p[ip], ip }' access.log | sort -rn
اعمل على المخرجات بهذه القائمة:
- الصفحات المطروقة. هل يتركز العملاء المزدحمون على القوائم أو الأسعار أو نتائج البحث أو خريطة الموقع؟
- المعدل لكل IP، ثم لكل شبكة. بعد إثراء العناوين، اجمع الطلبات لكل ASN؛ فخمسون عنوان استضافة في ASN واحد تمشي الصفحات نفسها هي على الأرجح فاعل واحد.
- عمق الجلسة. مئات الصفحات في الجلسة دون استخدام سلة أو تسجيل دخول أو مربع بحث.
- الترتيب. روابط الترقيم أو خريطة الموقع تُجلب بالتتابع.
- الأصول. HTML فقط، دون CSS أو JavaScript أو خطوط أو صور.
- ادعاءات الزواحف. كل User-Agent لـ Googlebot أو Bingbot أو GPTBot أو ClaudeBot يُضاف إلى قائمة للتحقق منها عبر IP.
- علامات الأتمتة. قيم User-Agent لمكتبات (
python-requestsوcurlوGo-http-client) وتلميحات المتصفحات بلا واجهة.
عناوين IP الكاشطات: ما تعيده استعلامات GeoIPHub الحقيقية
تقع عناوين IP الكاشطات في بضع فئات من الشبكات، ويخبرك الاستعلام بالفئة التي تنظر إليها لا بما إذا كان الطلب من كاشط. في استعلامات GeoIPHub لدينا نالت الزواحف الموثَّقة من 0 إلى 23 (allow)؛ ونالت مخارج Tor وVPN درجة 100 (block). أجرينا استعلامًا مجهولًا واحدًا لكل فئة بتاريخ 2026-10-08، بفارق أربع ثوانٍ:
curl -s https://api.geoiphub.com/v1/lookup/18.97.14.81
| IP | فئة البوت | الشبكة (ASN) | الأعلام الرئيسية | fraud_score | recommended_action | detection_methods |
|---|---|---|---|---|---|---|
| 18.97.14.81 | زاحف (الفئة: archiver) | Amazon AMAZON-AES (AS14618) | is_hosting: true, crawler.name: CCBot, verified: true | 0 | allow | datacenter_ip, rdns_hosting, verified_crawler |
| 216.73.216.10 | زاحف (الفئة: ai) | Amazon AMAZON-02 (AS16509) | is_hosting: true, crawler.name: ClaudeBot, verified: true | 0 | allow | datacenter_ip, no_ptr_datacenter, verified_crawler |
| 5.39.1.230 | زاحف (الفئة: seo) | OVH (AS16276) | crawler.name: AhrefsBot, verified: true, is_abusive: true | 23 | allow | abusive_listed, datacenter_blocklisted, no_ptr_datacenter, verified_crawler |
| 192.178.4.40 | زاحف (الفئة: search_engine) | Google (AS15169) | crawler.name: Googlebot, verified: true | 0 | allow | datacenter_ip, no_ptr_datacenter, verified_crawler |
| 45.33.32.156 | خادم سحابي عادي | Akamai Connected Cloud, Linode (AS63949) | is_hosting: true, crawler.name: none | 10 | allow | datacenter_ip |
| 185.220.101.47 | عقدة خروج Tor | Stiftung Erneuerbare Freiheit (AS60729) | is_tor: true, is_spammer: true | 100 | block | tor_exit, datacenter_blocklisted, rdns_tor, known_spammer |
| 185.213.155.73 | VPN تجاري | 31173 Services AB (AS39351) | is_vpn: true, vpn_provider: Mullvad, vpn_confidence: 95 | 100 | block | known_vpn_server, wireguard_open, datacenter_with_vpn_proxy, no_ptr_datacenter |
هذه استعلامات منفردة في يوم واحد وليست اختبار أداء، وتتغير القيم بتغير النطاقات. وثمة فجوة معروفة: no_ptr_datacenter في صفي Googlebot وAhrefsBot مصدره بياناتنا لا بياناتهم. فالواجهة لا تخزّن سجل PTR لبعض نطاقات الزواحف مع أن DNS العكسي يعمل (إذ يُحَلّ 192.178.4.40 إلى crawl-192-178-4-40.googlebot.com). أما بالنسبة إلى عنوان ClaudeBot فالإشارة دقيقة: ليس له DNS عكسي.
وهذه استجابة CCBot، مقتطعة لكن بقيم حقيقية وبالتداخل الأصلي:
{
"ip": "18.97.14.81",
"asn": {
"asn": 14618,
"org": "AMAZON-AES - Amazon.com, Inc.",
"asn_type": "hosting"
},
"detection": { "is_hosting": true, "is_vpn": false, "is_tor": false },
"threat": {
"is_crawler": true,
"crawler": {
"verified": true,
"name": "CCBot",
"operator": "CommonCrawl",
"category": "archiver",
"verification_method": "ip_range_list"
}
},
"scoring": {
"fraud_score": 0,
"recommended_action": "allow",
"detection_methods": ["datacenter_ip", "rdns_hosting", "verified_crawler"]
}
}
يعمل زاحف Common Crawl نفسه على AWS، ومع ذلك ينال 0. فالعنوان يقع في 18.97.14.80/29، وهو نطاق تنشره Common Crawl في ملف ccbot.json، وتعديل الزاحف الموثَّق في تسجيلنا (−28.5) يلغي إشارة مركز البيانات. ويتحقق GeoIPHub من 19 مصدرًا رسميًّا لنطاقات الزواحف بهذه الطريقة، منها مصادر Google وBing وOpenAI وAnthropic وCommon Crawl وAhrefs. وسواء أردت أن يقرأ صفحاتك زاحف تغذّي بياناته نماذج الذكاء الاصطناعي، مثل CCBot أو GPTBot، فهذه مسألة سياسة. أما الاستعلام فيحسم هويته فقط.
كان AhrefsBot هو المفاجأة. فقد عاد موثَّقًا (يقع 5.39.1.230 في 5.39.1.224/27 ضمن نطاقات الزواحف المنشورة لدى Ahrefs)، لكنه أيضًا is_abusive: true مع abusive_listed في الطرق، بدرجة 23، وهو لا يزال allow. لم نتتبّع أي قائمة وسمته. والدرس قائم في الحالتين: "موثَّق" يخبرك من هو الزاحف لا ما إذا كنت تريده. فزاحف SEO الذي يرسم خريطة موقعك لتقرير روابط خلفية لمنافس يظل يكشط، لكنه يكشط بإعلان.
انتحال الزواحف في سجلات الكشط: سطر واحد متتبَّع
الطلب الذي يقول Googlebot في User-Agent لكنه يأتي من خادم سحابي ادعاء غير موثَّق. يستطيع GeoIPHub إخبارك بأن العنوان ليس ضمن نطاق Google، لكن المقارنة مع User-Agent تجري في كودك، لأن الاستعلام لا يرى ترويساتك أبدًا. لنأخذ السطر الرابع من السجل التوضيحي: 45.33.32.156 وGET /products?page=37 وUser-Agent بقيمة Googlebot/2.1.
- استعلم عن العنوان. أعاد الاستعلام الحقيقي ASN 63949، Akamai Connected Cloud (Linode)، و
detection.is_hosting: true، وthreat.crawler.name: "none"، وverified: false، وfraud_scoreبقيمة 10، وallow، مع الطرق["datacenter_ip"]. - قارن الادعاء. يفحص كودك رمز User-Agent مقابل
threat.crawler.verifiedوthreat.crawler.name. - قرّر. يقول UA إنه Googlebot؛ والعنوان ليس ضمن أي نطاق لـ Google. وهذا يجعله "غير موثَّق على أنه Googlebot". حدّد معدله أو تحدّاه. التحدي (CAPTCHA أو فحص JavaScript) هو طريقة تنفيذ الإجراء
step_upفي الواجهة. ولا تسمّه مزيّفًا: فقد يستغرق التحقق من نطاق جديد لدى Google نحو يومين في بياناتنا، لأن ملفات النطاقات تُجلب يوميًّا وقاعدة بيانات الاستعلام تُعاد بناؤها يوميًّا. - تحقق من التباين. أعاد Googlebot الحقيقي عند
192.178.4.40القيمverified: trueوname: "Googlebot"وverification_method: "ip_range_list"والدرجة 0.
توثّق Google طريقتين لإجراء الفحص نفسه بنفسك: DNS عكسي على العنوان يتبعه بحث أمامي عن اسم المضيف، أو مطابقة مع ملفات النطاقات المنشورة مثل common-crawlers.json (Google Search Central). وتبدو المقارنة في الكود هكذا:
// Map User-Agent tokens to the crawler names the API returns.
// They don't always match: OpenAI's "ChatGPT-User" comes back as "ChatGPTUser".
const CRAWLER_NAMES = {
"Googlebot": "Googlebot",
"GPTBot": "GPTBot",
"CCBot": "CCBot",
"ClaudeBot": "ClaudeBot",
"AhrefsBot": "AhrefsBot",
"ChatGPT-User": "ChatGPTUser",
};
async function classifyRequest(ip, userAgent) {
const res = await fetch(`https://api.geoiphub.com/v1/lookup/${ip}`, {
headers: { "x-api-key": process.env.GEOIPHUB_API_KEY },
});
const { threat, scoring } = await res.json();
const token = Object.keys(CRAWLER_NAMES).find((t) => userAgent.includes(t));
if (token) {
const ok = threat.crawler.verified && threat.crawler.name === CRAWLER_NAMES[token];
return ok ? "allow_crawler" : "unverified_crawler_claim"; // rate-limit or challenge
}
return scoring.recommended_action; // allow, review, step_up or block
}
هذه هي الحالة التي تقول فيها الدرجة allow ويقول النمط كاشط. فبالنظر إلى IP وحده، هذا الطلب 10 وallow، لأن الخادم السحابي إشارة ضعيفة بمفردها. ويأتي حكم الكشط من ثلاثة أشياء لا تراها الدرجة: عدم تطابق UA، والمعدل الثابت، والمشي صفحة صفحة. وللاطلاع على الإجراء الكامل لدى Google، راجع كيف تتحقق من Googlebot عبر DNS العكسي وملفات نطاقات Google؛ ولـ GPTBot وClaudeBot والوكلاء الموقِّعين، راجع كيف تتحقق من زواحف الذكاء الاصطناعي عبر IP وDNS العكسي وWeb Bot Auth.
ما تفوّته بيانات IP: البروكسيات السكنية والمتصفحات الحقيقية
تفوّت بيانات IP الكاشطات التي تمرّ عبر بروكسيات سكنية أو بروكسيات الجوال، ولا يكتشف GeoIPHub البروكسي السكني؛ فالحقل is_residential_proxy استنتاج تقريبي قائم على ASN، فاعتبره بلا إشارة. تمرّر شبكة البروكسي السكني كل طلب عبر اتصال منزلي لشخص ما. وعلى طبقة IP يبدو الطلب كتلك الأسرة: مزود إنترنت استهلاكي ومدينة حقيقية ولا علم استضافة ودرجة نظيفة.
ويزيد التدوير الأمر سوءًا. فقد يمنح المجمّع كل طلب عنوان IP منزليًّا جديدًا، فلا ترتفع العدّادات لكل عنوان أبدًا. وتتشارك بروكسيات الجوال عناوين المشغِّلين مع هواتف حقيقية، ويمكن لكاشط IPv6 أن يتنقل عبر /64 كاملة دون أن يلمس شبكة جديدة.
المتصفحات الحقيقية هي النقطة العمياء الثانية. فسكربت Playwright يقود Chrome من اتصال مكتب أو منزل يرسل عنوان IP نفسه ومصافحة TLS نفسها والأصول نفسها كالشخص على المكتب المجاور. وبعض إعدادات المتصفح بلا واجهة تعلن عن نفسها؛ أما المضبوطة جيدًا فلا.
وما يكشف هذه الكاشطات رغم ذلك هو النمط عبر الطلبات:
| إعداد الكاشط | ما يظهره IP | ما يكشفه رغم ذلك |
|---|---|---|
| بروكسيات سكنية متدوّرة | مزود إنترنت استهلاكي، ودرجة نظيفة | عناوين IP كثيرة تتشارك ترتيب صفحات واحدًا وإيقاع توقيت واحدًا وبصمة واحدة |
| بروكسيات الجوال | عنوان مشغِّل مشترك مع هواتف حقيقية | عمق جلسة وترتيب مسار لا ينتجهما أي مستخدم هاتف |
| تدوير IPv6 داخل /64 | عنوان جديد لكل طلب | عدّ الطلبات لكل /64 بدلًا من كل عنوان |
| متصفح بلا واجهة على خط منزلي أو مكتبي | شبكة وصول عادية | علامات الأتمتة، وبصمات TLS، وغياب استمرارية ملفات تعريف الارتباط |
| أي كاشط يتبع كل رابط | أي شبكة يستخدمها | طلبات لرابط مخفي: رابط يُخفى بـ CSS لا يراه أي زائر؛ وكل ما يطلبه يتبع الروابط عمياء |
وإن وضعت رابطًا مخفيًّا، فامنع مساره في robots.txt، كي لا تلمسه الزواحف التي تحترم الملف. ويتعمق مقالان في الطبقات التي تقع بجانب IP. اقرأ لماذا تعمل بصمة الجهاز واستخبارات IP على أفضل وجه معًا، وما يستطيع الاستعلام إظهاره وما لا يستطيع في اكتشاف احتيال البروكسي السكني.
الكشط مقابل الزحف مقابل إساءة استخدام الواجهة
الزحف معلَن وقابل للتحقق، والكشط يأخذ محتواك أو بياناتك وغالبًا ما يكون غير معلَن، وإساءة استخدام الواجهة هي نداءات آلية لنقاط نهايتك تتجاوز شروطك أو حدودك. والخط الفاصل بينها هو السلوك والهوية لا التقنية: فقد يشغّل Googlebot وكاشط أسعار مكتبة HTTP نفسها على السحابة نفسها.
| نوع الحركة | ما تستهدفه | كيف تعرّف عن نفسها | ما الذي تفحصه |
|---|---|---|---|
| الزحف | صفحات لفهرس بحث أو أرشيف أو نموذج ذكاء اصطناعي | User-Agent مسمّى ونطاقات IP منشورة | العنوان ضمن نطاق الجهة المشغِّلة؛ والالتزام بـ robots.txt |
| الكشط | محتوى أو بيانات محددة: أسعار وقوائم ومقالات | غالبًا UA لمتصفح أو اسم زاحف مستعار | المعدل وترتيب الصفحات والأصول المفقودة وUA مقابل الزاحف الموثَّق |
| إساءة استخدام الواجهة | نقاط JSON لديك، وغالبًا خلف الموقع | مفتاح واجهة أو رمز جلسة أو لا شيء | النداءات لكل مفتاح ولكل شبكة، ونقاط نهاية خارج تدفقات التطبيق العادية |
يمكن لزاحف موثَّق أن يكشط، كما يبيّن AhrefsBot، ويمكن لكاشط أن يبدو كزاحف. ولهذا يبدأ القسم التالي بالسماح للموثَّقين فقط.
كيف تمنع كشط الويب دون حجب زواحف محركات البحث
لمنع كشط الويب دون حجب زواحف محركات البحث، اسمح للزواحف الموثَّقة أولًا، ثم حدّد المعدل بحسب الشبكة وتحدَّ العملاء الذين لا يتصرفون كالمتصفحات، واحجب فقط ما أكّدته. وتعطي نطاقات درجة GeoIPHub جانب IP من ذلك: allow حتى 25، وreview حتى 50، وstep_up حتى 75، وblock فوق 75. والترتيب مهم. فحجب شامل لمراكز البيانات يُشغَّل أولًا كان سيصيب Googlebot وCCBot وClaudeBot وAhrefsBot في جدولنا، إذ جاءت الأربعة من شبكات استضافة.
- اسمح للزواحف الموثَّقة حين تكون
threat.crawler.verifiedصحيحة ويطابقcrawler.nameرمز User-Agent. ثم طبّق سياستك الخاصة لكل زاحف. وبالنسبة إلى زواحف الذكاء الاصطناعي، تبيّن مقارنتنا بين GPTBot وOAI-SearchBot وChatGPT-User كيف تحجب التدريب دون مغادرة بحث الذكاء الاصطناعي. - أعد استخدام قواعد IP. نطاقات الدرجة والتعامل مع Tor وحدود المعدل لكل بادئة تعمل للكاشطات كما تعمل لأي بوت؛ ويغطيها المحور. تعامل مع عنوان IP لمركز بيانات على أنه مُدخل موزون لا سبب للحجب، لأن الاستضافة تشمل أيضًا وكلاء الذكاء الاصطناعي وبروكسيات الشركات وأدواتك الخاصة (راجع ما هو عنوان IP لمركز البيانات).
- حدّد المعدل بحسب ASN على الصفحات التي تريدها الكاشطات. يبقى المجمّع الذي يتنقل عبر مزود استضافة واحد تحت أي حد لكل IP، لكن عدّادًا لكل ASN على صفحات القوائم والبحث والأسعار يجمعه. أعطِ السحابات الكبيرة سقفًا أعلى، لأن عملاء كثيرين لا صلة بينهم يتشاركون ASN واحدًا.
- حدّد عدد صفحات الترقيم وضع القوائم الكاملة خلف تسجيل دخول. قدّم عددًا ثابتًا من صفحات القوائم للزوار المجهولين. فجدار الحساب يحوّل كل كاشط إلى حسابات تستطيع عدّها وإغلاقها.
- ضع حصصًا لكل مفتاح على نقاط JSON التي تستدعيها صفحاتك. غالبًا ما تتجاوز الكاشطات HTML وتستدعي الواجهة التي خلفه، فأصدر مفاتيح أو رموز جلسة وحدّد النداءات لكل مفتاح.
- أضف طبقة إدارة بوتات أو WAF لإشارات العميل التي لا تحويها سجلاتك، مثل بصمات TLS وفحوص JavaScript على الحافة.
- استخدم قواعد السلوك للحركة السكنية، حيث لا يعطيك IP شيئًا.
تشكّل الاستجابات سلّمًا: السماح، فتحديد المعدل، فالتحدي، فالحجب. وتضيف بعض المواقع tarpit، أي إبطاء الردود لكاشط مشتبه به، أو تقدّم محتوى مضلِّلًا، مثل أسعار معدَّلة، للحركة التي صنّفتها بالفعل. وكلاهما يكلفك شيئًا إن أخطأ التصنيف، فلا تستخدمهما إلا على حركة كنت ستحجبها على أي حال.
| الإشارة | الإجراء الافتراضي |
|---|---|
| threat.crawler.verified مع User-Agent مطابق | السماح، ثم تطبيق سياستك لكل زاحف |
| User-Agent لزاحف، وcrawler.name يساوي "none" | تحديد المعدل أو التحدي |
| ترتيب الصفحات نفسه من 20+ عنوان IP في ASN واحد | تحديد معدل ASN، ثم التحدي |
| HTML فقط، و100+ صفحة، دون CSS أو JS | التحدي، مهما قال IP |
| طلب لرابط لا يستطيع أي شخص رؤيته | حجب ذلك العميل |
| مزود إنترنت استهلاكي، ودرجة نظيفة، ونمط يشبه الكاشطات | قواعد السلوك والبصمات |
وللصفوف الخاصة بـ IP وحده (Tor والمرحِّلات والماسحات وبادئات IPv6)، استخدم خريطة الإجراءات في دليلنا لاكتشاف البوتات عبر IP.
وماذا عن robots.txt؟ إنه يطلب ولا يفرض. يقول RFC 9309، معيار استبعاد الروبوتات، إن قواعده "ليست شكلًا من أشكال تفويض الوصول" (RFC 9309). احتفظ به للزواحف التي تحترمه، وطبّق كل ما عداه على خادمك. ويعرض دليلنا حجب زواحف الذكاء الاصطناعي طبقة التطبيق هذه بكود nginx وExpress.
ابدأ بسجلات الأمس. صدّر أكثر 50 عميلًا نشاطًا ممن لم يحمّلوا أي أصول، والصق كلًّا منهم في استعلام IP المجاني (30 استعلامًا في الدقيقة دون مفتاح، و1,500 يوميًّا بمفتاح مجاني)، وصنّفهم في الفئات الواردة في جدول الاستعلامات أعلاه. أما الباقون، النشطون على شبكات استهلاكية، فهم حيث تذهب قواعد السلوك لديك بعد ذلك.
الأسئلة الشائعة
كيف أحجب كاشطات الذكاء الاصطناعي مثل GPTBot أو CCBot؟
ابدأ بملف robots.txt: يحترمه كل من GPTBot وCCBot، لذا فقاعدة Disallow لرمزيهما توقف الزواحف المعلَنة. لكن robots.txt طلب وليس ضبط وصول (يقول RFC 9309 إن قواعده ليست شكلًا من أشكال تفويض الوصول)، فطبّق الحجب على خادمك أيضًا: تحقق من كل زاحف عبر نطاقات IP التي ينشرها، وعامِل العميل الذي يستخدم الاسم من خارج تلك النطاقات على أنه غير موثَّق. تشغّل OpenAI عدة بوتات بمهام مختلفة؛ ويشرح مقالنا GPTBot مقابل OAI-SearchBot مقابل ChatGPT-User أيها تحجب إن أردت البقاء في بحث ChatGPT.
كم طلبًا في الدقيقة يعني الكشط؟
لا يوجد رقم عالمي. قس خط الأساس البشري لديك في يوم عادي، لكل /24 في IPv4 ولكل /64 في IPv6، ثم انظر إلى الشبكات التي تتجاوزه بكثير. ويرفع المعدل وحده علمًا أيضًا على NAT المكاتب وCGNAT وخدمات المراقبة، لذا لا تعتبر المعدل المرتفع كشطًا إلا إذا اقترن بجلب الصفحات بالترتيب وغياب طلبات الأصول.
هل يمكن إيقاف كشط الويب تمامًا؟
لا. كل ما يستطيع المتصفح عرضه يستطيع الكاشط المصمم نسخه، بما في ذلك عبر البروكسيات السكنية والمتصفحات الحقيقية. الهدف هو جعل الكشط بطيئًا ومكلفًا ومرئيًّا: تحقق من الزواحف، وحدّد المعدل بحسب الشبكة، وتحدَّ العملاء الذين لا يتصرفون كالمتصفحات، وضع البيانات عالية القيمة خلف تسجيل دخول أو مفاتيح واجهة.
هل يوقف حجب عناوين IP لمراكز البيانات الكشط؟
جزئيًّا. فهو يوقف الكاشطات العاملة على خوادم سحابية رخيصة، لكنه يحجب أيضًا الزواحف الموثَّقة ما لم تسمح لها أولًا: في استعلاماتنا بتاريخ 2026-10-08 نال CCBot على AWS درجة 0 (allow) ونال Googlebot الحقيقي درجة 0 (allow)، وكلاهما على شبكات استضافة. ونال خادم Linode عادي درجة 10، وهو أيضًا allow، فلن تحجبه الدرجة وحدها. أما الكاشطات التي تستأجر بروكسيات سكنية فتتجاوز حجب مراكز البيانات كليًّا.
هل يستطيع استعلام IP إخباري بأن عنوانًا ما كاشط؟
لا. يخبرك الاستعلام بفئة الشبكة وبالخطر: زاحف موثَّق أو خادم مركز بيانات أو مخرج Tor أو VPN. أما كون ذلك العنوان يكشط موقعك فيأتي من سجلاتك: معدل طلباته وترتيب الصفحات التي يجلبها وهل يحمّل الأصول وهل يطابق User-Agent الخاص به الزاحف الذي يتحقق منه الاستعلام.
كيف أعرف أن الكاشط يستخدم بروكسيات سكنية؟
لا يمكنك معرفة ذلك من عنوان IP، ولا يكتشف GeoIPHub البروكسي السكني. ابحث عن عناوين IP استهلاكية كثيرة تتشارك نمط جلسة واحدًا: ترتيب الصفحات نفسه والتوقيت نفسه بين الطلبات والأصول المفقودة نفسها وبصمات TLS أو الجهاز المتشابهة. النمط عبر العناوين هو ما يكشف الكاشط لا أي عنوان منفرد.
الفريق الذي يقف وراء واجهة GeoIPHub API
بقلم فريق GeoIPHub، وهم من يبنون واجهة GeoIPHub API لاستخبارات IP وماسحها. تُعَدّ المسودات بمساعدة الذكاء الاصطناعي ويحررها الفريق، وأمثلة API استعلامات حقيقية على واجهة API الحية ما لم تُوصف بأنها توضيحية.


