Hreflang Conflicts Within Page Source Code: Nguyên nhân và cách khắc phục
“Hreflang conflicts within page source code” là lỗi gì?
Hreflang conflicts within page source code chỉ tình trạng các annotation (khai báo) hreflang đưa ra thông tin mâu thuẫn. Ví dụ điển hình là một locale (mã ngôn ngữ, có thể kèm khu vực) trỏ tới nhiều URL khác nhau. Google có thể không sử dụng những khai báo đó.
Hreflang mô tả quan hệ giữa các phiên bản ngôn ngữ hoặc khu vực tương đương. Trong HTML, khai báo này dùng phần tử <link> trong <head>, không phải <meta>. Hãy đọc mô tả issue trong phiên bản Semrush đang dùng và không mặc định mọi lỗi hreflang đều thuộc cùng một cảnh báo.
Ví dụ mã nguồn gây xung đột
Ví dụ minh họa trên trang giải pháp phần mềm B2B:
<link rel="alternate" hreflang="en-US" href="{{URL_US}}">
<link rel="alternate" hreflang="en-US" href="{{URL_EN}}">
Bạn cần đối chiếu các thẻ có giá trị hreflang giống nhau nhưng đường dẫn href lại khác nhau. Nếu hai thẻ có cùng locale và cùng URL, đó là khai báo dư thừa, không phải xung đột mapping này.
Lưu ý: Các token{{URL_US}},{{URL_EN}}là placeholder; khi triển khai phải thay bằng URL tuyệt đối hợp lệ.

Cấu hình đúng cần đáp ứng điều gì?
Theo Google Search Central, tài liệu Tell Google about localized versions of your page:
- Mỗi locale có một URL phù hợp trong cùng cụm trang tương đương.
- URL đích phù hợp nội dung, thị trường và có thể được thu thập, lập chỉ mục.
- Các phiên bản khai báo nhất quán, bao gồm chính nó.
x-defaultkhông bắt buộc; chỉ dùng cho URL mặc định phù hợp.
Hreflang không thay thế canonical — khai báo URL ưu tiên — và không bảo đảm thứ hạng.
Những nguyên nhân phổ biến tạo ra xung đột hreflang
Xung đột cần được truy về nguồn xuất annotation hoặc bảng mapping, thay vì chỉ xử lý dòng HTML đang nhìn thấy. Những khả năng cần kiểm tra gồm:
- Plugin đa ngôn ngữ và plugin SEO cùng xuất hreflang.
- Theme hoặc template còn khai báo viết tay.
- Mapping gán cùng locale cho hai URL.
- Cấu hình cũ còn tồn tại sau thay đổi cấu trúc website.
- JavaScript hoặc middleware thêm annotation mâu thuẫn.
- HTML, HTTP header hoặc sitemap đang khai báo không nhất quán.
Nhiều nguồn cùng tạo thẻ
Ví dụ minh họa: Website nhà sản xuất B2B dùng plugin quản lý phiên bản thị trường, nhưng template vẫn chứa hreflang cũ. Hai nguồn cùng xuất thẻ vào <head>.
Lỗi có thể lan sang mọi trang dùng template đó. Đây là vấn đề phối hợp cấu hình, không phải bằng chứng một plugin cụ thể mặc định gây lỗi.

