hreflang không còn đau đầu
Bạn vừa dựng xong phiên bản tiếng Anh cho website, đăng song song với bản tiếng Việt, và hài lòng vì cuối cùng cũng "ra thị trường nước ngoài". Vài tuần sau, Search Console báo người dùng ở Mỹ đang đọc bản tiếng Việt, người Việt thì bị đẩy sang bản tiếng Anh, còn hai phiên bản của cùng một trang thì tranh nhau một vị trí trên Google thay vì mỗi bản phục vụ đúng người của mình. Không có gì hỏng về kỹ thuật theo nghĩa trang vẫn tải được. Cái hỏng là Google không biết trang nào dành cho ai.
Đó chính xác là vấn đề hreflang sinh ra để giải quyết. Và nó có tiếng là "ám ảnh" với người làm SEO không phải vì khái niệm khó, mà vì những chi tiết nhỏ — một mã ngôn ngữ gõ sai, một thẻ trả về bị thiếu, một trang quên tự trỏ về chính mình — đủ để vô hiệu hoá toàn bộ công sức mà không báo lỗi gì rõ ràng. Bài này sẽ tháo từng nút một, theo đúng thứ tự bạn cần làm, để hreflang không còn là thứ khiến bạn đau đầu mỗi lần website có thêm một ngôn ngữ.
hreflang là một đoạn đánh dấu nói cho Google biết mỗi phiên bản của một trang dành cho ngôn ngữ và khu vực nào. Nó đưa đúng người đến đúng bản (người Việt thấy bản tiếng Việt, người Mỹ thấy bản tiếng Anh) và nói cho công cụ tìm kiếm hiểu các bản là biến thể ngôn ngữ của nhau chứ không phải nội dung trùng lặp cạnh tranh nhau. Để hoạt động, mọi phiên bản phải trỏ qua lại lẫn nhau theo hai chiều.
hreflang thực ra giải quyết vấn đề gì
Trước khi đụng vào cú pháp, cần hiểu rõ hreflang được thiết kế để xử lý đúng hai tình huống — và chỉ hai tình huống đó. Hiểu sai phạm vi của nó là nguồn gốc của phần lớn những lần triển khai sai.
Tình huống thứ nhất: cùng một nội dung, nhiều ngôn ngữ. Bạn có một trang giới thiệu sản phẩm bằng tiếng Việt và một bản dịch sang tiếng Anh. Cả hai nói cùng một thứ, chỉ khác ngôn ngữ. Khi một người ở Việt Nam gõ truy vấn liên quan, bạn muốn Google trả về bản tiếng Việt; khi một người dùng tiếng Anh tìm, bạn muốn bản tiếng Anh hiện ra. hreflang là cách bạn nói điều đó với Google.
Tình huống thứ hai: cùng một ngôn ngữ, nhiều khu vực. Bạn có một bản tiếng Anh cho thị trường Mỹ và một bản tiếng Anh cho Singapore — cùng tiếng Anh, nhưng giá niêm yết bằng đô-la Mỹ ở bản này và đô-la Singapore ở bản kia, ví dụ và cách diễn đạt khác nhau. Hai trang gần như giống hệt về câu chữ, và nếu không có tín hiệu, Google rất dễ coi chúng là nội dung trùng lặp rồi chọn đại một bản hiển thị cho cả hai nước. hreflang giúp tách bạch: bản nào cho Mỹ, bản nào cho Singapore.
Điểm mấu chốt mà nhiều người bỏ qua: hreflang không phải tín hiệu xếp hạng. Nó không làm trang bạn lên top. Nó không thay thế canonical để gộp uy tín. Nó chỉ làm một việc — hoán đổi đúng phiên bản cho đúng người ở kết quả tìm kiếm, và ngăn các phiên bản tự ăn thịt lẫn nhau. Nếu bạn kỳ vọng hreflang đẩy thứ hạng, bạn đang dùng sai công cụ. Việc đưa nội dung ra nước ngoài và làm cho nó lên hạng là một bài toán lớn hơn — chúng tôi đã mổ xẻ riêng trong bài cách đưa nội dung ra thị trường nước ngoài, và hreflang chỉ là một mắt xích kỹ thuật trong đó.
Cú pháp mã ngôn ngữ-vùng: phần dễ sai nhất
Mỗi chú thích hreflang gắn một mã cho một địa chỉ trang. Mã đó mô tả "phiên bản này dành cho ai". Có ba dạng mã, và bạn cần biết dùng dạng nào lúc nào.
Chỉ ngôn ngữ
Dạng đơn giản nhất là mã ngôn ngữ gồm hai chữ cái theo chuẩn ISO 639-1: vi cho tiếng Việt, en cho tiếng Anh, ja cho tiếng Nhật, fr cho tiếng Pháp. Dùng dạng này khi bạn phân biệt theo ngôn ngữ chứ không quan tâm người đọc ở quốc gia nào. Một bản tiếng Việt phục vụ mọi người nói tiếng Việt, dù họ ở Việt Nam, ở Mỹ hay ở Úc — thì vi là đủ.
Ngôn ngữ kèm khu vực
Khi bạn cần phân biệt theo quốc gia, ghép mã ngôn ngữ với mã quốc gia hai chữ cái theo chuẩn ISO 3166-1 alpha-2, nối bằng dấu gạch ngang: en-US (tiếng Anh cho Mỹ), en-GB (tiếng Anh cho Anh), en-SG (tiếng Anh cho Singapore), vi-VN (tiếng Việt cho Việt Nam). Phần ngôn ngữ luôn viết thường, phần quốc gia theo quy ước viết hoa. Google không phân biệt hoa thường nhưng giữ đúng quy ước giúp bạn ít gõ nhầm hơn.
Đây là nơi sinh ra những lỗi kinh điển. Mã quốc gia của Anh là GB (Great Britain), không phải "UK" — "UK" không tồn tại trong chuẩn và sẽ bị bỏ qua. Tiếng Nhật là ja, không phải "jp" (jp là mã quốc gia Nhật, không phải mã ngôn ngữ). Một số người viết en-EU để chỉ "tiếng Anh cho châu Âu" — nhưng "EU" không phải một quốc gia trong ISO 3166-1, nên mục này vô hiệu. hreflang chỉ hiểu quốc gia, không hiểu liên minh hay châu lục.
x-default: tấm lưới hứng
Mã đặc biệt x-default chỉ định phiên bản dự phòng — trang Google nên trả về khi không có phiên bản nào khớp với ngôn ngữ hay khu vực của người tìm kiếm. Một người dùng tiếng Đức tìm thấy website của bạn, nhưng bạn chỉ có bản tiếng Việt và tiếng Anh: x-default cho Google biết nên đưa họ tới bản nào (thường là bản tiếng Anh, hoặc một trang chọn ngôn ngữ). Không bắt buộc về mặt kỹ thuật, nhưng với website đa ngôn ngữ thật sự thì gần như luôn nên khai, vì nếu không, người ngoài mọi phiên bản của bạn sẽ bị Google đoán mò.
Tính hai chiều: quy tắc làm hỏng nhiều dự án nhất
Đây là điều khiến hreflang khác mọi đoạn đánh dấu SEO khác, và là lý do nó "đau đầu". hreflang bắt buộc hai chiều: nếu trang A khai trang B là phiên bản tiếng Anh của nó, thì trang B phải khai ngược lại trang A là phiên bản tiếng Việt của nó. Nếu thiếu chiều trả về, Google bỏ qua toàn bộ tín hiệu — không chỉ một mục, mà coi như cả cụm chưa từng tồn tại.
Hãy hình dung bằng một cặp trang cụ thể. Bạn có một bài về tổng đài đám mây ở hai bản:
- Bản tiếng Việt tại tenmien.com/vi/tong-dai-dam-may
- Bản tiếng Anh tại tenmien.com/en/cloud-call-center
Để hreflang hợp lệ, cả hai trang phải chứa cùng một bộ chú thích khai báo đủ mọi phiên bản trong cụm — kể cả phiên bản chính nó. Trang tiếng Việt phải nói "có bản vi ở đây, có bản en ở kia". Trang tiếng Anh cũng phải nói y hệt: "có bản vi ở kia, có bản en ở đây". Hai trang khai cùng một bản đồ. Đây là điểm phản trực giác nhất với người mới: bạn không khai "trang kia ở đâu" trên mỗi trang, mà khai toàn bộ bản đồ cụm trên mọi trang trong cụm.
Hệ quả thực hành: hreflang luôn được làm theo cụm, không bao giờ làm lẻ một trang. Mỗi lần thêm một ngôn ngữ mới cho một bài, bạn phải quay lại cập nhật tất cả các bản hiện có của bài đó để chúng cùng trỏ tới bản mới. Bỏ sót một bản là cụm gãy. Đây là lý do triển khai hreflang thủ công trên website lớn rất dễ vỡ, và là lý do nên sinh nó tự động từ một nguồn dữ liệu chung thay vì dán tay từng trang.
self-reference: cái mọi người quên
Nối tiếp tính hai chiều là một quy tắc bị bỏ sót nhiều đến mức đáng được tách riêng: mỗi trang phải khai chính nó trong bộ hreflang của mình. Trang tiếng Việt, ngoài việc trỏ tới bản tiếng Anh, còn phải có một mục hreflang="vi" trỏ về chính nó.
Nghe có vẻ thừa — sao trang lại phải tự giới thiệu với chính mình? Nhưng Google dùng mục tự trỏ này để xác nhận "đúng rồi, trang này tự nhận nó là phiên bản vi". Thiếu self-reference, bộ chú thích trở nên mơ hồ: Google thấy trang này liệt kê các phiên bản khác nhưng không tuyên bố mình là phiên bản nào. Nhiều cụm hreflang trông như đầy đủ nhưng vẫn bị Google lờ đi chỉ vì thiếu đúng cái mục tự trỏ này. Quy tắc đơn giản để nhớ: số mục hreflang trên mỗi trang phải bằng tổng số phiên bản trong cụm — và một trong số đó luôn là chính trang đó.
Ba cách khai hreflang
Bạn có ba nơi để đặt chú thích hreflang. Cả ba đều hợp lệ với Google; chọn cách nào phụ thuộc vào loại trang và khả năng kỹ thuật của bạn. Quan trọng: chỉ chọn một cách cho mỗi trang, không trộn lẫn, vì khai hreflang ở hai nơi cùng lúc dễ gây mâu thuẫn.
Cách 1: thẻ trong phần đầu trang (HTML head)
Cách phổ biến và dễ kiểm tra nhất. Bạn đặt các thẻ link vào phần đầu mỗi trang. Mỗi phiên bản một thẻ, kèm mục tự trỏ. Với cặp ví dụ ở trên, phần đầu của cả hai trang đều chứa cùng khối sau:
- link rel="alternate" hreflang="vi" href="https://tenmien.com/vi/tong-dai-dam-may"
- link rel="alternate" hreflang="en" href="https://tenmien.com/en/cloud-call-center"
- link rel="alternate" hreflang="x-default" href="https://tenmien.com/en/cloud-call-center"
Lưu ý các địa chỉ phải là URL tuyệt đối (đầy đủ cả https và tên miền), không dùng đường dẫn rút gọn. Ưu điểm của cách này: dễ xem trực tiếp bằng cách bấm "View source" trên trình duyệt, dễ gỡ lỗi. Nhược điểm: làm phình phần đầu trang nếu bạn có rất nhiều ngôn ngữ, và không dùng được cho file không phải HTML (như PDF).
Cách 2: HTTP header
Với những tài nguyên không phải HTML — file PDF, hình ảnh, tài liệu tải về có nhiều phiên bản ngôn ngữ — bạn không có phần đầu trang để nhét thẻ vào. Khi đó khai hreflang qua HTTP header: máy chủ gửi kèm thông tin hreflang trong phần phản hồi mỗi khi trả file về. Cách này mạnh nhưng kén kỹ thuật hơn vì phải cấu hình ở tầng máy chủ, và khó kiểm tra bằng mắt thường hơn. Phần lớn website tiếng Việt đa ngôn ngữ sẽ không cần đến cách này trừ khi có thư viện tài liệu PDF song ngữ.
Cách 3: trong sitemap XML
Cách gọn gàng nhất cho website lớn. Thay vì nhét thẻ vào từng trang, bạn khai toàn bộ quan hệ hreflang tập trung trong file sitemap. Mỗi URL trong sitemap liệt kê tất cả phiên bản ngôn ngữ của nó. Ưu điểm lớn: không làm nặng phần đầu trang, và quản lý tập trung một chỗ nên dễ giữ nhất quán — sửa một file thay vì sửa hàng nghìn trang. Nhược điểm: file sitemap phình to và khó đọc bằng mắt, đồng thời mọi quy tắc hai chiều và self-reference vẫn áp dụng y nguyên, chỉ là khai ở chỗ khác. Với website có hàng trăm trang nhân nhiều ngôn ngữ, đây thường là lựa chọn bền nhất.
Bốn lỗi phổ biến nhất và cách tránh
Gần như mọi sự cố hreflang quy về một trong bốn lỗi sau. Nắm được chúng là bạn đã tránh được phần lớn cơn đau đầu.
Lỗi 1: thiếu thẻ trả về (return tag)
Trang A trỏ tới B nhưng B không trỏ ngược về A. Đây là lỗi số một, và Search Console gọi nó là "no return tags". Hậu quả: Google bỏ qua tín hiệu của cả cặp. Cách tránh: luôn làm theo cụm, và sau mỗi lần thêm/đổi một phiên bản, kiểm tra rằng mọi phiên bản trong cụm đều khai đầy đủ lẫn nhau.
Lỗi 2: sai mã ngôn ngữ hoặc khu vực
"en-UK" thay vì "en-GB", "ja-JP" viết thành "jp", gõ "vi-VI" thay vì "vi-VN", hay dùng "en-EU". Mỗi mã sai là một mục bị vô hiệu trong im lặng — không có thông báo lỗi đỏ chót, trang vẫn chạy, chỉ là tín hiệu không được tính. Cách tránh: kiểm tra mọi mã ngôn ngữ với ISO 639-1 và mọi mã quốc gia với ISO 3166-1 alpha-2 trước khi đưa lên.
Lỗi 3: quên self-reference
Đã nói ở trên nhưng nhắc lại vì nó phổ biến đến mức đáng nhắc hai lần: mỗi trang phải tự trỏ về chính nó. Cách tránh: đếm. Nếu cụm có ba phiên bản, mỗi trang phải có đúng ba mục hreflang.
Lỗi 4: URL không nhất quán hoặc trỏ tới trang chuyển hướng
hreflang phải trỏ tới URL cuối cùng, đang hoạt động, trả về mã 200 — không phải một URL bị chuyển hướng (redirect), không phải URL khác http/https hay khác dấu gạch chéo cuối so với trang thật. Một địa chỉ trỏ tới trang chuyển hướng làm Google bối rối và có thể vô hiệu mục đó. Cách tránh: dùng đúng URL chính tắc (canonical) của mỗi phiên bản, và đảm bảo nó không bị redirect. Lưu ý quan trọng: canonical của mỗi trang phải tự trỏ về chính nó, không trỏ chéo sang phiên bản ngôn ngữ khác — đặt canonical của bản tiếng Anh trỏ về bản tiếng Việt là tự xoá bản tiếng Anh khỏi chỉ mục, một lỗi âm thầm và tai hại.
Cách kiểm tra hreflang đã đúng chưa
Đừng tin rằng "code trông đúng là đã đúng". hreflang cần được kiểm tra bằng dữ liệu thật. Có ba lớp kiểm tra, làm theo thứ tự.
Lớp 1 — kiểm tra cú pháp trước khi đăng. Trước khi đưa lên, xem nguồn trang (hoặc sitemap) và đối chiếu thủ công: mọi mã đúng chuẩn chưa, có mục tự trỏ chưa, mọi URL có tuyệt đối và đúng dạng không. Với cụm nhỏ vài ngôn ngữ, bước mắt thường này bắt được phần lớn lỗi gõ.
Lớp 2 — đối chiếu hai chiều trên toàn cụm. Lập một bảng nhỏ: cột là từng phiên bản, hàng là từng phiên bản, đánh dấu trang nào khai trang nào. Bảng phải đối xứng hoàn hảo — nếu một ô có dấu mà ô đối xứng trống, đó là một thẻ trả về bị thiếu. Với website lớn, đây là việc nên để công cụ tự rà thay vì làm tay.
Lớp 3 — theo dõi trong Search Console sau khi đăng. Google Search Console có báo cáo International Targeting (hoặc các báo lỗi hreflang trong báo cáo lập chỉ mục) cho biết Google đã đọc thấy bao nhiêu mục hreflang và bao nhiêu mục lỗi "no return tags" hay "unknown language code". Đây là nguồn sự thật cuối cùng, vì nó phản ánh đúng những gì Google thực sự thấy, không phải những gì bạn nghĩ bạn đã khai. Kiểm tra lại sau mỗi đợt thêm ngôn ngữ.
Một điều cần kiên nhẫn: hreflang không có hiệu lực tức thì. Google phải thu thập lại tất cả các phiên bản trong cụm rồi mới ráp được bản đồ. Sau khi sửa, có thể mất từ vài ngày đến vài tuần để báo cáo phản ánh đúng. Đừng sửa đi sửa lại liên tục trong vài ngày rồi kết luận "không ăn thua" — hãy sửa cho đúng một lần, rồi cho Google thời gian đọc lại.
hreflang cho website Việt đa ngôn ngữ: làm gì trước
Gom lại thành một lộ trình áp dụng được ngay cho một website tiếng Việt đang muốn thêm phiên bản tiếng Anh (hoặc ngược lại).
- Xác định cụm. Liệt kê từng trang có nhiều phiên bản ngôn ngữ. Một bài chỉ có bản tiếng Việt thì không cần hreflang — nó chưa thuộc cụm nào.
- Chốt mã. Với website thường, bắt đầu bằng mã ngôn ngữ thuần (vi và en) là đủ. Chỉ thêm khu vực (en-US, en-SG) khi bạn thật sự có nội dung khác nhau cho từng quốc gia nói cùng ngôn ngữ — đừng thêm khu vực chỉ để cho "trông chuyên nghiệp", vì nó nhân số mục lên và nhân khả năng sai.
- Thêm x-default. Trỏ về bản tiếng Anh hoặc trang chọn ngôn ngữ, cho người dùng ngoài mọi phiên bản.
- Chọn một cách khai. Vài chục trang thì dùng thẻ trong phần đầu trang cho dễ kiểm tra; hàng trăm trang trở lên thì khai trong sitemap để quản lý tập trung.
- Khai đủ self-reference và hai chiều. Mỗi trang khai toàn bộ bản đồ cụm, gồm cả chính nó. Kiểm tra đối xứng.
- Kiểm tra canonical. Mỗi phiên bản tự canonical về chính nó, không trỏ chéo.
- Theo dõi Search Console. Sau một đến hai tuần, đọc báo cáo để chắc Google đã đọc đúng.
Một lưu ý chiến lược cho thị trường Việt: hreflang chỉ là phần kỹ thuật của việc phục vụ nhiều thị trường, không phải toàn bộ. Nếu bạn nhắm những thị trường mà tiếng Anh không phải tiếng mẹ đẻ của khách, thì việc khai mã đúng chỉ giải quyết được khâu "đưa đúng bản cho đúng người" — còn bản đó có nói đúng ngôn ngữ tìm kiếm của họ hay không lại là chuyện khác, chúng tôi bàn kỹ trong bài làm SEO ở thị trường bạn không nói được tiếng. Và ngay cả khi cùng ngôn ngữ, việc nên dịch nguyên văn hay viết lại cho hợp văn cảnh địa phương là một quyết định riêng cho từng trang, như đã phân tích trong bài dịch hay viết lại câu trả lời thật. hreflang đặt đúng người trước đúng cánh cửa; nội dung sau cánh cửa mới quyết định họ ở lại.
Vì sao hreflang dễ vỡ khi làm thủ công
Đến đây bạn đã thấy hreflang không khó về khái niệm — khó ở chỗ nó là một mạng lưới quan hệ phải luôn nhất quán. Một website hai ngôn ngữ với năm mươi bài là một trăm trang, và mỗi lần thêm bài mới hay thêm ngôn ngữ thứ ba, bạn phải cập nhật đồng loạt mọi phiên bản liên quan. Làm tay, chỉ cần một lần quên cập nhật chiều trả về là một cụm gãy, và cái gãy đó không kêu — nó âm thầm khiến hai phiên bản tranh nhau thứ hạng trong nhiều tuần trước khi bạn nhận ra qua một con số tụt trong Search Console.
Đó là loại công việc có cấu trúc, lặp lại và dễ sai vì khối lượng chứ không vì độ khó — đúng kiểu việc nên để máy gánh. Một AI agent làm SEO như Orova có thể sinh và rà hreflang theo cụm một cách nhất quán: mỗi khi bạn thêm một phiên bản ngôn ngữ, nó cập nhật toàn bộ bản đồ trỏ qua lại, giữ self-reference đầy đủ, và cảnh báo khi một cụm thiếu chiều trả về — thay vì để bạn phát hiện qua thứ hạng tụt. Nó không thay người quyết định nên dịch hay viết lại nội dung cho từng thị trường; nhưng phần kỹ thuật khô khan, dễ vỡ và phải làm đi làm lại này thì để agent lo, để bạn dồn sức vào phần thực sự cần phán đoán con người. hreflang đáng ra không nên là thứ khiến bạn mất ngủ — và khi phần lặp lại được tự động hoá đúng, nó sẽ không còn.
Để AI Agent lo SEO cho bạn
Orova tự lên kế hoạch, viết bài, tối ưu và theo dõi thứ hạng — bạn chỉ việc đọc kết quả.
Dùng thử miễn phí