Website của bạn có thêm bản tiếng Anh để bán hàng ra nước ngoài, nhưng khách ở Mỹ vẫn thấy trang tiếng Việt trên Google, còn khách Việt lại bấm nhầm vào bản tiếng Anh?
Tôi là Thái Doãn Kiên, làm SEO từ năm 2016 và đã cùng đội ngũ SEODO triển khai gần 1.000 dự án. Website có từ 2 bản ngôn ngữ thì Google cần được báo trang nào dành cho khách nào, và thẻ hreflang làm việc đó. Viết sai một mã hoặc hai trang không trỏ qua lại là Google bỏ qua cả bộ khai báo.
Hreflang chỉ có vài quy tắc, nhưng phải đúng từng ký tự. Bạn sẽ có mã mẫu copy được, cách kiểm tra cả website và 7 lỗi hay gặp kèm cách sửa.
Tóm tắt nhanh
- Hreflang là gì: dòng mã báo cho Google biết trang còn những bản ngôn ngữ, quốc gia nào khác.
- Dùng để làm gì: để người Việt thấy bản tiếng Việt, khách nước ngoài thấy bản tiếng Anh.
- Website nào cần: website có từ 2 bản ngôn ngữ hoặc nhắm nhiều quốc gia, website chỉ có tiếng Việt thì không.
- Có giúp lên hạng không: không, hreflang chỉ giúp Google chọn đúng bản để hiển thị.
- Làm thế nào: mỗi bản liệt kê chính nó và mọi bản còn lại, các bản trỏ qua lại với nhau.
- Lỗi hay gặp: thiếu liên kết trả về, viết sai mã như en-UK, trỏ tới trang đã chuyển hướng.
1. Thẻ hreflang là gì?
Hiểu đúng hreflang làm gì để không kỳ vọng sai trước khi sửa mã.
Hreflang nối các bản ngôn ngữ, quốc gia của một trang. Nó không phải tín hiệu xếp hạng.
Thẻ hreflang là thuộc tính đặt trong thẻ link, HTTP header hoặc sitemap XML, báo cho Google biết một trang có những phiên bản ngôn ngữ, khu vực nào khác để đưa đúng bản cho người tìm (Google Search Central, Tell Google about localized versions of your page, cập nhật 21/09/2026).

Hreflang là thuộc tính của thẻ <link>, không thuộc nhóm các thẻ meta trong SEO. Người mới nên đọc trước SEO là gì và cách Google hiểu website.
1.1. Cú pháp của thẻ hreflang
Một dòng hreflang có 3 thuộc tính và nằm trong phần head của trang:

<link rel="alternate" hreflang="en-us" href="https://noithatabc.example/en-us/" />
rel="alternate": URL này là bản thay thế của cùng nội dung.- hreflang: mã ngôn ngữ, có thể kèm mã vùng, như en-us là tiếng Anh cho Mỹ.
- href: URL đầy đủ của bản đó.
Tiêu chí kiểm là đủ 3 thuộc tính, dấu nháy thẳng, href bắt đầu bằng https://. Dấu nháy cong (” ”) lọt vào khi copy từ Word sẽ làm hỏng cả dòng.
1.2. Hreflang làm được gì và không làm được gì
Hreflang giúp Google chọn đúng bản cho từng nhóm người dùng, nhưng có 3 việc nó không làm được:

- Nhận ra ngôn ngữ: Google xác định ngôn ngữ theo nội dung hiển thị, không theo hreflang hay thuộc tính lang.
- Đổi tiền tệ, giá, thanh toán: việc này do từng bản của website tự xử lý.
- Đẩy thứ hạng: không tài liệu nào của Google nói hreflang là tín hiệu xếp hạng.
Các bản bản địa hoá chỉ bị coi là trùng khi nội dung chính chưa dịch. Tiêu chí đo được là nội dung chính của mỗi bản đã dịch xong. Khi đó từng bản mới có cơ hội được Google lập chỉ mục như một trang riêng.
2. Khi nào website cần dùng thẻ hreflang?
Trả lời câu hỏi đầu tiên: website của bạn có cần hreflang hay không.
Trang có 1 phiên bản thì 0 dòng hreflang. Trang có 3 phiên bản thì mỗi bản mang 3 dòng.
Website cần hreflang khi cùng một nội dung có từ 2 bản ngôn ngữ, hoặc cùng ngôn ngữ nhưng nhắm từ 2 quốc gia trở lên. Website chỉ có tiếng Việt cho khách Việt Nam thì không cần. Google gọi đó là website đa ngôn ngữ và đa khu vực (Google Search Central, Managing multi-regional and multilingual sites, cập nhật 10/12/2025).