Mapping ngôn ngữ và khu vực không nhất quán
- Xác định URL chính xác: Nếu bảng mapping gán nhầm cả URL tiếng Anh chung và URL thị trường Mỹ cho
en-US, bạn cần kiểm tra thực tế xem trang nào mới là trang phục vụ đúng người dùng tại Mỹ. - Tránh suy luận locale từ tên thư mục: Đừng mặc định một trang có đường dẫn chứa /ca/ là
fr-CA. Hãy dựa vào nội dung và cấu hình thực tế của trang. - Xử lý riêng mã khu vực không chuẩn: Các mã sai quy chuẩn như
en-UKcần được chuẩn hóa độc lập (ví dụ đổi thành en-GB cho thị trường Anh).
Canonical hoặc trạng thái URL không phù hợp
Kiểm tra kèm những URL đích chuyển hướng, trả 404, chứa noindex hoặc canonical sang URL khác. Noindex là chỉ thị không lập chỉ mục trang.
Các dấu hiệu này có thể tồn tại đồng thời với xung đột mapping, nhưng không tự động là cùng loại lỗi. Nên ghi chép lại các trường hợp này để phân loại công việc chính xác cho bộ phận kỹ thuật.
Cách xác định thẻ hreflang đang xung đột
Kiểm tra lỗi hreflang trên Semrush Audit phải đi từ báo cáo đến output thực tế. Quy trình gồm sáu bước:
- Mở issue và đọc mô tả cảnh báo.
- Xuất hoặc ghi nhận danh sách URL bị ảnh hưởng.
- Chọn trang đại diện theo template và thị trường.
- Mở View Page Source, tìm
hreflang. - Lập bảng locale–URL, nhóm theo locale.
- Kiểm tra URL đích, canonical và DOM nếu cần.
Xuất URL lỗi
Bạn hãy ghi lại URL nguồn, ngày kiểm tra, cấu hình crawl và loại template. Sau đó bạn lưu cả chi tiết issue công cụ cung cấp. Nếu báo cáo không hiển thị locale hoặc URL đích, bạn lấy thông tin từ mã nguồn, không giả định bảng báo cáo luôn chứa đủ bằng chứng kết luận.
Kiểm tra mã nguồn
Mở View Page Source/Xem nguồn trang, tìm thuộc tính hreflang, rồi đối chiếu từng cặp hreflang–href. Đừng phụ thuộc vào loại dấu nháy hoặc khoảng trắng cụ thể.
Tab Elements hiển thị DOM có thể đã bị JavaScript thay đổi. Mã nguồn ban đầu và DOM khác nhau chưa đủ để kết luận có lỗi.
Nếu báo cáo không khớp nguồn hiện tại, kiểm tra thời điểm crawl, cache và chế độ render - xử lý trang có JavaScript.

Lập bảng đối chiếu
Hreflang | URL được khai báo | Trạng thái | Kết luận |
|---|---|---|---|
|
| 200; canonical chính nó | Xung đột với dòng dưới |
|
| 200; canonical chính nó | Cùng locale, khác URL |
|
| 200; có | Lỗi liên quan cần xử lý |
|
| Chưa kiểm tra | Cần xác minh |
Xung đột được xác định từ quan hệ giữa hai dòng en-US, không phải riêng trạng thái 200. Khả năng crawl và lập chỉ mục phải kiểm tra thêm.
Cách sửa lỗi hreflang conflicts within page source code
Cách sửa lỗi hreflang conflicts trong mã nguồn bắt đầu bằng mapping đúng, không phải xóa thẻ hàng loạt:
- Xác định URL đúng cho từng locale.
- Loại bỏ hoặc thay thế annotation mâu thuẫn.
- Chuẩn hóa mã ngôn ngữ và khu vực.
- Căn chỉnh hreflang với canonical.
- Bổ sung self-reference và return link.
- Sửa nguồn sinh thẻ, làm mới cache.
1. Xác định URL đúng cho từng locale
Chuyên gia SEO cần phối hợp chặt chẽ với người quản lý nội dung và thị trường để xác minh các trang tương đương, từ đó thống nhất ma trận locale–URL chính xác.
Khi chọn URL đích, cần ưu tiên các trang trực tiếp trả về mã HTTP 200, không bị gắn thẻ noindex ngoài dự kiến và tương thích với thẻ canonical, thay vì chỉ dựa vào tên thư mục. Ngoài ra, việc một URL phục vụ nhiều locale phù hợp là hoàn toàn bình thường và không tự động tính là lỗi.
2. Loại bỏ hoặc thay thế annotation trùng
Bộ phận lập trình hoặc quản trị viên CMS cần thực hiện chỉnh sửa dựa trên ma trận ánh xạ đã được phê duyệt.
Trước khi sửa:
<link rel="alternate" hreflang="en-US" href="{{URL_US}}">
<link rel="alternate" hreflang="en-US" href="{{URL_EN}}">
<link rel="alternate" hreflang="vi-VN" href="{{URL_VI}}">
Sau khi xác minh {{URL_US}} là đích đúng cho en-US:
<link rel="alternate" hreflang="en-US" href="{{URL_US}}">
<link rel="alternate" hreflang="vi-VN" href="{{URL_VI}}">
Đây là code minh họa, không dùng nguyên trạng. Việc bỏ annotation không có nghĩa phải xóa trang {{URL_EN}}. Không đổi nó thành en-GB nếu chưa xác nhận thị trường Anh.
Giữ canonical và alternate ở các thẻ riêng.

