robots.txt, noindex và sitemap: mỗi thứ làm gì

robots.txt quản lý thu thập, noindex quản lý lập chỉ mục, sitemap liệt kê URL. Mỗi thứ làm được gì, ví dụ đã kiểm tra và các lỗi đắt giá.

Trong bài này

Ba thứ hay được nhắc chung là "cài đặt SEO": robots.txt, chỉ thị noindex và sitemap.xml. Chúng trả lời ba câu hỏi khác nhau, và dùng thứ này thay việc của thứ kia là nguyên nhân khiến nhiều website biến mất khỏi kết quả tìm kiếm, hoặc lại hiện những trang muốn giấu. Tóm tắt:

Câu hỏi nó trả lờiAi đọcĐiều nó không làm được
robots.txtBot có được tải URL này không?Bot, trước khi tảiXóa trang khỏi kết quả
noindexTrang có được hiện trong kết quả không?Bot, sau khi tải trangCó tác dụng với trang bị chặn tải
sitemap.xmlNhững URL nào tồn tại, đổi lúc nào?Công cụ tìm kiếm, như gợi ýÉp thu thập hay lập chỉ mục

Bạn có thể thử mọi ví dụ dưới đây trong công cụ tạo robots.txt và sitemap; kết quả trích dẫn là kết quả trình kiểm tra RFC 9309 của nó trả về.

robots.txt: chính sách tải, khớp theo quy tắc dài nhất

