XML sitemap hreflang extension
Mở rộng sitemap XML với thẻ <xhtml:link rel="alternate" hreflang="..." href="..."/> để khai báo phiên bản ngôn ngữ/vùng.
XML sitemap hreflang extension là gì?
XML sitemap hreflang extension là cách mở rộng tập tin sitemap XML bằng các thẻ <xhtml:link rel="alternate" hreflang="..." href="..."/> để thông báo cho công cụ tìm kiếm (như Google) biết mối quan hệ giữa các phiên bản ngôn ngữ và vùng miền của cùng một nội dung. Đây không phải là một định dạng sitemap riêng, mà là việc tích hợp chuẩn hreflang vào sitemap XML theo đúng cấu trúc được Google hỗ trợ từ năm 2012.
Tại sao quan trọng trong SEO?
Khi một trang web phục vụ nhiều quốc gia hoặc ngôn ngữ, công cụ tìm kiếm có thể nhầm lẫn phiên bản nào phù hợp với người dùng ở khu vực nào — dẫn đến hiển thị sai kết quả, giảm tỷ lệ nhấp (CTR), tăng tỷ lệ thoát và làm suy yếu hiệu quả xếp hạng quốc tế. Việc khai báo hreflang qua sitemap giúp:
- Giảm xung đột nội dung trùng lặp (duplicate content) giữa các phiên bản ngôn ngữ;
- Tăng độ chính xác khi phân phối kết quả tìm kiếm theo vị trí và ngôn ngữ người dùng;
- Hỗ trợ Googlebot hiểu cấu trúc đa ngôn ngữ một cách rõ ràng, đặc biệt khi thẻ hreflang trong <head> bị thiếu hoặc sai;
- Bổ sung lớp bảo vệ thứ hai nếu phần hreflang trong HTML hoặc HTTP header gặp sự cố.
Theo tài liệu chính thức của Google, sitemap hreflang extension được coi là một trong ba phương pháp hợp lệ để triển khai hreflang — bên cạnh thẻ <link> trong <head> và header HTTP.
Cách hoạt động
Google đọc sitemap XML, phát hiện các thẻ <xhtml:link> có thuộc tính rel="alternate" và hreflang, sau đó xây dựng bản đồ liên kết giữa các URL tương ứng. Mỗi nhóm URL phải tạo thành một vòng khép kín (self-referencing loop): nghĩa là mỗi phiên bản phải trỏ lại tất cả các phiên bản khác — kể cả chính nó (hreflang="x-default" hoặc hreflang="vi"). Nếu thiếu một liên kết trong chuỗi, Google có thể bỏ qua toàn bộ nhóm.
Google không sử dụng hreflang để xếp hạng trực tiếp, nhưng dùng để chọn phiên bản phù hợp nhất khi hiển thị kết quả tìm kiếm cho người dùng dựa trên: ngôn ngữ trình duyệt, cài đặt khu vực, vị trí địa lý và lịch sử tìm kiếm.
Hướng dẫn thực hiện
- Xác định đầy đủ các phiên bản ngôn ngữ/vùng: Ví dụ: tiếng Việt cho Việt Nam (
vi-vn), tiếng Anh cho Mỹ (en-us), tiếng Anh cho Anh (en-gb), và phiên bản mặc định (x-default). - Đảm bảo mỗi URL có ít nhất một phiên bản tương đương: Không được khai báo hreflang cho trang không tồn tại hoặc trả mã lỗi (404/5xx).
- Sử dụng định dạng ngôn ngữ chuẩn ISO 639-1 + vùng ISO 3166-1 alpha-2 (ví dụ:
fr-fr,es-es). Trường hợp chỉ phân biệt ngôn ngữ (không phân biệt vùng), dùng chỉ mã ngôn ngữ:de,ja. Không dùngde-denếu không có phiên bản riêng cho Đức. - Thêm namespace XHTML vào thẻ <urlset>:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> - Với mỗi URL, thêm tất cả các phiên bản liên quan dưới dạng thẻ <xhtml:link> — bao gồm cả chính nó. Ví dụ một trang tiếng Việt cần 4 thẻ:
vi-vn,en-us,en-gb,x-default. - Tối ưu kích thước sitemap: Mỗi file sitemap không vượt quá 50.000 URL và 50 MB (nén). Nếu có nhiều nhóm hreflang, chia thành nhiều sitemap con và gửi qua Google Search Console.
- Xác minh bằng công cụ kiểm tra: Dùng Báo cáo Hreflang trong Google Search Console hoặc trình kiểm tra như Hreflang Ninja.
Lỗi thường gặp
| Lỗi | Dấu hiệu | Cách khắc phục |
|---|---|---|
| Thiếu vòng khép kín (missing self-reference) | Một URL A khai báo B và C, nhưng B không khai báo A | Kiểm tra từng nhóm: mỗi URL phải chứa đủ tất cả các phiên bản trong nhóm — kể cả chính nó |
| Sai định dạng hreflang | Dùng vn, vi_VN, vi-VN (dấu gạch dưới hoặc gạch ngang sai) |
Chỉ dùng định dạng chuẩn: vi-vn, en-us, x-default |
| URL không tồn tại hoặc bị chặn | Google báo lỗi “Crawled – currently not indexed” hoặc 404 trong báo cáo | Đảm bảo tất cả URL trong hreflang đều trả mã 200, không bị noindex, không bị chặn bởi robots.txt |
| Trùng lặp thẻ hreflang | Một URL xuất hiện nhiều lần trong cùng một sitemap hoặc xuất hiện cả trong sitemap lẫn <head> | Ưu tiên một phương pháp duy nhất — nếu dùng sitemap thì gỡ hreflang khỏi <head> để tránh mâu thuẫn |
Ví dụ thực tế
Dưới đây là đoạn XML sitemap mở rộng cho trang chủ của một thương hiệu bán hàng quốc tế, hỗ trợ tiếng Việt (Việt Nam), tiếng Anh (Mỹ) và tiếng Anh (Anh), kèm phiên bản mặc định:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/vi/</loc>
<xhtml:link rel="alternate" hreflang="vi-vn" href="https://example.com/vi/"/>
<xhtml:link rel="alternate" hreflang="en-us" href="https://example.com/en-us/"/>
<xhtml:link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/vi/"/>
</url>
<url>
<loc>https://example.com/en-us/</loc>
<xhtml:link rel="alternate" hreflang="vi-vn" href="https://example.com/vi/"/>
<xhtml:link rel="alternate" hreflang="en-us" href="https://example.com/en-us/"/>
<xhtml:link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/vi/"/>
</url>
<url>
<loc>https://example.com/en-gb/</loc>
<xhtml:link rel="alternate" hreflang="vi-vn" href="https://example.com/vi/"/>
<xhtml:link rel="alternate" hreflang="en-us" href="https://example.com/en-us/"/>
<xhtml:link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/vi/"/>
</url>
</urlset>
Lưu ý: hreflang="x-default" luôn trỏ về phiên bản được khuyến nghị khi không xác định được ngôn ngữ/khu vực — thường là trang chủ ngôn ngữ phổ biến nhất hoặc trang chọn quốc gia.
Câu hỏi thường gặp
Hreflang trong sitemap có thay thế được thẻ <link> trong <head> không?
Không. Cả hai phương pháp đều hợp lệ và có thể dùng song song, nhưng Google khuyến nghị chọn một phương pháp chính để tránh mâu thuẫn. Nếu dùng sitemap hreflang extension, nên gỡ hreflang khỏi <head> — trừ khi bạn cần hỗ trợ thêm cho các bot không đọc sitemap.
Có bắt buộc phải dùng sitemap hreflang extension không?
Không. Đây là lựa chọn bổ sung, không bắt buộc. Tuy nhiên, với website lớn (hàng ngàn trang đa ngôn ngữ), sitemap giúp quản lý tập trung và giảm rủi ro sai sót so với việc chèn thủ công vào từng <head>.
Google có xử lý hreflang trong sitemap nhanh hơn so với thẻ HTML không?
Không có bằng chứng cho thấy tốc độ xử lý khác biệt. Thời gian phản ánh hreflang trong kết quả tìm kiếm phụ thuộc vào tần suất thu thập (crawl rate), độ tin cậy của trang và mức độ nhất quán của dữ liệu — không phụ thuộc vào nơi khai báo.