3. Chuẩn hóa mã ngôn ngữ và khu vực
ISO 639-1 quy định mã ngôn ngữ hai ký tự; ISO 3166-1 Alpha-2 quy định mã quốc gia hai ký tự.
Khai báo cần sửa | Cách xử lý |
|---|---|
| Dùng |
| Thêm mã ngôn ngữ phù hợp, chẳng hạn |
| Dùng |
Locale không khớp nội dung | Xác minh rồi sửa locale hoặc URL |
eu là mã tiếng Basque hợp lệ. en-EU không phải cách nhắm toàn châu Âu theo mã vùng Google hỗ trợ.
4. Căn chỉnh hreflang với canonical
SEO và developer chọn URL chuẩn phù hợp cho phiên bản cần xuất hiện trong tìm kiếm. Ví dụ, URL có tham số theo dõi canonical về URL sạch thường nên được thay bằng URL sạch trong hreflang.
Theo Google Search Central, How to specify a canonical URL, canonical khai báo là tín hiệu, không bảo đảm Google chọn đúng URL đó.
Không canonical mọi bản dịch về một ngôn ngữ hoặc chuyển tất cả thành self-canonical máy móc. Kiểm tra giao thức, hostname, đường dẫn và tham số; các phiên bản không bắt buộc cùng domain.
5. Bổ sung self-reference và return link
Developer dùng chung ma trận đã duyệt:
- Self-reference: mỗi trang khai báo chính nó.
- Return link: A khai báo B thì B khai báo lại A.
Hai yêu cầu khác nhau và có thể được báo thành issue riêng.

6. Sửa tại nguồn đang sinh thẻ
Chủ sở hữu hệ thống sửa cấu hình gốc; vá output từng trang khiến lỗi dễ quay lại.
Tầng triển khai | Nguồn cần kiểm tra | Hành động |
|---|---|---|
WordPress | Plugin đa ngôn ngữ, theme, plugin SEO | Xác định nguồn trùng trước khi chỉnh |
Shopify | Markets, Liquid, app | Sửa mapping, kiểm tra output |
Next.js/headless | Metadata, render phía máy chủ/client | Đồng bộ logic sinh annotation |
CDN/middleware | Rule sửa response, cache | Sửa rule; làm mới cache liên quan |
XML sitemap | Bộ sinh alternate | Đồng bộ phương thức đang dùng |
Thử trên staging — môi trường thử nghiệm — và chuẩn bị bản sao lưu, phương án hoàn tác. Không tắt hàng loạt plugin trên website đang hoạt động.
Phân biệt hreflang conflict với các lỗi dễ nhầm lẫn
Hreflang mô tả phiên bản thay thế; canonical chỉ URL ưu tiên; HTML lang mô tả ngôn ngữ tài liệu. Ba tín hiệu có nhiệm vụ khác nhau. Một trang có thể gặp nhiều vấn đề đồng thời, nên cần tách dấu hiệu trước khi giao việc.
Vấn đề | Dấu hiệu nhận biết | Hướng xử lý |
|---|---|---|
Cùng locale, khác URL | Hai annotation cùng mã nhưng đích khác nhau trong một cụm | Chốt mapping, bỏ khai báo mâu thuẫn |
Mã không hợp lệ |
| Sửa theo ngôn ngữ và khu vực phù hợp |
Thiếu return link | A khai báo B, B không khai báo A | Bổ sung quan hệ chiều ngược |
Thiếu self-reference | Trang không khai báo chính nó | Thêm URL chính trang vào bộ alternate |
Canonical không phù hợp | URL đích ưu tiên một URL khác với phương án đã duyệt | Rà soát canonical và đích hreflang |
Thiếu/sai HTML | Thuộc tính ngôn ngữ tài liệu thiếu hoặc sai | Sửa |
Source/DOM tạo mâu thuẫn | JavaScript thêm hoặc đổi annotation thành mapping sai | Sửa logic tạo thẻ sau tải |
Theo MDN Web Docs, tài liệu HTML lang global attribute, lang hỗ trợ nhận diện ngôn ngữ tài liệu, gồm công nghệ hỗ trợ như trình đọc màn hình. Thêm <html lang="vi"> không loại bỏ mapping hreflang mâu thuẫn.
Khác biệt source/DOM chỉ cần sửa khi gây thiếu, sai, mâu thuẫn hoặc ảnh hưởng khả năng xử lý. Hreflang cũng không tự chuyển hướng trình duyệt, không thay thế canonical và không giải quyết mọi vấn đề trùng lặp.

