0

# SEO TOÀN DIỆN: Cẩm Nang Chi Tiết Từ Content Writer đến Developer (P2)

Tiếp bước phần trước, phần này chúng ta sẽ cùng tìm hiểu cách triển khai cũng như một vài quy tắc khi sử dụng file sitemap.xml và robots.txt.

site map là gì?

sitemap = tệp xml/txt mô tả tất cả url quan trọng trên site (kèm thêm thông tin như lastmod, image, video, newss hoặc hreflang nếu có)

Google dùng để:

  • Hiểu cấu trúc nội dung
  • Crawl hiệu quả hơn (đặc biệt đối với site lớn, spa, hoặc mới)
  • Xác định canonical url bạn muốn hiển thị trên kết quả tìm kiếm

Google hỗ trợ mạnh mẽ cho web site là .xml

Quy tắc bắt buộc:

  • kích thước <= 50MB (chưa nén)
  • số url mỗi file (<= 50000)
  • mã hóa utf8
  • được dẫn url trong file phải là đường dẫn tuyệt đối
  • phạm vi hiệu lực: sitemap ở thư mục nào chỉ ảnh hưởng các url con của thư mục đó (nếu không khai qua Search Console)

=> Đặt sitemap ở root folder là tốt nhất

Cấu trúc xml sitemap cơ bản

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2025-10-01</lastmod>
  </url>
  <url>
    <loc>https://example.com/blog/post-1</loc>
    <lastmod>2025-09-28</lastmod>
  </url>
</urlset>

Ta có thể để sitemap cho hình ảnh, video

Nếu site của bạn có nhiều hơn 50,000 url, hãy tách nhỏ sitemap index

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-pages.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-products.xml</loc>
  </sitemap>
</sitemapindex>

Submit sitemap cho google

Để những cập nhật của bạn nhanh chóng được Google đánh giá lại thay vì chờ vài tuần, dưới đây là các bước bạn nên làm

Sitemap index là gì?

Khi website có quá nhiều url, bạn không thể nhét hết tất cả vào một file do nó bị giới hạng không quá 50,000 urls . Thay vào đó, bạn sẽ chia nhỏ thành nhiều sitemap con rồi gom lại bằng sitemap index file, giúp Google biết được toàn bộ sitemap của bạn

Mỗi sitemap index file là xml chứa các thẻ sitemap, mỗi thẻ mô tả 1 sitemap con

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://www.example.com/sitemap-products.xml</loc>
    <lastmod>2025-10-11</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://www.example.com/sitemap-blog.xml</loc>
    <lastmod>2025-09-28</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://www.example.com/sitemap-images.xml</loc>
    <lastmod>2025-09-30</lastmod>
  </sitemap>
</sitemapindex>

Nguyên tắc quan trọng:

  • Giới hạn kích thước: mỗi sitemap ≤ 50MB (uncompressed) hoặc ≤ 50,000 URL.
  • Vị trí lưu file: sitemap index và các sitemap con phải nằm cùng domain (trừ khi dùng cross-domain setup).
  • Phạm vi thư mục: sitemap con phải nằm trong cùng thư mục hoặc thư mục con của sitemap index.
  • Số lượng tối đa: bạn có thể có tối đa 500 sitemap index files mỗi site trong Search Console.
  • Thẻ bắt buộc <sitemapindex> → <sitemap> → <loc>
  • Thẻ tùy chọn <lastmod> (ngày sửa đổi sitemap con, dùng định dạng ISO/W3C Datetime)
  • Định dạng UTF-8, XML hợp lệ, đúng namespace: http://www.sitemaps.org/schemas/sitemap/0.9

Khi nào nên dùng sitemap index

  • Khi tổng số url >50 000
  • Website có nhiều phần độc lập (blog, sản paharm, video, ảnh, ...)
  • Muốn tách sitemap theo loại (ví dụ: sitemap-product, sitemap-news, ...)