2.1. 3 tình huống nên dùng hreflang
Có 3 tình huống nên khai báo hreflang, mỗi tình huống một kiểu mã:

- Đa ngôn ngữ: bản tiếng Việt và tiếng Anh của cùng sản phẩm, mã vi và en.
- Một ngôn ngữ, nhiều quốc gia: tiếng Anh cho Mỹ và cho Anh với giá, phí giao hàng khác nhau, mã en-US và en-GB.
- Nhiều quốc gia, nhiều ngôn ngữ: thị trường Bỉ có bản tiếng Pháp và tiếng Hà Lan, mã fr-BE và nl-BE.
Số dòng cần khai báo bằng số phiên bản của trang, cộng 1 nếu dùng x-default.
2.2. Khi nào không cần hreflang
Không cần hreflang khi trang chỉ có một phiên bản ngôn ngữ dùng được. Có 3 trường hợp hay gặp:

- Website chỉ có tiếng Việt, bán cho khách ở Việt Nam.
- Bản tiếng Anh mới dịch menu và chân trang, nội dung chính vẫn là tiếng Việt.
- Website có bản tiếng Anh, nhưng vài trang như tin tuyển dụng chỉ có tiếng Việt.
Ở trường hợp thứ hai, dịch xong nội dung rồi mới khai báo, vì Google cảnh báo chỉ dịch khung trang là trải nghiệm kém.
3. Mã ngôn ngữ, mã vùng và x-default trong hreflang viết thế nào?
Chọn đúng mã cho từng thị trường, vì sai một mã là dòng đó mất tác dụng.
Mã ngôn ngữ 2 chữ cái đứng trước, mã vùng 2 chữ cái đứng sau nếu cần. Mã quốc gia không được đứng một mình.
Mã ngôn ngữ viết theo chuẩn ISO 639-1, như vi, en. Muốn nhắm thêm quốc gia, bạn thêm mã vùng theo ISO 3166-1 Alpha 2 sau dấu gạch nối, ví dụ en-GB. Google chỉ hỗ trợ 2 chuẩn này.

Các mã doanh nghiệp Việt hay dùng:
| Ngôn ngữ, thị trường | Mã đúng | Mã hay viết sai |
| Tiếng Việt | vi, vi-VN | vn, VN |
| Tiếng Anh, Mỹ | en-US | us, en_US |
| Tiếng Anh, Anh | en-GB | en-UK |
| Tiếng Nhật, Nhật Bản | ja-JP | jp |
| Tiếng Trung giản thể | zh-CN, zh-Hans | cn |
| Tiếng Trung phồn thể | zh-TW, zh-Hant | tw |
3.1. Mã ngôn ngữ ISO 639-1 và mã vùng ISO 3166-1
Mỗi mã gồm 2 chữ cái và giá trị hreflang không phân biệt hoa thường, nên en-gb và en-GB đều được chấp nhận.

Tiếng Trung ghi được chữ viết theo ISO 15924 như zh-Hans, zh-Hant. Tiêu chí đo được là mọi giá trị có dạng 2 chữ cái hoặc 2 chữ cái, gạch nối, 2 chữ cái (trừ mã chữ viết và x-default), không dùng gạch dưới như en_us.
3.2. Lỗi dùng mã vùng thay cho mã ngôn ngữ
Lỗi này xảy ra khi ghi mã quốc gia vào chỗ của mã ngôn ngữ. Google lấy ví dụ be là tiếng Belarus, không phải nước Bỉ.

