Cách Audit Hreflang tại Quy mô
MỘT repeatable, tool-driven xử lý cho auditing hreflang trên một lớn site — pulling mỗi chú thích từ all three implementation các phương thức, reading cluster graphs và reciprocal matrices, và prioritizing các cách sửa by damage, không frequency.
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
Auditing hreflang tại quy mô là một graph-validation vấn đề, không một tag-validation vấn đề: bạn kiểm tra xem mỗi trang trong một cluster points lại để mỗi other trang, không liệu một trang có một tag. Pull mỗi chú thích từ all three implementation locations (HTML head, HTTP các header, XML sitemap) với một crawler — Google cho bạn không validator và GSC International Targeting báo cáo đã là đã xóa Sept 22, 2022 — thì xây dựng đó reciprocal-tag matrix. Spot-kiểm tra một cluster visually với my free returntag graph và matrix, hoặc dùng Ahrefs Site Audit và Screaming Frog cho đầy đủ-site coverage. Triage by damage: bị thiếu trả về tags đầu tiên (they break đó toàn bộ pair), thì sai language/region codes và non-canonical targets, thì bị thiếu x-default cuối cùng (hầu hết phổ biến tại 56,3%, least harmful). Trong my Brighton SEO 2023 nghiên cứu of 374 756 domains, over 67% dùng hreflang đã có ít nhất một lỗi.
Tóm tắt — Auditing hreflang “tại quy mô” có nghĩ là kiểm tra của bạn toàn bộ trang web hreflang as một connected network thay vì looking tại các trang một tại time. trick là đó hreflang hoạt động trong khớp pairs — nếu trang points để trang B, B có để point lại để, hoặc Google throws toàn bộ pair out. single-trang kiểm tra có thể không bao giờ catch bị thiếu trả về link, so bạn cần crawler đó đọc mỗi trang và maps ai points để whom. khắc phục bị thiếu trả về links đầu tiên; bị thiếu x-default đó mỗi tool complains về có thể chờ.
Vì sao “one page at a time” (bản dịch) «một trang tại một time» không hoạt động
nếu bạn view-nguồn on của bạn German trang và see tidy block của hreflang tags, nó looks fine. nhưng hreflang chỉ hoạt động nếu các trang nó references point lại. của bạn German trang có thể là perfect và vẫn là hỏng, vì English trang nó names forgot để name nó trong trả về. Bạn có thể’t see đó từ German trang alone — bạn’d có để open English trang cũng, và French trang, và mỗi khác version, và cross-kiểm tra them all by hand. On ten-trang trang web, fine. On ten-thousand-trang trang web, không thể.
đó là đó toàn bộ reason “auditing hreflang at scale” (bản dịch) «auditing hreflang tại quy mô» là của nó own skill: bạn dừng kiểm tra tags và bắt đầu kiểm tra relationships. MỘT tool crawl mỗi trang, records mỗi hreflang chú thích, và thì asks đó chỉ câu hỏi đó matters — làm mỗi trang trong này group trỏ đến mỗi other trang, cả hai directions?
Evidence for this claim A hreflang audit must verify return links because Google says non-reciprocal annotations may be ignored or interpreted incorrectly. Scope: Google Search hreflang reciprocity guidance; impact is stated as possible, not guaranteed cluster-wide invalidation. Confidence: high · Verified: Google: Hreflang guidelinesĐiều gì bạn thực ra cần
Three điều:
- MỘT crawler. Google cho bạn không hreflang validator, và đó old Search Console báo cáo đó được dùng để flag some of này đã là đã xóa lại trong 2022. So bạn lean on bên thứ ba các crawler — Ahrefs Site Audit hoặc Screaming Frog — để pull mọi thứ vào một place. Evidence for this claim A complete audit needs to inspect HTML, HTTP Link headers, and XML sitemaps because Google supports hreflang in all three locations. Scope: Google Search-supported hreflang delivery methods. Confidence: high · Verified: Google: Localized versions
- Đó reciprocal kiểm tra. Cả hai tools làm đó giống nhau cốt lõi điều: they xây dựng một map of ai-points-để-whom và flag đó một-way links. Những một-way links là của bạn “missing return tags,” (bản dịch) «bị thiếu trả về tags,» và họ là đó các lỗi đó thực ra quan trọng.
- MỘT priority order. Bạn sẽ tìm hundreds of các vấn đề. Cách sửa đó bị thiếu trả về links đầu tiên (they break pairs), thì sai country/language codes, và leave đó bị thiếu x-default cho cuối cùng — đây là đó hầu hết phổ biến complaint nhưng đó least harmful.
một điều để remember
phần lớn các trang đó sử dụng hreflang có các lỗi. Khi I studied 374 756 domains cho Brighton SEO trong 2023, over 67% của ones sử dụng hreflang có ít nhất một lỗi. So không panic Khi của bạn đầu tiên crawl lights lên red — đó thông thường. skill không phải getting để zero các lỗi; nó knowing mà của them thực ra cost bạn traffic và sửa những điều đó đầu tiên.
cho rộng hơn international audit — URL structure, geo-các chuyển hướng, nội dung quality, country performance — see SEO quốc tế Audit. cho Điều gì hreflang ngay cả là và Cách implement nó, bắt đầu với Hreflang. Muốn đầy đủ tại-quy mô methodology — reciprocal-tag matrix, cluster-graph walkthrough, Screaming Frog filters? Chuyển để Nâng cao tab.
Validate hreflang các cách sửa
Reciprocal cluster retest
Kiểm thử để chạy: Re-crawl mỗi changed cluster và so sánh thực tế self và alternate edges với dự kiến locale matrix. Dự kiến kết quả: mỗi member references itself và all dự kiến alternates, và mỗi edge có trả về edge. thất bại interpretation: khắc phục changed một template hoặc trang không có updating toàn bộ cluster. Monitoring window: Immediately sau khi deployment và sau khi tiếp theo generation cycle. Rollback trigger: changed cluster vẫn contains asymmetric priority-locale pairs.
Đích integrity
Kiểm thử để chạy: yêu cầu mỗi changed hreflang đích không có sau các chuyển hướng và collect status, robots directives, và canonical. Dự kiến kết quả: Targets trả về trực tiếp 200 các phản hồi, vẫn indexable, và canonicalize as dự kiến. thất bại interpretation: locale map points để obsolete, được chuyển hướng, blocked, hoặc consolidated các URL. Monitoring window: Phát hành verification và tiếp theo đầy đủ crawl. Rollback trigger: bất kỳ cao-giá trị cluster targets các lỗi hoặc unexpected non-canonical các URL.
Phân phối-phương thức consistency
Kiểm thử để chạy: So sánh các chú thích tìm thấy trong HTML, HTTP các header, và XML sitemaps cho changed các URL. Dự kiến kết quả: chỉ dự kiến phương thức là present, hoặc all generated các phương thức declare giống nhau cluster. thất bại interpretation: Multiple các hệ thống own hreflang và có drifted. Monitoring window: sau khi deployment và sau khi tiếp theo sitemap refresh. Rollback trigger: Contradictory các phương thức vẫn on production các URL.
Code và phạm vi validation
Kiểm thử để chạy: Validate mỗi changed giá trị so với supported language và region codes và approved locale inventory. Dự kiến kết quả: mỗi giá trị begins với hợp lệ language và adds chỉ intentional hợp lệ region. thất bại interpretation: country là được sử dụng as language, unsupported market leaked trong, hoặc casing/format generation là sai. Monitoring window: Trong CI hoặc predeployment QA và again trong production crawl. Rollback trigger: Không hợp lệ codes ảnh hưởng generated template hoặc multiple clusters.
Tóm tắt — scaled hreflang audit là graph validation, không tag validation. Step 1: pull mỗi chú thích từ all three legal locations (HTML head, HTTP
Linkcác header, XML sitemap) với crawler configured cho của bạn ccTLD/subdomain setup — GSC có thể’t làm điều này (International Targeting đã xóa Sept 22, 2022, và ngay cả trước khi đó nó chỉ reported canonical member của cluster). Step 2: xây dựng reciprocal-tag matrix — mỗi URL trong cluster × mỗi khác, làm →B exist, làm B→. đọc nó trong my returntag cluster graph/matrix cho focused kiểm tra, hoặc sử dụng Ahrefs và Screaming Frog cho trang web-wide crawling. Step 3: classify vào four patterns — bị thiếu trả về tags, sai codes, non-canonical targets, mixed absolute/relative các URL. Step 4: prioritize by damage, không frequency — trả về tags đầu tiên (họ break toàn bộ pair), sau đó codes, sau đó x-default cuối cùng (phần lớn phổ biến tại 56,3%, least harmful). Step 5: re-verify so với được lập chỉ mục URL, không declared canonical.
điều này bài viết là hreflang-cụ thể companion để my rộng hơn SEO quốc tế Audit, mà xử lý hreflang as một của six audit areas. Ở đây I’m going một cấp độ deeper on hreflang-chỉ methodology tại quy mô. cho fundamentals — Điều gì hreflang là, three ways để implement nó, reciprocal rule — see Hreflang hub và, cho fallback tag, x-default.
Evidence for this claim A complete audit needs to inspect HTML, HTTP Link headers, and XML sitemaps because Google supports hreflang in all three locations. Scope: Google Search-supported hreflang delivery methods. Confidence: high · Verified: Google: Localized versionscốt lõi reframe: Đây là graph vấn đề
Ở đây đó mental shift đó làm scaled auditing tractable. Bạn là không kiểm tra “does this page have a hreflang tag.” (bản dịch) «làm này trang có một hreflang tag.» bạn là kiểm tra “does every page in this page’s cluster point back to it, and does every URL in the cluster resolve to a 200, canonical, indexable page.” (bản dịch) «làm mỗi trang trong này trang cluster point lại để điều này, và làm mỗi URL trong đó cluster resolve để một 200, canonical, indexable trang.»
Google own tài liệu là reason:
Evidence for this claim A hreflang audit must verify return links because Google says non-reciprocal annotations may be ignored or interpreted incorrectly. Scope: Google Search hreflang reciprocity guidance; impact is stated as possible, not guaranteed cluster-wide invalidation. Confidence: high · Verified: Google: Hreflang guidelines“If page X links to page Y, page Y must link back to page X. If this is not the case for all pages that use
hreflangannotations, those annotations may be ignored or not interpreted correctly.” (bản dịch) «Nếu trang X liên kết đến trang Y, trang Y phải liên kết lại đến trang X. Nếu điều này không đúng với mọi trang sử dụnghreflangcác chú thích, các chú thích đó có thể bị bỏ qua hoặc được diễn giải không chính xác.»
đọc đó cẩn thận. Một bị thiếu trả về link có thể nguyên nhân affected các chú thích để là đã bỏ qua hoặc interpreted incorrectly. Đó là lý làm single-trang view là structurally incapable của auditing hreflang: thất bại lives trong mối quan hệ giữa các trang, không on bất kỳ một trang. bạn cần crawl đó records mỗi cluster member và cross-references them.
Phạm vi matters ở đây cũng: đã bỏ qua các chú thích là ones trong hỏng pair, không tự động mỗi mối quan hệ trong lớn hơn cluster. five-trang cluster với một bị thiếu trả về typically giữ processing của nó khác hoàn tất pairs thông thường — đó chính xác Điều gì my returntag screenshot dưới hiển thị: nine reciprocal pairs intact, một bị thiếu trả về flagged. không assume một hỏng edge nukes toàn bộ cluster; go kiểm tra mỗi pair, vì tool có để kiểm tra mỗi pair để tell bạn đó.
và nó nhận harder as trang web grows — mà là chính xác Google own lời giải thích cho Vì sao big các trang là ones với các lỗi. On Tìm kiếm Off Record, Gary Illyes described các lỗi as emerging Khi trang web có nhiều properties, mỗi với của nó own URL structure — as soon as bạn có để vary pattern trên properties, đó nơi các lỗi come trong, với Lizzi Sassman thêm đó nó harder để sync them lên Khi bạn’re localizing các URL và sau đó đang làm typos. đó signature của enterprise setup: multiple ccTLDs, mỗi on slightly khác xuất bản convention. So good audit segments findings by thuộc tính/domain group, vì đó nơi các lỗi thực ra cluster operationally.
Step 1 — Pull mỗi hreflang chú thích trang web-wide
three places hreflang lives
Google accepts hreflang trong three tương đương locations, và bạn phải kiểm tra all three:
Evidence for this claim A complete audit needs to inspect HTML, HTTP Link headers, and XML sitemaps because Google supports hreflang in all three locations. Scope: Google Search-supported hreflang delivery methods. Confidence: high · Verified: Google: Localized versions- HTML
<link>tags trong<head>— phổ biến case. - HTTP
Link:phản hồi các header — được sử dụng cho non-HTML files như PDFs. xhtml:linkentries trong XML sitemap — phổ biến tại quy mô vì nó centralizes các chú thích trong một file thay vì templating them onto mỗi trang.
crawler đó chỉ đọc HTML head sẽ silently miss header- hoặc sitemap-declared alternates. nó sẽ không flag them as hỏng — nó chỉ sẽ không see them, mà là tệ hơn, vì bạn’ll think trang có không hreflang Khi nó thực ra có đầy đủ đặt delivered qua sitemap. Configure crawl để đọc all three trước khi bạn trust single number.
Configuring crawler cho của bạn structure
- Screaming Frog: enable Configuration > Spider > Crawl Hreflang (điều này cũng picks lên sitemap và header hreflang Khi bạn point nó tại them). cho ccTLDs/subdomains đó reference mỗi khác, thêm sibling domains dưới Config > CDNs — nếu không cross-domain hreflang links là đơn giản không validated, không flagged as hỏng. Đây là single phần lớn phổ biến blind spot tại quy mô, vì enterprise các trang là ones phần lớn có khả năng để sử dụng ccTLDs, và ccTLDs là chính xác Điều gì cần điều này extra step.
- Ahrefs trang web Audit: hãy đảm bảo sibling domains là bên trong project phạm vi cho giống nhau reason. sau đó sử dụng trang Explorer để filter các trang by hreflang vấn đề loại tại quy mô trước khi bạn drill vào riêng lẻ cluster graphs.
Vì sao GSC có thể’t làm điều này cho bạn
Hai reasons, và thứ hai là một phần lớn mọi người miss:
- Đó báo cáo là đã biến mất. Đó GSC International Targeting báo cáo — mà được dùng để flag some hreflang các vấn đề — đã là deprecated và đã xóa (announced August 2022; đã xóa sau September 22, 2022). Không có gì replaced điều này trực tiếp.
- Ngay cả khi điều này existed, điều này chỉ bao giờ showed đó canonical. On Tìm kiếm Off đó Record, Illyes explained đó Search Console chỉ các báo cáo on canonicals — cho hầu hết similar-language hreflang clusters, đó alternates không canonical, so bạn đã là effectively blind để điều gì đã là happening on đó non-canonical members of một cluster, vì Google stores them trong đó duplicate cluster không có giữ đó alternate details. đó là một structural reason GSC đã là không bao giờ một hoàn tất hreflang audit tool, không chỉ “the report got removed.” (bản dịch) «đó báo cáo đã nhận đã xóa.» đây là đó trực tiếp justification cho going crawler-đầu tiên.
Google cũng chỉ không ship validator. On giống nhau podcast, Illyes đã nói Google có không bao giờ provided hreflang validator — họ có some underused reporting và sau đó đã xóa nó — và hiện tại points mọi người để external tools như Aleyda Solis’ tool, Bill Hunt hreflang checker, và Merkle tool. Take đó as permission để lean on thứ ba-party các crawler cho job GSC có thể’t làm — nhưng không as endorsement. Google own tài liệu là rõ ràng đó nó không maintain hoặc kiểm tra thứ ba-party hreflang gỡ lỗi tools, so treat bất kỳ tool output, mine được bao gồm, as diagnostic evidence bạn vẫn có để reason về, không chính thức verdict. Khi finding thực ra matters, xác nhận nó so với thô artifact — HTTP phản hồi, sitemap XML, hoặc được kết xuất HTML — thay vì stopping tại tool parsed summary.
Step 2 — Xây dựng reciprocal-tag matrix
Normalize Điều gì bạn pulled
trước khi bạn xây dựng matrix, nhận mọi thứ vào một consistent shape. cho mỗi declared hreflang mối quan hệ, record nguồn URL, đích URL, locale giá trị, nguồn phương thức (HTML head, HTTP header, hoặc sitemap), và — critically — đích mã trạng thái, chuyển hướng chain, indexability, canonical đích, và liệu crawl saw nó trong thô HTML hoặc được kết xuất DOM. khác các crawler export điều này differently; normalizing nó vào directed URL-để-URL edges với đó context attached là Điều gì làm matrix, và mỗi classification trong Step 3, reliable thay vì pile của disconnected các hàng.
Điều gì matrix represents
Conceptually, cho mỗi cluster bạn xây dựng bảng nơi các hàng và các cột là mỗi URL trong đó cluster, và mỗi cell các câu trả lời có/không câu hỏi: làm hreflang link exist từ hàng URL để cột URL? đúng cluster là symmetric — nếu →B là present, B→ là present. mỗi asymmetric cell ( link đó tồn tại trong một direction chỉ) là bị thiếu trả về tag.
Bạn không theo nghĩa đen hand-xây dựng này spreadsheet tại quy mô — đó tools xây dựng điều này cho bạn. Nhưng holding đó matrix trong của bạn head là điều gì cho phép bạn đọc đó tool output correctly. My returntag tool draws đó matrix as một graph và cũng exposes đó underlying cells; Screaming Frog’s “Missing Return Links” (bản dịch) «Bị thiếu Trả về Links» filter pulls đó asymmetric cells vào một list, và Ahrefs Site Audit cung cấp một sản phẩm khác tại-quy mô cluster view. Giống nhau mối quan hệ kiểm tra, khác nhau presentations và crawl scopes.
Reading nó as graph: my returntag cluster validator
cho focused cluster kiểm tra, my free returntag tool renders declared locale
relationships as graph và reciprocal matrix. mỗi locale là node, mỗi
declared hreflang chú thích là edge, và vấn đề list identifies chính xác URL
đó fails để link lại. screenshot dưới là sitemap-chỉ chạy: nó đọc Điều gì
sitemap declares và có chủ ý không fetch trang head tags hoặc HTTP Link các header.
sử dụng trang URL chế độ Khi bạn cần đầy đủ three-nguồn picture Đối với một trang cluster.
Cách đọc nó:
- ** sạch cluster** là fully-connected mesh — mỗi node linked để mỗi khác node, cả hai directions.
- ** một-way edge** là của bạn asymmetric cell: trang X points để Y nhưng Y không point lại. đó trả về-tag lỗi, seen thay vì đọc.
- ** orphaned node** — URL đó xuất hiện trong cluster nhưng không link lại vào nó — là unlinked hreflang URL.
practical win là triage speed và stakeholder communication: thay vì handing nhà phát triển abstract spreadsheet hàng, bạn hiển thị một-way mối quan hệ và chính xác bị thiếu trả về-tag lỗi together. cho hundreds hoặc thousands của clusters, giữ Ahrefs trang web Audit hoặc Screaming Frog trong workflow cho hoàn tất crawl coverage; returntag là fast way để inspect và giải thích cụ thể cluster.
Reading nó as spreadsheet: Screaming Frog filters
nếu bạn’re trong Screaming Frog, matrix surfaces as đặt của filters (sau khi bạn chạy Crawl Analysis post-crawl để populate trả về-link dữ liệu). Hoạt động them trong khoảng điều này order, vì nó maps để priority order trong Step 4:
- Bị thiếu trả về Links — asymmetric cells; của bạn highest-priority findings.
- Inconsistent Language & Region trả về Links — trả về link tồn tại nhưng với
khác code hơn outbound một ( nói B là
fr-FR, B nói làen-GBKhi là thực sựen-US) — subtler pair-breaker. - Non-Canonical trả về Links — trả về link points tại URL đó canonicalized elsewhere, so tín hiệu chain breaks mặc dù tag tồn tại.
- Noindex trả về Links — trả về đích là noindexed, so nó có thể’t carry chú thích.
- Non-200 Hreflang các URL — đích là chuyển hướng hoặc trang lỗi.
- Unlinked Hreflang các URL và không đúng Language & Region Codes — orphaned nodes và code-validation các lỗi.
Export toàn bộ đặt qua Các báo cáo > Hreflang. (cho đầy đủ filter-by-filter walkthrough tại summary cấp độ, Screaming Frog hreflang tutorial là excellent — I’m không going để re-loại của họ config steps ở đây.)
Step 3 — Classify Điều gì bạn tìm vào four lỗi patterns
của bạn crawl output sẽ là noisy. Loại mỗi finding vào một của four buckets — những điều này là patterns đó repeat trên 374 756-domain nghiên cứu. (I’m pulling chỉ hai figures đó anchor priority argument; đầy đủ nine-loại lỗi bảng là đã trong SEO quốc tế Audit bài viết — không point re-pasting nó.)
1. Bị thiếu trả về tags — pair-breaker
Đó asymmetric cells từ của bạn matrix. 15,3% of hreflang-dùng domains có những. As I put điều này trong đó nghiên cứu writeup: “As I mentioned, hreflang tags work in pairs. If both pages don’t reference each other, they can’t establish the connection and swap properly in the search results.” (bản dịch) «Như tôi đã đề cập, các thẻ hreflang hoạt động theo cặp. Nếu hai trang không tham chiếu lẫn nhau, chúng không thể thiết lập mối liên hệ và chuyển đổi đúng cách trong kết quả tìm kiếm.» Này là đó category đó invalidates đó toàn bộ pair tín hiệu theo Google tài liệu, mà là vì sao đây là đầu tiên trong đó priority order — ngay cả though đây là không đó hầu hết phổ biến lỗi.
2. sai language/region codes — âm thầm-forgiving một
Dùng ISO 639-1 cho language và ISO 3166-1 alpha-2 cho region. Đó classic breakers:
jp thay vì ja cho Japanese, đó typo js cho ja, three-letter codes như
gbr thay vì gb, la (Laos) misused cho “Latin America.” (bản dịch) «Mỹ Latinh.»
Một nhiều hơn phân biệt worth building vào của bạn audit: BCP 47 ( underlying
language-tag spec) permits nhiều rộng hơn đặt của các giá trị hơn Google hreflang
implementation thực ra acts on — script subtags và khác BCP 47-legal constructs
đó Google own hreflang tài liệu không xác nhận as recognized các giá trị.
code có thể là perfectly well-formed BCP 47 và vẫn không là điều gì đó Google
hreflang hướng dẫn documents as supported. Validate so với Google được ghi lại
language/region/x-default rules cụ thể, không generic BCP 47 well-formedness
— syntactically hợp lệ tag có thể vẫn là functionally invisible để Google.
Nhưng ở đây đó nuance đó cuts so với naive prioritization: Google silently corrects
some of những và không others. Của nó tài liệu trạng thái đó nếu bạn dùng codes reserved
cho điều gì đó khác, “Google Search ignores that part of the annotation (for example,
using EU, UN, or UK in hreflang annotations doesn’t have an effect on Google
Search).” (bản dịch) «Google Search bỏ qua đó part of đó chú thích (ví dụ, dùng EU, UN, hoặc UK trong hreflang các chú thích không có an effect on Google Search).» So UK là effectively dropped (bạn muốn GB), nhưng điều này không nuke đó rest
of đó chú thích — whereas một code đó là đơn giản sai (jp cho ja) làm break đó
pair. An audit cần để distinguish “technically wrong but Google handles it” (bản dịch) «technically sai nhưng Google xử lý điều này» từ
“wrong and actually breaks the pair,” (bản dịch) «sai và thực ra breaks đó pair,» vì they không nhận đó giống nhau urgency.
3. Non-canonical các URL trong hreflang — invisible một
Đây là pattern đó looks fine trong tag export và breaks anyway. mấu chốt phân biệt I drew tại Pubcon 2019: hreflang là về được lập chỉ mục version, không canonical. nếu của bạn hreflang points để URL đó canonicalized away từ Điều gì thực ra được lập chỉ mục, tín hiệu chain breaks mặc dù tag itself là “hợp lệ.” điều này chỉ surfaces Khi bạn cross-reference crawl export so với lập chỉ mục status — phần lớn hreflang tutorials skip nó vì họ treat hreflang as isolated tag kiểm tra thay vì part của lập chỉ mục pipeline. (nhiều hơn on verifying điều này trong Step 5.)
có giống nhau-language alignment kiểm tra worth thêm ở đây cũng. Khi several near-duplicate các URL có thể plausibly phục vụ as canonical cho locale, Google own canonicalization hướng dẫn favors giống nhau-language (hoặc best-substitute) URL, và cho some preference để trang đó part của hoàn tất reciprocal hreflang cluster over một đó không phải. đó reason để giữ hreflang targets pointed tại giống nhau-language canonical candidates thay vì letting them drift onto khác-language duplicate. None của Đây là điều gì đó crawler hoặc checker có thể prove outright, though — nó có thể hiển thị bạn configured các tín hiệu (canonical tags, hreflang edges, cluster membership), không Google thực tế cuối selection. Treat crawl output as diagnostic evidence, không xác nhận.
Evidence for this claim Audit canonical targets for same-language or best-substitute alignment and compare reciprocal hreflang-cluster membership, because Google documents a cluster preference among otherwise similar URLs. Scope: localized HTML pages, HTTP headers, XML sitemaps and search systems as applicable Confidence: high · Verified: How to specify a canonical URL with rel=canonical and other methods4. Mixed absolute/relative các URL — templating bug
Google là rõ ràng: “Alternate URLs must be fully-qualified, including the transport
method (http/https), so: https://example.com/foo, not //example.com/foo or
/foo.” (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 //example.com/foo hoặc /foo. » Tại quy mô này là gần như không bao giờ một một-off typo — đây là một templating bug đó hits
thousands of URLs tại khi vì đó hreflang block là generated từ một phần URL
pattern. đó là vì sao các crawler flag điều này as một systemic vấn đề: tìm một, và bạn đã thường
được tìm thấy một toàn bộ template worth.
Step 4 — Prioritize: trả về tags đầu tiên, codes tiếp theo, x-default cuối cùng
single phần lớn quan trọng ý tưởng trong điều này toàn bộ bài viết: lỗi severity không phải proportional để lỗi frequency. Loại của bạn findings by damage, không by Cách nhiều các hàng tool được trả về.
| Tier | lỗi pattern | Vì sao ở đây |
|---|---|---|
| 1 — khắc phục đầu tiên | Bị thiếu trả về tags; inconsistent trả về-link codes | Breaks đểàn bộ pair tín hiệu theo tài liệu củ Google. Highest damage. |
| 2 — khắc phục tiếp theo | sai codes đó Google không silently khắc phục (jp→ja); non-canonical / hỏng targets | Breaks riêng lẻ relationships; some là silently handled, some không phải — triage accordingly. |
| 3 — batch | Mixed absolute/relative các URL, bị thiếu self-reference | thực hygiene các vấn đề, thường template-wide, nhưng không luôn cluster-breaking. |
| 4 — cuối cùng | Bị thiếu x-default | phần lớn phổ biến, least damaging. |
Vì sao x-default goes cuối cùng despite đang mọi nơi: đây là đó single hầu hết phổ biến finding trong mỗi nghiên cứu — 56,3% trong my 374 756-domain nghiên cứu, và 47,95% trong Dan Taylor independent 18 786-domain SALT.agency nghiên cứu (hai studies, very khác nhau scales, giống nhau headline: hầu hết các trang là bị thiếu điều này). Nhưng as I wrote trong đó nghiên cứu: “Setting an x-default is not required. But it is recommended if you need a fallback page for users whose language settings don’t match any of your localized versions.” (bản dịch) «Thiết lập x-default không bắt buộc. Tuy nhiên, bạn nên thiết lập nếu cần một trang dự phòng cho người dùng có cài đặt ngôn ngữ không khớp với bất kỳ phiên bản địa hóa nào của bạn.» Google own team xử lý điều này as một UX fallback, không an lập chỉ mục-cốt yếu tín hiệu — on Tìm kiếm Off đó Record, Illyes described x-default as annotating một fallback trang cho khi có không matching language cho một người dùng, và noted điều này có thể ngay cả là một sản phẩm khác language trang thay vì một dedicated selector. Cách sửa điều này, nhưng cách sửa điều này sau đó điều đó thực ra break clusters.
Self-reference sits trong tier 3 cho giống nhau reason: ngay cả Illyes, ai worked on Google hreflang implementation, đã nói on record he không fully remember Vì sao self-reference là bắt buộc và là fairly sure clusters sẽ hoạt động không có nó — he được diễn đạt nó mainly as đang làm clusters easier để thiết lập vì Bạn có thể copy/paste giống nhau block mọi nơi. nó implementation hygiene, không functional requirement.
cho rộng hơn impact × effort matrix đó spans all six international audit areas (không chỉ hreflang), sử dụng Các framework lens trong SEO quốc tế Audit thay vì rebuilding nó ở đây.
Step 5 — Re-verify so với được lập chỉ mục URL, không crawl
của bạn crawl validates tags. nó không validate đó URL tag points để là một Google thực ra được lập chỉ mục. vì hreflang follows được lập chỉ mục version (Step 3, pattern 3), tag đó points tại URL đó là canonicalized away — hoặc đó các chuyển hướng, hoặc là noindexed downstream — vẫn breaks tín hiệu ngay cả sau khi của bạn bulk khắc phục truyền các báo cáo “sạch.”
So sau khi các cách sửa ship, spot-kiểm tra highest-giá trị clusters với URL Inspection trong Search Console: xác nhận URL Google các báo cáo as được lập chỉ mục là giống nhau URL của bạn hreflang references. Đây là step đó catches canonical-chain drift, mà là invisible trong đơn giản hreflang-tag export. bạn không làm nó cho mỗi URL — bạn làm nó cho của bạn money các trang trong mỗi market, sau khi crawl nói bạn’re đã xong.
một-line note on Bing
không expect Bing Quản trị viên web Tools để validate bất kỳ của điều này. Bing xử lý hreflang as nhiều weaker tín hiệu hơn Google làm và đã xóa của nó Geo Targeting feature lại trong 2020 — nó leans on nội dung-Language header thay vì. hreflang-tại-quy mô audit là fundamentally Google-facing exercise; kiểm tra nội dung-Language cho Bing riêng (covered trong SEO quốc tế Audit).
AI summary
condensed take on Nâng cao version:
- đây là một graph vấn đề, không một tag vấn đề. Bạn kiểm tra xem mỗi trang trong một cluster points lại để mỗi other trang — không liệu một trang có một tag. Theo Google: “If page X links to page Y, page Y must link back to page X,” (bản dịch) «Nếu trang X links để trang Y, trang Y phải link lại để trang X,» hoặc đó các chú thích “may be ignored.” (bản dịch) «có thể là đã bỏ qua.» Một bị thiếu trả về link có thể invalidate một toàn bộ cluster.
- Step 1 — pull mọi thứ. Hreflang lives trong three places (HTML head, HTTP
Linkcác header, XML sitemap); một crawler phải đọc all three. Configure ccTLD/subdomain siblings (Screaming Frog: Config > CDNs; Ahrefs: project phạm vi) hoặc cross-domain links go unvalidated. GSC không thể làm này — đó International Targeting báo cáo đã là đã xóa Sept 22, 2022, và ngay cả trước đó điều này chỉ reported đó canonical member of một cluster. - Step 2 — đó reciprocal-tag matrix. Mỗi URL × mỗi URL trong một cluster; asymmetric cells = bị thiếu trả về tags. Đọc một focused cluster visually trong returntag graph và matrix, hoặc hoạt động site-wide qua Ahrefs Site Audit và Screaming Frog.
- Step 3 — four lỗi patterns: bị thiếu trả về tags; sai codes (Google silently các cách sửa
reserved ones như
UK→đã bỏ qua, không others nhưjpchoja); non-canonical targets (hreflang follows đó được lập chỉ mục URL); mixed absolute/relative URLs (một template bug tại quy mô). - Step 4 — prioritize by damage, không frequency. Trả về tags đầu tiên (break đó toàn bộ pair), thì codes/hỏng targets, thì x-default cuối cùng — hầu hết phổ biến (56,3% trong my 374 756-domain nghiên cứu; 47,95% trong SALT.agency) nhưng least harmful và “not required.” (bản dịch) «không bắt buộc.»
- Step 5 — re-verify so với đó được lập chỉ mục URL với URL Inspection sau đó cách sửa truyền; đó crawl validates tags, không lập chỉ mục-status drift.
- Quy mô context: over 67% of hreflang-dùng domains có ít nhất một lỗi (my Brighton SEO 2023 nghiên cứu of 374 756 domains). Bing là một một-line caveat — kiểm tra Nội dung-Language, không hreflang.
Tài liệu chính thức
Chính-nguồn references cho hreflang audit.
- Tell Google về localized versions của bạn trang — hreflang reference: reciprocal trả về-tag requirement, fully-qualified-URL rule, reserved-code xử lý, và three tương đương implementation các phương thức (HTML link tags, HTTP
Linkcác header, XML sitemap). - International Targeting báo cáo là deprecated — Search Console Help — đã xóa báo cáo đó được sử dụng để flag some hreflang các vấn đề (đã xóa sau khi September 22, 2022).
- Managing Multi-Regional và Multilingual Các trang — URL-structure context cho Vì sao multi-thuộc tính setups generate phần lớn hreflang các lỗi.
- Cách specify canonical URL với rel=canonical và khác các phương thức — giống nhau-language canonical-preference hướng dẫn behind Step 3’s non-canonical hreflang kiểm tra.
Bing / Microsoft
- Bing Quản trị viên web Tools help — Bing có không hreflang validation workflow; nó weights nội dung-Language header thay vì và đã xóa Geo Targeting trong 2020.
Quotes từ nguồn
On—record statements đó anchor audit methodology.
Google — reciprocal requirement ( backbone của toàn bộ audit)
- “If page X links to page Y, page Y must link back to page X. If this is not the case for all pages that use
hreflangannotations, those annotations may be ignored or not interpreted correctly.” (bản dịch) «Nếu trang X liên kết đến trang Y, trang Y phải liên kết lại đến trang X. Nếu điều này không đúng với mọi trang sử dụnghreflangcác chú thích, các chú thích đó có thể bị bỏ qua hoặc được diễn giải không chính xác.» — Google Search Central tài liệu. Nhảy đến trích dẫn
Google — fully-qualified các URL (root nguyên nhân của mixed absolute/relative pattern)
- “Alternate URLs must be fully-qualified, including the transport method (http/https), so:
https://example.com/foo, not//example.com/fooor/foo.” (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//example.com/foohoặc/foo. » — Google Search Central tài liệu. Nhảy đến trích dẫn
Google — reserved codes là silently dropped, không trang-breaking
- “If you use codes that are listed as reserved for something else, Google Search ignores that part of the annotation (for example, using
EU,UN, orUKinhreflangannotations doesn’t have an effect on Google Search).” (bản dịch) «Nếu bạn dùng codes đó là listed as reserved cho điều gì đó khác, Google Search bỏ qua đó part of đó chú thích (ví dụ, dùngEU,UN, hoặcUKtronghreflangcác chú thích không có an effect on Google Search).» — Google Search Central tài liệu. Nhảy đến trích dẫn
Patrick Stox — Vì sao pairs là load-bearing (từ 374 756-domain nghiên cứu)
-
“As I mentioned, hreflang tags work in pairs. If both pages don’t reference each other, they can’t establish the connection and swap properly in the search results.” (bản dịch) «Như tôi đã đề cập, các thẻ hreflang hoạt động theo cặp. Nếu hai trang không tham chiếu lẫn nhau, chúng không thể thiết lập mối liên hệ và chuyển đổi đúng cách trong kết quả tìm kiếm.» — Over 67% of Domains Dùng Hreflang Có Các vấn đề, Ahrefs
-
“Setting an x-default is not required. But it is recommended if you need a fallback page for users whose language settings don’t match any of your localized versions.” (bản dịch) «Thiết lập x-default không bắt buộc. Tuy nhiên, bạn nên thiết lập nếu cần một trang dự phòng cho người dùng có cài đặt ngôn ngữ không khớp với bất kỳ phiên bản địa hóa nào của bạn.» — Over 67% of Domains Dùng Hreflang Có Các vấn đề, Ahrefs
Gary Illyes, Google — Vì sao GSC có thể’t audit hreflang, và Vì sao có không validator
- On Tìm kiếm Off Record, Illyes explained đó Search Console chỉ các báo cáo canonicals, so cho nhiều hreflang clusters nơi alternates không phải canonical bạn’re effectively blind để non-canonical members — Google diễn đạt them trong duplicate cluster không có storing alternate details. He cũng đã nói Google có không bao giờ provided hreflang validator (họ có underused reporting và đã xóa nó) và hiện tại points mọi người để external tools. Paraphrased từ transcript — verify wording so với episode trang trước khi quoting verbatim.
Mà finding làm I khắc phục đầu tiên?
bạn’ve chạy crawl và bạn’re staring tại wall của red. Walk mỗi finding qua điều này:
-
là trả về link bị thiếu hoặc code-inconsistent (asymmetric cell)? → Có → Tier 1. khắc phục hiện tại. điều này breaks toàn bộ pair theo tài liệu củ Google. Mọi thứ khác chờ behind điều này. → Không → continue.
-
Làm hreflang point để non-200, được chuyển hướng, noindexed, hoặc non-canonical URL? → Có → Tier 2. khắc phục tiếp theo. đích có thể’t carry chú thích. cho non-canonical cụ thể, xác nhận so với được lập chỉ mục URL (URL Inspection), không chỉ canonical tag. → Không → continue.
-
là language/region code sai? → là nó reserved code Google silently bỏ qua (
UK,EU,UN)? → Có → thấp urgency. Google drops chỉ đó part; khắc phục cho correctness, không as emergency. → là nó genuinely sai code đó breaks match (jpchoja,jstypo, three-lettergbr)? → Có → Tier 2. khắc phục tiếp theo. điều này breaks mối quan hệ. -
là nó mixed absolute/relative URL (
//example.com/…hoặc/…)? → Có → Tier 3, nhưng kiểm tra template. Gần như luôn trang web-wide templating bug — một instance có nghĩ là thousands. khắc phục tại template, batch rest. -
Là điều này một bị thiếu self-reference hoặc bị thiếu x-default? → Có → Tier 4. Cuối cùng. Real hygiene, không cluster-breaking. x-default là “recommended, not required” (bản dịch) «được khuyến nghị, không bắt buộc»; self-reference là copy/paste convenience. Làm những trong một cuối sweep.
** rule underneath tree:** loại by damage, không by Cách nhiều các hàng tool được trả về. phần lớn phổ biến lỗi (x-default) là least damaging.
SOP: recurring hreflang audit
Hreflang breaks silently mỗi time nhà phát triển ship template thay đổi, so chạy điều này on schedule (monthly cho active international các trang, hoặc sau khi bất kỳ phát hành đó touches localized templates).
Prep
- xác nhận crawler phạm vi covers mỗi thuộc tính trong hreflang network — all ccTLDs, subdomains, subfolders. Trong Screaming Frog, thêm siblings dưới Config > CDNs; trong Ahrefs trang web Audit, xác nhận họ’re trong project phạm vi.
- xác nhận crawler đọc all three chú thích locations (HTML head, HTTP
Linkcác header, XML sitemap). Verify by kiểm tra trang bạn know dùng sitemap-based hreflang.
Crawl 3. Enable hreflang extraction (Screaming Frog: Configuration > Spider > Crawl Hreflang). Chạy crawl. 4. Chạy post-crawl analysis (Screaming Frog: Crawl Analysis) so trả về-link filters populate. Trong Ahrefs, let trang web Audit finish và open hreflang vấn đề đặt.
Triage (trong điều này order) 5. Tier 1 — Bị thiếu trả về Links + Inconsistent trả về-Link Codes. Export những điều này đầu tiên. Open worst-hit clusters trong returntag graph/matrix để giải thích hỏng edges; retain crawler export as trang web-wide nguồn của coverage. 6. Tier 2 — Non-canonical / hỏng / noindexed targets, và genuinely sai codes. 7. Tier 3 — Mixed absolute/relative các URL (khắc phục tại template), bị thiếu self-reference. 8. Tier 4 — Bị thiếu x-default. cuối cùng.
Segment 9. Group mỗi finding by thuộc tính/domain, không chỉ by lỗi loại — các lỗi cluster nơi URL patterns vary trên properties. điều này tells bạn mà team template để khắc phục.
Verify 10. sau khi các cách sửa ship, re-crawl. sau đó spot-kiểm tra money các trang theo market với URL Inspection để xác nhận hreflang points để được lập chỉ mục URL, không canonicalized-away một. 11. Record lỗi được tính by tier mỗi cycle so Bạn có thể see drift theo thời gian.
Hreflang audit myths và mistakes
Concrete misconceptions đó lead mọi người để audit sai điều — mỗi với Vì sao nó sai và Điều gì để làm thay vì.
1. “Broken hreflang gets my site penalized, so any error is urgent.” (bản dịch) «Hỏng hreflang nhận my site penalized, so bất kỳ lỗi là urgent.»
- Vì sao sai: Google bỏ qua hỏng hoặc asymmetric hreflang; điều này không penalize cho điều này. Gary Illyes có đã nói trực tiếp đó an incorrect hreflang implementation sẽ không hurt một site — Google đơn giản bỏ qua điều này (reported by Công cụ tìm kiếm Roundtable và corroborated by Search Engine Journal). Đó cost là lost opportunity (sai-language các trang surfacing, market cannibalization), không một xếp hạng hình phạt.
- Làm thay vì: Triage by lost opportunity theo cluster (traffic, revenue), không by fear of một hình phạt đó không exist.
2. “Missing x-default is the most common error, so fix it first.” (bản dịch) «Bị thiếu x-default là đó hầu hết phổ biến lỗi, so cách sửa điều này đầu tiên.»
- Vì sao sai: Frequency và severity là khác nhau axes. x-default là đó single hầu hết phổ biến finding (56,3% trong my nghiên cứu; 47,95% trong SALT.agency) nhưng đây là “recommended, not required” (bản dịch) «được khuyến nghị, không bắt buộc» và functions as một UX fallback, không một cluster-cốt yếu tín hiệu.
- Làm thay vì: Put x-default cuối cùng. Cách sửa bị thiếu trả về tags đầu tiên — they break entire pairs.
3. “Self-referencing tags are mandatory, flag every missing one as critical.” (bản dịch) «Self-referencing tags là mandatory, flag mỗi bị thiếu một as cốt yếu.»
- Vì sao sai: Ngay cả Illyes, ai worked on Google hreflang implementation, đã nói on record he không sure vì sao self-reference là bắt buộc và believes clusters sẽ hoạt động không có điều này — đây là mainly copy/paste convenience.
- Làm thay vì: Cách sửa self-reference trong đó cuối hygiene sweep (tier 3–4), không ahead of trả về-tag và code các lỗi.
4. “The html lang attribute is a language signal Google checks, so audit it alongside
hreflang.” (bản dịch) «Đó html lang thuộc tính là một language tín hiệu Google kiểm tra, so audit điều này alongside hreflang.»
- Vì sao sai: Asked trực tiếp on Tìm kiếm Off đó Record liệu Google cares về đó HTML
langthuộc tính, Illyes đã nói không — đây là thường baked vào CMS templates theo mặc định và do đó untrustworthy, so Google detects language từ đó visible nội dung thay vì. - Làm thay vì: Giữ
html langcorrect cho accessibility và other engines, nhưng không let một hreflang-so với-langmismatch outrank an thực tế trả về-tag lỗi trong của bạn triage.
5. “GSC’s report is gone, so without a paid crawler I can’t audit hreflang at all.” (bản dịch) «GSC báo cáo là đã biến mất, so không có một paid crawler I không thể audit hreflang tại all.»
- Vì sao sai: MỘT manual view-nguồn spot-kiểm tra plus free/freemium các validator (Aleyda Solis’ tool, Bill Hunt checker, Merkle tool — all named by Illyes as tools he được tìm thấy reliable, though Google own tài liệu là clear điều này không maintain hoặc kiểm tra bên thứ ba hreflang tools) hoạt động fine cho nhỏ các trang. đây là quy mô đó requires một crawler, không đó absence of GSC.
- Làm thay vì: Match đó tool để đó size. Spot-kiểm tra nhỏ các trang manually; reserve đó crawler cho đó các trang nơi hand-kiểm tra clusters là genuinely không thể.
6. “My hreflang export is clean, so hreflang is fine.” (bản dịch) «My hreflang export là sạch, so hreflang là fine.»
- Vì sao sai: MỘT sạch tag export không có nghĩa là đó targets là được lập chỉ mục. Hreflang follows đó được lập chỉ mục URL, không đó canonical — một tag pointing tại một canonicalized-away hoặc noindexed URL vẫn breaks mặc dù đó tag “looks” hợp lệ.
- Làm thay vì: Cross-reference so với lập chỉ mục status (URL Inspection) cho của bạn top clusters sau đó tag-cấp độ truyền.
trước khi / sau khi: reading four patterns
Concrete, minimal các ví dụ của mỗi lỗi pattern và của nó khắc phục. (Illustrative markup.)
1. Bị thiếu trả về tag ( pair-breaker)
trước khi — US trang points để UK trang, nhưng UK trang không bao giờ points lại:
<!-- https://example.com/us/ (present) -->
<link rel="alternate" hreflang="en-US" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<!-- https://example.com/uk/ (BROKEN — no link back to /us/) -->
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />sau khi — UK trang names US trang trong trả về, so pair là symmetric:
<!-- https://example.com/uk/ (fixed) -->
<link rel="alternate" hreflang="en-US" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />2. sai language/region code
trước khi — jp là country code, không language code cho Japanese; en-UK không phải hợp lệ:
<link rel="alternate" hreflang="jp" href="https://example.com/jp/" />
<link rel="alternate" hreflang="en-UK" href="https://example.com/uk/" />sau khi — ISO 639-1 language (ja) và ISO 3166-1 alpha-2 region (GB, không UK):
<link rel="alternate" hreflang="ja" href="https://example.com/jp/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />3. Mixed absolute/relative các URL ( template bug tại quy mô)
trước khi — giao thức-relative và root-relative các URL; Google requires fully-qualified:
<link rel="alternate" hreflang="fr-FR" href="//example.com/fr/" />
<link rel="alternate" hreflang="de-DE" href="/de/" />sau khi — fully-qualified, including transport phương thức:
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />4. Non-canonical đích (looks hợp lệ, vẫn breaks)
trước khi — hreflang points tại URL đó canonicalized away từ được lập chỉ mục version:
<!-- hreflang points here… -->
<link rel="alternate" hreflang="es-ES" href="https://example.com/es/producto?ref=nav" />
<!-- …but /es/producto?ref=nav has: <link rel="canonical" href="https://example.com/es/producto"> -->sau khi — hreflang points tại canonical/được lập chỉ mục URL, so tín hiệu chain holds:
<link rel="alternate" hreflang="es-ES" href="https://example.com/es/producto" />catch với #4: Bạn có thể’t see nó từ tag alone. xác nhận được lập chỉ mục URL với URL Inspection trước khi bạn trust đó điều này một fixed.
Pulling và kiểm tra hreflang yourself
cho spot-kiểm tra, quảng cáo-hoc extraction, và validating khắc phục trước khi tiếp theo đầy đủ crawl. crawler là vẫn của bạn nguồn của truth tại quy mô — những điều này là cho trong-giữa.
Chrome DevTools Console — dump mỗi hreflang on hiện tại trang
Paste vào Console on bất kỳ trang để list của nó các chú thích và flag giao thức-relative hoặc root-relative các URL:
[...document.querySelectorAll('link[rel="alternate"][hreflang]')]
.map(l => {
const href = l.getAttribute('href');
const bad = /^\/\//.test(href) || /^\/(?!\/)/.test(href);
return `${l.hreflang}\t${href}${bad ? '\t⚠ not fully-qualified' : ''}`;
})
.join('\n') || 'No HTML hreflang tags on this page (check headers / sitemap).';Nếu điều này prints “No HTML hreflang tags,” (bản dịch) «Không HTML hreflang tags,» đó trang có thể deliver hreflang qua HTTP header hoặc sitemap — đó Console chỉ sees đó DOM, so kiểm tra những riêng.
Bookmarklet — một-nhấp reciprocity spot-kiểm tra trên cluster
Fetches mỗi alternate hiện tại trang names và các báo cáo mà ones fail để link lại (giống nhau-origin chỉ, due để trình duyệt CORS — cross-ccTLD pairs cần crawler):
javascript:(async()=>{const base=location.href.split('#')[0];const alts=[...document.querySelectorAll('link[rel="alternate"][hreflang]')].map(l=>({lang:l.hreflang,href:l.href})).filter(a=>a.lang!=='x-default');const out=[];for(const a of alts){try{const html=await(await fetch(a.href)).text();const back=/hreflang=["'][^"']*["']\s+href=["']([^"']+)["']/gi;let m,found=false;while((m=back.exec(html))){if(m[1].split('#')[0].replace(/\/$/,'')===base.replace(/\/$/,'')){found=true;break;}}out.push(`${found?'✓':'✗ MISSING RETURN'} ${a.lang} ${a.href}`);}catch(e){out.push(`? ${a.lang} ${a.href} (fetch blocked — cross-origin)`);}}alert(out.join('\n'));})();grep / regex — extract hreflang từ saved sitemap hoặc HTML dump
Pull mỗi chú thích out của downloaded XML sitemap hoặc crawl HTML export:
# From an XML sitemap using xhtml:link hreflang
grep -oE 'hreflang="[^"]+"[^>]*href="[^"]+"' sitemap.xml
# From a directory of saved HTML pages — list hreflang value + href per file
grep -rhoE '<link[^>]*hreflang="[^"]+"[^>]*>' ./pages/ \
| grep -oE 'hreflang="[^"]+"|href="[^"]+"'Python — xây dựng reciprocity matrix từ Screaming Frog export
Turn Screaming Frog hreflang_all.csv-style export (các cột: nguồn URL, hreflang giá trị,
đích URL) vào đặt của một-way (bị thiếu-trả về) pairs:
import csv
from collections import defaultdict
links = defaultdict(set) # source -> set of targets it points to
with open("hreflang_export.csv", newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
src, tgt = row["Address"].strip(), row["Occurrence URL"].strip()
if src and tgt and src != tgt:
links[src].add(tgt)
missing = [(a, b) for a, targets in links.items()
for b in targets
if a not in links.get(b, set())]
print(f"{len(missing)} one-way (missing-return) pairs:")
for a, b in missing[:50]:
print(f" {a} -> {b} (no return link)")Adjust cột names để match của bạn export. output là chính xác asymmetric cells của reciprocal-tag matrix — tier-1 các cách sửa.
Tools cho scaled hreflang audit
- returntag (chính cho graph/matrix spot-kiểm tra). My free tool turns trang hoặc sitemap cluster vào graph và reciprocal matrix, sau đó names bị thiếu trả về relationships và của họ các cách sửa. trang URL chế độ kiểm tra trang cluster; Sitemap chế độ validates chỉ Điều gì sitemap declares. sử dụng nó để investigate và communicate cụ thể cluster, không as substitute cho toàn bộ-trang web crawl.
- Ahrefs trang web Audit (tại quy mô). Extracts hreflang từ HTML, các header, và sitemaps, chạy reciprocal kiểm tra, và renders mỗi cluster as network graph — URL Details > Hreflangs tab, hỏng edges trong red. fastest way để see mà mối quan hệ trong cluster là hỏng, và easiest để hiển thị stakeholder. sử dụng trang Explorer để filter các trang by hreflang vấn đề loại trước khi drilling vào riêng lẻ graphs.
- Screaming Frog SEO Spider. Enable Configuration > Spider > Crawl Hreflang; thêm sibling ccTLDs dưới Config > CDNs cho cross-domain validation; chạy Crawl Analysis để populate trả về-link filters (Bị thiếu trả về Links, Inconsistent Language & Region trả về Links, Non-Canonical trả về Links, Noindex trả về Links, Non-200 Hreflang các URL, Unlinked Hreflang các URL). Export qua Các báo cáo > Hreflang. của họ hreflang tutorial là definitive config reference.
- Google Search Console — URL Inspection. không cho bulk auditing ( International Targeting báo cáo là đã biến mất, và GSC chỉ bao giờ reported canonical member của cluster), nhưng essential cho Step 5: confirming của bạn hreflang points tại được lập chỉ mục URL sau khi khắc phục truyền.
- Free/freemium các validator cho nhỏ các trang và spot-kiểm tra — Aleyda Solis’ hreflang tag generator/tester, Bill Hunt hreflang checker, và Merkle hreflang tool (named by Google Gary Illyes as tools he knows hoạt động well — though Google own tài liệu là rõ ràng đó nó không maintain hoặc kiểm tra thứ ba-party hreflang tools). sử dụng những điều này Khi hand-kiểm tra là vẫn feasible; reserve crawler cho đúng quy mô, và treat bất kỳ tool verdict as diagnostic, không chính thức.
- Bing Quản trị viên web Tools — không hreflang validation; audit nội dung-Language riêng cho Bing markets.
các tài nguyên worth của bạn time
My related writing
- Over 67% của Domains sử dụng Hreflang có Các vấn đề (Nghiên cứu của 374 756 Domains) — my Brighton SEO 2023 nghiên cứu, largest hreflang nghiên cứu để date và spine của điều này toàn bộ methodology; lỗi distribution và trả về-tag/x-default figures come từ ở đây.
- Hreflang: Easy Hướng dẫn cho Beginners — Ahrefs implementation hướng dẫn, cho fundamentals điều này bài viết assumes bạn đã know.
- Người mới bắt đầu Hướng dẫn để kỹ thuật SEO — nơi international các tín hiệu sit trong wider kỹ thuật picture.
My speaking
- Hreflang Nghiên cứu và Interesting Các vấn đề — Brighton SEO 2023 (Speaker Deck) — đó slides behind đó nghiên cứu.
- Đó hầu hết phổ biến hreflang các vấn đề trên 374 756 domains — Brighton SEO, Sept 2023 (YouTube) — đó talk itself.
- SEO quốc tế: Đó Weird Kỹ thuật Parts — Pubcon Vegas 2019 (SlideShare) — nơi I làm đó “hreflang follows the indexed version, not the canonical” (bản dịch) «hreflang follows đó được lập chỉ mục version, không đó canonical» point đó drives Step 3 và Step 5.
Từ khoảng đó ngành
- Tell Google về localized versions of trang của bạn — Google canonical hreflang reference (reciprocity, fully-qualified URLs, reserved codes).
- Tìm kiếm Off đó Record — “How serving works, hreflang, and more!” (bản dịch) «Cách serving hoạt động, hreflang, và hơn!» — Google Tìm kiếm Relations team (Illyes, Splitt, Sassman) on vì sao GSC chỉ các báo cáo canonicals, vì sao có không validator, và vì sao big multi-thuộc tính các trang generate đó hầu hết các lỗi.
- Cách Audit & Kiểm thử Hreflang (Screaming Frog) — đó definitive filter-by-filter config walkthrough.
- Nghiên cứu: 31% of international websites contain hreflang các lỗi (Search Engine Land) — Dan Taylor / SALT.agency independent 18 786-domain nghiên cứu, một hữu ích cross-kiểm tra on my lớn hơn một.
- Google Says They Sẽ Bỏ qua Incorrect hreflang Implementation (Công cụ tìm kiếm Roundtable) — đó “ignored, not penalized” (bản dịch) «đã bỏ qua, không penalized» point đó reorders của bạn triage away từ panic.
- Google Insights: Có thể Incorrect Hreflang Tags Hurt SEO? (Search Engine Journal) — corroborates đó giống nhau finding.
Tự kiểm tra: Auditing hreflang tại quy mô
Five nhanh các câu hỏi on tại-quy mô methodology. Pick câu trả lời cho mỗi, sau đó kiểm tra.
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.
-
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.