Ví dụ, lỗi định dạng mã ngôn ngữ hoặc thiếu đường dẫn liên kết có thể khiến công cụ tìm kiếm không nhận diện chính xác ngôn ngữ hoặc khu vực của trang, gây ra cạnh tranh lưu lượng giữa các trang đa ngôn ngữ và làm mất đi đối tượng mục tiêu.
Bài viết này tổng hợp 7 lỗi phổ biến nhất về thiết lập hreflang từ góc độ kỹ thuật thực tiễn. Hãy thường xuyên kiểm tra bằng công cụ để tránh những sai sót nhỏ làm giảm hiệu quả tối ưu hóa tổng thể.

Lỗi định dạng mã ngôn ngữ hoặc mã khu vực
Ví dụ, việc sử dụng chữ in hoa (ví dụ: EN-US
) hoặc sai chính tả (ví dụ: nhập sai zh-CN
thành zh-CH
) có thể khiến công cụ tìm kiếm không nhận dạng được khu vực mục tiêu của trang và coi đó là thẻ không hợp lệ.
Mã có thể trông đúng (ví dụ: dùng es-ES
thay vì es
) nhưng thông tin thừa có thể làm cho logic khớp của công cụ tìm kiếm bị rối loạn.
Ảnh hưởng khá lớn, ví dụ như lưu lượng người dùng ở Tây Ban Nha có thể bị chuyển hướng nhầm sang trang tiếng Bồ Đào Nha.
Quy tắc mã chuẩn ISO
- Mã ngôn ngữ: Dùng mã 2 chữ cái viết thường theo tiêu chuẩn ISO 639-1 (ví dụ:
en
, es
, zh
). - Mã khu vực: Không bắt buộc, dùng mã 2 chữ cái viết hoa theo tiêu chuẩn ISO 3166-1 (ví dụ:
US
, GB
, CN
). - Định dạng kết hợp: Ngôn ngữ và khu vực cách nhau bằng dấu gạch ngang (ví dụ:
en-US
(tiếng Anh Mỹ), zh-CN
(tiếng Trung giản thể)).
Trường hợp ngoại lệ:
- Khi chỉ dùng mã ngôn ngữ (ví dụ:
fr
), nghĩa là dành cho tất cả người dùng ngôn ngữ đó, không giới hạn khu vực cụ thể. - Tiếng Trung phồn thể dùng
zh-Hant
(Trung phồn thể) hoặc zh-Hant-TW
(phồn thể Đài Loan), tránh dùng zh-TW
vì có thể bị hiểu nhầm thành Trung giản thể Đài Loan.
Các lỗi điển hình và kết quả
Lỗi 1: Viết hoa – viết thường không đúng quy chuẩn
- Ví dụ sai:
EN-us
(mã ngôn ngữ viết hoa + mã khu vực viết thường), Zh-cn
(chữ cái đầu viết hoa). - Kết quả: Công cụ tìm kiếm có thể bỏ qua thẻ, làm trang không hiển thị với đối tượng mục tiêu.
Lỗi 2: Sai chính tả hoặc mã không tồn tại
- Ví dụ sai:
pt-BZ
(mã chính xác của Brazil là BR
), eu
(tiếng Basque, có thể không được hỗ trợ ở một số công cụ). - Kết quả: Mã sai hoặc ngôn ngữ hiếm có thể khiến trang không được lập chỉ mục, lưu lượng sẽ chuyển về trang ngôn ngữ mặc định.
Lỗi 3: Mã thừa hoặc kết hợp sai
- Ví dụ sai:
es-ES
(tiếng Tây Ban Nha + Tây Ban Nha, thực tế chỉ cần es
), en-US-UK
(kết hợp nhiều khu vực không hợp lệ). - Kết quả: Thông tin thừa gây rối cho công cụ tìm kiếm, trang dùng mã ngắn hơn sẽ được ưu tiên hiển thị.
Công cụ và cách kiểm tra đề xuất
- Công cụ kiểm tra hreflang của Google: Nhập URL để kiểm tra thẻ có được công nhận chính xác không (khuyên dùng kết hợp Search Console).
- Screaming Frog: Quét website, lọc thẻ hreflang và xuất danh sách lỗi hàng loạt (phiên bản trả phí).
- Hreflang Validator (công cụ bên thứ ba): Kiểm tra miễn phí trực tuyến, hiển thị lỗi và xung đột.
Cách sửa lỗi thực tế
Kiểm tra mã hiện tại: Với trang WordPress, kiểm tra plugin SEO như Yoast hoặc xem trực tiếp mã nguồn để tìm thẻ <link rel="alternate" hreflang="..." />
.
Thay thế mã sai hàng loạt:
- Nếu bạn sử dụng plugin đa ngôn ngữ (như WPML), hãy chỉnh sửa trực tiếp định dạng “mã ngôn ngữ” trong cài đặt ngôn ngữ.
- Nếu sửa thủ công, hãy đảm bảo tất cả các trang sử dụng định dạng thống nhất (ví dụ: thay thế
EN
thành en
trên toàn bộ trang).
Thêm mã vùng (tuỳ chọn):
- Chỉ thêm khi cần phân vùng chi tiết hơn (ví dụ:
en-GB
dành cho người dùng Anh), nếu không thì chỉ dùng mã ngôn ngữ (ví dụ: fr
).
Kiểm tra lại:Dùng công cụ để kiểm tra lại, đảm bảo trang đã chỉnh sửa trả về mã trạng thái 200 và không có lỗi thu thập dữ liệu.
Không sử dụng URL tuyệt đối đầy đủ
Nhiều người quản trị web thường nghĩ rằng dùng đường dẫn tương đối (ví dụ: /de/page
) hoặc bỏ qua giao thức (ví dụ: example.com/de
) sẽ đơn giản hóa cấu hình, nhưng thực tế có thể gây ra vấn đề nghiêm trọng.
Ví dụ, khi trang có cả phiên bản http
và https
, nếu bỏ qua giao thức thì công cụ tìm kiếm có thể hiểu nhầm là hai trang khác nhau, gây phân tán giá trị SEO.
Ngoài ra, nếu trang dùng cấu trúc tên miền phụ hoặc thư mục phụ mà không thống nhất URL tuyệt đối, thì sự mơ hồ trong đường dẫn có thể khiến thẻ không hoạt động (ví dụ: URL di động và desktop lẫn lộn).
Định nghĩa và sự cần thiết của URL tuyệt đối
URL tuyệt đối phải bao gồm giao thức (http://
hoặc https://
), tên miền đầy đủ, và đường dẫn (ví dụ: https://www.example.com/de/page
).
Sự cần thiết:
- Công cụ tìm kiếm cần phân biệt rõ các trang khác nhau. Đường dẫn tương đối (ví dụ:
/de/page
) không cho biết rõ đang dùng phiên bản nào (http
hay https
) nên dễ gây nội dung trùng lặp. - Khi dùng tên miền phụ hoặc thư mục phụ, nếu không dùng URL tuyệt đối, công cụ tìm kiếm có thể hiểu sai vị trí trang (ví dụ:
de.example.com/page
và www.example.com/de/page
bị xem là trang khác nhau).
Tình huống vấn đề điển hình:
- Trang có cả phiên bản
http
và https
nhưng thẻ hreflang không ghi rõ giao thức, làm phân tán giá trị SEO. - Dùng chung nội dung trên cả phiên bản di động và máy tính nhưng URL khác nhau (ví dụ:
m.example.com/de
và example.com/de
), nhưng không liên kết bằng URL tuyệt đối.
Tình huống lỗi phổ biến và kết quả
Lỗi 1: Dùng đường dẫn tương đối hoặc bỏ giao thức
Ví dụ sai:
<link hreflang="de" href="/de/page" />
(đường dẫn tương đối)<link hreflang="es" href="www.example.com/es/page" />
(không có https://
)
Kết quả:
- Công cụ tìm kiếm có thể hiểu
/de/page
là http://example.com/de/page
, trong khi thực tế là phiên bản https
, dẫn đến thẻ không hoạt động. - Các trang
http
và https
được coi là khác nhau, gây nội dung trùng lặp và phân tán SEO.
Lỗi 2: Không đồng nhất tên miền phụ
- Ví dụ sai: Trang chính dùng
https://example.com/fr/page
nhưng trang phụ tiếng Pháp lại dùng URL khác.
https://fr.example.com/page
đang không sử dụng URL tuyệt đối trong các thẻ hreflang liên kết với nhau.Ảnh hưởng: Công cụ tìm kiếm không thể liên kết các trang giữa tên miền phụ và trang chính, dẫn đến người dùng tiếng Pháp có thể được chuyển hướng đến trang ngôn ngữ mặc định.Lỗi 3: Tham số động chưa được chuẩn hóa
- Ví dụ lỗi:
<link hreflang="ja" href="https://example.com/page?lang=ja" />
(bao gồm tham số theo dõi) - Ảnh hưởng: Công cụ tìm kiếm có thể xem đây là các trang khác nhau (ví dụ:
?lang=ja
và ?lang=ja&utm=ads
), dẫn đến việc thẻ hreflang không được áp dụng đầy đủ.
Cách phát hiện bằng công cụ
- Google Search Console:
Kiểm tra lỗi “Trang trùng lặp” hoặc “hreflang chưa được thiết lập” trong báo cáo Phủ sóng để xác định URL không đầy đủ. - Screaming Frog:
Thu thập dữ liệu website và lọc các thẻ hreflang
, kiểm tra xem tất cả các thuộc tính href
có phải là URL tuyệt đối không (bộ lọc: //example.com
hoặc /path
). - Sitebulb:
Báo cáo “Kiểm tra SEO quốc tế” sẽ hiển thị các URL hreflang không đầy đủ kèm theo đề xuất sửa chữa.
Cách sửa và hướng dẫn thực hiện
Hệ thống CMS (ví dụ: WordPress):
Cài đặt plugin:
Nếu sử dụng plugin như Yoast SEO, bật tính năng “Tạo URL tuyệt đối” trong phần cài đặt đa ngôn ngữ (thường phải tắt tùy chọn “Đường dẫn tương đối”).
Thay thế dữ liệu hàng loạt trong cơ sở dữ liệu:
Dùng câu lệnh SQL hoặc plugin Better Search Replace để thay thế href="/
bằng href="https://www.example.com/
.
Sửa mã thủ công:
Trong HTML hoặc logic render phía máy chủ, đảm bảo tất cả các liên kết hreflang đều được tạo thành URL tuyệt đối. Ví dụ:
Cài đặt máy chủ:
- Thống nhất giao thức: dùng
.htaccess
hoặc cấu hình Nginx để tự động chuyển hướng từ http
sang https
, tránh nội dung hỗn hợp. - Chuẩn hóa URL: thêm chuyển hướng 301 cho các đường dẫn khác nhau của cùng một nội dung (ví dụ:
/de
và /de/
) để đảm bảo URL tuyệt đối duy nhất.
Thiếu thẻ hreflang tự tham chiếu
Ví dụ, trang tiếng Pháp chỉ có liên kết đến các phiên bản tiếng Anh hoặc tiếng Tây Ban Nha, nhưng không có hreflang="fr"
trỏ về chính nó
Công cụ tìm kiếm có thể không xác định được ngôn ngữ trang, khiến trang không được hiển thị đúng cho người dùng tiếng Pháp.
Vai trò và tầm quan trọng của thẻ tự tham chiếu
Thẻ tự tham chiếu là thẻ hreflang trên trang trỏ chính nó (ví dụ: trang tiếng Pháp phải có <link rel="alternate" hreflang="fr" href="URL chính nó"/>
).
Vai trò chính:
- Giúp công cụ tìm kiếm hiểu rõ ngôn ngữ và khu vực của trang, tránh nhầm lẫn.
- Tạo mối liên kết đóng giữa các trang đa ngôn ngữ, đảm bảo truyền tải quyền đánh giá chính xác.
Tác động khi thiếu thẻ này:
- Các công cụ tìm kiếm có thể xem trang là “không xác định ngôn ngữ” và tự động phân loại vào thư mục ngôn ngữ mặc định, dẫn đến mất lưu lượng truy cập từ người dùng mục tiêu.
- Trong trường hợp cạnh tranh đa ngôn ngữ (ví dụ như trang tiếng Anh và tiếng Tây Ban Nha cùng không có tham chiếu hreflang đến chính mình) có thể gây ra vấn đề trùng lặp nội dung nội bộ.
Các lỗi phổ biến và phân tích trường hợp
Lỗi 1: Sử dụng sai hreflang trên website chỉ có một ngôn ngữ
- Tình huống: Trang chỉ có một phiên bản ngôn ngữ nhưng lại cố tình thêm hreflang tới các trang ngôn ngữ khác không tồn tại.
- Ví dụ: Website chỉ có tiếng Anh nhưng lại thêm thẻ
hreflang="en"
tham chiếu đến chính trang đó và đồng thời thêm sai thẻ hreflang="es"
đến trang không tồn tại, gây nhầm lẫn cho công cụ tìm kiếm.
Lỗi 2: Thiếu cấu hình plugin đa ngôn ngữ
- Ví dụ: Khi sử dụng plugin WPML mà không chọn tùy chọn “Tự động tạo hreflang tham chiếu chính mình”.
- Kết quả: Các thẻ tạo ra chỉ chứa liên kết các ngôn ngữ khác mà không có liên kết của trang hiện tại.
Lỗi 3: Thiếu thẻ trên các trang động
- Ví dụ: Trang web sử dụng React hoặc Vue render bằng JavaScript nhưng thẻ hreflang không được chèn đúng trong
<head>
. - Tác động: Công cụ tìm kiếm có thể không nhận diện được thẻ tham chiếu chính mình được tạo động.
Công cụ và cách kiểm tra
Bước 1: Kiểm tra thủ công mã nguồn
- Ấn
Ctrl+U
để xem mã nguồn, tìm kiếm hreflang="xx"
và kiểm tra xem có thẻ nào tham chiếu đến URL hiện tại (xx là mã ngôn ngữ trang) hay không.
Bước 2: Kiểm tra trên Google Search Console
- Nhập URL trang vào “Công cụ kiểm tra URL”, xem báo cáo “Định hướng quốc tế” để kiểm tra cảnh báo “Không tìm thấy thẻ hreflang tham chiếu chính mình”.
Bước 3: Sử dụng công cụ Hreflang Validator
- Nhập URL trang, công cụ sẽ hiển thị danh sách các liên kết hreflang, nếu thiếu thẻ tham chiếu chính mình sẽ có cảnh báo màu đỏ.
Cách sửa và các bước thực hiện
Sửa trên CMS (ví dụ WordPress):
Sửa cấu hình plugin:
- Dùng Yoast SEO: bật tùy chọn “Thêm hreflang tham chiếu chính mình” trong phần cài đặt nâng cao.
- Dùng WPML: vào “Cài đặt ngôn ngữ” → “Tùy chọn SEO” và tích “Bao gồm liên kết trang hiện tại”.
Sửa thủ công (trang tĩnh hoặc code tùy chỉnh):
Thêm đoạn mã sau vào phần <head>
(ví dụ trang tiếng Pháp):
Trong phần “Cài đặt mẫu”, hãy đảm bảo logic thẻ hreflang bao gồm vòng lặp qua tất cả các phiên bản ngôn ngữ:
Phương án 2: Sửa mã thủ công (Trang tĩnh)
Tạo danh sách liên kết cho từng phiên bản ngôn ngữ (ví dụ Excel), liệt kê nhóm URL cần liên kết chéo.
Thêm thẻ theo danh sách trên trang, ví dụ:
Đồng thời chỉnh sửa trang tiếng Đức, tiếng Pháp để đảm bảo bao gồm liên kết về trang tiếng Anh.
Phương án 3: Tự động hóa phía máy chủ (ví dụ Nginx)
Dùng reverse proxy và quy tắc ánh xạ để tạo thẻ hreflang động:
Xung đột với thẻ Canonical
Ví dụ, trang sản phẩm tiếng Đức có thẻ Canonical trỏ về trang chính tiếng Anh, công cụ tìm kiếm sẽ xem trang tiếng Đức là bản sao của trang tiếng Anh và không phân phối cho người dùng tiếng Đức.
Vấn đề phổ biến hơn là nhiều CMS mặc định để tất cả phiên bản ngôn ngữ trỏ Canonical về trang ngôn ngữ chính (như x-default
), khiến các trang ngôn ngữ khác không được lập chỉ mục độc lập.
Nguyên lý xung đột và quy tắc ưu tiên
Ưu tiên xử lý thẻ hreflang và Canonical của công cụ tìm kiếm:
Ưu tiên Canonical: Nếu trang A có Canonical trỏ về trang B, công cụ tìm kiếm sẽ xem A là bản sao của B, dù A có khai báo hreflang cũng sẽ bị bỏ qua.
Trường hợp hreflang không hoạt động:
- Trang tiếng Pháp có Canonical trỏ về trang tiếng Anh → trang tiếng Pháp sẽ không được phân phối đến người dùng tiếng Pháp.
- Tất cả các trang đa ngôn ngữ trỏ Canonical về trang chính → các phiên bản ngôn ngữ bị coi là nội dung trùng lặp.
Quy tắc ngoại lệ:
- Nếu thẻ Canonical trỏ về chính nó (tức là
<link rel="canonical" href="URL trang hiện tại"/>
), hreflang có thể hoạt động bình thường.
Tình huống lỗi điển hình và hậu quả
Lỗi 1: Xung đột cấu hình mặc định của plugin đa ngôn ngữ
- Ví dụ: Plugin Yoast SEO trên WordPress mặc định để thẻ Canonical của các trang đa ngôn ngữ trỏ về trang ngôn ngữ chính. Ví dụ, trang tiếng Đức có thẻ Canonical là
<link rel="canonical" href="https://example.com/en/page"/>
. - Hậu quả: Trang tiếng Đức bị coi là bản sao của trang tiếng Anh, không hiển thị trong kết quả tìm kiếm tiếng Đức, mất hơn 50% lưu lượng truy cập.
Lỗi 2: Tham số động gây nhiễu
- Ví dụ: URL có tham số (như
example.com/page?lang=de
) có thẻ Canonical trỏ đến phiên bản không có tham số (example.com/page
), nhưng phiên bản này không có cấu hình hreflang. - Hậu quả: Trang tiếng Đức có tham số không được lập chỉ mục, người dùng chỉ thấy trang ngôn ngữ mặc định khi tìm kiếm.
Lỗi 3: Biến thể khu vực không được khai báo riêng biệt
- Ví dụ: Trang
en-US
có thẻ Canonical trỏ đến trang tiếng Anh chung (en
), khiến công cụ tìm kiếm nghĩ rằng trang tiếng Anh Mỹ không có giá trị riêng biệt. - Hậu quả: Người dùng tại Mỹ có thể bị chuyển hướng đến trang
en
(ví dụ tiếng Anh Anh), giảm trải nghiệm bản địa hóa.
Công cụ kiểm tra và phương pháp rà soát
Công cụ 1: Google Search Console
- Vào báo cáo “Phạm vi”, lọc theo tab “Loại trừ” mục “Trang trùng lặp” hoặc “Đã gửi nhưng chưa được lập chỉ mục”, kiểm tra xem có lỗi hreflang do xung đột Canonical không.
Công cụ 2: Screaming Frog
- Sau khi crawl website, lọc các trang có cả thẻ hreflang và Canonical, kiểm tra xem Canonical có trỏ đến trang khác (không phải chính nó) hay không.
- Xuất dữ liệu và lọc theo điều kiện:
Canonical != Self-URL
.
Công cụ 3: DeepCrawl
- Thiết lập cảnh báo tùy chỉnh: kích hoạt cảnh báo khi mục tiêu hreflang và Canonical không khớp.
Phương án sửa chữa và các bước thực hiện
Phương án 1: Sửa plugin CMS (ví dụ Yoast SEO)
- Vào cài đặt đa ngôn ngữ, tắt tùy chọn “Canonical trỏ về ngôn ngữ chính”.
- Trong phần cài đặt nâng cao, bật “Tạo thẻ Canonical riêng cho từng phiên bản ngôn ngữ”.
Phương án 2: Sửa mã thủ công
Trong phần <head>
của trang, đảm bảo thẻ Canonical trỏ về chính URL của trang, ví dụ:
Phương án 3: Cấu hình phía máy chủ (ví dụ Nginx)
Tạo thẻ Canonical động phù hợp với phiên bản ngôn ngữ hiện tại:
Lỗi máy chủ hoặc không hỗ trợ yêu cầu HTTP
Ví dụ, trang được tạo động bị timeout máy chủ không tải được HTML đầy đủ, dẫn đến thiếu thẻ hreflang trong phần <head>
;
Hoặc trang dành cho thiết bị di động trả về mã 302 (chuyển hướng tạm thời) thay vì 200, công cụ tìm kiếm có thể bỏ qua việc thu thập thông tin;
Một số CDN hoặc quy tắc tường lửa chặn yêu cầu của bot, khiến các trang ngôn ngữ vùng miền không thể được đọc.
Loại lỗi máy chủ và ảnh hưởng
Mã trạng thái quan trọng và hậu quả:
404 Not Found:
- Tình huống: Trang tiếng Pháp được tham chiếu qua hreflang từ các trang ngôn ngữ khác nhưng URL thực tế đã bị xóa hoặc sai đường dẫn.
- Kết quả: Công cụ tìm kiếm coi liên kết hreflang là không hợp lệ, trang tiếng Pháp không được lập chỉ mục và độ tin cậy của các trang ngôn ngữ khác cũng giảm.
500 Internal Error:
- Tình huống: Máy chủ bị sự cố khiến các thẻ hreflang tạo động không được tải lên.
- Kết quả: Trang trả về lỗi 500, hreflang hoàn toàn không hoạt động và công cụ tìm kiếm có thể tạm ngừng truy cập website.
302 Temporary Redirect:
- Tình huống: Trang dành cho thiết bị di động tạm thời chuyển hướng đến URL dành cho máy tính để bàn nhưng không truyền thẻ hreflang.
- Kết quả: Công cụ tìm kiếm chỉ thu thập hreflang của trang máy tính để bàn và có thể bỏ qua phiên bản ngôn ngữ trên di động.
Vấn đề tải trang động
Lỗi trong quá trình kết xuất JavaScript:
- Trường hợp: Ứng dụng một trang (SPA) sử dụng React hoặc Vue chèn thẻ hreflang động qua JS nhưng không được prerender.
- Kết quả: Nếu trình thu thập dữ liệu không thực thi JS, sẽ không đọc được thẻ hreflang.
Cài đặt CDN/Cache gây cản trở:
- Trường hợp: Cài đặt cache CDN bỏ qua thẻ hreflang trong
<head>
hoặc lưu cache trang sai phiên bản ngôn ngữ. - Kết quả: Truy cập cùng một URL có thể trả về trang cache ngôn ngữ khác nhau, gây nhầm lẫn liên kết hreflang.
Timeout máy chủ và vấn đề hiệu suất:
- Trường hợp: Thời gian tải trang vượt quá 5 giây, trình thu thập dữ liệu dừng giữa chừng và không đọc hết thẻ hreflang.
- Kết quả: Đặc biệt với website đa ngôn ngữ lớn, một số liên kết ngôn ngữ có thể bị mất.
Công cụ kiểm tra và phương pháp xử lý
Google Search Console:
- Sử dụng báo cáo “Coverage” để kiểm tra các trang bị loại bỏ do lỗi máy chủ (404/500) và lọc URL đa ngôn ngữ.
Screaming Frog:
- Kích hoạt tùy chọn “Check hreflang” trong cấu hình crawl.
- Lọc kết quả theo “Server Error” (4xx, 5xx) để xem các trang liên quan hreflang.
Phân tích file log:
- Trích xuất các yêu cầu của trình thu thập dữ liệu (User-Agent chứa Googlebot) trong log máy chủ (ví dụ access.log của Nginx) và xác định các URL có lỗi thường xuyên.
Giải pháp và quy trình thực hiện
Sửa lỗi máy chủ:
Vấn đề 404:
- Kiểm tra tất cả URL được liên kết qua hreflang có tồn tại hay không, sửa các liên kết bị lỗi.
- Nếu trang đã bị xóa, loại bỏ liên kết đó khỏi hreflang của các trang khác.
Vấn đề 500:
- Tối ưu tài nguyên máy chủ (thêm bộ nhớ, pool kết nối DB…) để giảm rủi ro sự cố.
- Cài đặt công cụ giám sát như New Relic để phát hiện và sửa lỗi kịp thời.
Tối ưu trang động:
Phương pháp prerender:
- Sử dụng các framework SSR như Next.js, Nuxt.js để chèn thẻ hreflang ngay trong HTML tải đầu tiên.
- Cấu hình công cụ prerender như Prerender.io để cung cấp phiên bản tĩnh cho trình thu thập dữ liệu.
Sửa cài đặt CDN:
- Thiết lập CDN cho các đường dẫn ngôn ngữ như
/de/
, /fr/
không cache hoặc cache trong thời gian ngắn (ví dụ 1 giờ). - Đảm bảo CDN truyền toàn bộ nội dung trong
<head>
và không sửa đổi thẻ HTML.
Tối ưu hiệu suất:
- Nén hình ảnh, CSS/JS và các tài nguyên khác để rút ngắn thời gian tải dưới 3 giây.
- Dùng công cụ như Google Lighthouse để phát hiện và sửa các vấn đề cản trở kết xuất.
Nội dung trùng lặp do tham số động
Việc lạm dụng tham số động (ví dụ: ?utm_source=ads
, ?sessionid=123
) là nguyên nhân “ẩn” gây ra vấn đề nội dung trùng lặp trên website đa ngôn ngữ.
Ví dụ trang tiếng Tây Ban Nha có nhiều URL với tham số khác nhau (ví dụ /es/page?ref=facebook
, /es/page?ref=email
), công cụ tìm kiếm sẽ coi đó là các trang riêng biệt và xử lý như nội dung trùng lặp.
Ảnh hưởng và phân loại tham số
Tham số cần giữ lại:
- Tham số phân trang (ví dụ:
?page=2
): được dùng để phân biệt các khối nội dung khác nhau, cần giữ lại nhưng phải chuẩn hóa (ví dụ: sử dụng rel="canonical"
trỏ về trang chính). - Tham số ngôn ngữ/khu vực (ví dụ:
?lang=de
): nếu URL không phân biệt ngôn ngữ bằng đường dẫn (ví dụ: /de/
), cần giữ lại và đảm bảo khớp với hreflang.
Tham số cần loại bỏ:
- Tham số theo dõi (ví dụ:
?utm_source
, ?ref=social
): không làm thay đổi nội dung trang, nên loại bỏ khỏi hreflang. - Session ID (ví dụ:
?sessionid=123
): tham số dùng để theo dõi hành vi người dùng, có thể tạo ra nhiều URL trùng lặp.
Lỗi thường gặp và hậu quả
Lỗi 1: Tham số không chuẩn hóa
- Ví dụ: Trang tiếng Pháp giống nhau nhưng tồn tại nhiều URL với tham số theo dõi khác nhau (ví dụ:
/fr/page?utm=ads
và /fr/page?utm=email
), tất cả đều được khai báo riêng trong hreflang. - Hậu quả: Công cụ tìm kiếm thu thập tất cả các trang trùng lặp, phân tán quyền lực trang và làm giảm thứ hạng trang tiếng Pháp.
Lỗi 2: hreflang thiếu tham số
- Ví dụ: Trang tiếng Anh trong hreflang trỏ tới
/de/page
nhưng URL tiếng Đức thực tế là /de/page?lang=de
, dẫn đến liên kết không khớp. - Hậu quả: Trang tiếng Đức bị nhận dạng là nội dung riêng biệt và không liên kết đa ngôn ngữ thành công.
Lỗi 3: Tham số phân trang ảnh hưởng đến nội dung chính
- Ví dụ: Trang danh sách sản phẩm
/es/products?page=2
trong hreflang không trỏ về trang chính /es/products
. - Hậu quả: Các trang phân trang bị nhận dạng nhầm là trang ngôn ngữ riêng biệt, gây cạnh tranh lưu lượng với trang chính.
Cách kiểm tra bằng công cụ
Google Search Console:
- Báo cáo “Phạm vi lập chỉ mục”, lọc URL “Đã gửi nhưng không lập chỉ mục” để kiểm tra xem có bị loại do trùng tham số không.
Screaming Frog:
- Khi crawl site, bật tùy chọn “Ignore URL Parameters” để so sánh độ tương đồng nội dung giữa các URL có và không có tham số.
- Lọc thẻ hreflang để kiểm tra xem URL có tham số có được chuẩn hóa chưa.
Dùng biểu thức chính quy (Regex):
- Dùng regex trong công cụ phân tích log (ví dụ ELK Stack) để lọc các truy vấn crawler có tham số nhất định (ví dụ:
utm_*
), thống kê số lần crawl trùng lặp.
Giải pháp và quy trình thực tế
Giải pháp 1: Chuẩn hóa tham số (Cấu hình server)
Ví dụ cấu hình Apache:
- Chức năng: Tự động loại bỏ tất cả tham số
utm_
và chuyển hướng 301 tới URL không tham số.
Giải pháp 2: Đồng bộ hreflang với canonical
- Trong hreflang, luôn sử dụng URL không tham số (ví dụ:
/de/page
). - URL có tham số phải có thẻ canonical trỏ về URL không tham số:
Giải pháp 3: Cấu hình tham số URL trong Google Search Console
- Trong mục “URL Parameters”, đánh dấu các tham số như
utm_
, sessionid
là “No effect on page content”. - Đánh dấu tham số phân trang (ví dụ:
page
) là “Paginates” để giúp công cụ tìm kiếm hiểu đúng vai trò.
Tối ưu hreflang cho trang đa ngôn ngữ không phải làm một lần là xong.
Việc tránh những lỗi kỹ thuật nhỏ này chính là bước đầu tiên để tối ưu hóa hiệu quả.
Sửa lỗi trang render động (như React):
Trong logic server-side rendering (SSR), tạo thẻ tự tham chiếu dựa trên ngôn ngữ hiện tại của trang một cách động:
Nguyên tắc liên kết khép kín và tầm quan trọng
Quy tắc cốt lõi của hreflang là tất cả các trang liên quan phải liên kết lẫn nhau tạo thành một vòng khép kín hoàn chỉnh. Ví dụ:
- Trang tiếng Đức (
de
) phải liên kết đến trang tiếng Anh (en
), tiếng Pháp (fr
) và các phiên bản ngôn ngữ khác; - Trang tiếng Anh và tiếng Pháp cũng phải liên kết ngược lại trang tiếng Đức.
Tầm quan trọng:
- Truyền sức mạnh SEO: Liên kết khép kín giúp công cụ tìm kiếm hiểu rằng các trang đa ngôn ngữ là tương đương, tránh phân tán sức mạnh SEO.
- Ngăn chặn nội dung trùng lặp: Nếu chỉ liên kết một chiều (ví dụ trang tiếng Anh chỉ liên kết đến tiếng Đức, nhưng tiếng Đức không liên kết lại), công cụ tìm kiếm có thể coi hai trang là nội dung độc lập và có thể bị phạt vì trùng lặp nội dung.
Trường hợp ngoại lệ:
- Trang chỉ có một ngôn ngữ (ví dụ chỉ tiếng Anh) không cần liên kết khép kín, nhưng phải tự tham chiếu.
- Biến thể khu vực (như
en-US
và en-GB
) nên liên kết với nhau nhưng không bắt buộc phải liên kết với các ngôn ngữ khác.
Các trường hợp mất liên kết thường gặp và hậu quả
Trường hợp 1: Thêm phiên bản ngôn ngữ mới nhưng không cập nhật các trang cũ
- Ví dụ: Một trang tin tức thêm trang tiếng Nhật (
ja
), nhưng trang tiếng Anh và tiếng Trung không thêm thẻ hreflang liên kết đến trang tiếng Nhật. - Hậu quả: Trang tiếng Nhật trở thành “trang cô lập”, công cụ tìm kiếm chỉ lập chỉ mục các trang đa ngôn ngữ khác có liên kết.
Trường hợp 2: Lỗi logic plugin CMS
- Ví dụ: Plugin đa ngôn ngữ của WordPress (như Polylang) không tự động thêm liên kết ngôn ngữ mới cho nội dung cũ khi tạo trang hàng loạt.
- Hậu quả: Một số trang bị mất liên kết, người dùng không thể chuyển sang phiên bản ngôn ngữ mới khi xem nội dung cũ.
Trường hợp 3: Tham số động làm mất hiệu lực liên kết
- Ví dụ: URL trang tiếng Tây Ban Nha có tham số (như
?lang=es
), nhưng các trang ngôn ngữ khác không bao gồm tham số này trong hreflang. - Hậu quả: Công cụ tìm kiếm coi URL có tham số
es
là nội dung không liên quan.
Công cụ và phương pháp kiểm tra
Công cụ 1: Screaming Frog
- Trong kết quả thu thập, vào tab “Hreflang”, lọc các trang “Missing Reciprocal Links” (thiếu liên kết phản hồi).
- Hướng dẫn: Xuất danh sách lỗi để xác định các nhóm URL không tạo thành vòng khép kín.
Công cụ 2: Sitebulb
- Trong báo cáo “International SEO Audit”, xem cảnh báo “Unreciprocated hreflang links”, hiển thị các trang bị mất liên kết và ngôn ngữ thiếu.
Công cụ 3: DeepCrawl
- Thiết lập quy tắc tùy chỉnh để giám sát mối liên kết giữa các trang đa ngôn ngữ, tự động báo cáo các vấn đề mất liên kết hàng tuần.
Phương án sửa và các bước thực hiện
Phương án 1: Sửa hàng loạt qua plugin CMS (ví dụ Shopify)
Vào cài đặt plugin đa ngôn ngữ (như Langify), bật tùy chọn “Tự động liên kết tất cả các phiên bản ngôn ngữ”.