Submit và theo dõi trong google search console

  • Chỉ cần submit sitemap_index.xml, google sẽ tự đọc các sitemap con

Chú ý: đặt lastmod cho mỗi sitemap con, google sẽ ưu tiên crawl sitemap nào cập nhật gần nhất

lastmod có cần phải chính xác không?

Không bắt buộc phải chính xác tuyệt đối nhưng nên càng chính xác càng tố vì google sử dụng nó nếu nó đáng tin cậy

Google nhận thấy thời gian trong lastmod phù hợp với thời gian thực tế mà trang thay đổi, nó sẽ dựa vào đó để ưu tiên crawl, nếu bạn cập nhật lastmod mà nội dung không hề thay đổi, google sẽ bỏ qua tag này và đánh giá site bạn thiếu độ tin cậy

Mức độ Ví dụ Ảnh hưởng
✅ Chính xác thực tế lastmod = ngày bạn chỉnh sửa nội dung, thêm/đổi ảnh, thay link, cập nhật dữ liệu thật Google tin tưởng & crawl lại trang sớm hơn
⚠️ Sai nhẹ / lệch thời gian lastmod chậm hơn vài ngày so với chỉnh sửa thực tế Không sao — Google có thể vẫn dùng
🚫 Sai hoàn toàn / giả Cập nhật lastmod hằng ngày dù nội dung không đổi Google sẽ phớt lờ hoàn toàn trường này cho toàn site

Khi nào nên cập nhật lại lastmod? Chỉ khi nội dung quan trọng của trang thay đổi, ví dụ:

  • Thay đổi phần nội dung chính (bài viết, mô tả sản phẩm, giá, ...)
  • Cập nhật hoặc thêm hình ảnh, video
  • Cập nhật liên kết nội bộ hoặc external link

Không cần cập nhật nếu

  • Chỉ đổi css, footer, header, ngày copy right, banner quảng cáo
  • Cập nhật minor không ảnh hưởng đến nội dung chính

Crawler Management

Mục đích của việc yêu cầu google recrawl khi bạn:

  • Cập nhật nội dung, hình ảnh, metadata hoặc cấu trúc url
  • Xuất bản bài viết mới hoặc xóa/bỏ redirect trang cũ
  • Di chuyển site (site migration) -> bạn có thể yêu cầu google recrawl để cập nhật kết quả tìm kiếm nhanh hơn; nếu không yêu cầu, google vẫn tự crawl nhưng mất vài tuần

Google có 2 cách để biết nội dung mới của bạn

  • Tự động phát hiện qua link hoặc sitemap
  • Bạn chủ động gửi yêu cầu recrawl

Thời gian xử lý

  • có thể mất vài ngày - vài tuần
  • không có cách nào ép google index ngay lập tức, nhưng bạn có thể tăng tốc bằng cách làm đúng kỹ thuật

Hai phương pháp chính để yêu cầu recrawl

Dùng URL Inspection Tool (dành cho vài URL)

🔹 Khi nào dùng:

  • Khi bạn chỉ có 1–10 trang mới hoặc vừa chỉnh sửa.
  • Khi bạn cần test hoặc debug (ví dụ: kiểm tra render, canonical, schema...).

🔹 Cách thực hiện:

  • Truy cập Google Search Console
  • Chọn property (website) bạn quản lý.
  • Dán URL vào thanh trên cùng → nhấn Enter.

Google sẽ hiển thị:

  • URL có trong index chưa?
  • Có lỗi nào không?
  • Nhấn Request Indexing → Google sẽ thêm URL vào hàng đợi crawl.

⚠️ Lưu ý:

  • Mỗi tài khoản có quota giới hạn (khoảng vài trăm URL/ngày).
  • Gửi lại nhiều lần không giúp Google crawl nhanh hơn.
  • Bạn phải là Owner hoặc Full User của property trong Search Console.

Dùng Sitemap (dành cho nhiều URL cùng lúc)

