robots.txt là gì? User-agent và Disallow cơ bản cho SEO kỹ thuật
robots.txt là “bản đồ gợi ý” cho crawler tại gốc site — không phải khóa bảo mật và không thay noindex. Nắm vững hai dòng: User-agent (bot nào) và Disallow (path nào bỏ qua). Staging: Disallow: /. Production: cho crawl trang quan trọng, chặn admin/API nội bộ, khai báo Sitemap. Tạo nhanh bằng robots.txt generator, copy vào root.
Sinh viên deploy Vercel/Netlify lần đầu, freelancer bàn giao landing SME, hay team outsourcing nhận domain client — câu hỏi lặp lại: “robots.txt là gì, mình cần viết gì?” Nhiều bài dài về AI crawler và llms.txt, nhưng phần User-agent + Disallow cơ bản vẫn là chỗ sai nhiều nhất (chặn nhầm cả site, hoặc tưởng Disallow = xóa khỏi Google).
Bài này đi đúng phần nền: cú pháp tối thiểu, mẫu hay dùng, khác noindex, checklist trước khi merge.
Ai cần bài này
- Dev frontend tự host blog / portfolio Astro, Next, WordPress
- Freelancer Việt Nam giao site cho khách SME — tránh index staging
- QA / tech lead review PR có thay đổi crawl
- Người mới SEO kỹ thuật muốn hiểu file trước khi đụng Search Console nâng cao
robots.txt là gì?
robots.txt là file văn bản công khai tại:
https://ten-mien-cua-ban.com/robots.txt
Crawler “tử tế” (Googlebot, Bingbot…) đọc file này trước khi quyết định fetch URL nào. Nội dung là lời đề nghị (advisory), không phải ACL server.
| Được | Không được |
|---|---|
Giảm crawl vào /admin/, trang tìm kiếm nội bộ, bản nháp | Giấu secret, PDF lương, API key |
| Gợi ý vị trí Sitemap | Ép bot xấu / scraper tuân thủ |
| Tách rule theo User-agent | Xóa URL đã index chỉ bằng Disallow |
Muốn bảo mật → đăng nhập, firewall, không public path. robots.txt chỉ giúp bot lớn tiết kiệm crawl budget và tránh index nhầm khu vực kỹ thuật.
Hai khối nền: User-agent và Disallow
Cú pháp tối thiểu:
User-agent: *
Disallow: /admin/
Allow: /admin/login
Sitemap: https://example.com/sitemap.xml
User-agent — “bot nào?”
| Giá trị | Ý nghĩa |
|---|---|
* | Mọi crawler chưa bị rule riêng ghi đè |
Googlebot | Chỉ Google Search |
Bingbot | Chỉ Bing |
GPTBot / bot AI khác | Rule riêng nếu bạn muốn hạn chế AI crawl (nâng cao; bài này chỉ nhắc) |
Bot đọc nhóm rule khớp tên mình; nếu không có nhóm riêng thì dùng nhóm *.
Disallow — “đừng vào path này”
| Dòng | Hiệu ứng thực tế |
|---|---|
Disallow: (trống) | Cho phép crawl rộng |
Disallow: / | Chặn gần như mọi path — staging / preprod |
Disallow: /admin/ | Không crawl dưới /admin/ |
Disallow: /api/ | Thường dùng cho API nội bộ không cần SERP |
Allow là ngoại lệ trong vùng đã Disallow (ví dụ cho phép một URL cụ thể). Độ ưu tiên phụ thuộc độ dài/path cụ thể hơn — khi nghi ngờ, test bằng công cụ Google thay vì đoán.
Ba mẫu copy được ngay
| Tình huống | Nội dung gợi ý | Lưu ý |
|---|---|---|
| Staging / preview | User-agent: * + Disallow: / | Tránh index bản nháp; kết hợp auth nếu có data thật |
| Production mở | User-agent: * + Disallow: trống + Sitemap: | Site marketing/blog muốn được khám phá tối đa |
| Production có admin | Disallow /admin/, /cgi-bin/, có thể /search | Đừng Disallow CSS/JS cần để Google render |
Mẫu A — staging (an toàn mặc định)
User-agent: *
Disallow: /
Mẫu B — production blog / landing
User-agent: *
Disallow:
Sitemap: https://example.com/sitemap.xml
Mẫu C — site có khu vực kỹ thuật
User-agent: *
Disallow: /admin/
Disallow: /api/internal/
Disallow: /draft/
Allow: /admin/login
Sitemap: https://example.com/sitemap.xml
Comment # được nhiều parser chấp nhận nhưng không phải mọi bot hiểu giống nhau — giữ file gọn, comment ngắn.
Disallow ≠ noindex (hay nhầm nhất)
| Cơ chế | Kết quả tìm kiếm |
|---|---|
| Disallow trong robots.txt | Bot có thể không fetch HTML → khó đọc meta; URL đã index có thể còn trên SERP dạng “mỏng” |
| meta robots noindex / header | Bot được phép vào trang, rồi bỏ khỏi index theo chỉ thị |
| Muốn gỡ khỏi Google | Cho crawl + noindex (hoặc xóa + 404/410), dùng Removals trên Search Console khi cần gấp |
Case thất bại phổ biến: Dev thấy URL nhạy cảm trên Google → thêm Disallow: /secret/ → URL vẫn nằm đó vì Google không vào được để đọc noindex. Đúng thứ tự: bỏ Disallow (tạm), thêm noindex, đợi crawl, rồi mới siết Disallow nếu vẫn muốn giảm crawl.
Checklist deploy (freelancer / outsourcing)
- File nằm đúng gốc host (
/robots.txt), không phải/blog/robots.txt - Staging ≠ production: preview Vercel có
Disallow: /hoặc bảo vệ bằng auth - Không chặn
/_next/static,/assets, CSS/JS cần render Sitemap:dùng HTTPS + domain thật, khônglocalhost- Sau khi sửa:
curl -I https://domain/robots.txtvà kiểm tra URL Inspection - Trang pháp lý / chính sách cần index thì không Disallow nhầm
Case study: index nhầm subdomain preview
Team giao SME tại TP.HCM dùng *.vercel.app. Một lần merge nhầm robots production (Disallow trống) lên branch preview → Google index bản tiếng Việt chưa proofread. Sửa: mọi preview mặc định Disallow: /, production mới mở; thêm X-Robots-Tag: noindex trên header staging. Hai lớp — robots.txt không đủ một mình khi CDN cache header.
Tạo file bằng generator (không đoán cú pháp)
Thay vì gõ tay dễ thiếu dòng, mở robots.txt generator:
- Điền User-agent (
*hoặcGooglebot) - Thêm từng dòng Disallow / Allow
- Gắn Sitemap URL nếu production
- Bấm tạo → sao chép toàn bộ → commit thành
public/robots.txt(hoặc cấu hình host)
Công cụ chạy trên trình duyệt — phù hợp khi bạn đang ngồi quán cafe với laptop client, không cần upload config lên service lạ. Sau khi deploy, đối chiếu lại bằng trình duyệt mở đúng URL gốc.
Lỗi thường gặp (và cách tránh)
| Lỗi | Hệ quả | Cách tránh |
|---|---|---|
Disallow: / lên production | Mất organic gần như toàn bộ | Review env trước merge |
| Disallow toàn bộ rồi kỳ vọng noindex | URL “ma” còn trên SERP | Dùng noindex đúng nghĩa |
Sitemap relative (/sitemap.xml) | Một số bot bỏ qua | URL tuyệt đối https://… |
Chặn / nhưng Allow trang quan trọng sai thứ tự | Hành vi khó đoán | Giữ rule đơn giản; test |
Copy file mẫu nước ngoài có Disallow: /wp-admin vào Next.js | Không hại nhưng tạo ảo giác an toàn | Viết path đúng stack của bạn |
Tóm tắt
- robots.txt = gợi ý crawl tại gốc domain, không phải bảo mật
- Nhớ hai từ khóa: User-agent (ai) và Disallow (path nào bỏ)
- Staging:
Disallow: /· Production: mở trang cần SEO + chặn admin - Disallow không xóa index — noindex mới là chỉ thị “đừng hiện trên SERP”
- Sinh file sạch bằng /vi/tools/robots-txt-generator/ rồi kiểm tra trên domain thật