Cách tạo llms.txt: Hướng dẫn từng bước cho Tìm kiếm AI
Hướng dẫn này sẽ trình bày chi tiết cách tạo, triển khai và xác thực tệp llms.txt cho trang web của bạn. Khi hoàn thành, các hệ thống AI sẽ có thể nhanh chóng hiểu được nội dung trang web của bạn và vị trí của các thông tin quan trọng nhất.
Tóm tắt cho AI: Để tạo llms.txt, hãy đặt một tệp Markdown tại /llms.txt chứa tên trang web của bạn (H1), một đoạn mô tả (blockquote) và các phần H2 chứa các liên kết được tuyển chọn kèm theo mô tả ngắn gọn trong một câu. Triển khai tệp tại thư mục gốc, xác nhận robots.txt cho phép các AI crawler truy cập và xác minh URL trả về định dạng văn bản thuần túy (plain text).
TL;DR
Tạo /llms.txt dưới dạng một chỉ mục Markdown chứa các trang quan trọng nhất của bạn. Bắt đầu bằng thẻ H1 (tên trang web), một thẻ blockquote (mô tả dài một đoạn văn), sau đó là 2-5 phần H2 chứa danh sách liên kết và mô tả trong một câu. Giới hạn tệp dưới ~100 mục, tùy chọn xuất bản một tệp llms-full.txt có dung lượng lớn hơn và xác nhận robots.txt không chặn các AI crawler truy cập /llms.txt.
Khởi đầu nhanh (5 bước)
- Tạo một tệp có tên
llms.txttrong thư mục gốc hoặc thư mụcpublic/của trang web. - Thêm thẻ H1 với tên trang web của bạn và một đoạn mô tả bằng thẻ blockquote.
- Nhóm các URL cốt lõi vào 2-5 phần H2 (ví dụ: Bắt đầu, Khái niệm cốt lõi, Tài liệu tham khảo) với đầy đủ URL và mô tả bằng một câu.
- Triển khai và truy cập
https://yoursite.com/llms.txtđể xác nhận máy chủ trả về định dạng văn bản thuần túy (plain text). - Xác nhận
robots.txtcho phép GPTBot, ClaudeBot, PerplexityBot và OAI-SearchBot truy cập, sau đó thêm tệp vào quy trình CI/CD để tệp được xuất bản trong mỗi bản phát hành (release).
Đó là một tệp llms.txt tối thiểu và khả thi (minimum viable). Phần còn lại của hướng dẫn này sẽ giải thích chi tiết từng bước, cùng với các mô hình triển khai, quy trình xác thực và các lỗi phổ biến cần tránh.
Điều kiện tiên quyết
Trước khi bắt đầu, bạn cần đảm bảo:
- Có quyền ghi (write access) vào thư mục gốc hoặc thư mục
public/của trang web, hoặc vào pipeline triển khai sinh ra chúng. - Sử dụng một trình soạn thảo văn bản hỗ trợ tốt định dạng UTF-8 và Markdown.
- Có một danh sách ngắn các trang quan trọng nhất — thường là 20-100 URL đại diện cho bề mặt kiến thức chuẩn (canonical knowledge surface) của trang web.
- Hiểu biết cơ bản về Markdown (heading, link, blockquote, list).
- Có quyền truy cập vào
robots.txtvà mọi cấu hình CDN/edge liên quan, để có thể xác nhận các AI crawler được phép truy cập và tệp được phục vụ dưới định dạngtext/plain. - Có một kế hoạch quản lý phiên bản —
llms.txtnên được tạo lại mỗi khi kiến trúc thông tin của hệ thống có sự thay đổi đáng kể.
Nếu trang web của bạn được tạo bằng các static site generator (Next.js, Astro, Gatsby, Hugo, Docusaurus), bạn có thể lưu trữ llms.txt trong source control và để build pipeline xuất ra tệp như bất kỳ tài nguyên tĩnh (static asset) nào khác.
Chi tiết đặc tả (Full spec walkthrough)
Đề xuất llms.txt tại llmstxt.org (Jeremy Howard, tháng 9 năm 2024) định nghĩa một cấu trúc nhỏ và mang tính quy chuẩn. Việc tuân thủ cấu trúc này giúp tệp của bạn dễ dàng được đọc hiểu bởi cả con người và các LLM toolchain.
Vị trí tệp và loại nội dung
- Đường dẫn:
/llms.txttại thư mục gốc của máy chủ (ví dụ:https://example.com/llms.txt). - Loại nội dung (Content type):
text/plain; charset=utf-8. - Định dạng: Markdown. Không sử dụng HTML, không JSON, không front matter.
Các thành phần bắt buộc và tùy chọn
Đặc tả định nghĩa cấu trúc từ trên xuống dưới như sau:
- H1 — tên trang web (bắt buộc). Dòng đầu tiên là
# Site Name. Đây là danh tính chuẩn được sử dụng bởi các LLM client để gắn nhãn tệp. - Blockquote — mô tả (bắt buộc). Ngay bên dưới thẻ H1, một thẻ blockquote duy nhất (
> ...) tóm tắt trang web là gì, phục vụ ai và loại nội dung chứa trong đó. Một đoạn văn ngắn là lựa chọn lý tưởng. - Văn bản tự do (tùy chọn). Bất kỳ số lượng đoạn văn nào mang tính ngữ cảnh — hướng dẫn cách đọc chỉ mục, ghi chú bản quyền/sử dụng, v.v. Hãy giữ nội dung ngắn gọn.
- Các phần H2 (khuyến nghị). Mỗi H2 giới thiệu một lĩnh vực nội dung (Bắt đầu, Tham chiếu API, Khái niệm). Dưới mỗi H2, một danh sách liên kết có định dạng
- [Title](URL): mô tả dài một câu. - ## Optional section (tùy chọn). Đặc tả cho phép một phần
## Optionalở cuối cùng chứa các liên kết mà mô hình có thể bỏ qua nếu ngữ cảnh bị giới hạn (nhật ký thay đổi, nội dung quá sâu, lưu trữ cũ). Các LLM client được kỳ vọng sẽ loại bỏ phần này đầu tiên khi cắt giảm (truncate) ngữ cảnh.
Tệp đồng hành llms-full.txt
Đề xuất này cũng cho phép đính kèm một tệp tùy chọn mang tên llms-full.txt tại cùng vị trí thư mục gốc, chứa toàn bộ văn bản Markdown của các trang được tham chiếu trong llms.txt. Tệp này có dung lượng lớn hơn và không cần thiết cho hầu hết các trang web — chỉ xuất bản nó nếu nội dung của bạn đủ nhỏ để đóng gói trong một tệp (thường giới hạn vài trăm KB) hoặc nếu bạn muốn cung cấp một kho ngữ liệu (corpus) hoàn chỉnh, độc lập cho các LLM client.
Những hiểu lầm về llms.txt
- Nó không phải là
robots.txt. Nó không kiểm soát quyền thu thập thông tin (crawl permissions). - Nó không phải là một sitemap. Nó là tài liệu được tuyển chọn, không mang tính bao quát và bao gồm cả văn xuôi diễn giải.
- Nó không phải là một API. Nó là một tệp văn bản tĩnh.
Ví dụ hợp lệ: llms.txt và llms-full.txt đầy đủ
Dưới đây là một tệp llms.txt hoàn chỉnh và tuân thủ đặc tả:
[[CODE_FENCE_LANG=markdown]]
Acme cung cấp API REST để xây dựng các tích hợp thanh toán. Tài liệu này bao gồm xác thực, endpoint, webhook, SDK và hướng dẫn vận hành cho các đợt triển khai trên môi trường production.
Chỉ mục này liệt kê các điểm truy cập chuẩn vào tài liệu của Acme. Các trang được xếp dưới phần "Optional" có thể được bỏ qua nếu ngữ cảnh bị giới hạn.
Getting started
- Quick Start: Thiết lập tích hợp thanh toán đầu tiên của bạn trong 5 phút.
- Authentication: Thiết lập API key và cấu hình OAuth 2.0.
Core API
- Payments: Tạo, thu và hoàn tiền thanh toán.
- Webhooks: Nhận thông báo sự kiện theo thời gian thực.
- Error Handling: Mã lỗi, logic retry và gỡ lỗi.
SDKs
- Node.js SDK: Thư viện JavaScript/TypeScript cho backend.
- Python SDK: Thư viện Python cho backend.
Optional
[[/CODE_FENCE]]
Một tệp llms-full.txt tối giản chia sẻ cùng tiêu đề nhưng chèn (inline) toàn bộ nội dung Markdown của từng trang:
[[CODE_FENCE_LANG=markdown]]
Acme Developer Docs
Acme cung cấp API REST để xây dựng các tích hợp thanh toán.
Quick Start
URL: https://docs.acme.com/quickstart
(toàn bộ Markdown của trang ở đây)
Authentication
URL: https://docs.acme.com/auth
(toàn bộ Markdown của trang ở đây)
[[/CODE_FENCE]]
Mô hình chung là: H1 cấp cao nhất + blockquote cho trang web, theo sau là H1 cho mỗi trang với blockquote > URL:, tiếp theo là Markdown của trang đó.
Các lỗi định dạng phổ biến
Những cấu trúc sau đây phá vỡ đặc tả và làm các LLM toolchain bối rối.
Thiếu H1. Một tệp mở đầu bằng văn xuôi hoặc thẻ H2 sẽ không có danh tính chuẩn:
[[CODE_FENCE_LANG=markdown]]
Đây là tài liệu cho Acme.
Getting started
[[/CODE_FENCE]]
URL tương đối. Việc phân giải (resolution) yêu cầu LLM client phải biết thông tin máy chủ (host):
[[CODE_FENCE_LANG=markdown]]
- Quick Start: Thiết lập trong 5 phút.
[[/CODE_FENCE]]
Sử dụng HTML thay vì Markdown. llms.txt chỉ được dùng định dạng Markdown:
[[CODE_FENCE_LANG=html]]
Acme Docs
[[/CODE_FENCE]]
Front matter ở phần đầu. Đặc tả không có front matter YAML; nó can thiệp vào quá trình phân tích cú pháp (parsing):
[[CODE_FENCE_LANG=markdown]]
title: Acme
Acme
[[/CODE_FENCE]]
Sao chép Sitemap. Hàng trăm URL không được tuyển chọn sẽ làm mất đi mục đích của tệp:
[[CODE_FENCE_LANG=markdown]]
Acme
... (hơn 500 mục nhập khác)
[[/CODE_FENCE]]
Hãy hướng tới việc duy trì ít hơn ~100 mục; mọi thứ khác đều thuộc về sitemap của bạn.
Các mô hình triển khai
Cách bạn phát hành llms.txt phụ thuộc vào stack của bạn. Dưới đây là bốn mô hình phổ biến nhất.
Next.js (App Router hoặc Pages Router)
Đặt tệp vào thư mục public/:
[[CODE_FENCE_LANG=plain text]]
your-project/
├── public/
│ ├── llms.txt
│ └── llms-full.txt
[[/CODE_FENCE]]
Next.js phục vụ các tài nguyên public/ ở thư mục gốc. https://example.com/llms.txt sẽ trả về tệp cùng với Content-Type: text/plain; charset=utf-8. Không yêu cầu cấu hình routing bổ sung. Nếu bạn cần phiên bản động (được tạo từ MDX), hãy thêm một route handler tại app/llms.txt/route.ts trả về Markdown đã được biên dịch cùng với Content-Type: text/plain.
Mintlify và các nền tảng tài liệu khác
Mintlify, Docusaurus và các nền tảng tài liệu tương tự tự động tạo llms.txt và llms-full.txt từ content tree của bạn. Đối với Mintlify, các tệp được tự động hiển thị tại /llms.txt và /llms-full.txt sau khi xuất bản; bạn có thể ghi đè chúng bằng cách thêm llms.txt vào thư mục gốc của repo. Docusaurus có một plugin do cộng đồng phát triển (docusaurus-plugin-llms-txt) để xuất các tệp này tại thời điểm biên dịch (build time). ReadMe và GitBook cũng hiển thị các tính năng tương tự dưới phần cài đặt AI/discovery của họ.
Cloudflare Pages và Workers
Đối với các trang web tĩnh trên Cloudflare Pages, hãy đặt llms.txt ở thư mục gốc của thư mục đầu ra (output directory); Pages sẽ tự động phục vụ tệp đó. Đối với việc tạo động, hãy sử dụng một Cloudflare Worker route phản hồi yêu cầu /llms.txt bằng Markdown đã biên dịch và Content-Type: text/plain. Tài liệu dành cho nhà phát triển của Cloudflare hiện đang xuất bản /llms.txt (và /llms-full.txt) sử dụng chính xác mô hình này, được tạo từ source tài liệu của họ.
Các trang web tĩnh và máy chủ tùy chỉnh
Đối với Hugo, Astro, Eleventy hoặc các trang web tĩnh tùy chỉnh, hãy sao chép llms.txt vào thư mục gốc của build output. Đối với Apache, hãy đảm bảo mime.types ánh xạ .txt thành text/plain. Đối với Nginx, hãy thêm:
[[CODE_FENCE_LANG=nginx]]
location = /llms.txt {
add_header Content-Type "text/plain; charset=utf-8";
try_files $uri =404;
}
[[/CODE_FENCE]]
Đối với WordPress, tải lên qua SFTP/SSH vào thư mục gốc tài liệu (cùng cấp với wp-config.php) hoặc sử dụng plugin quản lý các tệp ở thư mục gốc. Tránh việc phục vụ llms.txt thông qua PHP rewrite nếu có thể — một tệp tĩnh sẽ nhanh hơn và đáng tin cậy hơn.
Danh sách kiểm tra xác thực (14 bước)
Sau khi triển khai, hãy kiểm tra lần lượt mọi mục:
- Khả năng tiếp cận (Reachability). Lệnh
curl -I https://example.com/llms.txttrả về 200 OK. - Loại nội dung. Response header hiển thị
Content-Type: text/plain; charset=utf-8. - Mã hóa (Encoding). Tệp là UTF-8 và không có BOM.
- Có H1. Dòng đầu tiên (không trống) là
# Site Name. - Có blockquote. Ngay sau H1, một blockquote
> ...dùng để mô tả trang web. - URL tuyệt đối. Mọi liên kết đều sử dụng
https://..., không dùng đường dẫn tương đối. - Mô tả một câu. Mỗi liên kết có một mô tả cụ thể, duy nhất.
- Số lượng phần H2. Có từ 2-7 phần H2; hãy xóa hoặc gộp lại nếu nhiều hơn.
- Số lượng mục. Tổng số mục dưới ~100; hãy cắt giảm mạnh tay nếu cần.
- robots.txt.
robots.txtcho phép các bot (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, Google-Extended, Applebot-Extended) truy cập/llms.txt. - Không có HTML / front matter. Tệp là Markdown thuần túy.
- Phần Optional ở cuối. Nếu bạn sử dụng
## Optional, nó phải là phần cuối cùng. - Tệp đồng hành (nếu dùng).
llms-full.txtcũng có thể truy cập được, có định dạngtext/plain, và là UTF-8. - Build pipeline. Tệp được tái tạo (regenerated) trên mỗi bản triển khai; không có các snapshot cũ.
Một tệp vượt qua 14 bước kiểm tra trên là định dạng chuẩn và sẵn sàng để các AI client tham chiếu.
Thử nghiệm trong production
Khâu xác thực giúp bạn đảm bảo tệp chính xác. Thử nghiệm trên môi trường production cho bạn biết liệu các hệ thống AI có thực sự sử dụng nó hay không.
- Tìm nạp trực tiếp trong CDN log. Lọc nhật ký truy cập (access logs) cho
/llms.txtvà các AI user agent (GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot, OAI-SearchBot, Google-Extended, Applebot-Extended). Số lượng truy cập là tín hiệu đơn giản nhất cho thấy các lượt fetch đang diễn ra. - Mô phỏng crawler. Sử dụng lệnh
curl -A 'GPTBot/1.0' https://example.com/llms.txtvà tương tự với ClaudeBot/PerplexityBot để xác nhận không có edge rule nào chặn các UA này. - Thử nghiệm AI (Probes). Định kỳ đặt câu hỏi trực tiếp cho ChatGPT, Perplexity, Claude và Gemini về trang web của bạn (ví dụ: "Acme hỗ trợ những tính năng gì?") và kiểm tra các trích dẫn. Nếu hệ thống thường xuyên trích dẫn các trang từ chỉ mục
llms.txt, bạn có bằng chứng gián tiếp về hiệu quả. - Kiểm tra Diff trên mọi bản triển khai. Lưu
llms.txttrong source control và kiểm tra diff trong các pull request; một thao tác xóa vô tình có thể làm thu hẹp đáng kể phạm vi nhận diện AI của bạn một cách âm thầm. - Thiết lập chu kỳ review. Rà soát lại
llms.txthàng quý — ít nhất là khi bạn ra mắt các trụ cột nội dung mới hoặc cấu trúc lại kiến trúc thông tin (information architecture).
Các sai lầm phổ biến
- Bao gồm từng trang riêng lẻ.
llms.txtnên được tuyển chọn cẩn thận, không mang tính vét cạn (exhaustive). Hãy giữ nó dưới ~100 mục; mọi thứ khác nên được đưa vào sitemap.xml. - Sử dụng URL tương đối. Luôn sử dụng URL tuyệt đối, đầy đủ.
- Mô tả mơ hồ. Viết "Một bài viết về sản phẩm của chúng tôi" không cung cấp thông tin gì cho AI. Hãy viết các mô tả cụ thể, truyền tải được ý định.
- Quên cập nhật. Các tệp lỗi thời làm giảm độ tin cậy theo thời gian. Hãy tích hợp
llms.txtvào build pipeline của bạn. - Chặn AI crawler trong robots.txt. Nếu các bot (GPTBot, ClaudeBot, v.v.) không thể truy cập tệp, tệp đó sẽ vô dụng.
- Dùng front matter hoặc HTML. Đặc tả chỉ ưu tiên Markdown thuần túy. Front matter và HTML làm hỏng parser.
- Bỏ qua llms-full.txt khi trang web nhỏ. Nếu toàn bộ dữ liệu của bạn nằm gọn trong một tệp, việc xuất bản
llms-full.txtlà một nâng cấp rất rẻ tiền. - Coi llms.txt như thay thế cho structured data. Nó bổ sung cho JSON-LD và sitemap; nó không thay thế chúng.
Câu hỏi thường gặp
Q: llms.txt có được hỗ trợ chính thức bởi các nhà cung cấp AI không?
A: Đây là một quy ước đang phát triển được đề xuất tại llmstxt.org vào tháng 9 năm 2024 bởi Jeremy Howard. Tính đến đầu năm 2026, chưa có nhà cung cấp AI lớn nào (OpenAI, Anthropic, Google, Perplexity) chính thức cam kết tiêu thụ nó. Việc áp dụng là tự nguyện và xuyên biên giới (cross-vendor); hãy coi nó như một tính năng tương thích với chi phí thấp cho tương lai (forward-compatibility), không phải là một tín hiệu xếp hạng được đảm bảo.
Q: llms.txt khác với robots.txt như thế nào?
A: robots.txt là một tệp kiểm soát truy cập — nó nói cho các crawler biết chúng có thể tìm nạp những đường dẫn nào. llms.txt là tệp hỗ trợ khám phá (discovery file) — nó giúp LLM client biết nội dung nào quan trọng và cách tổ chức chúng. Chúng bổ sung cho nhau. Bạn vẫn cần robots.txt để cho phép AI user agent hoạt động trước đã, và bạn cần llms.txt để cung cấp cho chúng điểm nhập (entry point) được tuyển chọn khi chúng đã được phép.
Q: Tôi có nên xuất bản cả llms.txt và llms-full.txt không?
A: Luôn xuất bản llms.txt. Xuất bản llms-full.txt nếu nội dung của bạn đủ nhỏ để nằm gọn trong một tệp duy nhất (thường dưới vài trăm KB) và bạn muốn cung cấp một kho dữ liệu (corpus) độc lập. Với những trang lớn, bỏ qua llms-full.txt và chỉ dựa vào llms.txt để trỏ tới các trang chuẩn.
Q: Bao lâu thì tôi nên cập nhật llms.txt một lần?
A: Bất cứ khi nào kiến trúc thông tin (information architecture) có sự thay đổi rõ rệt — thêm các trang pillar mới, cấu trúc lại điều hướng, hoặc bỏ bớt các phần lỗi thời. Nhiều nhóm tự động tạo lại tệp này trong mọi lần deploy thông qua file cấu hình hoặc content tree, tránh rủi ro về độ lệch dữ liệu.
Q: Nếu trang web của tôi có hàng ngàn trang thì sao?
A: Hãy tuyển chọn một cách khắt khe. Chọn 50-100 trang tiêu biểu nhất đại diện cho hệ thống kiến thức chính. Sử dụng ## Optional cho các trang thuộc tầng kế tiếp. Mọi thứ vượt qua giới hạn này đều thuộc về sitemap.xml, chứ không phải llms.txt.
Q: llms.txt có giúp ích cho SEO truyền thống không?
A: Có, nhưng một cách gián tiếp. Tệp llms.txt hướng tới các máy khách LLM và hệ thống AI search, chứ không phải Googlebot. Tuy nhiên, việc áp dụng nguyên tắc chọn lọc các URL chính tắc và mô tả rõ ràng sẽ có xu hướng cải thiện internal link, chất lượng sitemap và cấu trúc dữ liệu, và tất cả những yếu tố này đều đóng góp tích cực cho SEO cổ điển.
Q: Làm cách nào để tôi phục vụ llms.txt từ một thư mục con hoặc subdomain?
A: Đặc tả mặc định việc đặt tại cấp host (host-level) ở vị trí /llms.txt. Nếu bắt buộc phải phát hành từ một subdomain (ví dụ: docs.example.com/llms.txt), hãy xuất bản một tệp riêng cho mỗi host. Việc đưa vào một thư mục con (ví dụ: /docs/llms.txt) không đúng tiêu chuẩn và khả năng lớn sẽ bị các AI client bỏ sót.
Q: Tôi có thể chặn những nhà cung cấp AI cụ thể đọc llms.txt không?
A: Có — hãy chặn thông qua robots.txt. Đặt lệnh Disallow một UA nhất định truy cập /llms.txt (hoặc cấm truy cập toàn trang) nếu bạn không muốn nhà cung cấp đó tải về nội dung của mình. Lưu ý rằng việc tuân thủ cấu hình user-agent dựa trên tính tự nguyện của các bot.
Nguồn tham khảo
- llmstxt.org — kiểm chứng ngày 2026-05-01 — đề xuất chuẩn và đặc tả định dạng (format spec).
- Answer.AI announcement — kiểm chứng ngày 2026-05-01 — lý do cốt lõi và thiết kế gốc.
- Cloudflare Developer Docs llms.txt — kiểm chứng ngày 2026-05-01 — ví dụ chuẩn trên môi trường production.
- Mintlify llms.txt support docs — kiểm chứng ngày 2026-05-01 — mô hình tự động xuất bản mặc định (out-of-the-box).
Bài viết liên quan
What Is GEO? Generative Engine Optimization Defined
GEO (Generative Engine Optimization) is the practice of structuring content so AI search engines retrieve, understand, synthesize, and cite it in generated answers.
AI Crawl Signals: How AI Discovers Content
Technical reference for the signals AI systems use to discover, access, and prioritize web content — including sitemaps, llms.txt, robots.txt, structured data, and HTTP headers.
ai.txt Starter Template: Copy-Ready AI Access Policy File
A copy-ready ai.txt starter template for declaring AI crawler access policies, attribution requirements, and content licensing terms.