Trình thu thập AI: đo lượt truy cập của GPTBot, ClaudeBot và chặn bằng robots.txt, nginx

Trình thu thập AI là bot mà các công ty AI dùng để thu thập trang web cho việc huấn luyện mô hình, tìm kiếm AI và trả lời câu hỏi của người dùng. Để xem các bot này ghé thăm máy chủ Nginx + Apache thường xuyên đến mức nào, UA trong 14 ngày nhật ký truy cập của máy chủ gốc đã được đối chiếu với dải IP mà từng công ty công bố: yêu cầu từ các dải chính thức là 18.605, và các thiết lập chặn hoặc cho phép trong robots.txt và nginx được tóm tắt theo tài liệu chính thức.
Khoảng thời gian là từ ngày 4 đến 17 tháng 10 năm 2026; yêu cầu được cache phía trước trả lời nên không đến máy chủ gốc, và yêu cầu không ghi lại IP thật, không nằm trong các con số này.
1️⃣ Nhận diện trình thu thập AI: UA trong nhật ký truy cập và dải IP công bố
Không phải mọi yêu cầu được ghi là GPTBot trong nhật ký đều đến từ OpenAI. UA là chuỗi chữ do bên gửi yêu cầu tự viết và gửi, nên ai cũng có thể gửi yêu cầu với tên GPTBot hay ClaudeBot.
Vì vậy, trước hết đếm số yêu cầu theo tên bot từ UA, sau đó đối chiếu với dải IP mà từng công ty công bố. Dưới đây là kết quả đếm tên bot AI trong nhật ký một ngày.
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/Nếu đếm với [/] sau tên, các chuỗi không phải tên như địa chỉ liên hệ claudebot@ trong UA của Claude-SearchBot sẽ không bị tính, và các tên được ghi với chữ hoa chữ thường khác nhau được đếm riêng. Tiếp theo, kiểm tra ở cột đầu tiên xem yêu cầu GPTBot đến từ những IP nào.
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.xVới yêu cầu đi qua CDN hoặc proxy, cột đầu tiên ghi địa chỉ của máy chủ trung gian, nên những dòng đó được đối chiếu bằng địa chỉ ở cột X-Forwarded-For cuối dòng nhật ký. OpenAI công bố dải IP của GPTBot dưới dạng tệp JSON.
curl -s https://openai.com/gptbot.json -o gptbot.jsonCó thể kiểm tra IP có nằm trong tệp dải đã tải về hay không bằng ipaddress, mô-đun có sẵn của Python.
# inrange.py — kiểm tra IP có nằm trong tệp dải JSON không
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')Đặt các IP cần kiểm tra sau tên tệp dải.
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUTIP gửi 2.524 yêu cầu nằm trong dải công bố, còn IP gửi 12 yêu cầu nằm ngoài dải. Anthropic, Perplexity, Apple, Common Crawl, Google và Bing cũng công bố tệp dải cùng định dạng, còn Amazonbot được kiểm tra bằng việc DNS ngược có kết thúc bằng crawl.amazonbot.amazon hay không. Giống như kiểm tra xuất nhập cảnh ở sân bay đối chiếu hộ chiếu chứ không phải tên trên thẻ lên máy bay.
Đối chiếu 14 ngày theo cách này cho thấy 70 IP luân phiên dùng 23 tên bot, gồm GPTBot, ClaudeBot và Googlebot, để gửi 48.041 yêu cầu, trong đó 57% là địa chỉ dò lỗ hổng như .php hay .env. Toàn bộ 809 yêu cầu mang tên Google-Extended cũng đến từ nhóm này; theo tài liệu của Google, Google-Extended là token chỉ dùng cho robots.txt và không có UA dùng trong yêu cầu HTTP.
2️⃣ Số lượt truy cập theo UA: đo thực tế 14 ngày và xu hướng theo tuần
Bảng dưới đây là số yêu cầu trong 14 ngày từ 4 đến 17 tháng 10. Với bot có dải công bố, chỉ tính yêu cầu từ trong dải; với bot không đối chiếu dải, tính theo UA sau khi loại nhóm giả mạo.
| Bot | Công ty | Yêu cầu 14 ngày | Cách xác minh | Nhóm giả mạo |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | Dải IP công bố | 2,387 |
| PerplexityBot | Perplexity | 3,406 | Dải IP công bố | 2,262 |
| GPTBot | OpenAI | 2,546 | Dải IP công bố | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | Dải IP công bố | 2,347 |
| ChatGPT-User | OpenAI | 334 | Dải IP công bố | 2,409 |
| Applebot | Apple | 330 | Dải IP công bố | 2,372 |
| CCBot | Common Crawl | 275 | Dải IP công bố | 2,275 |
| Claude-User | Anthropic | 10 | Dải IP công bố | 2,192 |
| Claude-SearchBot | Anthropic | 0 | Dải IP công bố | 2,297 |
| Perplexity-User | Perplexity | 0 | Dải IP công bố | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA · DNS ngược | 2,379 |
| Googlebot (để so sánh) | 10,545 | Dải IP công bố | 3,951 | |
| bingbot (để so sánh) | Microsoft | 13,477 | Dải IP công bố | 1,551 |
Trong số trình thu thập AI được xác minh từ dải công bố, ClaudeBot nhiều nhất với 10.305 yêu cầu, tiếp theo là PerplexityBot 3.406 và GPTBot 2.546. Claude-SearchBot và Perplexity-User không có yêu cầu nào từ dải công bố; mọi yêu cầu mang tên đó đều đến từ nhóm giả mạo.
Vấn đề còn lại sau khi lọc giả mạo là những bot không được đối chiếu dải. Meta-ExternalAgent nhiều nhất theo UA với 14.384 yêu cầu, nhưng tài liệu trình thu thập của Meta đã kiểm tra không có danh sách dải IP, nên chỉ tính theo UA.
Theo tuần, GPTBot dao động từ 12 đến 3.383 yêu cầu, còn ClaudeBot giữ trong khoảng 6.930–10.217 suốt cả năm tuần.
3️⃣ Chúng lấy địa chỉ nào: dạng URL và mã phản hồi
Trình thu thập AI không chỉ lấy nội dung bài viết. Trong 14 ngày, 21% yêu cầu của Meta-ExternalAgent là hình ảnh, còn GPTBot từ dải công bố yêu cầu nguồn cấp RSS 476 lần và ClaudeBot yêu cầu sơ đồ trang 314 lần.
Địa chỉ của các phiên bản ngôn ngữ khác cũng bị thu thập: theo dải công bố, 1.111 yêu cầu của ClaudeBot và 436 yêu cầu của GPTBot là bài viết ở phiên bản ngôn ngữ khác. Mã phản hồi có thể đếm ngay từ nhật ký một ngày.
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 404Ngay trong một ngày, 301 đã chiếm gần một phần ba, và trong 14 ngày, 5.915 (57%) trong 10.305 yêu cầu ClaudeBot từ dải công bố là 301. Trong đó, 4.736 là yêu cầu không có [/] ở cuối địa chỉ, nên WordPress trả 301 đến địa chỉ có thêm [/] và cùng bài viết bị yêu cầu thêm một lần nữa.
4️⃣ Thiết lập robots.txt: token dùng cho huấn luyện và cho tìm kiếm
robots.txt phù hợp để xử lý bot huấn luyện và tìm kiếm thu thập tự động, nhưng không phù hợp với bot lấy trang khi người dùng đặt câu hỏi. Tài liệu của OpenAI và Perplexity cho biết quy tắc robots.txt có thể không áp dụng cho yêu cầu của ChatGPT-User và Perplexity-User.
Mỗi công ty chia token theo mục đích, và theo tài liệu của OpenAI, chặn một token không ảnh hưởng đến thiết lập của token khác. Dưới đây là các token được kiểm tra từ tài liệu chính thức của từng công ty.
| Token robots.txt | Công ty | Mục đích | Nếu chặn (tài liệu chính thức) |
|---|---|---|---|
| GPTBot | OpenAI | Thu thập để huấn luyện mô hình | Tín hiệu không dùng để huấn luyện |
| OAI-SearchBot | OpenAI | Tìm kiếm ChatGPT | Bị loại khỏi câu trả lời tìm kiếm ChatGPT (vẫn có thể hiện dưới dạng liên kết điều hướng) |
| ChatGPT-User | OpenAI | Yêu cầu của người dùng | Quy tắc robots.txt có thể không áp dụng |
| ClaudeBot | Anthropic | Thu thập để huấn luyện mô hình | Dữ liệu về sau bị loại khỏi dữ liệu huấn luyện |
| Claude-SearchBot | Anthropic | Cải thiện chất lượng tìm kiếm | Mức hiển thị trong kết quả tìm kiếm có thể giảm |
| Claude-User | Anthropic | Yêu cầu của người dùng | Không lấy trang cho câu hỏi của người dùng |
| PerplexityBot | Perplexity | Tìm kiếm (không phải huấn luyện) | Bị loại khỏi kết quả tìm kiếm |
| Perplexity-User | Perplexity | Yêu cầu của người dùng | Thường không tuân theo robots.txt |
| Google-Extended | Huấn luyện · grounding Gemini | Không ảnh hưởng đến hiển thị · xếp hạng trên Google Tìm kiếm | |
| Applebot-Extended | Apple | Huấn luyện mô hình nền tảng | Không ảnh hưởng đến hiển thị trong tìm kiếm của Apple |
| meta-externalagent | Meta | Huấn luyện mô hình AI, v.v. | Chặn bằng Disallow (ví dụ trong tài liệu) |
Google-Extended và Applebot-Extended không phải bot thu thập riêng mà là token chỉ dùng trong robots.txt. Việc thu thập vẫn do trình thu thập sẵn có của Google và Apple làm, còn token này chỉ quyết định nội dung đã thu thập có được dùng để huấn luyện mô hình AI hay không.
robots.txt chỉ từ chối thu thập để huấn luyện mà vẫn giữ hiển thị trong tìm kiếm AI như dưới đây; tài liệu của OpenAI, Perplexity và Meta cho biết thay đổi có thể mất đến 24 giờ mới có hiệu lực.
# từ chối thu thập để huấn luyện
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# cho phép bot tìm kiếm AI
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /robots.txt hiện tại của máy chủ Nginx + Apache không có dòng nào chỉ định bot AI.
curl -s https://example.com/robots.txt# áp dụng cho mọi bot của công cụ tìm kiếm
User-agent: *
# chặn trang quản trị (bảo mật)
Disallow: /wp-admin/
# cho phép giao tiếp ajax trong các chức năng quản trị (bắt buộc để hoạt động bình thường)
Allow: /wp-admin/admin-ajax.php
# bổ sung: chặn kết quả tìm kiếm spam (bảo vệ SEO)
Disallow: /search/
Disallow: /?s=
# chỉ đường dẫn sơ đồ trang (tăng tốc lập chỉ mục)
Sitemap: https://example.com/sitemap_index.xmlKhi chưa có dòng bot AI này, 2.546 yêu cầu GPTBot từ dải công bố trong 14 ngày được trả lời mà không có 403: 200 là 2.090 và 301 là 432. Trong cùng thời gian, yêu cầu robots.txt còn lại trong nhật ký gốc theo dải công bố là Googlebot 36, ClaudeBot 8 và OAI-SearchBot 6, còn GPTBot và PerplexityBot là 0. robots.txt cũng vậy, nếu cache phía trước trả lời thì không còn trong nhật ký gốc.
5️⃣ Chặn trình thu thập AI trong nginx và giới hạn
Dù đã chặn trong robots.txt, yêu cầu không đọc quy tắc vẫn đi thẳng đến máy chủ. Trong nginx, [map] đặt biến thành 1 khi UA có tên bot.
# trong khối http — 1 nếu tên bot huấn luyện có trong UA
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}Trong khối server, trả về 403 khi biến đó là 1.
# trong khối server
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# các thiết lập sẵn có ở dưới
}Cách chặn bằng UA chỉ kiểm tra tên, nên yêu cầu giả mạo cùng tên sẽ bị chặn theo, còn đổi tên thì lọt qua. Yêu cầu mượn tên bot tìm kiếm được cho phép chỉ lọc được khi đối chiếu với dải IP công bố.
Để cho phép OAI-SearchBot nhưng chỉ từ chối yêu cầu cùng tên đến từ ngoài dải, hãy dùng [geo] biến dải công bố thành biến rồi đối chiếu cùng với UA.
# trong khối http — dải công bố của OAI-SearchBot (đưa toàn bộ searchbot.json vào; dưới đây chỉ hai dòng)
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;
}Nếu phía trước có CDN hoặc proxy, địa chỉ mà [geo] thấy là máy chủ trung gian, nên phải khôi phục IP thật bằng real_ip rồi mới đối chiếu. Tài liệu của Anthropic cho biết chặn theo địa chỉ IP cũng ngăn bot đọc robots.txt, nên tín hiệu từ chối có thể không truyền đúng.
Thiết lập này không được đưa vào máy chủ đang vận hành; chỉ kiểm tra cú pháp bằng tệp cấu hình thử.
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 successfulVì ví dụ thiết lập chỉ được kiểm tra cú pháp, phản hồi 403 chưa được xác nhận; theo nhật ký 14 ngày, 2.347 trong 3.937 yêu cầu mang tên OAI-SearchBot đến từ nhóm giả mạo ngoài dải công bố.
6️⃣ Cách thu tiền từ trình thu thập AI: Pay per crawl và Web Bot Auth
Pay per crawl là tính năng của Cloudflare AI Crawl Control cho phép chủ trang đặt giá theo từng vùng và thu phí cho mỗi yêu cầu của trình thu thập AI. Theo tài liệu chính thức kiểm tra ngày 18 tháng 10 năm 2026, tính năng này đang ở giai đoạn beta riêng, và Cloudflare xử lý thanh toán với vai trò Merchant of Record.
Trình thu thập gửi ý định thanh toán qua header yêu cầu sẽ nhận phản hồi 200, còn các trình thu thập khác nhận phản hồi [402 Payment Required] kèm giá. Nếu cùng trình thu thập đó bị chặn bằng WAF hoặc Bot Management, quy tắc chặn được ưu tiên hơn việc thu phí.
Trình thu thập muốn trả phí phải chứng minh danh tính bằng Web Bot Auth. Với Web Bot Auth, bot ký yêu cầu bằng khóa Ed25519 và đặt khóa công khai tại [/.well-known/http-message-signatures-directory] để bên nhận xác minh chữ ký.
Chữ ký được truyền qua ba header [Signature-Agent], [Signature-Input] và [Signature], và bot được xác minh bằng chữ ký mật mã thay vì dải IP. Định dạng nhật ký truy cập mặc định của máy chủ gốc không ghi header yêu cầu, nên chưa kiểm tra các yêu cầu của trình thu thập AI trong 14 ngày có chữ ký hay không.
18.605 yêu cầu của trình thu thập AI được xác minh từ dải IP công bố trong 14 ngày bằng 77% của 24.022 yêu cầu Googlebot và bingbot từ dải công bố trong cùng thời gian. Có thêm token huấn luyện vào robots.txt hay không là quyết định dựa trên con số đã loại giả mạo, và nếu thêm đối chiếu dải công bố vào thống kê nhật ký theo tuần thì có thể theo dõi xu hướng đó.
🔢 FAQ & nội dung đề xuất




ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.