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 |
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, bot403hoặc503: 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
- robots.txt có chặn nhầm bot tìm kiếm không.
- Trang có
noindex,nosnippetở meta hay header không. - CDN, tường lửa có chặn theo User-Agent không.
- Nội dung chính có trong HTML thô không.
- Log có ghi bot thật ghé và nhận
200khô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
- OpenAI, Overview of OpenAI crawlers: https://developers.openai.com/api/docs/bots
- Perplexity, Perplexity crawlers: https://docs.perplexity.ai/guides/bots
- Google Search Central, JavaScript SEO basics: https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics
- Google Search Central, Google common crawlers (Google-Extended): https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers
- Google Search Central, AI features and your website: https://developers.google.com/search/docs/appearance/ai-features
- Bản checklist đầy đủ hơn (cả phần nội dung) mình tổng hợp: https://geoaidigi.com/kien-thuc/geo-checklist
All rights reserved