| Viết sai | Viết đúng | Lý do |
| be | nl-BE, fr-BE | be là tiếng Belarus |
| vn | vi | vn là mã quốc gia |
| en-UK | en-GB | Mã vùng của Vương quốc Anh là GB |
Google cho biết EU, UN hay UK trong hreflang không có tác dụng. Tiêu chí đo được là 0 giá trị chỉ có mã quốc gia.
3.3. x-default dùng khi nào
x-default dùng cho trang dự phòng khi ngôn ngữ trình duyệt của khách không khớp bản nào đã khai báo. Google gợi ý gắn nó cho trang chọn ngôn ngữ.

<link rel="alternate" hreflang="x-default" href="https://noithatabc.example/" />
Ghi hreflang="default" là sai, giá trị này không hợp lệ nên dòng đó bị bỏ qua. Tiêu chí đo được là mỗi bộ thẻ có tối đa 1 dòng x-default, trỏ tới trang có thật.
4. 4 quy tắc bắt buộc khi triển khai thẻ hreflang
Bốn quy tắc quyết định Google dùng hay bỏ qua bộ thẻ của bạn.
Thiếu chiều trỏ ngược là Google bỏ qua cả cặp thẻ. Cả 4 quy tắc kiểm được trong một lần crawl.
Bộ thẻ hreflang chỉ có tác dụng khi đủ 4 quy tắc:
- Mỗi trang liệt kê chính nó và mọi bản khác.
- Các bản trỏ qua lại với nhau.
- URL viết đầy đủ, có https.
- URL được trỏ tới là URL chuẩn trả mã 200.

Quy tắc thứ tư gắn với thẻ canonical, nên kiểm 2 loại thẻ cùng lúc.
4.1. Mỗi trang liệt kê chính nó và mọi phiên bản khác
Google yêu cầu mỗi bản liệt kê chính nó cùng tất cả bản còn lại, nên bộ thẻ trên các bản giống hệt nhau.

Dòng trỏ về chính trang gọi là dòng tự tham chiếu và hay bị bỏ sót. Tiêu chí đo được là trang có N phiên bản thì có N dòng hreflang, cộng 1 nếu dùng x-default.
4.2. Liên kết phải hai chiều
Trang A trỏ sang B mà B không trỏ lại A thì Google bỏ qua cặp thẻ đó. Lỗi này hay xảy ra khi thêm bản mới mà quên sửa bản cũ.

Tiêu chí đo được là 0 URL ở bộ lọc Missing Return Links của Screaming Frog.
4.3. URL tuyệt đối, có https
href phải là URL đầy đủ, có giao thức https://. Google không nhận URL tương đối như /en/, vì các bản có thể nằm ở tên miền khác nhau.

Tiêu chí đo được là 100% href bắt đầu bằng https://.
4.4. Chỉ trỏ tới URL chuẩn đang trả 200
Theo kinh nghiệm của SEODO, mọi URL trong bộ thẻ nên trả mã 200 và tự canonical về chính nó. URL đã chuyển hướng 301, URL noindex hay canonical về trang khác đều tạo tín hiệu ngược nhau.

| URL trong bộ thẻ | Trạng thái | Xử lý |
| /vi/sofa-go/ | 200, tự canonical | Giữ nguyên |
| /en/sofa/ | 301 sang /en/wooden-sofa/ | Đổi sang URL đích |
| /en-gb/wooden-sofa/ | 200 nhưng noindex | Bỏ noindex hoặc bỏ dòng |
5. 3 cách thêm thẻ hreflang vào website
Chọn một cách khai báo hợp với quy mô website và người bảo trì.
Head HTML, HTTP header và sitemap XML cho cùng kết quả với Google. Mỗi website chỉ chọn 1 cách.
Google viết rằng 3 phương pháp này tương đương nhau. Dùng cả 3 không có thêm lợi ích, mà mỗi lần thêm phiên bản phải sửa ở 3 nơi.

| Cách | Đặt ở đâu | Hợp khi nào |
| Head của HTML | Mã nguồn từng trang | Ít phiên bản, sửa được template |
| HTTP header | Phản hồi máy chủ | File PDF, tài liệu không phải HTML |
| Sitemap XML | File sitemap | Nhiều trang, nhiều phiên bản |
5.1. Đặt trong phần head của HTML
Cách này hợp với website ít phiên bản và sửa được template. Bộ thẻ đặt trong head, trước thẻ đóng </head>:

<link rel="alternate" hreflang="vi" href="https://noithatabc.example/vi/sofa-go/" />
<link rel="alternate" hreflang="en" href="https://noithatabc.example/en/wooden-sofa/" />
<link rel="alternate" hreflang="x-default" href="https://noithatabc.example/en/wooden-sofa/" />
Không có trang chọn ngôn ngữ thì x-default trỏ về bản tiếng Anh như trên. Tiêu chí đo được là mở View Source (Ctrl+U) thấy đủ bộ thẻ trong head, không lọt xuống body.
5.2. Đặt trong HTTP header cho file PDF
File PDF không có phần head, nên hreflang được khai báo bằng trường Link trong HTTP header. Ví dụ file catalogue có 2 bản:

Link: <https://noithatabc.example/catalogue-vi.pdf>; rel="alternate"; hreflang="vi",
<https://noithatabc.example/catalogue-en.pdf>; rel="alternate"; hreflang="en"
Máy chủ Apache thường thêm header này bằng cấu hình header trong .htaccess. Tiêu chí đo được là tab Network của DevTools, phần Response Headers của file PDF có dòng Link chứa đủ 2 giá trị hreflang.
5.3. Đặt trong sitemap XML
Website nhiều trang, nhiều phiên bản nên khai báo trong sitemap XML để mã trang gọn. Sitemap phải khai báo namespace xhtml, mỗi khối url liệt kê lại cả bộ, kể cả chính nó:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://noithatabc.example/vi/sofa-go/</loc>
<xhtml:link rel="alternate" hreflang="vi" href="https://noithatabc.example/vi/sofa-go/" />
<xhtml:link rel="alternate" hreflang="en" href="https://noithatabc.example/en/wooden-sofa/" />
</url>
</urlset>
Khối url của bản tiếng Anh lặp lại đúng 2 dòng xhtml:link này. Tiêu chí đo được là sitemap mở không báo lỗi, trang có N phiên bản thì mỗi khối url có N dòng xhtml:link.
6. Cách thêm hreflang trên WordPress
Website WordPress đa ngôn ngữ thường không phải gõ tay dòng hreflang nào.
Polylang và WPML tự sinh hreflang cho bản dịch đã liên kết. Chỉ khi không dùng plugin đa ngôn ngữ mới chèn tay qua child theme.
Website dùng plugin đa ngôn ngữ như Polylang hoặc WPML thì hreflang được sinh theo các bản dịch đã liên kết. Plugin Rank Math hay Yoast SEO lo title, meta description và sitemap. Đã có plugin đa ngôn ngữ thì không chèn thêm hreflang qua plugin SEO hay theme, kẻo mã nguồn có 2 bộ thẻ mâu thuẫn.

6.1. Dùng plugin đa ngôn ngữ
Với Polylang, bạn tạo bản dịch từ hộp Ngôn ngữ trong trình soạn bài, liên kết bản tiếng Việt với bản tiếng Anh, plugin tự thêm hreflang lên cả hai trang.

Polylang chỉ tự tạo x-default cho trang chủ, khi trang chủ tự chuyển sang một bản ngôn ngữ. WPML tự chèn và cập nhật hreflang khi bạn thêm bản dịch. Tiêu chí đo được là mở mã nguồn 3 bài mẫu thấy đủ dòng hreflang cho từng bản.
6.2. Chèn thủ công qua child theme
Chỉ chèn tay khi không dùng plugin đa ngôn ngữ, ví dụ bản tiếng Anh chỉ gồm vài trang làm riêng. Bạn viết hàm gắn vào hook wp_head trong functions.php của child theme, mỗi URL xuất bộ thẻ riêng.

