Kinsta vừa phân tích hơn 10 tỷ request trên hạ tầng của họ và phát hiện ra một điều đáng lo: bot AI đang ăn mòn server WordPress theo cách mà đa số webmaster không hề hay biết. Một con bot duy nhất (ClaudeBot) đã generate 3,75 triệu request add-to-cart trong vòng 24 giờ. Mỗi request đều tạo ra session, query database, chiếm PHP thread. Bài này mình sẽ hướng dẫn bạn từng bước phát hiện và chặn bot AI gây quá tải server WordPress.
Bot AI đang làm gì với server WordPress của bạn?
Trước đây, bot chỉ là chuyện của SEO — Googlebot crawl, index, xong. Nay thì khác. Các AI crawler như GPTBot, ClaudeBot, PerplexityBot không chỉ index mà ingest nội dung để train model, chạy RAG, trả lời query thời gian thực. Tỷ lệ bot AI trên tổng web traffic đã tăng từ 1/200 (đầu 2025) lên 1/31 (cuối 2025) — gấp 6 lần trong chưa đầy một năm.
Theo dữ liệu Cloudflare, AI crawler chiếm 4,2% tổng HTML request trên toàn mạng lưới, dao động từ 2,4% đến 6,4% chỉ trong vài tháng. Vấn đề không nằm ở số lượng request nói chung, mà ở việc bot đánh vào các dynamic endpoint — những URL không cache được và buộc server phải xử lý PHP + database từng cái.
Tại sao bot AI lại nguy hiểm cho WooCommerce?
Đây là phần mà nhiều bạn bỏ qua. Khi bot load một trang đã cache, server gần như không làm gì — chỉ trả file HTML tĩnh. Nhưng khi bot đánh vào /cart, /checkout, ?add-to-cart=, hay URL có query parameter, server phải chạy WordPress từ đầu: khởi tạo PHP, mở session, query database, tính toán giỏ hàng.
Mỗi dynamic request chiếm một PHP thread từ 200-500ms. Hosting của bạn có giới hạn PHP thread cố định. Khi bot AI flood các endpoint này, thread cạn kiệt, khách hàng thật xếp hàng chờ — trang chậm, checkout lag, 504 error. Kinsta ghi nhận một loop pattern generate 550 triệu request trong 30 ngày chỉ từ một bot bị kẹt vòng lặp trên faceted navigation.
Làm sao để phát hiện bot AI đang hại site của bạn?
Bạn làm theo 4 bước kiểm tra sau là sẽ rõ:
Bước 1: Kiểm tra access log. SSH vào server và chạy lệnh này để xem top user-agent trong 24 giờ qua:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
# Hoặc lọc theo user-agent
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20Nếu bạn thấy GPTBot, ClaudeBot, PerplexityBot, Bytespider, CCBot chiếm top, đó là dấu hiệu rõ ràng.
Bước 2: Kiểm tra endpoint bị đánh nhiều nhất.
# Top URL bị request nhiều nhất
awk -F'"' '{print $2}' /var/log/nginx/access.log | awk '{print $2}' | sort | uniq -c | sort -rn | head -30
# Lọc riêng add-to-cart và checkout
grep -E "(add-to-cart|/cart|/checkout|\?s=)" /var/log/nginx/access.log | wc -lBước 3: So sánh traffic vs conversion. Vào Google Analytics 4, so sánh số session với số purchase/add-to-cart event. Nếu session tăng nhưng conversion rate giảm đột ngột, bot traffic là thủ phạm khả năng cao.
Bước 4: Kiểm tra PHP thread usage. Nếu bạn dùng OpenLiteSpeed:
# Xem realtime PHP process
/usr/local/lsws/bin/lswsctrl status
# Hoặc check qua wp-cli
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html eval 'echo implode("\n", get_option("litespeed.optimizer_options", []));'Lưu ý: nếu bạn không có quyền SSH, hãy dùng plugin Query Monitor (miễn phí) để xem PHP memory usage và query time. Nếu trang admin tải chậm lúc không có ai truy cập, đó là dấu hiệu cron job hoặc bot đang chạy ngầm.
Cách chặn bot AI qua robots.txt có đúng không?
robots.txt là bước đầu tiên mình khuyên, nhưng không phải giải pháp duy nhất. Lý do: theo dữ liệu Kinsta, 12,9% AI bot hiện nay bỏ qua robots.txt, tăng từ 3,3% chỉ trong một quý. Tuy vậy, đa số bot lớn (GPTBot, ClaudeBot, PerplexityBot) vẫn tuân thủ nên bạn nên cấu hình.
Thêm đoạn sau vào file robots.txt ở root directory:
# Block AI training bots
User-agent: GPTBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: anthropic-ai
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Claude-Web
Disallow: /
User-agent: PerplexityBot
Disallow: /
User-agent: Bytespider
Disallow: /
User-agent: Google-Extended
Disallow: /
# Cho phep Googlebot, Bingbot binh thuong
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.phpNếu bạn chỉ muốn chặn bot đánh vào dynamic endpoint thay vì block toàn bộ, thay Disallow: / bằng:
User-agent: GPTBot
Disallow: /cart/
Disallow: /checkout/
Disallow: /my-account/
Disallow: /*?add-to-cart=
Disallow: /?s=Cách này cho phép AI crawler vẫn index sản phẩm, bài viết (tốt cho AI visibility), nhưng không đánh vào endpoint tốn resource.
Cách chặn bot AI ở tầng Nginx hiệu quả hơn?
robots.txt dựa trên thiện chí của bot. Nếu muốn chặn chắc hơn, bạn cần block ở tầng web server. Đây là rule cho Nginx:
# Them vao server block cua Nginx
# /etc/nginx/sites-available/yourdomain.com
# Block AI crawler user-agent
if ($http_user_agent ~* (GPTBot|ChatGPT-User|CCBot|anthropic-ai|ClaudeBot|Claude-Web|PerplexityBot|Bytespider)) {
return 403;
}
# Block dynamic endpoint cho tat ca bot
location ~ ^/(cart|checkout|my-account)(/|$) {
if ($http_user_agent ~* (bot|crawl|spider|GPTBot|ClaudeBot|PerplexityBot)) {
return 403;
}
try_files $uri $uri/ /index.php?$args;
}
# Giui han rate cho search endpoint
location / {
if ($args ~* "s=") {
limit_req zone=search burst=5 nodelay;
}
try_files $uri $uri/ /index.php?$args;
}Đừng quên định nghĩa zone trong nginx.conf:
http {
limit_req_zone $binary_remote_addr zone=search:10m rate=10r/m;
}Sau đó reload Nginx:
sudo nginx -t && sudo systemctl reload nginxCách chặn bot AI qua Cloudflare miễn phí?
Nếu bạn dùng Cloudflare (kể cả bản miễn phí), đây là cách hiệu quả nhất vì bot bị chặn trước khi đến server của bạn. Bạn tạo 2 rule:
Rule 1: Block AI training bots hoàn toàn.
Vao Cloudflare Dashboard > Security > WAF > Custom Rules > Create Rule
Rule name: Block AI Training Bots
Expression:
(http.user_agent contains "GPTBot") or
(http.user_agent contains "ChatGPT-User") or
(http.user_agent contains "CCBot") or
(http.user_agent contains "ClaudeBot") or
(http.user_agent contains "anthropic-ai") or
(http.user_agent contains "PerplexityBot") or
(http.user_agent contains "Bytespider")
Action: BlockRule 2: Block mọi bot trên dynamic endpoint.
Rule name: Protect Dynamic Endpoints
Expression:
(starts_with(http.request.uri.path, "/cart") or
starts_with(http.request.uri.path, "/checkout") or
starts_with(http.request.uri.path, "/my-account") or
contains(http.request.uri.query, "add-to-cart") or
contains(http.request.uri.query, "s="))
and
(cf.bot_management.score lt 30)
Action: BlockLưu ý: cf.bot_management.score chỉ khả dụng ở Cloudflare Pro trở lên. Nếu bạn dùng bản miễn phí, thay bằng (http.user_agent contains "bot") hoặc (not cf.client.bot).
Plugin WordPress nào giúp chặn bot AI?
Nếu bạn không rành sửa code hay config server, có 3 plugin miễn phí giúp chặn bot AI:
1. BBQ Block Bad Queries — chặn các request chứa tham số độc hại, hỗ trợ chèn custom user-agent block. Nhẹ, không ảnh hưởng performance.
2. WP Cerber Security — có module bot detection, cho phép block theo user-agent, giới hạn rate per IP. Cài đặt:
# Cai dat qua wp-cli
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html plugin install wp-cerber --activate
# Cau hinh block AI bot
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html option update cerber_bot_agent "GPTBot,ClaudeBot,CCBot,PerplexityBot,Bytespider"3. Cloudflare for WordPress — plugin chính thức từ Cloudflare, tích hợp WAF rule ngay trong dashboard WordPress. Cần tài khoản Cloudflare.
Nếu bạn đang dùng hosting có quản lý (như Cloudways, Kinsta), hãy kiểm tra xem họ có công cụ bot protection built-in không. Kinsta vừa ra mắt Bot Protection miễn phí cho tất cả plan, hoạt động ở tầng infrastructure trước khi request đến WordPress.
Cách tắt WP-Cron và dùng Server Cron để giảm tải?
Một nguyên nhân khác gây spike performance là WP-Cron. Mặc định WordPress chạy cron mỗi khi có visitor — nghĩa là bot traffic kích hoạt cron liên tục. Tắt WP-Cron và chuyển sang server cron là bước tối ưu đơn giản nhưng hiệu quả.
Bước 1: Tắt WP-Cron trong wp-config.php. Thêm dòng sau vào trước /* That's all, stop editing! */:
define('DISABLE_WP_CRON', true);Bước 2: Tạo server cron chạy mỗi 5 phút.
# Edit crontab
sudo crontab -e
# Them dong nay (doi path cho dung voi site cua ban)
*/5 * * * * sudo -u www-data wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# Hoac dung wp-cli (tot hon vi khong ton bandwidth)
*/5 * * * * sudo -u www-data wp --path=/var/www/yourdomain.com/public_html cron event run --due-now > /dev/null 2>&1Bước 3: Kiểm tra cron event đang chạy.
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html cron event list
# Xem cron event nao chay lau nhat
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html cron event list --fields=hook,next_run_relative,recurrence --format=tableNếu bạn thấy plugin nào schedule cron mỗi 1 phút hay mỗi lần load trang, cân nhắc điều chỉnh. Plugin SEO, backup, và sync thường là thủ phạm.
Troubleshooting: Các lỗi thường gặp khi chặn bot
Lỗi 1: Googlebot bị block sau khi thêm rule. Nguyên nhân: rule quá broad, match cả “Googlebot” trong pattern bot. Cách fix: thêm exception cho verified bot. Trong Nginx:
# Them truoc rule block bot
if ($http_user_agent ~* "Googlebot|Bingbot|DuckDuckBot") {
break;
}Lỗi 2: Trang trắng sau khi reload Nginx. Chạy sudo nginx -t để check syntax. Lỗi phổ biến nhất là thiếu dấu chấm phẩy hoặc ngoặc nhọn. Nếu vẫn lỗi, revert về config cũ:
sudo cp /etc/nginx/sites-available/yourdomain.com.bak /etc/nginx/sites-available/yourdomain.com
sudo systemctl reload nginxLỗi 3: WP-Cron không chạy sau khi tắt. Kiểm tra server cron có hoạt động không:
sudo systemctl status cron
sudo grep CRON /var/log/syslog | tail -20Nếu cron service không chạy: sudo systemctl start cron
Lỗi 4: Cloudflare rule không hiệu quả. Đảm bảo rule được đặt ở mode “Block” chứ không phải “Log”. Vào Security > Events để xem rule có match không. Nếu bot vẫn qua, có thể user-agent bị spoof — cân nhắc nâng Cloudflare Pro để dùng bot scoring.
Tong ket: 7 buoc thuc hien ngay hom nay
Mình tổng hợp lại thành checklist để bạn dễ làm theo:
- Kiểm tra access log — xác định bot AI nào đang crawl site, đánh endpoint nào nhiều nhất.
- Cập nhật robots.txt — block AI training bot, cho phép AI crawler vào content page nhưng chặn dynamic endpoint.
- Thêm WAF rule trên Cloudflare — block bot AI trước khi request đến server, ưu tiên chặn trên
/cart,/checkout,?s=. - Cấu hình Nginx rate limiting — giới hạn request/phút cho dynamic endpoint, bảo vệ PHP thread.
- Tắt WP-Cron, chuyển sang server cron — giảm spike performance khi bot trigger cron liên tục.
- Cài plugin bảo vệ — nếu không rành code, dùng WP Cerber hoặc BBQ Block Bad Queries.
- Theo dõi liên tục — set up alert trong Cloudflare Analytics hoặc hosting dashboard để phát hiện spike bot traffic kịp thời.
Bot AI không phải kẻ thù — một số bot giúp content của bạn xuất hiện trong AI answer, mang lại traffic mới. Nhưng bot nào cũng giống nhau ở chỗ: chúng tiêu thụ resource. Việc của bạn là kiểm soát ai được vào, vào đâu, và bao nhiêu lần. Nếu bạn đang chạy WooCommerce hay membership site, bài viết về kiểm tra bảo mật plugin WordPress sẽ bổ sung cho chiến lược bảo vệ tổng thể của bạn.
Nếu bạn gặp lỗi nào trong quá trình thực hiện, để lại comment bên dưới, mình sẽ hỗ trợ từng bước.