Cách triển khai thẻ hreflang cho WordPress đa ngôn ngữ

Bạn đã dịch toàn bộ trang WordPress của mình sang sáu ngôn ngữ. Các tệp .po sạch sẽ, các tệp .mo đã được biên dịch, mọi chuỗi đều hiển thị hoàn hảo bằng tiếng Pháp, tiếng Đức và tiếng Nhật. Tuy nhiên, vài tuần sau khi ra mắt, bạn kiểm tra Google Search Console và thấy một điều khó hiểu: trang tiếng Pháp của bạn đang xếp hạng cho các truy vấn tiếng Đức, trang tiếng Tây Ban Nha-Mexico của bạn đang được phục vụ cho những người tìm kiếm ở Tây Ban Nha, và hai phiên bản ngôn ngữ của bạn đang âm thầm cạnh tranh nhau trong bảng xếp hạng. Nội dung thì ổn. Vấn đề là Google không biết phiên bản nào thuộc về đối tượng nào.
Đây chính xác là những gì thẻ hreflang WordPress được thiết kế để khắc phục. Hreflang là tín hiệu cho các công cụ tìm kiếm biết nên phục vụ phiên bản ngôn ngữ và khu vực nào của một trang cho người dùng nào. Làm sai, bạn sẽ phải chịu sự pha loãng nội dung trùng lặp, kết quả sai ngôn ngữ và lãng phí ngân sách thu thập dữ liệu. Làm đúng, mỗi trang đã dịch sẽ tiếp cận được đối tượng mà nó được viết cho. Hướng dẫn này bao gồm cú pháp, sự khác biệt giữa mã ngôn ngữ và mã ngôn ngữ-khu vực, x-default bắt buộc, tính tương hỗ của thẻ trả về và ba cách thực tế để triển khai nó trong WordPress.
Hreflang thực sự làm gì
Hreflang không dịch bất cứ thứ gì. Nó là một bản đồ quan hệ. Khi bạn có cùng một trang bằng nhiều ngôn ngữ, các chú thích hreflang cho Google biết "URL này là phiên bản tiếng Anh, URL kia là phiên bản tiếng Đức, URL này dành cho người nói tiếng Tây Ban Nha ở Mexico." Google sử dụng bản đồ đó để phục vụ phiên bản chính xác trong kết quả tìm kiếm dựa trên cài đặt ngôn ngữ và vị trí của người dùng.
Chú thích nằm trong <head> của HTML dưới dạng một tập hợp các phần tử <link>. Mỗi phần tử đặt tên cho một trang đích và ngôn ngữ (và tùy chọn khu vực) mà nó phục vụ. Dưới đây là một tập hợp thẻ hreflang chính xác cho một trang có sẵn bằng tiếng Anh Hoa Kỳ, tiếng Anh Anh và tiếng Tây Ban Nha Mexico, với một dự phòng mặc định:
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/pricing/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/pricing/" />
<link rel="alternate" hreflang="es-MX" href="https://example.com/es-mx/pricing/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing/" />
Mỗi trang trong tập hợp nên xuất ra cùng khối này, liệt kê mọi phiên bản thay thế bao gồm cả chính nó. Điểm cuối cùng này khiến hầu hết mọi người mắc lỗi, và chúng ta sẽ quay lại nó.
Tại sao điều này quan trọng đối với SEO
Nếu không có hreflang, Google coi các trang đã dịch của bạn là các bản sao gần giống nhau cạnh tranh cho cùng một từ khóa. Kết quả là sự pha loãng: tín hiệu xếp hạng bị chia nhỏ giữa các phiên bản thay vì hợp nhất. Với hreflang chính xác, mỗi phiên bản kế thừa quyền lực của toàn bộ tập hợp và hiển thị cho đúng người tìm kiếm. Đây là một trong những động thái SEO có đòn bẩy cao nhất mà một trang web đa ngôn ngữ có thể thực hiện, và nó bổ sung chứ không thay thế việc dịch nội dung thực tế trong các tệp .po của bạn. Chúng tôi đề cập sâu về khía cạnh nội dung trong hướng dẫn của mình về cách dịch tệp PO ảnh hưởng đến thứ hạng Google.
Mã ngôn ngữ so với Mã ngôn ngữ-khu vực
Bạn nên sử dụng en hay en-GB? Hãy sử dụng mã đơn giản nhất mà đúng. Nếu nội dung tiếng Anh của bạn là chung chung và bạn không duy trì các phiên bản tiếng Anh Anh và tiếng Anh Mỹ riêng biệt, hãy chỉ sử dụng en. Chỉ thêm thẻ phụ khu vực khi bạn thực sự phục vụ nội dung khác nhau cho các quốc gia khác nhau.
Các giá trị Hreflang tuân theo định dạng language hoặc language-region. Phần ngôn ngữ là mã ISO 639-1 (en, es, de, pt). Phần khu vực tùy chọn là mã quốc gia ISO 3166-1 Alpha 2 (US, GB, MX, BR). Vì vậy:
ennhắm mục tiêu tất cả người nói tiếng Anh bất kể quốc gia.en-GBnhắm mục tiêu người nói tiếng Anh ở Vương quốc Anh.esnhắm mục tiêu tất cả người nói tiếng Tây Ban Nha.es-MXnhắm mục tiêu cụ thể người nói tiếng Tây Ban Nha ở Mexico.
Một chi tiết quan trọng: thẻ phụ khu vực là một quốc gia, không phải là một biến thể ngôn ngữ. es-MX không có nghĩa là "phương ngữ tiếng Tây Ban Nha Mexico," mà có nghĩa là "tiếng Tây Ban Nha, hiển thị cho người dùng ở Mexico." Google vẫn phục vụ nó dựa trên vị trí của người dùng. Nếu bạn duy trì các phương ngữ khu vực trong bản dịch của mình, mã khu vực là cách bạn định tuyến chúng. Chúng tôi đi sâu vào khía cạnh ngôn ngữ của điều này trong hướng dẫn của mình về các biến thể tiếng Tây Ban Nha và Bồ Đào Nha theo khu vực.
Một ví dụ sai phổ biến
Đây là một khối hreflang bị lỗi mà chúng tôi thường xuyên thấy:
<link rel="alternate" hreflang="en-uk" href="https://example.com/uk/" />
<link rel="alternate" hreflang="sp" href="https://example.com/es/" />
<link rel="alternate" hreflang="pt-PT_BR" href="https://example.com/pt/" />
Ba lỗi. en-uk không hợp lệ vì mã quốc gia của Vương quốc Anh là GB, không phải UK. sp hoàn toàn không phải là mã ngôn ngữ; tiếng Tây Ban Nha là es. Và pt-PT_BR trộn lẫn hai khu vực với một dấu gạch dưới không có ý nghĩa gì trong hreflang. Các công cụ tìm kiếm âm thầm bỏ qua các giá trị sai định dạng, vì vậy bạn không nhận được lỗi và không có lợi ích, chỉ mất hàng giờ gỡ lỗi tự hỏi tại sao không có gì thay đổi.
Lưu ý rằng hreflang sử dụng dấu gạch ngang (en-GB), trong khi các tệp định vị WordPress sử dụng dấu gạch dưới (en_GB). Đừng sao chép trực tiếp các mã tên tệp .po của bạn vào thẻ hreflang.
x-default và tính tương hỗ của thẻ trả về
Hai quy tắc gây ra nhiều lỗi hreflang âm thầm hơn bất cứ điều gì khác: thiếu x-default và tính tương hỗ bị hỏng.
Giá trị x-default cho Google biết trang nào sẽ phục vụ khi không có ngôn ngữ nào khác khớp với người dùng. Nó là trang dự phòng của bạn, thường là bộ chọn ngôn ngữ hoặc trang chủ thị trường chính của bạn. Nó không hoàn toàn bắt buộc theo thông số kỹ thuật, nhưng trên thực tế bạn nên luôn bao gồm nó. Nếu không có nó, một khách truy cập nói tiếng Bồ Đào Nha mà bạn không có phiên bản tiếng Bồ Đào Nha sẽ nhận được một lựa chọn ngẫu nhiên thay vì một mặc định có chủ ý.
Tính tương hỗ của thẻ trả về là không thể thương lượng. Mọi trang trong một bộ hreflang phải trỏ ngược lại mọi trang khác, bao gồm cả chính nó. Nếu trang tiếng Anh của bạn liệt kê tiếng Đức là một lựa chọn thay thế, trang tiếng Đức của bạn phải liệt kê tiếng Anh là một lựa chọn thay thế. Nếu trang tiếng Đức bỏ qua tham chiếu trả về, Google sẽ không tin tưởng toàn bộ mối quan hệ và bỏ qua các chú thích.
<!-- On the German page, the set must still list ALL versions -->
<link rel="alternate" hreflang="de" href="https://example.com/de/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about/" />
Tham chiếu tự động (de trỏ đến trang tiếng Đức khi xem trang tiếng Đức) là bắt buộc, không phải tùy chọn. Một bộ gồm năm phiên bản ngôn ngữ có nghĩa là mỗi trong năm trang xuất ra tất cả năm thẻ <link> cộng với x-default.
Ba cách triển khai hreflang trong WordPress
Bạn có ba tùy chọn thực tế, từ kiểm soát thủ công hoàn toàn đến tự động hóa hoàn toàn.
Phương pháp 1: Thủ công qua wp_head
Đối với một tập hợp các trang tĩnh nhỏ, bạn có thể chèn các thẻ hreflang trực tiếp thông qua hành động wp_head trong tệp functions.php của chủ đề của bạn:
add_action( 'wp_head', function () {
if ( ! is_page( 'pricing' ) ) {
return;
}
$alternates = array(
'en-US' => 'https://example.com/en-us/pricing/',
'es-MX' => 'https://example.com/es-mx/pricing/',
'x-default' => 'https://example.com/pricing/',
);
foreach ( $alternates as $lang => $url ) {
printf(
'<link rel="alternate" hreflang="%s" href="%s" />' . "\n",
esc_attr( $lang ),
esc_url( $url )
);
}
} );
Điều này mang lại cho bạn sự kiểm soát chính xác nhưng không có khả năng mở rộng. Duy trì tính tương hỗ thủ công trên hàng trăm bài đăng là một cái bẫy bảo trì.
Phương pháp 2: Một Plugin Đa ngôn ngữ
Nếu bạn sử dụng Polylang, WPML hoặc TranslatePress, hreflang được tạo tự động dựa trên các mối quan hệ dịch thuật của bạn. Đây là câu trả lời đúng cho hầu hết các trang web vì plugin đã biết bài đăng nào là bản dịch của bài đăng nào, do đó tính tương hỗ và x-default được xử lý cho bạn. Chi phí là sự tốn kém tài nguyên trong thời gian chạy mà các plugin này thêm vào, đó là sự đánh đổi mà chúng tôi xem xét trong bài so sánh về các phương pháp dịch thủ công so với AI.
Phương pháp 3: Sơ đồ XML với xhtml:link
Thay vì đặt hreflang trong <head> của mỗi trang, bạn có thể khai báo các mối quan hệ trong sơ đồ trang web XML của mình bằng cách sử dụng không gian tên xhtml:link. Mỗi mục <url> liệt kê tất cả các phiên bản ngôn ngữ thay thế của nó:
<url>
<loc>https://example.com/en/about/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/about/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/about/" />
</url>
Điều này giữ cho HTML trang của bạn tinh gọn và tập trung bản đồ ngôn ngữ trong một tệp có thể thu thập dữ liệu, mà Google đọc một cách vui vẻ. Hầu hết các plugin SEO có thể tạo ra điều này tự động.
hreflang bổ trợ cho bản dịch, không thay thế nó
Đây là điểm mà mọi người thường bỏ qua: hreflang trở nên vô giá trị nếu các trang cơ bản không thực sự được dịch. Thẻ này cho Google biết "đây là phiên bản tiếng Đức," nhưng nếu URL tiếng Đức vẫn hiển thị các chuỗi plugin tiếng Anh, nhãn thanh toán chưa được dịch, hoặc các tệp .po chưa hoàn thành, bạn chỉ đơn giản là đã bảo Google phục vụ nội dung bị lỗi cho người dùng Đức với đầy đủ sự tự tin.
SEO đa ngôn ngữ thực sự gồm hai lớp. Lớp nội dung là các tệp .po, .pot, .json và .xliff đã dịch của bạn, chuyển mọi chuỗi chủ đề và plugin sang ngôn ngữ mục tiêu. Lớp tín hiệu là hreflang định tuyến mỗi phiên bản hoàn chỉnh đến đối tượng của nó. Cả hai đều phải vững chắc. Một bộ hreflang hoàn hảo trên một trang web chỉ được dịch 40 phần trăm chỉ đảm bảo trải nghiệm tồi tệ hơn một cách nhanh chóng.
Đây là nơi việc giữ cho lớp dịch sạch sẽ trở nên quan trọng nhất. Khi bạn dịch các tệp giao diện của mình, các placeholder như %s, %1$s và {name} phải giữ nguyên, nếu không trang tiếng Đức "đã dịch" của bạn sẽ hiển thị với các token %s nguyên văn trông bị lỗi đối với cả người dùng và công cụ tìm kiếm. Một quy trình dịch nhận biết gettext với Syntax Locking tự động bảo vệ các token đó, vì vậy mỗi trang thay thế mà bạn trỏ hreflang đến đều thực sự sẵn sàng cho sản xuất. Vì nó chạy trên đám mây với Smart Batching, bạn có thể đẩy toàn bộ trang web đa ngôn ngữ qua đó mà không cần cài đặt các plugin dịch thuật làm phình to thời gian chạy phục vụ chính các trang đó.
Hãy hoàn thiện nội dung trước, sau đó để hreflang làm công việc của nó. Hai yếu tố này cùng nhau sẽ củng cố tín hiệu xếp hạng, loại bỏ kết quả sai ngôn ngữ và đưa mỗi trang đã dịch đến với những người có thể đọc nó.
Sẵn sàng khắc phục kết quả tìm kiếm sai ngôn ngữ ngay từ nguồn? Dùng thử SimplePoTranslate miễn phí — không cần thẻ tín dụng. Dịch các tệp
.po,.potvà.jsoncủa bạn trên gói miễn phí, sau đó trỏ các thẻ hreflang của bạn đến các trang thực sự sẵn sàng cho mọi thị trường.