robots.txt nằm ở gốc tên miền (https://example.com/robots.txt) và chỉ áp dụng cho đúng tên miền và giao thức đó. Lấy tệp này:

User-agent: *
Disallow: /search
Allow: /search/help
Disallow: /*?sort=

User-agent: Googlebot-Image
Disallow: /private-photos/

Bot xử lý nó như sau:

BotURLKết quảQuy tắc quyết định
Googlebot/search?q=giaybị chặndòng 2, Disallow: /search
Googlebot/search/helpđược phépdòng 3, Allow: /search/help (dài hơn)
Googlebot/products?sort=pricebị chặndòng 4, Disallow: /*?sort=
Googlebot/products?color=red&sort=priceđược phépkhông quy tắc nào khớp
Bingbot/searching-tipsbị chặndòng 2, Disallow: /search
Googlebot-Image/search?q=xđược phépnhóm riêng của nó không có quy tắc này

Ba dòng trong đó làm nhiều người bất ngờ:

  1. Quy tắc là tiền tố. Disallow: /search chặn luôn /searching-tips và /search-engine-guide. Hãy viết /search/ hoặc /search$ nếu đó là ý bạn.
  2. `?sort=` không phải `&sort=`. Tham số ở vị trí thứ hai không bị khớp. Thêm cả Disallow: /*&sort=.
  3. *Bot có nhóm riêng thì bỏ qua nhóm `.** Googlebot-Image chỉ theo dòng 6 và 7, nên nó vẫn tải được /search`. Hãy lặp lại quy tắc chung trong mọi nhóm có tên.

Từ RFC 9309 (2022), các quy tắc này đã thành chuẩn: quy tắc khớp dài nhất thắng, bằng nhau thì Allow thắng, * khớp mọi thứ, $ neo vào cuối, tên user-agent so khớp không phân biệt hoa thường.

noindex: cách duy nhất chắc chắn để "đừng hiện trang này"

noindex là thẻ meta trong trang hoặc header HTTP:

<meta name="robots" content="noindex" />
X-Robots-Tag: noindex

Header dùng được cho PDF và ảnh, vốn không có <head>. Bot phải tải trang mới thấy được. Đây là cái bẫy kinh điển: một trang vừa bị chặn trong robots.txt vừa gắn noindex. Bot không bao giờ tải nó, không bao giờ thấy thẻ, và nếu website khác có liên kết tới URL đó, nó vẫn có thể nằm trong kết quả dưới dạng một liên kết trơn "Không có thông tin cho trang này". Muốn xóa trang: cho phép thu thập, thêm noindex, chờ trang rời khỏi kết quả, rồi mới chặn nếu thật sự cần.

Với trường hợp gấp, công cụ xóa URL trong Search Console ẩn một URL khoảng sáu tháng, nhưng đó là biện pháp tạm thời, không thay được noindex.

sitemap.xml: danh sách gợi ý

Sitemap cho công cụ tìm kiếm biết những URL nào bạn coi là chuẩn và, với <lastmod>, chúng thay đổi lúc nào. Nó không giúp trang lên hạng hay được lập chỉ mục; nó giúp được phát hiện, nhất là với website mới, website lớn và trang ít liên kết. Giao thức giới hạn mỗi tệp 50.000 URL và 50 MB chưa nén; website lớn hơn thì chia thành nhiều tệp liệt kê trong sitemap index. Google bỏ qua <changefreq> và <priority>, chỉ dùng <lastmod> khi nó luôn chính xác, nên một ngày tháng đổi sau mỗi lần build sẽ dạy Google bỏ qua ngày của bạn.

Hai chi tiết hay sai:

  • Thoát ký tự. https://example.com/blog/cà-phê?tag=a&page=2 phải viết là <loc>https://example.com/blog/c%C3%A0-ph%C3%AA?tag=a&amp;page=2</loc>: mã hóa phần trăm cho URL, rồi &amp; cho XML. Một dấu & không thoát làm hỏng cả tệp.
  • Liệt kê thứ bạn loại trừ. URL trong sitemap mà bị robots.txt chặn, có noindex, chuyển hướng hoặc trỏ canonical sang nơi khác là tín hiệu mâu thuẫn. Sitemap chỉ nên chứa URL cuối cùng, lập chỉ mục được.

Dùng cái nào khi nào

  • Giữ bot tránh xa vùng URL vô tận hoặc tốn tài nguyên (tìm kiếm nội bộ, bộ lọc, lịch): robots.txt.
  • Không cho trang hiện trong kết quả (trang cảm ơn, bản thử nghiệm, trang thẻ mỏng): noindex, và cho phép thu thập.
  • Giữ nội dung riêng tư: đăng nhập. robots.txt là công khai và chỉ là lời đề nghị; ghi /ke-hoach-mat/ vào đó là tự quảng cáo đường dẫn.
  • Giúp trang mới hoặc nằm sâu được tìm thấy: sitemap.xml, gửi trong Search Console hoặc khai báo bằng dòng Sitemap: trong robots.txt.
  • Từ chối huấn luyện AI: nhóm riêng cho các bot như GPTBot, ClaudeBot hay Google-Extended trong robots.txt. Google-Extended chỉ là một tên mã, không ảnh hưởng Google Search.

Các lỗi thường gặp

  • `Disallow: /` chép từ bản thử nghiệm sang bản chính thức. Dòng đắt giá nhất trong SEO. Hãy kiểm tra tệp thật sau mỗi lần triển khai.
  • Chặn CSS và JavaScript. Google dựng trang để đánh giá; tài nguyên bị chặn có thể khiến trang trông hỏng hoặc trống.
  • Mong `Crawl-delay` làm Google chậm lại. Google bỏ qua nó; nó chưa bao giờ nằm trong chuẩn.
  • Dùng robots.txt để xóa trang. Dùng noindex, rồi có thể chặn khi trang đã biến mất.
  • Sitemap đặt ở tên miền khác. cdn.example.com/sitemap.xml không được liệt kê URL của www.example.com trừ khi cả hai được xác minh cùng nhau.

Thử ngay

Dán robots.txt đang chạy vào thẻ kiểm tra của công cụ tạo robots.txt và sitemap, liệt kê các URL quan trọng, và kiểm tra với Googlebot cùng các bot AI bạn định chặn. Sau đó tạo sitemap từ danh sách URL và xem báo cáo từng dòng để tìm trùng lặp hay tên miền lạ. Với các thẻ trong từng trang, kể cả noindex, hãy dùng công cụ tạo thẻ meta và Open Graph.

Công cụ được nhắc trong bài

Về trang blog