Kiểm tra lại sau khi sửa và ngăn lỗi tái diễn
Chỉ đóng ticket khi output mới và lần crawl mới chứng minh vấn đề đã được xử lý. Hết cảnh báo không đồng nghĩa Google đã xử lý lại mọi URL.
Checklist nghiệm thu SEO–developer
- Mỗi locale trong cụm có mapping URL nhất quán.
- URL đích trả HTTP 200, không qua redirect không cần thiết.
- Không có
noindexngoài dự kiến; đã kiểm tra khả năng crawl. - Hreflang phù hợp cấu hình canonical đã duyệt.
- Self-reference đúng.
- Return link giữa các phiên bản đã được kiểm tra.
- Mã ngôn ngữ/khu vực hợp lệ;
x-defaultđúng vai trò nếu dùng. - Source và DOM không tạo annotation mâu thuẫn.
- Những phương thức triển khai đang dùng không khai báo trái nhau.
- Semrush Site Audit mới, với phạm vi và cấu hình tương đương, không còn issue đã sửa.
Trường ticket: người kiểm tra, ngày kiểm tra, phạm vi URL, bằng chứng trước/sau.
HTTP 200 và không có noindex không bảo đảm URL được lập chỉ mục. Nghiệm thu kỹ thuật không dựa vào thứ hạng tăng ngay.
Phòng ngừa lỗi tái diễn
- Dùng một nguồn dữ liệu chính cho mapping locale–URL.
- Kiểm tra theo template và thị trường trước triển khai.
- Crawl lại sau thay đổi plugin, định tuyến URL hoặc cấu hình đa ngôn ngữ.
- Với website lớn, thêm kiểm thử mapping vào quy trình triển khai tự động.
Theo Google Search Central, có thể chọn HTML, HTTP header hoặc sitemap; không cần triển khai cả ba.
Câu hỏi thường gặp
"Hreflang conflicts within page source code" có nghĩa là gì?
Đây là lỗi xảy ra khi các thẻ <link rel="alternate" hreflang="..."> trong mã nguồn của một trang web đưa ra các chỉ dẫn mâu thuẫn hoặc không nhất quán cho công cụ tìm kiếm. Ví dụ điển hình là cùng một mã ngôn ngữ/khu vực được khai báo trỏ tới nhiều URL đích khác nhau, khiến Google gặp khó khăn trong việc xác định phiên bản nào phù hợp nhất cho người dùng.
Những nguyên nhân chính nào gây ra lỗi xung đột Hreflang?
Lỗi này thường bắt nguồn từ việc có nhiều nguồn cùng xuất thẻ hreflang (ví dụ: plugin SEO và plugin đa ngôn ngữ cùng hoạt động), mapping (liên kết) sai giữa các phiên bản, hoặc thẻ hreflang không khớp với URL chuẩn (canonical). Ngoài ra, các cấu hình cũ tồn tại sau khi thay đổi cấu trúc website cũng là nguyên nhân phổ biến.
Làm thế nào để xác định chính xác các thẻ đang gây lỗi?
Bạn cần sử dụng các công cụ như Semrush Site Audit để trích xuất danh sách URL bị lỗi, sau đó thực hiện kiểm tra thủ công bằng cách: mở mã nguồn trang (View Page Source), tìm các thẻ hreflang, nhóm chúng theo mã ngôn ngữ (locale) và đối chiếu với URL đích. Hãy đảm bảo kiểm tra cả phần mã nguồn gốc và DOM (khi đã thực thi JavaScript) để phát hiện sự khác biệt.
Có nên sửa lỗi Hreflang bằng cách thay đổi thẻ Canonical không?
Không nên sửa máy móc. Bạn cần ưu tiên xác định URL chính xác cho từng thị trường trước. Hreflang và Canonical có chức năng khác nhau: Canonical chỉ định phiên bản ưu tiên để lập chỉ mục, còn Hreflang chỉ định phiên bản thay thế phù hợp với ngôn ngữ/khu vực. Bạn nên đảm bảo URL trong thẻ Hreflang luôn là URL canonical đã được kiểm chứng.
Tôi có thể dùng XML Sitemap thay vì đặt thẻ trong mã nguồn không?
Hoàn toàn có thể. Đối với các website quy mô lớn, việc chuyển các khai báo hreflang từ mã nguồn HTML sang XML sitemap là giải pháp tối ưu. Cách này giúp giảm tải cho mã nguồn, cải thiện tốc độ trang và giúp quản lý tập trung các liên kết đối xứng, từ đó loại bỏ các xung đột phát sinh do JavaScript hoặc lỗi render trong DOM.
Lỗi này có khiến website bị Google phạt hay không?
Không. Lỗi xung đột Hreflang không phải là dấu hiệu của một hình phạt thủ công (manual penalty) từ Google. Tuy nhiên, nó khiến công cụ tìm kiếm không thể hiểu đúng cấu trúc đa ngôn ngữ của bạn, dẫn đến việc người dùng bị điều hướng sai hoặc Google bỏ qua các tín hiệu Hreflang, gây ảnh hưởng tiêu cực đến thứ hạng trong kết quả tìm kiếm theo khu vực.
Sau khi sửa lỗi, làm sao để xác nhận đã hoàn tất?
Bạn cần thực hiện kiểm tra lại bằng cách: đảm bảo mỗi locale trong cùng một cụm trang có mapping nhất quán, tất cả URL đều trả về HTTP 200, các thẻ có tính đối xứng (return link), và chạy lại báo cáo audit với phạm vi tương đương để xác nhận các cảnh báo đã được giải quyết hoàn toàn.
Xem thêm:
- Các lỗi crawl và index thường gặp: Cách kiểm tra và khắc phục
- Alternate page with proper canonical tag: Khi nào cần sửa?
- Duplicate without user selected canonical: Cách xử lý hiệu quả
Kết luận
Việc xử lý hreflang conflicts within page source code cần bắt đầu từ việc thu thập bằng chứng xác định chính xác các URL đang được gán cho từng locale. Sau đó, bạn cần thống nhất lại ma trận URL phù hợp cho từng thị trường và tiến hành chỉnh sửa trực tiếp tại nguồn sinh mã thay vì chỉ sửa thủ công từng dòng HTML đơn lẻ. Cuối cùng, hãy đối chiếu lại mã nguồn, thẻ canonical, self-reference, return link và chạy lại kiểm tra (audit) để nghiệm thu kết quả hoàn tất.

.jpg&w=160&q=75)


