Cách Implement Hreflang (Từng bước)
Hoạt động code cho all three hreflang các phương thức — HTML head tags, HTTP Link các header, và XML sitemap các chú thích — plus đó syntax rules, tại-quy mô CMS automation, và đó validation workflow để xác nhận điều này thực ra shipped correctly.
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này
- Công cụ trực tuyến liên quanreturntag - hreflang checker
Có chính xác three ways để thêm hreflang — HTML link tags trong đó head, HTTP Link các header phản hồi (cho non-HTML files như PDFs), hoặc xhtml:link entries trong an XML sitemap (best tại quy mô). Pick một; Google xử lý all three as tương đương và có không benefit để combining them. Mỗi phương thức obeys đó giống nhau hai non-negotiable rules: self-reference (mỗi trang lists itself) và reciprocity (nếu MỘT points để B, B phải point lại để MỘT, hoặc Google bỏ qua đó pair). Codes là ISO 639-1 language plus tùy chọn ISO 3166-1 alpha-2 region; x-default là đó fallback. Generate điều này all từ một single nguồn of truth, thì validate đó được kết xuất head, không chỉ view-nguồn — trong my nghiên cứu of 374 756 domains, over 67% of hreflang setups đã có ít nhất một vấn đề.
Tóm tắt — có three ways để thêm hreflang: nhỏ
<link>tags trong của bạn trang<head>,Link:header của bạn máy chủ gửi, hoặc entries trong của bạn XML sitemap. bạn chỉ pick một. Whichever bạn pick, hai rules không bao giờ thay đổi: mỗi trang lists itself, và mỗi trang bạn link để có để link lại — hoặc Google bỏ qua toàn bộ đặt. sau đó bạn kiểm tra đó tags thực ra hiển thị lên trong trang way bạn meant them để.
Bắt đầu ở đây: bạn’ve đã decided bạn cần hreflang
Đây là Cách-để. nếu bạn’re vẫn không sure liệu bạn cần hreflang hoặc Điều gì nó làm, đọc hreflang overview đầu tiên — điều này trang assumes bạn know bạn có multiple language hoặc country versions của trang và bạn chỉ muốn để xây dựng điều correctly.
three ways để thêm nó (pick một)
- HTML
<link>tags trong<head>. bạn thêm một vài lines để top của mỗi trang HTML. Easiest để understand, easiest để see, good cho nhỏ hơn các trang. - HTTP
Link:các header. giống nhau information, được gửi by của bạn máy chủ trong phản hồi thay vì trong HTML. Đây là chỉ option cho files đó không phải HTML — như PDF, mà có không<head>để put tags trong. - XML sitemap. bạn list all language versions bên trong của bạn sitemap file thay vì on mỗi trang. Best cho big các trang, vì bạn không có để touch mỗi trang — toàn bộ map lives trong một place.
Google xử lý all three giống nhau. có không “nhanh hơn” hoặc “stronger” một, và ở đó là không benefit để sử dụng nhiều hơn một tại time — đó chỉ cho bạn nhiều hơn places cho điều để fall out của sync.
Evidence for this claim Google supports equivalent HTML, HTTP-header, and sitemap methods for declaring localized versions; HTTP headers can be used for non-HTML files such as PDFs. Scope: Google Search hreflang implementation methods. Confidence: high · Verified: Google: Localized versionsĐiều gì HTML version looks như
Chẳng hạn bạn có US English trang, UK English trang, German trang, và global homepage đó lets mọi người chọn. On US English trang bạn’d put:
<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Đọc mỗi line as: “there’s an alternate version of this page, it’s for this
language/region, and it lives at this address.” (bản dịch) «có an alternate version of này trang, đây là cho này language/region, và điều này lives tại này address.» Đó x-default line là của bạn
fallback cho anyone whose language không match đó others.
Hai điều để notice, vì họ’re hai rules đó làm hreflang hoạt động:
- US trang lists itself (đó đầu tiên
en-usline points tại US trang bạn’re đã on). - mỗi khác trang trong đặt có để carry giống nhau block pointing lại. UK trang, German trang, và homepage all cần của họ own version của những điều này four lines.
hai rules, trong đơn giản terms
- mỗi trang points lại. nếu của bạn US trang links để của bạn German trang, German trang có để link để US trang. Miss đó trả về link và Google throws pair out. Đây là rule mọi người break phần lớn.
- mỗi trang points để itself. mỗi version lists của nó own URL trong đặt. Google calls điều này tùy chọn nhưng good practice — làm nó anyway, nó giữ mọi thứ consistent.
sử dụng thực, hoàn tất web addresses
luôn sử dụng đầy đủ address, starting với https://. không /us/, không
//example.com/us/ — toàn bộ điều, https://example.com/us/. và nó có để
match chính xác address Google thực ra indexes: giống nhau giao thức, giống nhau www (hoặc
không), giống nhau trailing slash, giống nhau capitalization.
Nhận codes right
code là hai-letter language, tùy chọn followed by dash và hai-letter
country: en, en-us, de, es-mx. kinh điển mistakes là en-uk (nó
en-gb — uk thực ra có nghĩ là Ukrainian) và jp cho Japanese (nó ja).
sau đó kiểm tra đó nó worked
Đó hầu hết quan trọng điều beginners miss: sau khi bạn ship, thực ra xem đó
được kết xuất trang để xác nhận đó tags là ở đó và trong đó <head>. Nếu của bạn tags là
đã thêm by JavaScript, they có thể không cho thấy lên khi bạn “View Page Source” (bản dịch) «View Trang Nguồn» nhưng sẽ
cho thấy lên trong đó trực tiếp trang. Google Search Console’s URL Inspection có thể cho thấy bạn điều gì
Google thực ra được kết xuất.
Muốn đầy đủ code cho header và sitemap các phương thức, Cách automate điều này trên toàn bộ CMS, chính xác validation steps, và mistakes đó âm thầm break clusters? Chuyển để Nâng cao tab.
Tóm tắt — Three các phương thức, pick một: HTML
<link>tags trong<head>, HTTPLink:các header ( chỉ option cho non-HTML files như PDFs), hoặc<xhtml:link>entries trong XML sitemap (best tại quy mô — một machine-generated file, easiest để QA). Google nói three là tương đương và có không benefit để combining them. mỗi phương thức obeys self-reference + reciprocity, dùng absolute các URL, và dùng ISO 639-1 language + tùy chọn ISO 3166-1 alpha-2 region codes. Generate toàn bộ điều từ một nguồn của truth — hand-maintained hreflang rots. sau đó validate được kết xuất head, crawl toàn bộ cluster cho reciprocity, và giữ re-kiểm tra sau khi mỗi URL thay đổi. Làm không auto-chuyển hướng các crawler by geo.
trước khi bạn ghi line của code: three decisions
1. Mà phương thức. Google là rõ ràng đó lựa chọn là về convenience, không performance — “The three methods are equivalent from Google’s perspective and you can choose the method that’s the most convenient for your site.” (bản dịch) «Đó three các phương thức là tương đương từ Google perspective và bạn có thể chọn đó phương thức đó là đó hầu hết convenient cho trang web của bạn.» My rough rule:
Evidence for this claim Google supports equivalent HTML, HTTP-header, and sitemap methods for declaring localized versions; HTTP headers can be used for non-HTML files such as PDFs. Scope: Google Search hreflang implementation methods. Confidence: high · Verified: Google: Localized versions- handful của các URL, static hoặc đơn giản trang web, một vài locales → HTML
<link>tags. - Non-HTML assets (PDFs, tài liệu) → HTTP
Link:các header (bạn có không khác option — có không<head>trong PDF). - nhiều locales, existing sitemap pipeline, hoặc headless/JAMstack setup → XML sitemap, generated programmatically.
Các cây quyết định lens walks điều này as thực tế flowchart.
2. Một nguồn của truth. Whatever phương thức bạn pick, các chú thích nên là generated từ một place — locale/translation bảng trong của bạn database, CMS mối quan hệ trường, hoặc (cho nhỏ các trang) single spreadsheet. single worst hreflang anti-pattern là hand-maintaining tags theo trang. moment một locale template drifts, trả về links go bị thiếu và pairs nhận dropped.
3. không combine các phương thức. bạn có thể chạy all three; Google nói có không benefit, và mỗi extra phương thức là một surface cho three copies để disagree với mỗi khác.
Evidence for this claim Google requires fully qualified alternate URLs and reciprocal links, and recommends including each page itself in its alternate set. Scope: Google Search hreflang rules shared by all delivery methods. Confidence: high · Verified: Google: Hreflang guidelinesPhương thức 1 — HTML <link> tags trong <head>
syntax, verbatim từ Google, là:
<link rel="alternate" hreflang="lang_code" href="url_of_page" />đầy đủ hoạt động đặt cho multi-language, multi-region cluster với fallback:
<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />đó chính xác block goes on mỗi trang trong cluster ( US trang, UK trang, German trang, và homepage) — mỗi một bao gồm của nó own self-referencing line. đó Điều gì satisfies reciprocity.
Placement là một hard rule. Google: “The <link> tags must be inside a
well-formed <head> section of the HTML.” (bản dịch) «Đó thẻ link tags phải được bên trong một well-formed thẻ head section of đó HTML.» Và của họ own khắc phục sự cố advice:
“If in doubt, paste code from your rendered page into an HTML validator to ensure
that the links are inside the <head> element.” (bản dịch) «Nếu trong doubt, paste code từ của bạn được kết xuất trang vào an HTML validator để bảo đảm đó links là bên trong đó thẻ head element.»
điều này matters nhiều hơn nó sounds, vì của thất bại chế độ phần lớn được viết các hướng dẫn
skip: hreflang tags có thể là forced out của <head> và vào <body>,
nơi họ’re không hợp lệ. Trong my Pubcon Vegas 2019 deck
I flagged điều này trực tiếp — tags có thể’t legitimately trực tiếp trong thân phản hồi (đó sẽ let
một trang web hijack một alternates), nhưng malformed hoặc injected <p> tag, hoặc
iframe, có thể prematurely close <head> so đó mọi thứ sau khi nó — including
của bạn hreflang — renders bên trong <body>. tag là technically present trong
nguồn nhưng silently không hợp lệ. fastest way để debug nó là trình duyệt DOM
breakpoints: watch nơi tags thực ra land trong được kết xuất DOM, sau đó walk
lại để markup đó broke <head>.
Khi HTML tags làm hợp lý: nhỏ-để-medium các trang với manageable number của
locales, nơi theo-trang <link> block không balloon. On trang web với dozens
của locales, mỗi trang carries lớn block của markup — mà là một reason big
các trang lean on sitemap phương thức.
không mix hreflang với khác alternate các thuộc tính on giống nhau
<link> element. Google hướng dẫn là rõ ràng đó <link rel="alternate">
carrying hreflang không nên cũng carry unrelated alternate thuộc tính như
media trong giống nhau tag — nếu bạn cần cả hai language/region alternate và
media-query alternate cho giống nhau URL, đó hai tách biệt <link> elements,
không một combined một. Mixing them là easy way để end lên với tag Google
có thể’t parse as either.
Phương thức 2 — HTTP Link: các header
giống nhau information, được gửi trong HTTP phản hồi thay vì HTML. syntax:
Link: <https://example.com/file.pdf>; rel="alternate"; hreflang="en",
<https://de-ch.example.com/file.pdf>; rel="alternate"; hreflang="de-ch"Note angle brackets khoảng mỗi URL, semicolon-separated các thuộc tính, và comma separating mỗi alternate. mỗi URL trong header là comma-appended.
Khi bạn cần điều này: non-HTML các tài nguyên. PDF, .doc, image phân phối
trực tiếp — none của them có <head> để hold <link> tags, so header là
của bạn chỉ way để attach hreflang để them.
Configuration considerations: bạn đặt những điều này các header tại máy chủ hoặc CDN layer
( Apache Header directive, Nginx add_header, Cloudflare/Fastly/CloudFront
phản hồi-header rule, hoặc của bạn application phản hồi). vì header là đặt by
infrastructure thay vì theo-document markup, reciprocity rule là easy để
break ở đây — English PDF header và German PDF header là thường
configured riêng, so nó on bạn để hãy đảm bảo mỗi một lists toàn bộ đặt,
itself được bao gồm. giữ header generation driven by giống nhau locale bảng as của bạn
HTML/sitemap approach.
** invariant để hold onto: mỗi alternate phản hồi carries giống hệt hoàn tất đặt, mỗi time.** nó không đủ cho English PDF header để list German alternate — German PDF phản hồi có để carry chính xác giống nhau đặt lại (itself plus mỗi khác alternate), on mỗi single phản hồi, không chỉ đầu tiên một crawler happens để hit. Treat header as generated output, không một-off bạn đặt và forget.
Phương thức 3 — XML sitemap <xhtml:link> các chú thích
Tại quy mô, Đây là thường right call: toàn bộ cluster lives trong một (hoặc một vài)
machine-generated files, không có gì bloats mỗi trang <head>, và — vì
đểàn bộ mối quan hệ graph là trong một place — nó by far easiest phương thức để QA.
syntax:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://www.example.com/english/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
<url>
<loc>https://www.example.de/deutsch/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
</urlset>Hai điều đó trip mọi người lên trong sitemap phương thức:
- Đó namespace declaration là mandatory. Đó
xmlns:xhtml="http://www.w3.org/1999/xhtml"on đó<urlset>element không phải tùy chọn decoration — omit điều này và mỗi<xhtml:link>trong đó file là không hợp lệ. - Mỗi
<url>block phải được self-hoàn tất. Notice đó cả hai<url>chặn trên list cả hai alternates, including của họ own<loc>. Mỗi<url>entry carries đó đầy đủ set (self-reference + all alternates). Reciprocity trong một sitemap là chỉ “every URL’s block lists every URL in the cluster, itself included.” (bản dịch) «mỗi URL’s block lists mỗi URL trong đó cluster, itself được bao gồm.»
Hai behaviors worth knowing so bạn không over-engineer generator: order
của <xhtml:link> children bên trong <url> block không quan trọng để Google —
không waste time sorting them — và những điều đó <xhtml:link> các chú thích không count
so với của bạn sitemap 50 000-URL-theo-file limit, since họ’re children của
<url> entry, không tách biệt <url> entries themselves.
Generating nó programmatically. toàn bộ point của sitemap phương thức là đó
nó byproduct của bạn CMS own translation dữ liệu. nếu của bạn CMS đã knows
đó /english/page.html và /deutsch/page.html là translations của mỗi khác,
của bạn sitemap generator nên walk đó mối quan hệ bảng và emit
<xhtml:link> chặn tại xây dựng time (hoặc tại sitemap-yêu cầu time). Làm đó và
hreflang có thể’t drift out của sync với reality — nó regenerated từ nguồn của
truth mỗi time, và thêm locale là dữ liệu thay đổi, không hand-edit trên
hundreds của các trang.
Cho nhóm không có dev các tài nguyên, I được xây dựng một lightweight Google Sheets template trong my Ahrefs hreflang hướng dẫn: một Setup tab (pick một default language plus lên để four variants), một URLs tab (paste mỗi language URLs vào các cột), và một Kết quả tab đó auto-generates đó sitemap XML block cho bạn. đây là đó “single source of truth” (bản dịch) «single nguồn of truth» ý tưởng đã làm concrete cho các trang cũng nhỏ để justify một real CMS integration.
rules đó apply không quan trọng mà phương thức bạn pick
những điều này là phương thức-agnostic và non-negotiable.
- Self-reference. Mỗi trang (hoặc mỗi
<url>block, hoặc mỗi header) lists itself. Mueller frames này as tùy chọn-nhưng-good-practice, nhưng skipping điều này đã là present trong 18,0% of đó domains trong my nghiên cứu — automate điều này và điều này costs không có gì. - Reciprocity. “Each language version must list itself as well as all other language versions.” (bản dịch) «Mỗi language version phải list itself cũng như all other language versions.» Và đó enforcement: “If two pages don’t both point to each other, the tags will be ignored. This is so that someone on another site can’t arbitrarily create a tag naming itself as an alternative version of one of your pages.” (bản dịch) «Nếu hai các trang không cả hai trỏ đến mỗi other, đó tags sẽ là đã bỏ qua. Này là so đó ai đó on một sản phẩm khác site không thể arbitrarily tạo một tag naming itself as an alternative version of một of của bạn các trang.» Một bị thiếu trả về link drops đó pair.
- Absolute, fully-qualified URLs. “Alternate URLs must be fully-qualified,
including the transport method (http/https)” (bản dịch) «Alternate URLs phải được fully-qualified, including đó transport phương thức (http/https)» — so
https://example.com/foo, không bao giờ//example.com/foohoặc/foo. Và đó URL phải match đó chính xác form Google indexes: giao thức,www, trailing slash, và case all có để line lên, hoặc đó trả về-link match fails.
Getting codes right
“The first code of the hreflang attribute is the language code (in ISO 639-1
format) followed by an optional second code that represents the region code (in ISO
3166-1 Alpha 2 format).” (bản dịch) «Đó đầu tiên code of đó hreflang thuộc tính là đó language code (trong ISO 639-1 format) followed by an tùy chọn second code đó represents đó region code (trong ISO 3166-1 Alpha 2 format).» Combine them với một dash: en-US. Bạn có thể đích một
language on của nó own (es = Spanish mọi nơi), nhưng bạn không thể đích một region
on của nó own — có luôn một language đầu tiên.
mistakes I see phần lớn thường (và saw trên nghiên cứu dataset):
en-UKthay vìen-GB—uklà Ukrainian, UK region code làgb.jpthay vìjacho Japanese,cnthay vìzhcho Chinese.- Three-letter codes (
ger,eng) nơi hai-letter ISO 639-1 là bắt buộc. - sử dụng
EU,UN, hoặcUKas region codes — none là hợp lệ ISO 3166-1 alpha-2 targets.
x-default là reserved giá trị cho fallback — language selector hoặc
auto-chuyển hướng home trang đó phục vụ người dùng ai match none của bạn rõ ràng
locales:
<link rel="alternate" href="https://example.com/" hreflang="x-default" />nó không mandatory. nó là single phần lớn-bị thiếu element trong my nghiên cứu (56,3% của
domains omitted nó), nhưng bị thiếu x-default không break cluster way
bị thiếu reciprocal tag làm — Google chỉ falls lại để của nó own language/region
detection cho unmatched người dùng. Thêm nó anyway; nó checklist item, không
cluster-breaker. (có dedicated x-default subtopic trong điều này cluster.)
Implementing tại quy mô — CMS và nền tảng approaches
WordPress. Yoast SEO làm không generate hreflang on của nó own. Để thực ra
output tags bạn cần một multilingual plugin — WPML hoặc Polylang. WPML
auto-generates hreflang cho mỗi trang đó có translations, adds an x-default
pointing tại của bạn default-language version, và theo mặc định injects đó các chú thích
vào đó XML sitemap; có một setting dưới WPML → Languages → SEO Options
(“Display alternative languages in the HEAD section” (bản dịch) «Display alternative languages trong đó HEAD section») nếu bạn muốn head-tag output
thay vì, hoặc ngoài ra để, đó sitemap. (See WPML tài liệu on dùng điều này với
Yoast.)
Shopify. Shopify Markets tự động generates mutually-linked hreflang
tags sau khi bạn’ve configured markets/languages và nội dung là published và
linked trong navigation — mà xóa phần lớn phổ biến thất bại chế độ (bị thiếu
reciprocal links) by design. catch: Markets’ tự động tags là thường
language-chỉ (fr, de) thay vì language-region (fr-FR, fr-CA), mà
dưới-phục vụ brands đó cần regional specificity — French cho France so với. Canada
so với. Belgium. cho đó bạn drop để manual <link> tags trong theme.liquid (Shopify
own theme hreflang tài liệu
hiển thị pattern) hoặc app — và là careful, vì mixing tự động Markets
tags với manual/app tags là được ghi lại nguồn của conflicts. Pick một.
Custom / headless / enterprise. Generate đó các chú thích từ của bạn translation-mối quan hệ bảng tại xây dựng hoặc serve time, as described trong đó sitemap section trên. Này là đó giống nhau “single source of truth” (bản dịch) «single nguồn of truth» principle — hreflang becomes một computed output of dữ liệu của bạn CMS đã holds, không một hand-maintained artifact đó có thể rot.
Implementation mistakes đó break cluster
Auto-chuyển hướng by geo/IP. Này là một tách biệt failure từ syntax các lỗi và đây là tệ hơn. Nếu bạn chuyển hướng khách truy cập — và especially các crawler — để một version based on perceived location, bạn có thể de-chỉ mục entire regional clusters, vì Googlebot mostly crawl từ đó US. As I put điều này trong đó Pubcon deck: một geo-chuyển hướng “would redirect search engines to where they crawl from. Google for instance mostly crawls from the US so we would effectively de-index all geo pages.” (bản dịch) «sẽ chuyển hướng các công cụ tìm kiếm để nơi they crawl từ. Google chẳng hạn mostly crawl từ đó US so we sẽ effectively de-chỉ mục all geo các trang.» có một regulatory angle cũng — potential exposure dưới EU anti-geoblocking rules. Đó right pattern là chuyển hướng người dùng, không bao giờ các crawler: detect và (tùy chọn) chuyển hướng human khách truy cập, nhưng luôn let bots reach mỗi URL variant trực tiếp, với hreflang đang làm đó thực tế routing tín hiệu. Google own multi-regional hướng dẫn khuyến nghị một non-intrusive suggestion banner over tự động redirection cho chính xác này reason.
Pointing hreflang tại non-canonical, được chuyển hướng, hoặc noindexed các URL. nếu locale
URL thay đổi và chuyển hướng goes trong nhưng hreflang vẫn points tại old URL,
của bạn cluster hiện tại references 301 hoặc 404 (16,9% của domains trong my nghiên cứu
referenced hỏng/được chuyển hướng các trang). Similarly, mỗi variant nên canonicalize để
itself; pointing hreflang tại URL đó canonicalized away, hoặc tại noindexed
trang, breaks trả về link (8,0% pointed tại non-canonical các URL).
Inconsistent URL formats. hreflang URL và được lập chỉ mục URL có để là
byte-giống hệt trong form — trailing slash, www, giao thức, và case all được bao gồm.
mismatch ở đây là silent reciprocity thất bại.
Validating của bạn implementation sau khi launch
View được kết xuất nguồn, không chỉ thô nguồn. Nếu của bạn hreflang là injected by
client-side JavaScript, curl hoặc Ctrl+U (“View Page Source” (bản dịch) «View Trang Nguồn») sẽ cho thấy không có gì —
nhưng đó tags exist trong đó được kết xuất DOM. Xác nhận với GSC URL Inspection → “Test Live
URL” (bản dịch) «Kiểm thử Trực tiếp URL» → “View Tested Page,” (bản dịch) «View Tested Trang,» hoặc một kết xuất-capable crawler. Này là đó single hầu hết
phổ biến reason ai đó says “my tags are missing” (bản dịch) «my tags là bị thiếu» khi họ là thực ra fine (hoặc đó
reverse — present trong nguồn nhưng hỏng vì they render trong đó <body>).
Crawl toàn bộ cluster, không spot-kiểm tra một URL. Reciprocity là mối quan hệ giữa các trang, so kiểm tra một trang tells bạn gần như không có gì. Chạy crawler trên toàn bộ cluster — Screaming Frog’s hreflang audit hoặc Ahrefs trang web Audit — để catch bị thiếu trả về tags, non-canonical targets, và hỏng references tại quy mô. Ahrefs trang web Audit Hreflangs tab draws cluster as graph với hỏng links trong red, mà là far easier để reason về hơn CSV.
Verify thực SERPs với &hl= và &gl=. Append host-language (&hl=) và
geolocation (&gl=) parameters để Google tìm kiếm URL để preview Điều gì được cho
locale kết quả thực ra trông giống, thay vì guessing từ của bạn own location.
Validation không phải một một-time step. New locales, URL/chuyển hướng thay đổi, và dev/staging config bleeding vào production là đó recurring gây ra of post-launch breakage. Xây dựng hreflang kiểm tra vào regression các kiểm thử và recurring crawl, không chỉ một launch-day QA truyền. My cách diễn đạt từ đó talks: “any number of things can break from masking to things carrying over from dev/test/staging environments.” (bản dịch) «bất kỳ number of điều có thể break từ masking để điều carrying over từ dev/kiểm thử/staging environments.»
Myths worth retiring
- “Sitemaps process faster than HTML tags.” (bản dịch) «Sitemaps xử lý nhanh hơn HTML tags.» Sai. Cả hai là resolved tại crawl time — I’ve debunked này trực tiếp. Đó sitemap advantage là maintainability và QA, không speed.
- “Yandex doesn’t support hreflang in sitemaps.” (bản dịch) «Yandex không hỗ trợ hreflang trong sitemaps.» Sai — Yandex own tài liệu xác nhận sitemap hreflang hỗ trợ.
- “Use all three methods for extra signal.” (bản dịch) «Dùng all three các phương thức cho extra tín hiệu.» Không benefit theo Google, và điều này chỉ multiplies inconsistency risk.
- “A missing
x-defaultbreaks the cluster.” (bản dịch) «MỘT bị thiếux-defaultbreaks đó cluster.» Sai — đây là tùy chọn; Google falls lại để của nó own detection. - “Wrong hreflang gets you penalized.” (bản dịch) «Sai hreflang nhận bạn penalized.» Sai — đây là một hint, không một directive. Hỏng hreflang là đã bỏ qua, không penalized.
nơi để go tiếp theo
điều này bài viết là Cách-để depth dưới hreflang hub — hub covers Điều gì hreflang là, Vì sao reciprocity matters, và Điều gì Bing làm thay vì. x-default subtopic goes deep on fallback giá trị. cho strategy điều này implements, see SEO quốc tế pillar — hreflang là kỹ thuật layer, không substitute cho genuine localization.
AI summary
condensed take on Nâng cao version:
- Three các phương thức, pick chính xác một (Google xử lý them as tương đương; không benefit để combining):
- HTML
<link>tags trong<head>— nhỏ/medium các trang; phải là trong well-formed<head>, không bao giờ<body>; không mixhreflangvới một alternate thuộc tính nhưmediaon giống nhau<link>element. - HTTP
Link:các header — chỉ option cho non-HTML files (PDFs); đặt tại máy chủ/CDN; mỗi alternate phản hồi phải carry giống hệt hoàn tất đặt, mỗi time. - XML sitemap
<xhtml:link>— best tại quy mô; cầnxmlns:xhtml="http://www.w3.org/1999/xhtml"namespace on<urlset>; easiest để QA vì toàn bộ graph là trong một file; child order không quan trọng và những điều này children không count toward 50 000-URL sitemap limit. - Hai universal rules: self-reference (mỗi trang lists itself) và reciprocity (→B requires B→, hoặc pair là đã bỏ qua). sử dụng absolute, fully-qualified các URL đó match chính xác được lập chỉ mục form.
- Codes: ISO 639-1 language + tùy chọn ISO 3166-1 alpha-2 region (
en-GB, khôngen-UK;ja, khôngjp).x-defaultlà reserved fallback — tùy chọn nhưng phần lớn-missed element (56,3% trong my nghiên cứu). - Automate từ một nguồn của truth. WordPress cần WPML/Polylang (Yoast alone làm không có gì); Shopify Markets auto-generates reciprocal tags nhưng thường language-chỉ; custom/headless nên emit hreflang từ translation bảng.
- không auto-chuyển hướng các crawler by geo — Googlebot crawl mostly từ US, so nó có thể de-chỉ mục regional clusters; chuyển hướng người dùng, không bao giờ bots.
- Validate được kết xuất head, không chỉ view-nguồn (JS-injected tags sẽ không hiển thị
trong nguồn); crawl toàn bộ cluster cho reciprocity; kiểm tra locales với
&hl=/&gl=; re-kiểm tra sau khi mỗi URL thay đổi.
Tài liệu chính thức
Chính-nguồn tài liệu cho implementing hreflang.
- Localized versions của bạn các trang — chính implementation doc: all three các phương thức với chính xác syntax, reciprocity requirement, hợp lệ codes, absolute-URL rule, và
x-default. - Managing multi-regional và multilingual các trang — URL-structure options và auto-chuyển hướng / cloaking warning (Vì sao bạn phải không geo-chuyển hướng các crawler).
- Tell Google về localized versions (x-default blog, 2013) — gốc introduction của
x-default. - International Targeting báo cáo deprecation (Sept 2022) — old báo cáo là đã biến mất; hreflang tags vẫn hoạt động.
Bing / Microsoft
- Bing Quản trị viên web Guidelines — Bing hướng dẫn; note Bing leans on
content-languagevà<html lang>over hreflang. - Bingbot Series: Maximizing Hiệu quả crawl — context on Cách Bing xử lý international/multilingual các trang.
CMS / nền tảng
- WPML — sử dụng WordPress SEO (Yoast) với WPML — Cách WPML outputs hreflang (head so với. sitemap setting).
- Shopify — Thêm hreflang tags trong của bạn theme — manual
theme.liquid<link>pattern.
Quotes từ nguồn
On—record statements relevant để implementation. mỗi Google-tài liệu link là deep link đó jumps để quoted passage on trực tiếp trang.
Google — three các phương thức
- “The three methods are equivalent from Google’s perspective and you can choose the method that’s the most convenient for your site.” (bản dịch) «Đó three các phương thức là tương đương từ Google perspective và bạn có thể chọn đó phương thức đó là đó hầu hết convenient cho trang web của bạn.» — Google Search Central tài liệu. Nhảy đến trích dẫn
Google — placement
- “The
<link>tags must be inside a well-formed<head>section of the HTML.” (bản dịch) «Đó thẻ link tags phải được bên trong một well-formed thẻ head section of đó HTML.» — Google Search Central tài liệu. Nhảy đến trích dẫn
Google — hai rules
- “Each language version must list itself as well as all other language versions.” (bản dịch) «Mỗi language version phải list itself cũng như all other language versions.» — Google Search Central tài liệu. Nhảy đến trích dẫn
- “If two pages don’t both point to each other, the tags will be ignored.” (bản dịch) «Nếu hai các trang không cả hai trỏ đến mỗi other, đó tags sẽ là đã bỏ qua.» — Google Search Central tài liệu. Nhảy đến trích dẫn
- “Alternate URLs must be fully-qualified, including the transport method (http/https).” (bản dịch) «Alternate URLs phải được fully-qualified, including đó transport phương thức (http/https).» — Google Search Central tài liệu. Nhảy đến trích dẫn
Google — codes
- “The first code of the hreflang attribute is the language code (in ISO 639-1 format) followed by an optional second code that represents the region code (in ISO 3166-1 Alpha 2 format).” (bản dịch) «Đó đầu tiên code of đó hreflang thuộc tính là đó language code (trong ISO 639-1 format) followed by an tùy chọn second code đó represents đó region code (trong ISO 3166-1 Alpha 2 format).» — Google Search Central tài liệu. Nhảy đến trích dẫn
John Mueller, Google — nó hint, không directive
- On self-referential tags: hreflang self-references là reported as tùy chọn nhưng good practice. — John Mueller, Google, relayed qua my Ahrefs hreflang hướng dẫn.
- On correctness không guaranteeing outcome (có thể 2025, Bluesky): Mueller noted đó hreflang không bảo đảm lập chỉ mục, so variant có thể đơn giản không là được lập chỉ mục, và đó giống nhau-language variants (như
fr-frvàfr-be) là commonly consolidated. — relayed qua công cụ tìm kiếm Journal coverage.
Mà implementation phương thức nên I sử dụng?
Hoạt động top để bottom và dừng tại đầu tiên match.
1. là các trang non-HTML files (PDFs, tài liệu, images phân phối trực tiếp)?
→ Có → HTTP Link: các header. họ có không <head>, so Đây là của bạn chỉ
option. đặt header tại máy chủ/CDN, listing toàn bộ đặt on mỗi file.
→ Không → continue.
2. Làm bạn có nhiều hơn handful của locales, existing sitemap pipeline, hoặc
headless/JAMstack xây dựng?
→ Có → XML sitemap <xhtml:link>. Generate nó programmatically từ của bạn
translation bảng. Một machine-generated file, không theo-trang markup, easiest để QA.
→ Không → continue.
3. Nhỏ/đơn giản trang web, một vài locales, và bạn’d rather giữ mọi thứ visible on
trang?
→ HTML <link> tags trong <head>. chỉ hãy đảm bảo block là generated từ
một nguồn của truth và lands bên trong well-formed <head>.
Whatever bạn pick: sử dụng nó alone. Google nói có không benefit để combining các phương thức, và mỗi extra copy là place cho three để disagree.
Làm I cần x-default?
Làm bạn có trang đó phục vụ người dùng ai match none của bạn rõ ràng locales —
country/language selector, hoặc global homepage?
→ Có → thêm x-default pointing tại đó fallback trang.
→ Không → Bạn có thể skip nó. nó tùy chọn; Google falls lại để của nó own detection. nó
sẽ không break cluster (unlike bị thiếu reciprocal tag). Thêm nó là vẫn good
practice — nó là single phần lớn-missed element trong my nghiên cứu (56,3%).
nên I auto-chuyển hướng người dùng by location?
là bạn thinking về chuyển hướng dựa trên IP/geo? → chuyển hướng human khách truy cập chỉ, và ưu tiên non-intrusive banner over hard chuyển hướng. → không bao giờ chuyển hướng các crawler by geo. Googlebot mostly crawl từ US, so crawler geo-chuyển hướng có thể de-chỉ mục của bạn khác regional versions — và nó risks cloaking classification và EU anti-geoblocking exposure. Let bots reach mỗi URL variant trực tiếp; hreflang làm routing tín hiệu.
Mà CMS path áp dụng để me?
- WordPress? → Yoast alone làm không có gì. Install WPML hoặc Polylang; họ emit hreflang (chọn head so với. sitemap output trong WPML SEO settings).
- Shopify? → Markets auto-generates reciprocal tags — nhưng thường language-chỉ.
Cần
fr-FRso vớifr-CA? Thêm manualtheme.liquidtags hoặc app, và không mix hai (conflict risk). - Custom / headless? → Emit
<xhtml:link>(hoặc head tags) từ của bạn translation-mối quan hệ bảng tại xây dựng/phục vụ time.
SOP: Ship hreflang cluster từ scratch
repeatable procedure cho thêm new hreflang cluster (hoặc new locale để existing một). Chạy nó top để bottom.
1. Xây dựng locale matrix (single nguồn của truth).
List mỗi URL và của nó language-region code trong một place — database bảng, CMS
translation trường, hoặc spreadsheet. xác nhận mỗi URL là canonical, được lập chỉ mục
form (right giao thức, www, trailing slash, case). điều này bảng là input để
mọi thứ dưới; không có gì nhận hand-typed downstream.
2. Pick một phương thức sử dụng Các cây quyết định lens. không combine các phương thức.
3. Generate các chú thích từ matrix.
- HTML: emit
<link>block vào mỗi trang<head>từ matrix. - Sitemap: emit mỗi
<url>block vớixmlns:xhtmlnamespace on<urlset>. - Các header: emit
Link:header từ matrix tại máy chủ/CDN.
4. Verify hai rules programmatically trước khi xuất bản. mỗi entry phải () bao gồm self-reference và (b) list mỗi khác entry trong cluster. xác nhận reciprocity: cho mỗi →B, có matching B→.
5. Thêm x-default nếu bạn có selector hoặc global fallback trang.
6. Publish, sau đó validate được kết xuất output (see Playbooks lens cho
detailed validation runbook): được kết xuất head (không view-nguồn), đầy đủ-cluster crawl
cho reciprocity, và &hl=/&gl= SERP spot-kiểm tra.
7. Wire nó vào ongoing kiểm tra. Thêm recurring crawl / regression kiểm thử so tương lai URL thay đổi hoặc new locale có thể’t silently rot trả về tag. Validation không phải một-time task.
Khi thêm locale sau đó: bạn chỉ edit matrix (step 1) và re-chạy steps 3–6. nếu bạn’re hand-editing individual các trang để thêm locale, của bạn nguồn của truth là sai — khắc phục đó đầu tiên.
Playbook: “My hreflang isn’t working” (bản dịch) «My hreflang không hoạt động» — validation runbook
Chạy những điều này trong order. mỗi step either tìm thấy break hoặc clears suspect.
Step 1 — Xác nhận đó tags thực ra render. Open đó trang và view đó được kết xuất DOM (GSC URL Inspection → Kiểm thử Trực tiếp URL → View Tested Trang, hoặc một kết xuất crawler). Làm không rely on Ctrl+U “View Page Source” (bản dịch) «View Trang Nguồn» — nếu hreflang là JS-injected điều này sẽ không xuất hiện ở đó mặc dù đây là trực tiếp.
- Tags present trong được kết xuất head → go để Step 3.
- Tags bị thiếu từ được kết xuất head → Step 2.
Step 2 — là tags trong <head> hoặc <body>?
nếu tags exist trong nguồn nhưng sit bên trong <body>, họ’re không hợp lệ. malformed hoặc
injected <p> tag hoặc iframe có khả năng closed <head> sớm. sử dụng trình duyệt DOM
breakpoints để tìm nơi <head> breaks, khắc phục đó markup, re-kiểm tra.
Step 3 — kiểm tra các URL là absolute và canonical.
mỗi href phải là fully-qualified (https://…) và byte-giống hệt để được lập chỉ mục
form (giao thức, www, trailing slash, case). xác nhận none point tại 301, 404,
noindexed, hoặc canonicalized-away URL.
Step 4 — kiểm tra reciprocity trên toàn bộ cluster. Crawl đểàn bộ cluster (Screaming Frog / Ahrefs trang web Audit). cho mỗi →B, verify matching B→ tồn tại, và đó mỗi trang self-references. Đây là nơi phần lớn breaks trực tiếp — single bị thiếu trả về tag drops pair.
Step 5 — Validate codes.
xác nhận ISO 639-1 language + ISO 3166-1 alpha-2 region. Look cụ thể cho
en-UK (→ en-GB), jp (→ ja), three-letter codes, và region-chỉ codes.
Step 6 — Rule out geo-các chuyển hướng. xác nhận các crawler không phải là geo-được chuyển hướng. nếu Googlebot (crawling từ US) nhận bounced để của bạn US version, của bạn khác regional các URL có thể không bao giờ là reached.
Step 7 — Reset expectations nếu cluster là technically đúng.
nếu mọi thứ trên kiểm tra out và giống nhau-language variants (e.g. fr-fr / fr-be)
là vẫn consolidated trong reporting, đó dự kiến — Google có thể consolidate
near-giống hệt giống nhau-language variants regardless của implementation. nó hint, không
directive; sai hoặc đã bỏ qua hreflang không phải hình phạt. Dừng chasing nó as bug.
Implementation anti-patterns
Concrete mistakes, Vì sao họ’re sai, và Điều gì để làm thay vì.
1. Hand-maintaining hreflang theo trang. Vì sao nó sai: moment một template hoặc locale drifts, trả về tags go bị thiếu và pairs nhận dropped — reciprocity rot tại quy mô. Làm thay vì: generate mỗi chú thích từ một nguồn của truth (translation bảng, CMS trường, hoặc Sheets template cho nhỏ các trang), so toàn bộ cluster là regenerated, không edited.
2. Dùng all three các phương thức cho “extra signal.” (bản dịch) «extra tín hiệu.» Vì sao đây là sai: Google says có không benefit, và three copies of đó truth có nghĩa là three chances cho them để disagree. Làm thay vì: pick một phương thức và dùng điều này alone.
3. Auto-chuyển hướng các crawler by geo/IP. Vì sao nó sai: Googlebot crawl mostly từ US, so crawler geo-chuyển hướng có thể de-chỉ mục của bạn khác regional clusters hoàn toàn — plus cloaking và EU anti-geoblocking exposure. Làm thay vì: chuyển hướng (hoặc tốt hơn, banner-prompt) người dùng chỉ; không bao giờ các crawler. Let bots reach mỗi URL trực tiếp và let hreflang carry tín hiệu.
4. Pointing hreflang tại non-canonical, được chuyển hướng, hoặc noindexed các URL.
Vì sao nó sai: trả về link resolves để 301/404/noindexed trang, so
pair breaks (16,9% referenced hỏng/được chuyển hướng các trang, 8,0% non-canonical trong my
nghiên cứu).
Làm thay vì: mỗi variant canonicalizes để itself; hreflang points chỉ tại trực tiếp,
canonical, indexable các URL — regenerated bất cứ khi nào các URL thay đổi.
5. Relative hoặc giao thức-relative các URL.
Vì sao nó sai: Google requires fully-qualified các URL; /foo và //example.com/foo
là không hợp lệ, và ngay cả absolute-nhưng-mismatched forms (sai slash/www/case) fail
reciprocity match.
Làm thay vì: luôn https://example.com/foo, matching chính xác được lập chỉ mục form.
6. Trusting “View Page Source” (bản dịch) «View Trang Nguồn» as validation.
Vì sao đây là sai: JS-injected hreflang không xuất hiện trong thô nguồn, so bạn either
think đây là bị thiếu (điều này không) hoặc miss đó điều này renders trong đó <body> (không hợp lệ).
Làm thay vì: validate đó được kết xuất DOM qua GSC URL Inspection hoặc một kết xuất
crawler.
7. sai hoặc bịa ra locale codes.
Vì sao nó sai: en-UK, jp, ger, và region-chỉ codes là không hợp lệ và
đã bỏ qua.
Làm thay vì: ISO 639-1 language + tùy chọn ISO 3166-1 alpha-2 region — en-GB,
ja, de, es-MX.
trước khi / sau khi
1. Bị thiếu reciprocal tag ( kinh điển). trước khi: US trang lists US + UK + DE, nhưng German trang template chỉ lists DE + US — nó forgot UK trả về link. Google drops DE↔UK pair. sau khi: German trang block lists DE + US + UK (all self-referencing và reciprocal). Regenerated từ locale bảng so nó có thể’t drift again.
2. Relative các URL.
trước khi: <link rel="alternate" hreflang="de" href="/de/" /> — relative, so nó
không hợp lệ và đã bỏ qua.
sau khi: <link rel="alternate" hreflang="de" href="https://example.com/de/" /> —
fully-qualified và matching được lập chỉ mục form.
3. sai UK code.
trước khi: <link rel="alternate" hreflang="en-uk" href="https://example.com/uk/" />
— uk là Ukrainian; chú thích là không hợp lệ.
sau khi: <link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />.
4. Sitemap bị thiếu namespace.
trước khi: sitemap sử dụng <xhtml:link> entries nhưng với <urlset> đó chỉ
declares base sitemaps namespace — mỗi <xhtml:link> là không hợp lệ.
sau khi: <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> — đó xhtml namespace là declared, so
các chú thích validate.
Ready-để-copy AI prompts
Adapt placeholders, sau đó paste vào của bạn assistant của lựa chọn. luôn validate output so với thực crawl — LLM có thể generate plausible-nhưng-sai codes hoặc miss trả về link.
Generate HTML <head> block từ locale matrix
I have these language/region page variants:
- en-US: https://example.com/us/
- en-GB: https://example.com/uk/
- de: https://example.com/de/
- global fallback / selector: https://example.com/
For EACH page above, output the complete hreflang <link> block that belongs in its
<head>. Every block must (a) self-reference, (b) list all other variants, and
(c) include an x-default pointing at the fallback. Use fully-qualified https URLs
exactly as given. Validate the codes as ISO 639-1 language + ISO 3166-1 alpha-2
region and flag any that look wrong.Convert giống nhau matrix vào XML sitemap block
Using the same variant list, output an XML sitemap that uses <xhtml:link> hreflang
annotations. Requirements: declare xmlns:xhtml="http://www.w3.org/1999/xhtml" on
<urlset>; give every <url> block a full self-referencing + all-alternates set; use
the exact URLs provided. Do not add any URL not in my list.Audit pasted cluster cho reciprocity + code các lỗi
Here are the hreflang tags from each page in my cluster: [paste each page's URL and
its hreflang tags]. Check for: missing self-reference, missing reciprocal (A->B
without B->A), invalid ISO codes, relative/protocol-relative URLs, and any URL that
appears with inconsistent formatting (trailing slash / www / case). List each issue
with the exact page and tag it's on. Do not assume tags I didn't paste. Extraction, console, và generation snippets
Practical một-liners cho building và kiểm tra hreflang. Adjust các URL trước khi đang chạy.
Chrome DevTools Console — list đó hreflang tags on đó hiện tại trang Paste vào đó Console (F12 → Console) on bất kỳ trang để see điều gì đó trình duyệt thực ra được kết xuất — này reflects JS-injected tags đó “View Nguồn” misses:
[...document.querySelectorAll('link[rel="alternate"][hreflang]')]
.map(l => ({ hreflang: l.hreflang, href: l.href,
inHead: !!l.closest('head') }));Đó inHead flag là đó tell cho đó <head>-break bug: bất kỳ tag cho thấy
inHead: false là kết xuất trong đó <body> và là không hợp lệ.
Bookmarklet — giống nhau kiểm tra, một nhấp Save as bookmark với điều này URL, sau đó nhấp nó on bất kỳ trang:
javascript:(()=>{const t=[...document.querySelectorAll('link[rel="alternate"][hreflang]')].map(l=>`${l.hreflang} ${l.href} ${l.closest('head')?'(head)':'(BODY - INVALID)'}`);alert(t.length?t.join('\n'):'No hreflang tags found');})();XPath — select hreflang links bên trong đó head (cho một crawler / trình duyệt inspector)
//head/link[@rel='alternate' and @hreflang]Nếu một crawler tìm thấy link[@hreflang] matches dưới //body thay vì, đó là đó
head-break bug.
Regex — pull hreflang code + URL từ thô HTML (nhanh grep, không thực parser)
<link[^>]*rel=["']alternate["'][^>]*hreflang=["']([^"']+)["'][^>]*href=["']([^"']+)["']Capture group 1 là code, group 2 là URL. sử dụng chỉ cho fast sanity grep — parse thực HTML với DOM library, không regex.
curl — kiểm tra cho hreflang trong HTTP Link: phản hồi các header ( PDF/non-HTML case)
curl -sI https://example.com/file.pdf | grep -i '^link:'Python — generate self-consistent hreflang <head> block từ matrix
variants = {
"en-us": "https://example.com/us/",
"en-gb": "https://example.com/uk/",
"de": "https://example.com/de/",
"x-default": "https://example.com/",
}
# Every page gets the SAME full block (self-reference + all alternates),
# which is exactly what satisfies reciprocity.
block = "\n".join(
f'<link rel="alternate" hreflang="{code}" href="{url}" />'
for code, url in variants.items()
)
print(block) Tự kiểm tra: Implementing hreflang
Five nhanh các câu hỏi on building hreflang cluster correctly. Pick câu trả lời cho mỗi, sau đó kiểm tra.
các tài nguyên worth của bạn time
My related writing
- Hreflang: Easy Hướng dẫn cho Beginners — my Ahrefs hướng dẫn với all three các phương thức, nine phổ biến implementation các vấn đề và các cách sửa, và Google Sheets template cho semi-automated hreflang generation tại quy mô.
- Over 67% của Domains sử dụng Hreflang có Các vấn đề — my nghiên cứu của 374 756 domains, largest bao giờ chạy, và nguồn của lỗi-rate breakdown (bị thiếu x-default 56,3%, bị thiếu self-reference 18,0%, hỏng/được chuyển hướng targets 16,9%, bị thiếu reciprocal 15,3%, non-canonical 8,0%, bad codes 4,6%).
My speaking
- SEO quốc tế: Đó Weird Kỹ thuật Parts — Pubcon Vegas 2019 — đó richest implementation nguồn: đó
<head>-break bug (tags forced vào<body>by iframes/malformed markup) và DOM-breakpoint gỡ lỗi, vì sao “sitemaps are faster” (bản dịch) «sitemaps là nhanh hơn» là một myth, đó geo-chuyển hướng de-lập chỉ mục risk, và đó&hl=/&gl=SERP-kiểm tra technique. - Hreflang Nghiên cứu và Interesting Các vấn đề — Brighton SEO 2023 — đó deck behind đó nghiên cứu, plus Google hầu hết-cụ thể matching order (language+country → language → x-default) và đó hầu hết phổ biến code mistakes trên đó dataset.
- bạn là Going Để Screw Lên SEO quốc tế — Pubcon Vegas 2017 — đó ecosystem of implementation chaos: tools reporting sai info, nội dung phân phối từ URLs đó differ từ điều gì là được lập chỉ mục, duplicate-trang traps.
Từ khoảng đó ngành
- Google Localized versions of của bạn các trang — đó chính implementation doc; đó chính xác syntax cho all three các phương thức, đó reciprocity/self-reference rules, hợp lệ codes, và đó absolute-URL requirement. Đọc điều này trong đầy đủ trước khi bạn xây dựng.
- Google Managing multi-regional và multilingual các trang — URL-structure options và đó auto-chuyển hướng / cloaking warning behind “redirect users, not crawlers.” (bản dịch) «chuyển hướng người dùng, không các crawler.»
- WPML — Dùng WordPress SEO (Yoast) với WPML — cách WordPress thực ra outputs hreflang (Yoast alone không), và đó head-so với-sitemap output setting.
- Shopify — Thêm hreflang tags trong của bạn theme — đó manual
theme.liquid<link>pattern cho khi Shopify Markets’ language-chỉ tags không cụ thể đủ. - Screaming Frog — Cách Audit & Kiểm thử Hreflang — đó crawl-based workflow cho confirming reciprocity trên một toàn bộ cluster thay vì spot-kiểm tra một URL.
- Google Reminds Đó Hreflang Tags Là Hints, Không Directives — Search Engine Journal, Có thể 2025, on Mueller giống nhau-language-consolidation clarification (vì sao một technically perfect cluster có thể vẫn là consolidated).
- r/TechSEO — đó community cho gỡ lỗi hỏng hreflang clusters.
Prove hreflang cluster thực ra shipped
Hreflang fails silently: đó tags có thể là present, well-formed, và vẫn đã bỏ qua nếu đó trả về leg là bị thiếu. “It’s in the code” (bản dịch) «đây là trong đó code» không phải đó kiểm thử — reciprocity trên đó toàn bộ cluster là. Chạy những sau khi bạn deploy một language/region set.
Kiểm thử 1 — mỗi pair trả về tag (reciprocity)
- Kiểm thử để chạy — Crawl toàn bộ cluster với returntag (nó kiểm tra đó mỗi trang points để thực ra points lại tại ), hoặc chạy Screaming Frog’s hreflang báo cáo trên đặt.
- Dự kiến kết quả — 0 non-reciprocal pairs và mỗi URL self-references. Zero các lỗi, không “vài.”
- thất bại interpretation — một-way pair ( → B nhưng B không → ) có nghĩ là Google drops đó pair — phần lớn phổ biến thực-world thất bại, và invisible nếu bạn chỉ spot-kiểm tra một URL’s view-nguồn.
- Monitoring window — Immediate cho được kết xuất tags; checker đọc Điều gì trực tiếp hiện tại.
- Rollback trigger — bất kỳ non-reciprocal pair, hoặc tag pointing tại URL đó 301s hoặc 404s — khắc phục nguồn của truth và redeploy trước khi đang chờ on Google.
Kiểm thử 2 — Google là processing nó cleanly
- Kiểm thử để chạy — Google retired đó old International Targeting báo cáo trong Search Console trong September 2022, so không rely on điều này — kiểm tra Trang Lập chỉ mục cho mỗi locale trong đó cluster, và xác nhận qua URL Inspection on một sample of các trang đó “Google-selected canonical” (bản dịch) «Google-được chọn canonical» và lập chỉ mục status line lên với điều gì bạn expect cho đó locale.
- Dự kiến kết quả — Mỗi locale dự kiến các trang là được lập chỉ mục (không “Duplicate, Google chose different canonical” (bản dịch) «Duplicate, Google chose khác nhau canonical» trong một way đó collapses distinct language versions vào một), và URL Inspection cho thấy đó alternate bạn expect.
- Failure interpretation — Các trang cho thấy lên as duplicates of một khác nhau locale canonical, hoặc clustered/consolidated lập chỉ mục, thường traces lại để một hỏng trả về leg (re-kiểm tra Kiểm thử 1) thay vì hreflang itself — hreflang là một hint, không một directive, so một technically perfect cluster có thể vẫn là consolidated nếu Google judges đó nội dung near-duplicate.
- Monitoring window — 2–4 weeks — Search Console re-crawl và các báo cáo đó cluster theo thời gian, không instantly.
- Rollback trigger — MỘT locale các trang consistently lập chỉ mục dưới đó sai canonical, hoặc đó sai regional URL surfacing cho một query — re-audit reciprocity đầu tiên; không assume đó tags “aren’t working” (bản dịch) «không hoạt động» khi đó trả về leg là đó thực tế khoảng trống.
Nhật ký thay đổi
Đã cập nhật 8 thg 8, 2026.
Tóm tắt biên tập và chi tiết thay đổi đã ghi nhận.Chi tiết thay đổi
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.
Đã cập nhật 25 thg 7, 2026.
Tóm tắt biên tập và chi tiết thay đổi đã ghi nhận.Chi tiết thay đổi
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.
Đã cập nhật 18 thg 7, 2026.
Tóm tắt biên tập và chi tiết thay đổi đã ghi nhận.Chi tiết thay đổi
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.