🔹 Khi nào dùng:

  • Khi bạn có nhiều trang mới hoặc vừa cập nhật hàng loạt.
  • Khi bạn mới launch site hoặc đổi domain.
  • Khi bạn cần tái crawl toàn bộ site định kỳ.

🔹 Cách thực hiện:

  • Tạo hoặc cập nhật sitemap (ví dụ: /sitemap.xml).
  • Đảm bảo các URL có <lastmod> chính xác.
  • Gửi sitemap tại: Search Console → Sitemaps → Thêm URL https://example.com/sitemap.xml

Google sẽ crawl toàn bộ sitemap (ưu tiên những URL cập nhật gần đây).

💡 Ngoài ra, bạn có thể thêm vào robots.txt: Sitemap: https://example.com/sitemap.xml

→ Googlebot sẽ tự phát hiện khi crawl lại file robots.

Managing crawling of faceted navigation URLs

Faceted navigation là cơ chế lọc kết quả trên trang liệt kê (listing page).

Ví dụ, trong một website bán hàng: https://example.com/items?category=fish&color=green&size=tiny

Khi người dùng chọn nhiều bộ lọc, mỗi tổ hợp filter tạo ra một URL khác nhau. → Nếu bạn có 10 filters, mỗi filter có 10 giá trị → có thể sinh ra 10^10 (10 tỷ) URL tiềm năng!

Googlebot không biết URL nào “hữu ích” và sẽ cố crawl rất nhiều trong số đó. Đây chính là vấn đề “infinite crawl space”.

Rủi ro khi không kiểm soát Faceted URLs

Vấn đề Mô tả
🕷️ Overcrawling Google crawl hàng ngàn URL vô nghĩa (ví dụ: màu=green, size=XL, tag=discount) mà không giúp ích cho người dùng.
🕰️ Slower discovery Google dành crawl budget cho các filter page → không còn tài nguyên để index nội dung mới thực sự quan trọng.
📉 Duplicate content Các URL lọc thường hiển thị cùng một sản phẩm nhưng URL khác nhau → gây trùng lặp nội dung.
💸 Server tốn tài nguyên Crawl vô ích làm tăng request đến server, tốn CPU và bandwidth.

Hai hướng xử lý chính

Cách 1. Ngăn không cho Google crawl (nếu không cần index)

Nếu bạn chỉ muốn Google index trang sản phẩm hoặc trang danh mục chính (không filter) → nên chặn các URL faceted.

🔹 Cách phổ biến nhất: robots.txt