Không sửa header.php của theme gốc, vì lần cập nhật theme sau sẽ ghi đè mất mã. Tiêu chí đo được là cập nhật theme xong, mã nguồn vẫn còn đủ bộ thẻ.
7. Cách kiểm tra thẻ hreflang
Ba cách kiểm, đi từ cả website tới từng trang và kết quả Google chọn.
Lỗi cú pháp kiểm bằng công cụ crawl, Search Console chỉ cho thấy kết quả.
Search Console không còn báo cáo riêng cho hreflang, vì báo cáo International Targeting đã bị ngừng, còn Google vẫn dùng thẻ hreflang (Search Console Help, The International Targeting report is deprecated). Bạn đưa việc này vào quy trình SEO audit kỹ thuật và làm lại sau mỗi lần thêm phiên bản. Website nhiều thị trường mà chưa có người theo dõi kỹ thuật có thể thuê dịch vụ SEO để rà bộ thẻ này định kỳ.

7.1. Kiểm tra cả website bằng Screaming Frog
Bạn crawl website bằng Screaming Frog để kiểm cả 4 quy tắc một lần. Trước khi crawl, bạn vào Config, chọn Spider và bật 2 ô Store Hreflang, Crawl Hreflang. Crawl xong thì mở tab Hreflang.

Các bộ lọc cần xem:
- Missing Return Links: thiếu liên kết trả về.
- Incorrect Language & Region Codes: mã sai chuẩn.
- Missing Self Reference: thiếu dòng tự tham chiếu.
- Non-200 Hreflang URLs: URL không trả mã 200.
- Missing X-Default: chưa có x-default.
Tiêu chí đo được là 0 URL ở các bộ lọc lỗi, trừ Missing X-Default nếu bạn chủ động không dùng x-default.
7.2. Kiểm tra từng trang bằng công cụ kiểm tra hreflang
Kiểm một URL thì dán vào công cụ kiểm tra hreflang. Google liệt kê trình tạo thẻ của Aleyda Solis và công cụ kiểm tra của Merkle, kèm lưu ý chúng không do Google duy trì.

Tiêu chí đo được là không bản nào báo lỗi mã hay thiếu liên kết trả về.
7.3. Xem Google chọn trang nào trong Search Console
Search Console cho thấy Google thật sự chọn trang nào. Bạn dùng công cụ Kiểm tra URL trong Search Console để xem URL chính tắc do Google chọn của từng bản, rồi mở báo cáo Hiệu suất, lọc trang chứa /en/ và xem tab Quốc gia.

Tiêu chí đo được là URL Google chọn trùng URL của chính bản đó, lượt hiển thị của /en/ đến từ quốc gia mục tiêu nhiều hơn Việt Nam.
8. 7 lỗi hreflang thường gặp và cách sửa
Đối chiếu website với 7 lỗi này trước khi kết luận hreflang không có tác dụng.
Google tự liệt kê thiếu liên kết trả về và sai mã là lỗi thường gặp. Canonical trỏ khác bản và tự chuyển hướng theo ngôn ngữ là 2 lỗi ít được nhắc.
7 lỗi xếp theo thứ tự nên kiểm, ví dụ là minh hoạ.

| Lỗi | Ví dụ | Hậu quả | Cách sửa |
| Thiếu liên kết trả về | /vi/ không trỏ lại /en/ | Google bỏ qua cặp thẻ | Thêm dòng trỏ ngược |
| Thiếu dòng tự tham chiếu | /vi/ chỉ khai báo /en/ | Bộ thẻ thiếu | Liệt kê cả chính nó |
| Sai mã | en-UK, be, english | Dòng đó vô tác dụng | Dùng en-GB, nl-BE, en |
| URL tương đối | href="/en/" |
URL không hợp lệ | Ghi đủ https:// và tên miền |
| Trỏ tới URL 301, noindex | /en/sofa/ đã 301 | Tín hiệu mâu thuẫn | Đổi sang URL trả 200 |
| Dấu nháy cong | hreflang=”en” | Giá trị sai | Gõ lại dấu nháy thẳng |
| Khai báo cho bản chỉ dịch menu | /en/ giữ nội dung tiếng Việt | Khách không đọc được | Dịch xong mới khai báo |
8.1. Canonical và hreflang trỏ khác nhau
Bản tiếng Anh có canonical về bản tiếng Việt thì Google có thể chỉ giữ bản tiếng Việt. Google dặn chọn trang canonical cùng ngôn ngữ, hoặc ngôn ngữ thay thế gần nhất.

