← Tất cả bài viết· ~7 phút

AI crawler có chạy JavaScript không? GPTBot và ClaudeBot thấy gì

Googlebot chạy JavaScript, còn GPTBot, ClaudeBot, PerplexityBot thì không. Nội dung chỉ hiện sau khi JS chạy là vô hình với AI search. Cách kiểm tra và sửa bằng SSR, SSG, pre-render.

Tác giả: Long Nguyen — CTO, ERPFit

AI crawler có chạy JavaScript không? GPTBot và ClaudeBot thấy gì

Câu trả lời ngắn: Google và Apple chạy JavaScript của bạn; AI crawler của ChatGPT, Claude và Perplexity thì không. (Một số trợ lý mới hơn như DeepSeek và Qwen thì có.) Googlebot hiển thị trang sau một hàng đợi, nên nội dung do JS tạo vẫn có thể vào Google Search và AI Overviews. GPTBot, ClaudeBot, PerplexityBot và CCBot chỉ đọc HTML mà máy chủ gửi về. Nếu chữ, tiêu đề hay liên kết của bạn chỉ xuất hiện sau khi JavaScript chạy, các bot này thấy một trang trống và không thể trích dẫn nó.

Điểm chính

  • Google xử lý trang JavaScript qua ba giai đoạn (thu thập, hiển thị, lập chỉ mục); bước hiển thị nằm trong hàng đợi có thể lâu hơn vài giây (Google Search Central, cập nhật tháng 3/2026).
  • Vercel và MERJ đo khoảng 1,3 tỷ lượt truy cập của AI crawler trong một tháng (tháng 12/2024). Kết luận của họ: "chưa AI crawler lớn nào hiển thị JavaScript" (bản dịch), trong đó có GPTBot, ClaudeBot, PerplexityBot và CCBot. Crawler của Google và Apple là ngoại lệ.
  • Bot của ChatGPT và Claude có tải file JS (11,5% và 23,8% số lượt truy cập) nhưng không thực thi. Một thử nghiệm có kiểm soát năm 2026 trên 12 trợ lý AI cho kết quả tương tự với ChatGPT, Claude, Gemini, Perplexity và Copilot khi lấy trang trực tiếp.
  • Cách sửa: đưa nội dung chính, title, meta description, canonical, H1, JSON-LD và liên kết vào ngay HTML đầu tiên, bằng hiển thị phía máy chủ, tạo trang tĩnh hoặc pre-render.

Google có chạy JavaScript không?

Có, nhưng chậm hơn. Tài liệu JavaScript SEO của Google (tiếng Anh; các trích dẫn dưới đây là bản dịch của chúng tôi) mô tả ba giai đoạn: thu thập (crawl), hiển thị (render) và lập chỉ mục (index). Googlebot "đưa mọi trang có mã trạng thái 200 vào hàng đợi hiển thị", và "trang có thể nằm trong hàng đợi vài giây, nhưng cũng có thể lâu hơn". Khi đủ tài nguyên, "một Chromium không giao diện hiển thị trang và thực thi JavaScript". Trang có noindex có thể được bỏ qua bước hiển thị.

Vậy Google có thấy nội dung hiển thị phía trình duyệt, chỉ chậm hơn. Điều này cũng quan trọng với AI. Trang AI features and your website của Google đặt một điều kiện cho AI Overviews và AI Mode: trang phải "đã được lập chỉ mục và đủ điều kiện hiển thị trong Google Search kèm đoạn trích". Google viết thêm: "không có yêu cầu kỹ thuật bổ sung nào". Nghiên cứu của Vercel bổ sung rằng Gemini "dùng hạ tầng của Googlebot, nên hiển thị JavaScript đầy đủ". Dù vậy, Google vẫn khuyên gửi HTML hoàn chỉnh: "hiển thị phía máy chủ hoặc pre-render vẫn là ý hay". Lý do: nó "giúp website nhanh hơn cho người dùng và crawler, và không phải bot nào cũng chạy được JavaScript".

AI crawler có chạy JavaScript không?

Phần lớn là không. Trang tài liệu bot của OpenAI, Anthropic và Perplexity mô tả user agent và robots.txt; không trang nào nhắc đến JavaScript hay việc hiển thị (kiểm tra ngày 19/10/2026). Số liệu công khai tốt nhất đến từ Vercel và công ty tư vấn MERJ, phân tích một tháng lưu lượng crawler trên mạng của Vercel (công bố ngày 17/12/2024):

CrawlerLượt truy cập trong một thángChạy JavaScript?
Googlebot (Search + Gemini)4,5 tỷCó
GPTBot (OpenAI)569 triệuKhông
Claude (Anthropic)370 triệuKhông
AppleBot314 triệuCó
PerplexityBot24,4 triệuKhông
CCBot, Bytespider, Meta-ExternalAgentkhông công bốKhông

Theo số liệu tháng 12/2024 của Vercel và MERJ, GPTBot (569 triệu lượt), Claude (370 triệu) và PerplexityBot (24,4 triệu) không thực thi JavaScript. Nguồn: Vercel, "The rise of the AI crawler".

Nghiên cứu viết thẳng (bản dịch): bot của ChatGPT và Claude "có tải file JavaScript (ChatGPT: 11,50%, Claude: 23,84% số lượt), nhưng không thực thi chúng. Chúng không đọc được nội dung hiển thị phía trình duyệt." Có một chi tiết nhỏ. Dữ liệu đã nằm sẵn trong HTML đầu tiên, như JSON nhúng hay React Server Components truyền dần, "vẫn có thể được lập chỉ mục".

Một thử nghiệm mới hơn cho kết quả tương tự. Trong một thử nghiệm có kiểm soát năm 2026 trên 12 trợ lý AI, ChatGPT, Claude, Gemini, Meta AI, Perplexity và Copilot không chạy script của trang. Chỉ DeepSeek, ERNIE, Qwen, Kimi và Mistral chạy.

Thử nghiệm do nhóm Andre Alpar thực hiện, được Gianluca Fiorelli tường thuật trên Advanced Web Ranking vào tháng 8/2026. Mỗi trợ lý nhận một trang bí mật riêng. Số tham chiếu thật chỉ hiện ra sau khi một script bên ngoài chạy; HTML gốc chứa một số giả. Sáu trợ lý kể trên đều báo số giả.

Vì sao Gemini trượt dù Google có hiển thị JavaScript? Theo giải thích của Fiorelli: Google hiển thị khi lập chỉ mục trang, còn thử nghiệm là lấy trực tiếp một URL hoàn toàn mới. Crawler thay đổi theo thời gian, nên hãy coi các nghiên cứu này là mốc tham chiếu và tự kiểm tra trang của bạn. Xem thêm về các bot này tại AI crawler.

AI crawler thấy gì trên một trang hiển thị bằng JavaScript?

Gần như không gì cả. Một ứng dụng một trang (SPA) điển hình gửi về HTML như sau:

<html>
  <head><title>Đang tải…</title></head>
  <body>
    <div id="root"></div>
    <script src="/assets/app.js"></script>
  </body>
</html>

Trình duyệt chạy app.js và lấp đầy trang. GPTBot dừng ở HTML: tiêu đề là "Đang tải…", không có H1, không có đoạn văn, không có giá sản phẩm, không có liên kết để đi tiếp. Không phần nào của trang đó có thể trở thành đoạn trích trong câu trả lời của ChatGPT hay Perplexity.

Chúng tôi đã chạy đúng đoạn HTML trên qua bộ phân tích HTML của CiteStat, đoạn mã mà công cụ quét dùng cho mọi trang: 0 từ hiển thị, 0 liên kết, tiêu đề "Đang tải…", và cả hai quy tắc JavaScript đều báo lỗi. Cùng phép thử trên bài viết hiển thị phía máy chủ của chúng tôi, AI crawler và robots.txt, cho 917 từ và 52 liên kết ngay trong HTML gốc. Sau đó chúng tôi kiểm tra các trang đang chạy của chính mình theo cùng cách:

Kết quả kiểm tra: trang SPA mẫu có 0 từ khi không chạy JavaScript và trượt cả hai quy tắc; citestat.com/en có 817 từ và đạt
Kiểm tra HTML gốc của CiteStat, ngày 19/10/2026: SPA mẫu 0 từ, 0 liên kết; citestat.com/en 817 từ; công cụ từ khóa 68 từ; dashboard (sau đăng nhập) 3 từ.

Trang chủ đạt với 817 từ. Trang công cụ từ khóa chỉ có 68 từ khi không chạy JavaScript, vì gợi ý từ khóa chỉ tải sau khi bạn gõ; phần giải thích tĩnh có sẵn, phần kết quả thì không. Trang dashboard chỉ có 3 từ, và như vậy là đúng: nó nằm sau đăng nhập và không cần được trích dẫn. Bài học là đánh giá từng trang theo mục đích của nó. Vì vậy JavaScript SEO quan trọng với tìm kiếm AI: một trang có thể lên hạng Google mà vẫn trống trơn với những công cụ đang viết câu trả lời.

Sáu thứ phải có ngay trong HTML đầu tiên

Bạn không phải bỏ JavaScript. Bạn chỉ cần bảo đảm những phần máy đọc đến được mà không cần nó:

  • Nội dung chính: tiêu đề mục và các đoạn trả lời câu hỏi của người đọc. Đây là những đoạn AI trích dẫn; xem khả năng được AI trích dẫn.
  • Title, meta description và canonical đặt từ máy chủ, không do thư viện quản lý thẻ head phía trình duyệt chèn vào.
  • Một thẻ H1 có sẵn trong HTML.
  • Dữ liệu có cấu trúc dạng JSON-LD viết thẳng trong trang. Google đọc được JSON-LD chèn bằng JS; phần lớn crawler khác thì không.
  • Điều hướng bằng liên kết thật: <a href="/pricing">, không phải div gắn sự kiện click. Crawler đi theo href, không theo sự kiện; xem liên kết nội bộ.
  • Mã trạng thái đúng: trang không tồn tại phải trả 404 từ máy chủ, không phải 200 kèm dòng "Không tìm thấy" do JavaScript vẽ ra.

Các phần tương tác như bộ lọc, carousel, khung chat, máy tính giá có thể vẫn chạy phía trình duyệt. Vercel cũng khuyên vậy: hiển thị phía trình duyệt "vẫn phù hợp cho các tính năng bổ trợ".

Ba cách sửa một trang chỉ hiển thị bằng JavaScript

1. Hiển thị phía máy chủ (SSR)

Máy chủ dựng HTML đầy đủ cho mỗi lượt truy cập. Next.js, Nuxt, SvelteKit, Remix và Astro đều hỗ trợ. Hợp với trang thay đổi thường xuyên như giá hay tồn kho.

2. Tạo trang tĩnh (SSG)

HTML được dựng một lần lúc triển khai và phục vụ dưới dạng file. Lý tưởng cho blog, tài liệu, trang dịch vụ. Đây cũng là cách nhanh nhất, có lợi cho Core Web Vitals.

3. Pre-render một SPA có sẵn

Nếu không thể viết lại, một bước hoặc dịch vụ pre-render lưu HTML đã hiển thị của từng đường dẫn và phục vụ nó cho mọi khách truy cập. Hãy gửi cùng một HTML cho người dùng và bot: cho bot xem nội dung khác là cloaking, bị công cụ tìm kiếm phạt.

WordPress, Shopify và phần lớn giao diện CMS truyền thống đã hiển thị phía máy chủ. Rủi ro nằm ở các bản dựng React hay Vue tự viết, page builder tải nội dung bằng AJAX, và lưới sản phẩm được lấp bằng một lệnh gọi API sau khi trang tải xong.

Tự kiểm tra trang của bạn trong hai phút thế nào?

  1. Xem mã nguồn, không xem Inspector. Trong Chrome bấm Ctrl+U (Cmd+Option+U trên Mac). Đây là HTML máy chủ gửi về. Tìm một câu trong trang của bạn. Nếu không có, AI crawler cũng không thấy câu đó.
  2. Tắt JavaScript. Chrome DevTools → Command menu (Ctrl+Shift+P) → "Disable JavaScript", rồi tải lại. Phần còn lại gần với những gì GPTBot đọc được.
  3. Dùng dòng lệnh. curl -s https://example.com/trang | grep -c "câu của bạn" trả về 0 nếu câu đó không nằm trong HTML.

CiteStat kiểm tra việc này thế nào?

CiteStat tải HTML gốc của trang mà không chạy JavaScript, đúng góc nhìn của AI crawler, rồi đếm số từ hiển thị trong đó. Bộ quy tắc cảnh báo khi trang có dưới 50 từ hiển thị được mà không cần JavaScript (quy tắc "Content should not require JavaScript to render", tức nội dung không nên cần JavaScript để hiển thị) và gợi ý hiển thị phía máy chủ khi dưới 100 từ. Nó còn kiểm tra liên kết <a href> crawl được, định tuyến bằng History API thay vì phân đoạn #, và mã trạng thái đúng nghĩa, cùng với việc đọc robots.txt cho 10 token AI crawler.

Gói miễn phí có 10 lượt quét mỗi ngày. Nếu bạn quản lý nhiều website, hoặc cần báo cáo AI render đầy đủ cho thấy đoạn nào Google AI Overviews và Bing Copilot sẽ trích, xem bảng giá: gói Pro 500.000₫/tháng (chưa gồm VAT) cho 100 lượt mỗi ngày.