0

Kiểm tra bot AI có đọc được website không: robots.txt, tường lửa và nội dung render bằng JS

Khi một website "không bao giờ được ChatGPT hay Perplexity dẫn nguồn", nguyên nhân đôi khi rất kỹ thuật: bot của các hãng đó không vào được trang, hoặc vào được nhưng chỉ thấy một khung HTML rỗng. Bài này gom các bước kiểm bằng curl và vài dòng shell, chạy được trên Linux, macOS hay WSL, không cần công cụ trả phí.

Thay https://example.com bằng domain của bạn trong các lệnh bên dưới.

1. Biết đúng tên bot trước khi kiểm

Mỗi hãng tách bot theo mục đích, và cách xử lý robots.txt khác nhau. Theo tài liệu của OpenAI và Perplexity (đọc ngày 27/10/2026):

Bot Hãng Dùng để Về robots.txt
OAI-SearchBot OpenAI Hiện website trong kết quả tìm kiếm của ChatGPT Điều khiển bằng robots.txt; đổi cấu hình mất khoảng 24 giờ mới có tác dụng
GPTBot OpenAI Thu thập nội dung có thể dùng huấn luyện mô hình Chặn GPTBot = báo nội dung không dùng để huấn luyện
ChatGPT-User OpenAI Truy cập khi người dùng yêu cầu trong ChatGPT OpenAI ghi robots.txt có thể không áp dụng
PerplexityBot Perplexity Hiện và dẫn link website trong kết quả Perplexity Perplexity khuyên cho phép trong robots.txt; đổi cấu hình tới 24 giờ
Perplexity-User Perplexity Truy cập khi người dùng hỏi Perplexity ghi bot này nhìn chung bỏ qua robots.txt
Google-Extended Google Token kiểm soát việc dùng nội dung cho Gemini Không ảnh hưởng Google Tìm kiếm, kể cả AI Overview

Điểm hay bị nhầm: muốn không cho dùng nội dung để huấn luyện nhưng vẫn muốn được dẫn nguồn, thì chặn bot huấn luyện (GPTBot) chứ đừng chặn bot tìm kiếm (OAI-SearchBot, PerplexityBot). Còn AI Overview thì đi theo Googlebot: Google nói trang chỉ cần được index và đủ điều kiện hiện đoạn trích là có thể xuất hiện, không cần cấu hình riêng.

2. Lớp 1: đọc robots.txt

curl -s https://example.com/robots.txt

Một cấu hình mẫu cho trường hợp "cho tìm kiếm, không cho huấn luyện":

User-agent: OAI-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: GPTBot
Disallow: /

User-agent: *
Allow: /

Lưu ý: bot chỉ theo nhóm User-agent khớp với tên nó. Nếu file có nhóm riêng cho GPTBot, các dòng trong User-agent: * không áp cho GPTBot nữa. Lỗi hay gặp là thêm nhóm riêng cho một bot để chặn một thư mục, rồi quên mất bot đó giờ không còn bị các quy tắc chung chi phối.

3. Lớp 2: thẻ meta robots và header X-Robots-Tag

robots.txt mở nhưng trang vẫn có thể bị chặn ở mức từng URL:

URL=https://example.com/trang-can-kiem
# header
curl -sI "$URL" | grep -i '^x-robots-tag'
# thẻ meta trong HTML
curl -s "$URL" | grep -io '<meta[^>]*name="robots"[^>]*>'

Thấy noindex hay nosnippet thì trang gần như hết cơ hội vào AI Overview, vì Google cần trang được index và được phép hiện đoạn trích.

4. Lớp 3: tường lửa và CDN

Đây là lớp mà các công cụ chỉ đọc robots.txt không thấy. Cloudflare và nhiều CDN có tuỳ chọn chặn bot AI, bật bằng một nút. So mã trả về giữa trình duyệt thường và chuỗi User-Agent có tên bot:

URL=https://example.com/
for ua in "Mozilla/5.0" "OAI-SearchBot" "GPTBot" "PerplexityBot" "ChatGPT-User"; do
  code=$(curl -s -o /dev/null -w '%{http_code}' -A "$ua" "$URL")
  echo "$code  $ua"
done

Đọc kết quả:

  • Trình duyệt thường 200, bot 403 hoặc 503: có quy tắc chặn theo User-Agent. Vào phần cài đặt bot của CDN để xem.
  • Tất cả đều 200: chưa chắc đã ổn. Nhiều CDN xác minh bot thật bằng địa chỉ IP, nên request giả User-Agent từ máy bạn có thể được xử lý khác bot thật. Lúc đó xem thêm log truy cập máy chủ (mục 6).

5. Lớp 4: nội dung có nằm sẵn trong HTML không

Website dựng bằng React, Vue hay framework chỉ render phía trình duyệt có thể trả về HTML gần như rỗng. Google nói không phải bot nào cũng chạy được JavaScript, và khuyên render phía máy chủ hoặc render trước. Kiểm bằng cách lấy một câu bạn thấy trên trang rồi tìm trong HTML thô:

URL=https://example.com/trang-can-kiem
curl -s "$URL" | grep -c "một câu có trong bài"

Kết quả 0 trong khi trình duyệt vẫn hiện câu đó: nội dung chỉ xuất hiện sau khi JavaScript chạy. Bot không chạy JavaScript sẽ không thấy. Hướng sửa là bật SSR, dựng tĩnh (SSG) hoặc render trước cho các trang cần được đọc.

6. Kiểm bằng log: bot thật có ghé không

Các lệnh trên là mô phỏng. Muốn biết bot thật có vào không, đọc log truy cập. Ví dụ với nginx:

grep -Ei 'OAI-SearchBot|GPTBot|ChatGPT-User|PerplexityBot|Perplexity-User' /var/log/nginx/access.log \
  | awk '{print $9, $7}' | sort | uniq -c | sort -rn | head -20

Cột đầu là số lần, rồi mã trả về và đường dẫn. Thấy nhiều 403 thì quay lại mục 4. Không thấy dòng nào sau vài tuần thì website có thể chưa được các hãng này phát hiện, đó là chuyện liên kết và nội dung, không còn là chuyện kỹ thuật. Nếu website đứng sau CDN, log máy chủ chỉ ghi request CDN cho qua; request bị chặn nằm ở log hoặc trang thống kê của CDN.

Tóm tắt thứ tự kiểm

  1. robots.txt có chặn nhầm bot tìm kiếm không.
  2. Trang có noindex, nosnippet ở meta hay header không.
  3. CDN, tường lửa có chặn theo User-Agent không.
  4. Nội dung chính có trong HTML thô không.
  5. Log có ghi bot thật ghé và nhận 200 không.

Qua đủ năm bước thì phần kỹ thuật đã thông. Phần còn lại là nội dung có trả lời đúng câu người dùng hỏi hay không, nhưng đó là chuyện của một bài khác.

Tham khảo


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí