llms.txt là gì? Phân tích 1.240 Website: Vì sao 80% triển khai sai & Cách cấu hình chuẩn GEO cho ChatGPT, Perplexity (2026)
Khi người dùng chuyển dần từ thói quen gõ từ khóa ngắn trên Google sang đặt câu hỏi trực tiếp cho ChatGPT Search (OAI-SearchBot), Perplexity (PerplexityBot), Claude Search (ClaudeBot) và Google AI Mode, một nghịch lý kỹ thuật đang diễn ra âm thầm trên hàng nghìn website: Trang web đạt điểm SEO truyền thống rất cao và có đầy đủ sitemap.xml, nhưng lại hoàn toàn vắng bóng trong câu trả lời trích dẫn của AI.
Trong quá trình vận hành hệ thống kiểm toán thực nghiệm trên 1.240 tên miền sản xuất (Production Domains) theo bộ tiêu chuẩn mở GEO-62 (công bố mã định danh khoa học quốc tế tại CERN Zenodo DOI 10.5281/zenodo.23582947), chúng tôi nhận thấy hai con số đáng chú ý:
- 82,6% website chưa triển khai tệp
/llms.txtở thư mục gốc, buộc các bộ thu thập RAG (Retrieval-Augmented Generation) phải tự bóc tách từng trang HTML nặng từ250 KBđến1,4 MBđầy mã hidrat hóa JavaScript, CSS inline và DOM điều hướng. - Đáng tiếc hơn, trong nhóm 17,4% website đã tự tạo
/llms.txt, có tới hơn 80% triển khai sai quy chuẩn kỹ thuật — khiến các tác nhân AI bỏ qua tệp này ngay từ bước tiền xử lý.
Bài viết này sẽ bóc tách kiến trúc kỹ thuật của chuẩn /llms.txt, chỉ ra 5 lỗi phổ biến nhất khiến tệp /llms.txt mất tác dụng, và hướng dẫn cách tạo bộ đôi /llms.txt + /llms-full.txt chuẩn xác trên Cloudflare Workers, Next.js và Nginx.
1. llms.txt là gì? Sự khác biệt cốt lõi giữa robots.txt, sitemap.xml và llms.txt
Nếu bạn từng cấu hình SEO kỹ thuật, chắc hẳn bạn đã quen với robots.txt và sitemap.xml. Tuy nhiên, hai tệp này được thiết kế cho kỷ nguyên bộ máy tìm kiếm truyền thống (Crawler lập chỉ mục bất đồng bộ), không phải cho Cửa sổ Ngữ cảnh Thời gian thực (Real-time Context Window) của các mô hình ngôn ngữ lớn (LLM).
Để hiểu rõ llms.txt là gì, ví dụ mẫu và cách tạo chuẩn GEO (AEO-021), hãy nhìn vào bảng so sánh cơ chế vận hành của 3 tệp tiêu chuẩn đặt tại thư mục gốc (root directory):
| Tiêu chí Kỹ thuật | robots.txt (RFC 9309) |
sitemap.xml (Chuẩn sitemaps.org) |
/llms.txt & /llms-full.txt (Chuẩn GEO AEO-021) |
|---|---|---|---|
| Mục đích cốt lõi | Cấp quyền hoặc chặn đường dẫn (Allow / Disallow) cho từng User-Agent. |
Liệt kê danh sách toàn bộ URL và ngày cập nhật (<lastmod>) để bot xếp hàng thu thập. |
Cung cấp bản đồ ngữ nghĩa cô đọng bằng Markdown và dữ liệu thực thể đã làm sạch sẵn cho LLM/RAG. |
| Định dạng phản hồi | text/plain (Chỉ thị điều hướng). |
application/xml (Danh sách URL thô, không có ngữ cảnh nội dung). |
text/plain; charset=utf-8 hoặc text/markdown; charset=utf-8. |
| Chi phí Token khi AI đọc | Không chứa nội dung tri thức để trích dẫn. | Bot phải mở tiếp hàng chục URL HTML nặng (50.000+ tokens rác DOM). |
Giảm 70% – 90% nhiễu token; toàn bộ định vị sản phẩm, bảng giá, API nằm gọn trong < 2.500 tokens. |
| Đối tượng tiêu thụ chính | Googlebot, Bingbot, và các AI Crawler kiểm tra quyền truy cập. |
Trình lập chỉ mục nền của Google, Bing, Yandex. | ChatGPT-User, OAI-SearchBot, PerplexityBot, ClaudeBot, Cursor, Claude Code và các Agentic Browsers. |
Nói một cách ngắn gọn:
robots.txttrả lời câu hỏi: "Bot nào được phép bước vào nhà?"sitemap.xmltrả lời câu hỏi: "Trong nhà có bao nhiêu căn phòng?"/llms.txttrao tận tay AI một Hồ sơ Kiến trúc cô đọng: "Đây là tên thực thể, thông số kỹ thuật chính xác, bảng giá niêm yết và đường dẫn tới các tài liệu Markdown sạch nhất để trích dẫn ngay lập tức."
2. Phân tích 1.240 Website: Vì sao 80% tệp /llms.txt đã triển khai lại thất bại?
Khi đội ngũ kỹ thuật của chúng tôi xây dựng bộ kiểm tra quy tắc AEO-021 trên nền tảng kiểm toán SEO, AEO & GEO trực tiếp AEORank, chúng tôi không chỉ kiểm tra xem đường dẫn GET /llms.txt có trả về mã 200 hay không, mà còn phân tích sâu cấu trúc byte, HTTP Headers và đồ thị liên kết bên trong tệp.
Dưới đây là 5 lỗi kỹ thuật phổ biến nhất khiến hơn 80% tệp /llms.txt bị các bộ thu thập AI từ chối:
Lỗi #1: Phản hồi "Soft-404" từ Single-Page Application (SPA Fallback — Chiếm 34%)
Nhiều đội ngũ dùng React, Vite hoặc Vue Router cấu hình quy tắc try_files $uri /index.html trên Nginx/Cloudflare Pages. Khi trình thu thập AI gọi GET https://domain.com/llms.txt, máy chủ vẫn trả về HTTP 200 OK nhưng phần thân (body) lại là... nguyên tệp index.html của ứng dụng SPA (<!DOCTYPE html><html>...).
- Hậu quả: Bộ phân tích Markdown của LLM phát hiện thẻ HTML ngay dòng đầu tiên và hủy toàn bộ phiên đọc.
Lỗi #2: Nhầm llms.txt thành một tệp sitemap.xml dạng chữ (Chiếm 23%)
Rất nhiều plugin tự động chỉ lấy danh sách 200 đường dẫn URL từ sitemap.xml rồi nối thành danh sách gạch đầu dòng mà không hề có câu mô tả ngữ cảnh 1 dòng đi kèm mỗi URL, cũng không có tóm tắt thông số cốt lõi (bảng giá, API, đối tượng khách hàng).
- Hậu quả: Không giúp ích gì cho giai đoạn Context Grounding của RAG vì mô hình vẫn không biết URL nào chứa câu trả lời để ưu tiên truy xuất.
Lỗi #3: Kẹt tường lửa WAF hoặc chặn nhầm AI Search Bot trong robots.txt (Chiếm 19%)
Tệp /llms.txt được viết rất chuẩn, nhưng cấu hình Cloudflare Bot Fight Mode hoặc robots.txt lại đang đặt Disallow: / cho OAI-SearchBot, ChatGPT-User, PerplexityBot hoặc ClaudeBot. Bạn có thể xem chi tiết cách phân tách quyền giữa bot huấn luyện (Training Bot) và bot tìm kiếm thời gian thực (Search Bot) trong bài phân tích chuyên sâu về GEO là gì trong SEO và cách tối ưu tìm kiếm AI tạo sinh.
Lỗi #4: Sai Header Content-Type hoặc thiếu charset=utf-8 cho Tiếng Việt (Chiếm 14%)
Khi máy chủ trả về Content-Type: application/octet-stream hoặc thiếu charset=utf-8, các ký tự tiếng Việt có dấu bị lỗi mã hóa (mojibake), hoặc trình thu thập AI coi đây là tệp nhị phân cần tải xuống thay vì văn bản ngữ nghĩa đọc trực tiếp.
Lỗi #5: Liên kết tới các URL bị 404 hoặc chuyển hướng lòng vòng 301 -> 302 (Chiếm 10%)
Các tác nhân AI thời gian thực có ngân sách thời gian chờ (timeout budget) cực kỳ khắt khe (1.500ms – 3.000ms). Nếu các đường dẫn tài liệu bên trong /llms.txt bị gãy (404) hoặc qua nhiều tầng redirect, điểm tin cậy thực thể sẽ bị hạ ngay lập tức.
3. Cấu trúc giải phẫu một tệp /llms.txt đạt chuẩn 100% (Chuẩn AEO-021)
Một tệp /llms.txt chuẩn mực cần tuân thủ đúng thứ tự ưu tiên đọc từ trên xuống dưới của LLM, dung lượng giữ ở mức 2 KB – 15 KB (400 – 2.500 tokens), bao gồm 5 khối bắt buộc:
# [Tên Thương Hiệu / Sản Phẩm] — [Định vị 1 dòng rõ ràng]
> [Tóm tắt thực thể 2–3 câu theo nguyên lý Answer-First: Sản phẩm giải quyết bài toán gì, phục vụ đối tượng nào, thông số định lượng cốt lõi và thị trường hoạt động.]
## 1. Thông Số Cốt Lõi & Bảng Giá Thực Tế (Key Facts & Pricing)
- **Mô hình hoạt động:** [Ví dụ: SaaS / Open-Spec API / Dịch vụ B2B]
- **Thông số kỹ thuật:** [Các con số đã kiểm chứng: 62 quy tắc tất định, thời gian phản hồi < 5s...]
- **Bảng giá niêm yết:** [Ghi rõ các gói cước minh bạch để AI không tự suy diễn giá]
- **Tài liệu toàn văn cho RAG:** https://domain.com/llms-full.txt
## 2. Tài Liệu Trọng Tâm & Hướng Dẫn Kỹ Thuật (Core Documentation)
- [llms.txt là gì & Cách tạo chuẩn GEO](https://domain.com/tri-thuc/llms-txt-la-gi-cach-tao-chuan-geo): Phân tích cấu trúc /llms.txt, /llms-full.txt và mã nguồn triển khai thực tế.
- [Bản Markdown thuần cho AI Agent](https://domain.com/tri-thuc/llms-txt-la-gi-cach-tao-chuan-geo.md): Phiên bản text/markdown không chứa mã HTML/CSS.
## 3. Giao Thức Tác Nhân & API (Agent & API Endpoints)
- [OpenAPI 3.0.3 Specification](https://domain.com/openapi.json): Đặc tả REST API hỗ trợ kiểm thử sandbox.
- [RFC 9727 API Catalog](https://domain.com/.well-known/api-catalog): Điểm nút khám phá API tự động theo chuẩn IETF.
## 4. Đồ Thị Thực Thể Xác Thực (Verified Knowledge Graph / sameAs)
- Wikidata Entity: https://www.wikidata.org/wiki/Q141814049
- CERN Zenodo DOI: https://doi.org/10.5281/zenodo.23582947
- GitHub Open Spec: https://github.com/aizaloapp/aeorank
Vì sao nên kết hợp kiến trúc 2 tầng: /llms.txt + /llms-full.txt + hậu tố .md?
- Tầng 1 (
/llms.txt— Bản đồ Điều hướng Nhanh): Giúp AI nắm bắt toàn bộ khung thực thể chỉ trong 1 lần gọi HTTP nhẹ (< 10 KB). - Tầng 2 (
/llms-full.txt& các URL.md): Khi người dùng hỏi sâu về một khía cạnh kỹ thuật hoặc so sánh chi tiết, các công cụ như Perplexity, Claude hay Cursor có thể nạp thẳng/llms-full.txthoặc phiên bản.mdcủa từng bài viết để có trọn vẹn nội dung chuyên sâu mà không tốn một byte nào cho thẻ<div>,<script>hay quảng cáo.
4. Mã nguồn triển khai thực tế (Cloudflare Workers & Next.js App Router)
Một lưu ý quan trọng về SEO: Bạn cần gắn kèm header X-Robots-Tag: noindex, nofollow cho các tệp máy đọc (/llms.txt, /llms-full.txt, *.md) để Google Search truyền thống không lập chỉ mục nhầm tệp văn bản thô cạnh tranh với trang bài viết HTML chính thức (tránh lỗi Duplicate Content), trong khi các AI Search Bot vẫn đọc dữ liệu bình thường.
Cách 1: Triển khai trên Cloudflare Workers (worker.mjs)
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (url.pathname === "/llms.txt") {
return new Response(LLMS_TXT_CONTENT, {
status: 200,
headers: {
"Content-Type": "text/plain; charset=utf-8",
"Cache-Control": "public, max-age=3600",
"X-Robots-Tag": "noindex, nofollow",
"Access-Control-Allow-Origin": "*"
}
});
}
// ... các route khác
}
};
Cách 2: Triển khai động trên Next.js App Router (app/llms.txt/route.ts)
import { NextResponse } from "next/server";
export async function GET() {
const content = `# Tên Thương Hiệu — Mô tả định vị
> Tóm tắt thực thể trực diện cho AI Search...
`;
return new NextResponse(content, {
status: 200,
headers: {
"Content-Type": "text/plain; charset=utf-8",
"Cache-Control": "public, s-maxage=3600, stale-while-revalidate=86400",
"X-Robots-Tag": "noindex, nofollow",
},
});
}
Đừng quên bổ sung dòng quảng bá HTTP Link header trên phản hồi của trang chủ (GET /) theo đúng tinh thần RFC 8288 để các Agent tự động phát hiện tệp /llms.txt ngay từ lần chạm đầu tiên:
Link: <https://domain.com/llms.txt>; rel="llms-txt"; type="text/plain"
5. Cách kiểm tra và xác thực /llms.txt của bạn trong 5 giây
Sau khi triển khai, thay vì đoán mò xem các công cụ AI có đọc được tệp /llms.txt của mình hay không, bạn có thể kiểm chứng qua 2 bước:
- Kiểm tra nhanh bằng
curltrên Terminal:
Đảm bảo phản hồi trả về đúngcurl -I https://aeorank.app/llms.txtHTTP/2 200,content-type: text/plain; charset=utf-8và không bị dính trang lỗi403của tường lửa. - Chạy trình xác thực tự động theo bảng kiểm chuẩn:
Bạn có thể đối chiếu toàn bộ cấu trúc cú pháp, header
Content-Type, quyền truy cập của 10 AI Bots và độ phủ thực thể thông qua bảng kiểm AEO Checklist & công cụ llms.txt Validator để phát hiện sớm các lỗi Soft-404 hoặc link gãy trước khi AI vào thu thập.
Toàn bộ danh mục 62 quy tắc kiểm toán kỹ thuật (rules-index.json) và đặc tả OpenAPI 3.0.3 cũng được chúng tôi mở hoàn toàn tại kho mã nguồn GitHub Open Spec aizaloapp/aeorank để cộng đồng kỹ sư Việt Nam có thể tích hợp trực tiếp vào quy trình CI/CD của mình.
All rights reserved