Cách sửa là mỗi bản tự canonical về chính nó. Tiêu chí đo được là bộ lọc Non-Canonical Return Links của Screaming Frog có 0 URL.
8.2. Tự chuyển hướng người dùng theo ngôn ngữ hoặc IP
Google khuyên tránh tự chuyển hướng khách từ bản ngôn ngữ này sang bản khác, vì người dùng và công cụ tìm kiếm có thể không xem được mọi bản. Googlebot thường thu thập từ Mỹ, nên có thể không thấy bản tiếng Việt.

Nên đặt thanh chọn ngôn ngữ ở đầu trang. Tiêu chí đo được là mở URL bản tiếng Anh từ trình duyệt tiếng Việt vẫn ở lại bản tiếng Anh.
9. Câu hỏi thường gặp về thẻ hreflang
Câu trả lời ngắn cho 5 thắc mắc hay gặp khi làm hreflang.
Hreflang không giúp tăng hạng và không thay được canonical.

9.1. Thẻ hreflang có giúp tăng thứ hạng không?
Không. Không tài liệu nào của Google nói hreflang là tín hiệu xếp hạng. Nó đưa đúng bản tới đúng người, nên lượt nhấp của từng thị trường có thể tốt hơn.
9.2. Một trang dùng được bao nhiêu thẻ hreflang?
Bao nhiêu phiên bản thì bấy nhiêu dòng, cộng 1 dòng x-default nếu dùng, nên trang có 5 bản sẽ mang 6 dòng. Website có nhiều bản nên khai báo trong sitemap XML để mã trang gọn hơn.
9.3. Không dùng hreflang thì có sao không?
Website một ngôn ngữ thì không sao. Website nhiều ngôn ngữ thiếu hreflang thì Google vẫn đoán theo nội dung, nhưng dễ đưa nhầm bản, nhất là en-US và en-GB.
9.4. Hreflang khác thẻ canonical thế nào?
Canonical chọn một URL chuẩn trong nhóm trang trùng, còn hreflang nối các bản ngôn ngữ, quốc gia của một trang. Xem thêm cách đặt canonical đúng cho từng loại trang.
9.5. Website đa ngôn ngữ nên dùng thư mục con hay subdomain?
Thư mục con dễ thiết lập và ít bảo trì nhất. Google so sánh 4 cách tổ chức cấu trúc URL như sau:
| Cách | Ưu điểm | Nhược điểm |
| Tên miền quốc gia (.de) | Nhắm quốc gia rõ nhất | Tốn chi phí, chỉ 1 quốc gia |
| Subdomain (de.noithatabc.example) | Dễ thiết lập, tách máy chủ được | Khó nhận ra thị trường |
| Thư mục con (/de/) | Dễ thiết lập, ít bảo trì | Một máy chủ, khó tách |
| Tham số URL (?loc=de) | Không có | Google không khuyến nghị |
Đọc thêm subdomain là gì và cách chọn tên miền.
Nguồn tham khảo
- Google Search Central: Tell Google about localized versions of your page (cập nhật 21/09/2026)
- Google Search Central: Managing multi-regional and multilingual sites (cập nhật 10/12/2025)
- Google Search Central: How to specify a canonical URL with
rel="canonical"and other methods (cập nhật 10/07/2026) - Search Console Help: The International Targeting report is deprecated (answer 12474899)
- Search Console Help: Công cụ kiểm tra URL (answer 9012289)
- Screaming Frog: SEO Spider User Guide, mục Tabs, Hreflang
- Polylang: Hreflang tag attributes and Polylang, everything you need to know
- WPML: Adding hreflang to WordPress

WulingTăng trưởng bền vững từ chiến lược SEO
SCGNghiệm thu dự án sớm 2 tháng
cirCOVượt KPI trước 3 tháng