ครอว์เลอร์ AI: วัดการเข้ามาของ GPTBot และ ClaudeBot และตั้งค่าบล็อกด้วย robots.txt และ nginx

ครอว์เลอร์ AI คือบอตที่บริษัท AI ใช้เก็บหน้าเว็บเพื่อฝึกโมเดล ค้นหาด้วย AI และตอบคำถามของผู้ใช้ เพื่อดูว่าบอตเหล่านี้เข้ามาที่เซิร์ฟเวอร์ Nginx + Apache บ่อยแค่ไหน จึงนำ UA ในบันทึกการเข้าถึงของเซิร์ฟเวอร์ต้นทาง 14 วันมาเทียบกับช่วง IP ที่แต่ละบริษัทประกาศ พบว่าคำขอจากช่วงทางการมีทั้งหมด 18,605 ครั้ง และสรุปการตั้งค่าบล็อกหรืออนุญาตใน robots.txt และ nginx ตามเอกสารทางการ
ช่วงเวลาคือ 4–17 ตุลาคม 2026 คำขอที่แคชด้านหน้าตอบไปแล้วจนไม่ถึงเซิร์ฟเวอร์ต้นทาง และคำขอที่ไม่ได้บันทึก IP จริงไว้ ไม่ได้รวมอยู่ในตัวเลข
1️⃣ แยกครอว์เลอร์ AI: UA ในบันทึกการเข้าถึงและช่วง IP ที่ประกาศ
คำขอที่บันทึกว่าเป็น GPTBot ในล็อกไม่ได้มาจาก OpenAI ทั้งหมด UA เป็นข้อความที่ฝั่งผู้ขอเขียนส่งมาเอง ใครก็ใส่ชื่อ GPTBot หรือ ClaudeBot มาขอได้
จึงนับจำนวนคำขอตามชื่อบอตจาก UA ก่อน แล้วค่อยเทียบกับช่วง IP ที่แต่ละบริษัทประกาศ ข้างล่างคือผลการนับชื่อบอต AI ในล็อกหนึ่งวัน
grep -oiE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Bytespider|CCBot|Amazonbot|meta-externalagent)/' access.log-20261018 | sort | uniq -c | sort -rn 2968 GPTBot/
2084 ClaudeBot/
622 meta-externalagent/
535 Amazonbot/
167 PerplexityBot/
99 OAI-SearchBot/
30 ChatGPT-User/
21 Claude-User/
17 Claude-SearchBot/
12 Meta-ExternalAgent/
10 Perplexity-User/
7 CCBot/ถ้านับโดยใส่ [/] ต่อท้ายชื่อ ข้อความที่ไม่ใช่ชื่อ เช่นที่อยู่ติดต่อ claudebot@ ใน UA ของ Claude-SearchBot จะไม่ถูกนับ และชื่อที่บันทึกด้วยตัวพิมพ์เล็กใหญ่ต่างกันจะนับแยกกัน ต่อไปจึงดูจากคอลัมน์แรกว่าคำขอ GPTBot มาจาก IP ใดบ้าง
grep 'GPTBot/' access.log-20261018 | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 2524 74.7.x.x
428 185.152.x.x
12 34.53.x.x
1 74.7.x.x
1 172.182.x.xคำขอที่ผ่าน CDN หรือพร็อกซีจะมีที่อยู่ของเซิร์ฟเวอร์ตัวกลางในคอลัมน์แรก บรรทัดแบบนั้นจึงเทียบด้วยที่อยู่ในคอลัมน์ X-Forwarded-For ท้ายบรรทัดล็อก OpenAI ประกาศช่วง IP ของ GPTBot เป็นไฟล์ JSON
curl -s https://openai.com/gptbot.json -o gptbot.jsonตรวจได้ว่า IP อยู่ในไฟล์ช่วงที่ดาวน์โหลดมาหรือไม่ด้วย ipaddress ซึ่งเป็นโมดูลพื้นฐานของ Python
# inrange.py — ตรวจว่า IP อยู่ในไฟล์ช่วง JSON หรือไม่
import json, sys, ipaddress
nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for a in sys.argv[2:]:
ip = ipaddress.ip_address(a)
print(a, 'IN' if any(ip in n for n in nets) else 'OUT')ใส่ IP ที่จะตรวจต่อท้ายชื่อไฟล์ช่วง
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUTIP ที่ส่งคำขอ 2,524 ครั้งอยู่ในช่วงที่ประกาศ ส่วน IP ที่ส่ง 12 ครั้งอยู่นอกช่วง Anthropic, Perplexity, Apple, Common Crawl, Google และ Bing ก็ประกาศไฟล์ช่วงในรูปแบบเดียวกัน ส่วน Amazonbot ตรวจจาก DNS ย้อนกลับว่าลงท้ายด้วย crawl.amazonbot.amazon หรือไม่ เหมือนการตรวจคนเข้าเมืองที่สนามบินซึ่งดูหนังสือเดินทาง ไม่ใช่ชื่อบนบัตรขึ้นเครื่อง
เมื่อเทียบ 14 วันแบบนี้ พบว่า IP 70 รายการสลับใช้ชื่อบอต 23 ชื่อ เช่น GPTBot, ClaudeBot และ Googlebot ส่งคำขอ 48,041 ครั้ง และ 57% ในนั้นเป็นที่อยู่ที่หาช่องโหว่อย่าง .php หรือ .env คำขอที่ใช้ชื่อ Google-Extended ทั้ง 809 ครั้งก็มาจากกลุ่มนี้ ตามเอกสารของ Google, Google-Extended เป็นโทเค็นสำหรับ robots.txt เท่านั้นและไม่มี UA ที่ใช้ในคำขอ HTTP
2️⃣ จำนวนการเข้ามาตาม UA: วัดจริง 14 วันและแนวโน้มรายสัปดาห์
ตารางข้างล่างคือจำนวนคำขอใน 14 วัน ตั้งแต่ 4 ถึง 17 ตุลาคม บอตที่มีช่วงที่ประกาศนับเฉพาะคำขอจากในช่วง ส่วนบอตที่ไม่ได้เทียบช่วงนับตาม UA โดยตัดกลุ่มที่แอบอ้างออก
| บอต | บริษัท | คำขอ 14 วัน | วิธีตรวจสอบ | กลุ่มที่แอบอ้าง |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | ช่วง IP ที่ประกาศ | 2,387 |
| PerplexityBot | Perplexity | 3,406 | ช่วง IP ที่ประกาศ | 2,262 |
| GPTBot | OpenAI | 2,546 | ช่วง IP ที่ประกาศ | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | ช่วง IP ที่ประกาศ | 2,347 |
| ChatGPT-User | OpenAI | 334 | ช่วง IP ที่ประกาศ | 2,409 |
| Applebot | Apple | 330 | ช่วง IP ที่ประกาศ | 2,372 |
| CCBot | Common Crawl | 275 | ช่วง IP ที่ประกาศ | 2,275 |
| Claude-User | Anthropic | 10 | ช่วง IP ที่ประกาศ | 2,192 |
| Claude-SearchBot | Anthropic | 0 | ช่วง IP ที่ประกาศ | 2,297 |
| Perplexity-User | Perplexity | 0 | ช่วง IP ที่ประกาศ | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA · DNS ย้อนกลับ | 2,379 |
| Googlebot (เปรียบเทียบ) | 10,545 | ช่วง IP ที่ประกาศ | 3,951 | |
| bingbot (เปรียบเทียบ) | Microsoft | 13,477 | ช่วง IP ที่ประกาศ | 1,551 |
ในบรรดาครอว์เลอร์ AI ที่ยืนยันจากช่วงที่ประกาศ ClaudeBot มากที่สุดที่ 10,305 ครั้ง ตามด้วย PerplexityBot 3,406 ครั้ง และ GPTBot 2,546 ครั้ง ส่วน Claude-SearchBot และ Perplexity-User ไม่มีคำขอจากช่วงที่ประกาศเลย คำขอที่ใช้ชื่อเหล่านี้มาจากกลุ่มที่แอบอ้างทั้งหมด
ปัญหาที่เหลือหลังกรองผู้แอบอ้างออกแล้วคือบอตที่ไม่ได้เทียบช่วง Meta-ExternalAgent มากที่สุดตาม UA ที่ 14,384 ครั้ง แต่เอกสารครอว์เลอร์ของ Meta ที่ตรวจไม่มีรายการช่วง IP จึงนับจาก UA อย่างเดียว
เมื่อดูรายสัปดาห์ GPTBot ขึ้นลงระหว่าง 12 ถึง 3,383 ครั้ง ส่วน ClaudeBot อยู่ในช่วง 6,930–10,217 ครั้งตลอดทั้งห้าสัปดาห์
3️⃣ ดึงที่อยู่แบบไหนไป: รูปแบบ URL และรหัสตอบกลับ
ครอว์เลอร์ AI ไม่ได้ดึงแค่เนื้อหาบทความ ใน 14 วัน คำขอของ Meta-ExternalAgent 21% เป็นรูปภาพ ส่วน GPTBot จากช่วงที่ประกาศขอฟีด RSS 476 ครั้ง และ ClaudeBot ขอแผนผังเว็บไซต์ 314 ครั้ง
ที่อยู่ของฉบับภาษาอื่นก็ถูกเก็บด้วย ตามช่วงที่ประกาศ คำขอ ClaudeBot 1,111 ครั้งและคำขอ GPTBot 436 ครั้งเป็นบทความฉบับภาษาอื่น รหัสตอบกลับนับได้ทันทีจากล็อกหนึ่งวัน
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 404แม้ในหนึ่งวัน 301 ก็เกือบหนึ่งในสาม และใน 14 วัน คำขอ ClaudeBot จากช่วงที่ประกาศ 10,305 ครั้งเป็น 301 อยู่ 5,915 ครั้ง (57%) ในจำนวนนั้น 4,736 ครั้งเป็นคำขอที่ไม่มี [/] ท้ายที่อยู่ WordPress จึงตอบ 301 ไปยังที่อยู่ที่เติม [/] แล้วบทความเดียวกันก็ถูกขออีกครั้ง
4️⃣ ตั้งค่า robots.txt: โทเค็นสำหรับการฝึกและสำหรับการค้นหา
robots.txt เหมาะกับบอตสำหรับการฝึกและการค้นหาที่เก็บข้อมูลอัตโนมัติ แต่ไม่เหมาะกับบอตที่ดึงหน้าเว็บตอนผู้ใช้ถามคำถาม เอกสารของ OpenAI และ Perplexity ระบุว่ากฎ robots.txt อาจไม่มีผลกับคำขอของ ChatGPT-User และ Perplexity-User
แต่ละบริษัทแบ่งโทเค็นตามการใช้งาน และตามเอกสารของ OpenAI การบล็อกโทเค็นหนึ่งไม่กระทบการตั้งค่าของโทเค็นอื่น ข้างล่างคือโทเค็นที่ตรวจจากเอกสารทางการของแต่ละบริษัท
| โทเค็น robots.txt | บริษัท | การใช้งาน | ถ้าบล็อก (เอกสารทางการ) |
|---|---|---|---|
| GPTBot | OpenAI | เก็บข้อมูลฝึกโมเดล | สัญญาณว่าห้ามใช้ฝึก |
| OAI-SearchBot | OpenAI | การค้นหาของ ChatGPT | ไม่อยู่ในคำตอบการค้นหาของ ChatGPT (ยังอาจแสดงเป็นลิงก์นำทาง) |
| ChatGPT-User | OpenAI | คำขอของผู้ใช้ | กฎ robots.txt อาจไม่มีผล |
| ClaudeBot | Anthropic | เก็บข้อมูลฝึกโมเดล | ข้อมูลหลังจากนั้นไม่ถูกใช้เป็นข้อมูลฝึก |
| Claude-SearchBot | Anthropic | ปรับปรุงคุณภาพการค้นหา | การแสดงในผลการค้นหาอาจลดลง |
| Claude-User | Anthropic | คำขอของผู้ใช้ | ไม่ดึงหน้าเว็บเพื่อตอบคำถามผู้ใช้ |
| PerplexityBot | Perplexity | ค้นหา (ไม่ใช่การฝึก) | ไม่อยู่ในผลการค้นหา |
| Perplexity-User | Perplexity | คำขอของผู้ใช้ | โดยทั่วไปไม่ทำตาม robots.txt |
| Google-Extended | ฝึก · grounding ของ Gemini | ไม่กระทบการแสดงผลและอันดับใน Google Search | |
| Applebot-Extended | Apple | ฝึกโมเดลพื้นฐาน | ไม่กระทบการแสดงในการค้นหาของ Apple |
| meta-externalagent | Meta | ฝึกโมเดล AI เป็นต้น | บล็อกด้วย Disallow (ตัวอย่างในเอกสาร) |
Google-Extended และ Applebot-Extended ไม่ใช่บอตเก็บข้อมูลแยกต่างหาก แต่เป็นโทเค็นที่ใช้ใน robots.txt เท่านั้น การเก็บข้อมูลยังทำโดยครอว์เลอร์เดิมของ Google และ Apple และโทเค็นนี้กำหนดแค่ว่าจะนำเนื้อหาที่เก็บไปฝึกโมเดล AI หรือไม่
robots.txt ที่ปฏิเสธเฉพาะการเก็บข้อมูลเพื่อฝึกแต่ยังคงการแสดงในการค้นหา AI ไว้เป็นดังข้างล่าง เอกสารของ OpenAI, Perplexity และ Meta ระบุว่าการเปลี่ยนแปลงอาจใช้เวลาถึง 24 ชั่วโมงจึงจะมีผล
# ปฏิเสธการเก็บข้อมูลเพื่อฝึก
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# อนุญาตบอตค้นหา AI
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /robots.txt ปัจจุบันของเซิร์ฟเวอร์ Nginx + Apache ไม่มีบรรทัดที่ระบุบอต AI
curl -s https://example.com/robots.txt# ใช้กับบอตของเครื่องมือค้นหาทุกตัว
User-agent: *
# บล็อกหน้าผู้ดูแล (ความปลอดภัย)
Disallow: /wp-admin/
# อนุญาตการสื่อสาร ajax ในฟังก์ชันผู้ดูแล (จำเป็นต่อการทำงานปกติ)
Allow: /wp-admin/admin-ajax.php
# เพิ่ม: บล็อกผลการค้นหาสแปม (ป้องกัน SEO)
Disallow: /search/
Disallow: /?s=
# แจ้งตำแหน่งแผนผังเว็บไซต์ (เร่งการทำดัชนี)
Sitemap: https://example.com/sitemap_index.xmlในสภาพที่ไม่มีบรรทัดบอต AI นี้ คำขอ GPTBot จากช่วงที่ประกาศ 2,546 ครั้งใน 14 วันได้รับคำตอบโดยไม่มี 403 เป็น 200 จำนวน 2,090 ครั้ง และ 301 จำนวน 432 ครั้ง ในช่วงเดียวกัน คำขอ robots.txt ที่บันทึกในล็อกต้นทางตามช่วงที่ประกาศมี Googlebot 36 ครั้ง ClaudeBot 8 ครั้ง และ OAI-SearchBot 6 ครั้ง ส่วน GPTBot และ PerplexityBot เป็น 0 ครั้ง robots.txt ก็เช่นกัน ถ้าแคชด้านหน้าตอบไปแล้วจะไม่เหลือในล็อกต้นทาง
5️⃣ บล็อกครอว์เลอร์ AI ใน nginx และข้อจำกัด
แม้บล็อกด้วย robots.txt คำขอที่ไม่อ่านกฎก็ยังเข้ามาถึงเซิร์ฟเวอร์ ใน nginx ใช้ [map] ใส่ 1 ลงในตัวแปรเมื่อ UA มีชื่อบอต
# ในบล็อก http — เป็น 1 ถ้าชื่อบอตสำหรับการฝึกอยู่ใน UA
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}ในบล็อก server ให้คืน 403 เมื่อตัวแปรนั้นเป็น 1
# ในบล็อก server
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# การตั้งค่าเดิมต่อจากนี้
}วิธีบล็อกด้วย UA ดูแค่ชื่อ คำขอแอบอ้างที่ใช้ชื่อเดียวกันจึงถูกบล็อกไปด้วย และถ้าเปลี่ยนชื่อก็ผ่านได้ คำขอที่ยืมชื่อบอตค้นหาที่อนุญาตจะกรองออกได้ก็ต่อเมื่อเทียบกับช่วง IP ที่ประกาศ
ถ้าจะอนุญาต OAI-SearchBot แต่ปฏิเสธเฉพาะคำขอชื่อเดียวกันที่มาจากนอกช่วง ให้ใช้ [geo] ทำช่วงที่ประกาศเป็นตัวแปร แล้วเทียบคู่กับ UA
# ในบล็อก http — ช่วงที่ประกาศของ OAI-SearchBot (ใส่ searchbot.json ทั้งหมด ข้างล่างแสดงแค่สองบรรทัด)
geo $oai_search_net {
default 0;
104.210.140.128/28 1;
135.234.64.0/24 1;
}
map $http_user_agent:$oai_search_net $fake_searchbot {
default 0;
~*OAI-SearchBot/.*:0$ 1;
}ถ้ามี CDN หรือพร็อกซีอยู่ด้านหน้า ที่อยู่ที่ [geo] เห็นจะเป็นเซิร์ฟเวอร์ตัวกลาง จึงต้องกู้ IP จริงด้วย real_ip ก่อนเทียบ เอกสารของ Anthropic ระบุว่าการบล็อกด้วยที่อยู่ IP ทำให้บอตอ่าน robots.txt ไม่ได้ไปด้วย สัญญาณปฏิเสธจึงอาจส่งไปไม่ถึง
ไม่ได้ใส่การตั้งค่านี้ในเซิร์ฟเวอร์ที่ใช้งานจริง ตรวจแค่ไวยากรณ์ด้วยไฟล์ตั้งค่าทดสอบ
nginx -t -p ./ -c nginx-test/nginx.confnginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successfulตัวอย่างการตั้งค่าตรวจแค่ไวยากรณ์ จึงไม่ได้ยืนยันการตอบ 403 ตามล็อก 14 วัน คำขอที่ใช้ชื่อ OAI-SearchBot 3,937 ครั้ง มี 2,347 ครั้งมาจากกลุ่มที่แอบอ้างนอกช่วงที่ประกาศ
6️⃣ วิธีเก็บค่าตอบแทนจากครอว์เลอร์ AI: Pay per crawl และ Web Bot Auth
Pay per crawl เป็นฟีเจอร์ของ Cloudflare AI Crawl Control ที่ให้เจ้าของเว็บไซต์ตั้งราคาตามโซนและเก็บค่าบริการทุกคำขอของครอว์เลอร์ AI ตามเอกสารทางการที่ตรวจเมื่อ 18 ตุลาคม 2026 ยังเป็นเบต้าแบบปิด และ Cloudflare ดำเนินการชำระเงินในฐานะ Merchant of Record
ครอว์เลอร์ที่ส่งเจตนาจ่ายเงินมาทางเฮดเดอร์คำขอจะได้คำตอบ 200 ส่วนครอว์เลอร์อื่นจะได้คำตอบ [402 Payment Required] ที่มีราคา ถ้าบล็อกครอว์เลอร์เดียวกันด้วย WAF หรือ Bot Management กฎบล็อกจะมีผลก่อนการเก็บเงิน
ครอว์เลอร์ที่จะจ่ายเงินต้องพิสูจน์ตัวตนด้วย Web Bot Auth ใน Web Bot Auth บอตจะลงลายเซ็นคำขอด้วยคีย์ Ed25519 และวางคีย์สาธารณะไว้ที่ [/.well-known/http-message-signatures-directory] ให้ฝั่งรับตรวจลายเซ็นได้
ลายเซ็นส่งผ่านเฮดเดอร์สามตัว คือ [Signature-Agent], [Signature-Input] และ [Signature] และยืนยันบอตด้วยลายเซ็นเข้ารหัสแทนช่วง IP รูปแบบบันทึกการเข้าถึงพื้นฐานของเซิร์ฟเวอร์ต้นทางไม่บันทึกเฮดเดอร์คำขอ จึงไม่ได้ตรวจว่าคำขอของครอว์เลอร์ AI ใน 14 วันมีลายเซ็นหรือไม่
คำขอจากครอว์เลอร์ AI ที่ยืนยันจากช่วง IP ที่ประกาศใน 14 วัน 18,605 ครั้ง เท่ากับ 77% ของคำขอ Googlebot และ bingbot จากช่วงที่ประกาศในช่วงเดียวกัน 24,022 ครั้ง การจะใส่โทเค็นสำหรับการฝึกใน robots.txt หรือไม่ ตัดสินจากตัวเลขที่ตัดผู้แอบอ้างออกแล้ว และถ้าเพิ่มการเทียบช่วงที่ประกาศในการนับล็อกรายสัปดาห์ ก็ติดตามแนวโน้มได้
🔢 FAQ & เนื้อหาแนะนำ




ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน