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

Content Signals trong robots.txt: search, ai-input, ai-train và lỗi đặt sai nhóm

Content-Signal cho bot biết nội dung được dùng cho tìm kiếm, câu trả lời AI hay huấn luyện AI. Nghĩa của từng tín hiệu, đặt dòng ở đâu, và lỗi chúng tôi thấy trên 8 website.

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

Content Signals trong robots.txt: search, ai-input, ai-train và lỗi đặt sai nhóm

Câu trả lời ngắn: Content Signals là một dòng Content-Signal: trong robots.txt, ví dụ Content-Signal: search=yes, ai-input=yes, ai-train=no. Nó cho bot biết bạn đồng ý cho nội dung được dùng vào ba việc nào: tìm kiếm, câu trả lời AI, hay huấn luyện AI. Dòng này phải nằm bên trong một nhóm User-agent, thường là User-agent: *. Nó không chặn thu thập, và là một mong muốn chứ không phải lệnh: bot có thể bỏ qua.

Ba tín hiệu nghĩa là gì

Cloudflare công bố Content Signals Policy ngày 24/9/2025 (cập nhật 15/7/2026), phát hành theo giấy phép CC0 để ai cũng dùng được. Định nghĩa trong chính sách:

Tín hiệuNghĩa (theo chính sách)Ví dụ
searchXây chỉ mục tìm kiếm và trả kết quả: liên kết và đoạn trích ngắn. Không gồm tóm tắt do AI tạo.Danh sách 10 liên kết
ai-inputĐưa nội dung vào mô hình AI khi trả lời: RAG, grounding (neo câu trả lời vào nguồn), lấy nội dung theo thời gian thực cho câu trả lời AI.Câu trả lời AI có dẫn nguồn
ai-trainHuấn luyện hoặc tinh chỉnh mô hình AI.Dữ liệu huấn luyện mô hình

yes nghĩa là được thu thập cho mục đích đó, no nghĩa là không. Bỏ trống một tín hiệu thì "không có ý nghĩa gì": bạn không cho phép cũng không hạn chế. Vì vậy dòng search=yes, ai-train=no không nói gì về câu trả lời AI.

Đặt dòng ở đâu: lỗi sai nhóm

robots.txt chia thành các nhóm. Mỗi nhóm bắt đầu bằng một hay nhiều dòng User-agent: và kéo dài đến dòng User-agent: tiếp theo (RFC 9309). Dòng trống và chú thích # không kết thúc nhóm. Bản thảo IETF về gắn mong muốn AI vào robots.txt cũng định nghĩa quy tắc này là một phần của nhóm. Vậy một dòng Content-Signal: đặt ở cuối file thuộc về nhóm đứng ngay trước nó.

Ngày 21/10/2026, chúng tôi đọc robots.txt của 8 website bằng chính đoạn mã của bản quét CiteStat (packages/core/content-signals.ts):

WebsiteDòng Content-SignalÁp dụng cho
blog.cloudflare.com, developers.cloudflare.com, docs.stripe.comsearch=yes, ai-input=yes, ai-train=yesMọi bot (User-agent: *)
citestat.comsearch=yes, ai-input=yes, ai-train=noMọi bot (User-agent: *)
www.cloudflare.comai-train=yes, search=yes, ai-input=yesChỉ Cohere-ai
vercel.com, docs.claude.comKhông có-
erpfit.comChỉ có văn bản chính sách trong chú thích #Không bot nào đọc được

Trường hợp www.cloudflare.com là bài học rõ nhất. File liệt kê 8 nhóm cho từng AI bot (GPTBot, Claude-Web cũ, PerplexityBot…), nhóm cuối là User-agent: Cohere-ai, rồi một chú thích, rồi dòng Content-Signal:. Theo cách chia nhóm của RFC 9309, dòng đó chỉ là mong muốn gửi cho Cohere. Rõ ràng ý định là gửi cho mọi bot, nhưng một bộ đọc tuân thủ chuẩn sẽ không hiểu như vậy.

Trường hợp erpfit.com là lỗi thứ hai hay gặp: chép nguyên văn bản chính sách (khối chú thích dài) nhưng không có dòng Content-Signal: thật. Chú thích chỉ dành cho người đọc. Chính robots.txt của citestat.com cũng mắc lỗi này cho đến ngày 21/10/2026.

Cách viết đúng

Đặt dòng ngay sau User-agent: *, trước các dòng Allow/Disallow:

User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /

Sitemap: https://website-cua-ban/sitemap.xml

Nếu bạn có nhóm riêng cho một bot (ví dụ User-agent: GPTBot), bot đó chỉ đọc nhóm của nó và bỏ qua nhóm *. Muốn bot đó cũng nhận tín hiệu, thêm dòng Content-Signal: vào cả nhóm đó. Xem cách viết nhóm cho từng bot trong bài AI crawler và robots.txt.

Chọn giá trị nào? Website muốn được AI trích dẫn nên để ai-input=yes: đó là tín hiệu cho câu trả lời AI có dẫn nguồn. ai-train là lựa chọn riêng; no không làm giảm khả năng được trích dẫn trong câu trả lời. Google Search Console có thể báo "Syntax not understood" cho dòng này; tài liệu của Cloudflare (cập nhật 8/10/2026) nói họ không thấy ảnh hưởng đến tốc độ thu thập hay SEO.

Content-Signal và Content-Usage của IETF

Bản thảo IETF của Cloudflare (draft-romm-aipref-contentsignals-00) là bản thảo cá nhân và đã hết hạn. Nhóm làm việc chính thức của IETF, AI Preferences (aipref), đang soạn một cú pháp khác:

Cloudflare Content SignalsIETF aipref (bản thảo)
Tên dòngContent-Signal:Content-Usage:
Nhãnsearch, ai-input, ai-trainsearch, ai-use, train-ai
Giá trịyes / noy / n
Nơi đặtrobots.txtrobots.txt (theo đường dẫn) và header HTTP
Trạng tháiĐang được dùng; bản thảo IETF hết hạnvocab-08 (14/9/2026), attach-05 (19/8/2026)

Hai bên dùng chung khái niệm nhưng tên khác nhau, nên một bộ đọc chỉ hiểu một cú pháp sẽ không thấy cú pháp kia. Vì vậy bản quét CiteStat đọc cả hai, kể cả header Content-Usage. Hiện nay Content-Signal là cú pháp có trên website thật; chúng tôi sẽ cập nhật bài này khi bản thảo IETF thành chuẩn.

Content-Signal có bắt buộc không?

Không. Cloudflare viết: tín hiệu "thể hiện mong muốn, không phải biện pháp kỹ thuật chống thu thập", và một số công ty có thể bỏ qua. Văn bản chính sách ghi rằng hạn chế qua Content Signals là bảo lưu quyền theo Điều 4 Chỉ thị EU 2019/790 về khai thác văn bản và dữ liệu; giá trị pháp lý cụ thể tùy từng quốc gia. Trong các tài liệu chúng tôi đọc, Google và OpenAI chưa công bố là có tuân theo dòng này. Để thật sự chặn một bot, dùng Disallow cho bot đó (xem AI crawler). Để kiểm soát những gì Google AI Overviews trích, dùng nosnippet và max-snippet.

Tự kiểm tra trong 1 phút

Chạy curl -s https://website-cua-ban/robots.txt và tìm dòng Content-Signal:. Kiểm tra ba điều: dòng không bắt đầu bằng #; dòng User-agent: gần nhất phía trên nó là * (hoặc bot bạn muốn); mỗi giá trị là yes hoặc no.

CiteStat kiểm tra phần nào?

Trong phần Agent Readiness, bản quét CiteStat đọc robots.txt theo nhóm như trên và header Content-Signal của trang. Bản quét đạt khi có ít nhất một khai báo đọc được, và báo khi tín hiệu chỉ có trong chú thích hoặc có giá trị không đọc được. 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, xem bảng giá: gói Pro 500.000₫/tháng (chưa VAT) cho 100 lượt quét mỗi ngày.

Câu hỏi thường gặp

Content-Signal có chặn được AI crawler không?

Không. Content-Signal chỉ nói bạn muốn nội dung được dùng thế nào sau khi thu thập. Cloudflare viết rõ đây là mong muốn, không phải biện pháp kỹ thuật, và một số công ty có thể bỏ qua. Muốn chặn thu thập, dùng Disallow cho từng bot trong robots.txt hoặc chặn ở tường lửa.

Dòng Content-Signal phải đặt ở đâu trong robots.txt?

Bên trong một nhóm User-agent, thường là User-agent: *. Theo RFC 9309, một nhóm kéo dài đến dòng User-agent tiếp theo, nên dòng đặt ở cuối file, sau nhóm của một bot cụ thể, chỉ thuộc về bot đó.

Bỏ trống một tín hiệu có nghĩa là gì?

Không có ý nghĩa gì. Theo chính sách của Cloudflare, khi không có tín hiệu cho một mục đích, chủ website không cho phép cũng không hạn chế mục đích đó qua Content-Signal.

Content-Signal và Content-Usage khác nhau thế nào?

Content-Signal là cú pháp của Cloudflare (search, ai-input, ai-train với yes/no). Content-Usage là cú pháp trong bản thảo của nhóm IETF AI Preferences (search, ai-use, train-ai với y/n), có cả dạng dòng robots.txt và header HTTP. Chưa bên nào là chuẩn chính thức: bản thảo IETF của Cloudflare đã hết hạn, còn bản thảo aipref vẫn đang được soạn.