Disallow: /*?*color=
Disallow: /*?*size=
Disallow: /*?*brand=
Allow: /*?color=all$

💡 Mẹo:

  • Disallow: /? giúp chặn mọi query string có ký tự ?.
  • Dòng Allow: giúp bạn cho phép một số trường hợp đặc biệt (ví dụ ?color=all hiển thị toàn bộ sản phẩm).
  • Ưu tiên crawl trang danh mục chính và trang sản phẩm chi tiết.

🔹 Hoặc dùng URL fragment (hash) thay cho query string: https://example.com/items#color=green&size=small

→ Google không crawl hoặc index nội dung dựa trên fragment (#), nên đây là cách “an toàn” để giữ trải nghiệm người dùng mà không tốn crawl budget. (Angular Router kiểu hash mode cũng hoạt động như vậy).

🔹 Có thể hỗ trợ thêm bằng: rel="canonical" → chỉ rõ phiên bản gốc của trang.

<link rel="canonical" href="https://example.com/items" />

🔹 rel="nofollow" → ngăn bot crawl link filter.

<a href="?color=green" rel="nofollow">Green</a>

⚠️ Tuy nhiên, hai cách này kém hiệu quả hơn robots.txt, vì Google vẫn có thể crawl trước khi xử lý canonical hoặc nofollow.

Cách 2: Cho phép crawl (nếu cần index)

Nếu bạn muốn các trang lọc cụ thể có thể xuất hiện trên Google (ví dụ: “áo sơ mi trắng nam”), thì bạn cần tối ưu kỹ hơn:

🔹 Dùng ký tự chuẩn & để nối các tham số ✅ https://example.com/items?category=shirt&color=white&size=mhttps://example.com/items?category:shirt;color:white

🔹 Giữ thứ tự cố định cho các filters ✅ /products/shirt/white/m ❌ /products/m/white/shirt ← trùng nội dung nhưng khác URL

🔹 Nếu không có kết quả → trả về HTTP 404

Ví dụ: không có sản phẩm “fish” màu “pink”? → Trả về “404 Not Found” chứ không redirect sang trang chung.

🔹 Tránh filter trùng hoặc vô nghĩa

Mục tiêu Hành động SEO khuyến nghị
Không muốn index trang lọc Dùng robots.txt để chặn query params, hoặc sử dụng URL fragment #
Muốn index một vài bộ lọc quan trọng Cho phép riêng từng bộ lọc trong robots.txt + thêm canonical hợp lý
Cấu trúc URL đẹp Giữ trật tự filters cố định, dùng & làm separator
Giảm duplicate content Thêm <link rel="canonical"> trỏ về URL chính
Tránh index URL vô nghĩa Trả 404 cho filter không có kết quả hoặc lỗi logic
Giảm tải server Chặn faceted URL bằng robots.txt hoặc cache mạnh các trang filter

Kết luận

Câu hỏi Trả lời
Faceted navigation có hại cho SEO không? ⚠️ Có thể — nếu để Google crawl vô hạn filter URLs
Nên làm gì? Dùng robots.txt, canonical, hoặc URL fragment
Có nên để Google index các trang lọc? Chỉ nên nếu đó là từ khóa có giá trị tìm kiếm
Cần trả gì khi filter không có kết quả? Trả 404, không redirect
Lợi ích khi xử lý đúng? ✅ Giảm crawl budget lãng phí, ✅ tránh duplicate content, ✅ tăng tốc index trang thật sự quan trọng

robots.txt

robots.txt là file hướng dẫn bot tìm kiếm về việc được phép crawl phần nào của website

📍 Vị trí bắt buộc: Phải nằm ở thư mục gốc (root) của domain, ví dụ: https://example.com/robots.txt

📍 Chức năng chính:

  • Kiểm soát việc crawl (thu thập dữ liệu) — để tránh bot “quét” quá nhiều, gây nặng server.
  • Không phải để ẩn trang khỏi Google Search (đây là sai lầm thường gặp).

robots.txt dùng khi nào?

Loại nội dung Khi nào nên dùng robots.txt Khi nào KHÔNG nên dùng
Trang web (HTML, PDF, text) Để giảm tải crawl (VD: lọc, trang phụ, duplicate) ❌ Không nên dùng để “ẩn” trang khỏi Google
Media (image, video, audio) Dùng để chặn file khỏi Google Image/Video Search Không ngăn được người khác liên kết trực tiếp
Resource (JS, CSS, SVG...) Có thể chặn tài nguyên không quan trọng để tiết kiệm crawl ❌ Đừng chặn nếu ảnh hưởng tới render hoặc SEO (Google cần load CSS/JS để hiểu page layout)

Một số chú ý

Hạn chế Giải thích
❌ Không bảo mật được nội dung Một số bot hoặc hacker bỏ qua robots.txt. Nếu cần bảo mật: dùng password hoặc private route.
⚠️ Cú pháp không thống nhất giữa các bot Googlebot tuân thủ chuẩn, nhưng không phải bot nào cũng vậy (ví dụ: Baidu, AhrefsBot có thể diễn giải khác).
⚠️ URL bị disallow vẫn có thể được index tên Nếu có backlink đến nó, Google vẫn hiển thị URL (chưa crawl nội dung).
⚠️ Không kết hợp tùy tiện với “noindex” Google không đọc meta tag nếu trang bị chặn crawl trong robots.txt. Nếu muốn chặn index, đừng chặn crawl, hãy dùng <meta name="robots" content="noindex">.

Ví dụ thực tế

Ví dụ 1 — robots.txt cơ bản

User-agent: *
Disallow: /admin/
Disallow: /cgi-bin/
Allow: /public/
Sitemap: https://example.com/sitemap.xml

👉 Cho phép Google crawl tất cả trừ /admin/ và /cgi-bin/.

Ví dụ 2 — chặn tài nguyên phụ

User-agent: Googlebot
Disallow: /images/icons/
Disallow: /static/temp/

👉 Giảm tải crawl các thư mục không cần thiết (nếu không ảnh hưởng đến render).

How to write a robots file?

Một file gồm một hoặc nhiều nhóm quy tắc (group). Mỗi group bắt đầu bằng User-agent và chứa các dòng Allow, Disallow (và tùy chọn Sitemap).

🔹 Ví dụ cơ bản:

User-agent: Googlebot
Disallow: /nogooglebot/

User-agent: *
Allow: /

Sitemap: https://www.example.com/sitemap.xml

📖 Giải thích:

  • Googlebot không được phép truy cập thư mục /nogooglebot/.
  • Tất cả bot khác (*) được phép crawl toàn site.
  • Sitemap chính của site nằm tại /sitemap.xml.

Các directive bạn cần biết

Directive Vai trò Ví dụ
User-agent Chỉ định bot nào áp dụng User-agent: Googlebot hoặc User-agent: *
Disallow Đường dẫn bị chặn Disallow: /admin/
Allow Cho phép truy cập (dù thư mục cha bị chặn) Allow: /public/
Sitemap Khai báo vị trí sitemap (URL đầy đủ) Sitemap: https://example.com/sitemap.xml

Ví dụ thực tế ✅ Cho phép tất cả bot

Allow: /
Sitemap: https://example.com/sitemap.xml

🚫 Chặn toàn bộ site

User-agent: *
Disallow: /

⚠️ Dùng tạm khi dev staging — không nên để production!

🚫 Chặn thư mục cụ thể

User-agent: *
Disallow: /admin/
Disallow: /tmp/

✅ Cho phép chỉ thư mục public

User-agent: *
Disallow: /
Allow: /public/

🚫 Chặn định dạng file

User-agent: Googlebot
Disallow: /*.gif$

→ Chặn Googlebot không crawl file .gif

🎯 Cho phép AdsBot nhưng chặn Googlebot

User-agent: *
Disallow: /

User-agent: Mediapartners-Google
Allow: /

→ AdsBot vẫn có thể truy cập để xác định quảng cáo phù hợp (AdSense).

🖼 Chặn ảnh cụ thể khỏi Google Images

User-agent: Googlebot-Image
Disallow: /images/private/dogs.jpg

Hướng dẫn tạo và upload

  • Bước 1: Tạo file
    • Dùng text editor (Notepad, VS Code, nano,...)
    • Lưu UTF-8 encoding, tên: robots.txt
  • Bước 2️: Thêm rules
    • Dán nội dung theo cú pháp chuẩn (xem ở trên).
  • Bước 3: Upload lên root
  • Bước 4: Test file
    • Truy cập bằng private window để kiểm tra truy cập công khai.
    • Dùng Google Search Console → robots.txt Tester để kiểm tra lỗi cú pháp.

Cách Google đọc robots.txt

  • Google tự động tìm file tại /robots.txt của mỗi domain/subdomain.
  • Khi bạn cập nhật file mới, Google sẽ tự refresh trong vài giờ đến 1 ngày.
  • Nếu cần cập nhật nhanh → bạn có thể gửi yêu cầu re-fetch trong Search Console.

Và đây là tất cả những gì chúng ta đã biết về SEO, nếu mọi người muốn tìm hiểu thêm, hãy tham khảo trang chính thức của Google nhé! Link: https://developers.google.com/search/docs


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí