cara Audit Hreflang di Scale
sebuah repeatable, alat-driven proses untuk auditing hreflang di seluruh sebuah besar situs — pulling setiap annotation dari semua three implementation metode, reading cluster graphs dan reciprocal matrices, dan prioritizing memperbaiki oleh damage, tidak frequency.
Bahasa
1 sinyal bukti di halaman ini
- Alat aktif terkaitreturntag - hreflang checker
Auditing hreflang di scale adalah sebuah graph-validation masalah, tidak sebuah tag-validation masalah: Anda periksa apakah setiap halaman di sebuah cluster poin back untuk setiap lainnya halaman, tidak apakah satu halaman memiliki sebuah tag. Pull setiap annotation dari semua three implementation locations (HTML head, header HTTP, sitemap XML) dengan sebuah crawler — Google memberikan Anda Tidak validator dan GSC's International Targeting report adalah dihapus Sept 22, 2022 — lalu bangun reciprocal-tag matrix. Spot-periksa sebuah cluster visually dengan my free returntag graph dan matrix, atau gunakan Ahrefs situs Audit dan Screaming Frog untuk penuh-situs coverage. Triage oleh damage: missing kembalikan tags pertama (mereka break seluruh pair), lalu wrong language/region codes dan non-canonical targets, lalu missing x-default terakhir (sebagian besar umum di 56,3%, least harmful). di my Brighton SEO 2023 study dari 374 756 domains, di atas 67% menggunakan hreflang memiliki setidaknya satu error.
TL;DR — Auditing hreflang “dalam skala besar” (terjemahan) “di scale” berarti memeriksa Anda seluruh situs’s hreflang sebagai satu connected network alih-alih looking di halaman satu di sebuah time. trick adalah itu hreflang berfungsi di cocok pairs — jika halaman sebuah poin untuk halaman B, B memiliki untuk poin back untuk sebuah, atau Google throws seluruh pair out. sebuah single-halaman periksa dapat tidak pernah catch sebuah missing kembalikan tautan, so Anda perlu sebuah crawler itu membaca setiap halaman dan maps siapa poin untuk whom. Perbaiki missing kembalikan tautan pertama; missing x-default itu setiap alat complains tentang dapat tunggu.
Mengapa “satu halaman di a time” (terjemahan) “satu halaman di sebuah time” tidak berfungsi
jika Anda view-sumber pada Anda German halaman dan see sebuah tidy block dari hreflang tags, ini looks fine. tetapi hreflang hanya berfungsi jika halaman ini references poin back. Anda German halaman dapat menjadi perfect dan masih menjadi rusak, karena English halaman ini names forgot untuk name ini di kembalikan. Anda dapat’t see itu dari German halaman alone — Anda’d memiliki untuk open English halaman too, dan French halaman, dan setiap lainnya versi, dan cross-periksa them semua oleh hand. pada sebuah ten-halaman situs, fine. pada sebuah ten-thousand-halaman situs, impossible.
itu’s seluruh alasan “auditing hreflang dalam skala besar” (terjemahan) “auditing hreflang di scale” adalah -nya own skill: Anda berhenti memeriksa tags dan mulai memeriksa relationships. sebuah alat melakukan crawl setiap halaman, records setiap hreflang annotation, dan lalu menanyakan satu-satunya pertanyaan itu penting — melakukan setiap halaman di ini group poin untuk setiap lainnya halaman, keduanya 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 guidelinesApa Anda sebenarnya perlu
Three hal:
- sebuah crawler. Google memberikan Anda Tidak hreflang validator, dan old Search Console report itu digunakan untuk flag beberapa dari ini adalah dihapus back di 2022. So Anda lean pada ketiga-party crawler — Ahrefs situs Audit atau Screaming Frog — untuk pull semuanya ke satu place.
- ** reciprocal periksa.** Keduanya alat melakukan yang sama core hal: mereka bangun map dari siapa-poin-untuk-whom dan flag satu-cara tautan. itu satu-cara tautan adalah Anda “missing return tags,” (terjemahan) “missing kembalikan tags,” dan mereka’re errors itu sebenarnya penting.
- sebuah priority order. Anda akan temukan hundreds dari issues. Perbaiki missing kembalikan tautan pertama (mereka break pairs), lalu wrong country/language codes, dan leave missing x-default untuk terakhir — ini adalah paling umum complaint tetapi paling sedikit harmful.
satu hal untuk remember
sebagian besar situs itu gunakan hreflang memiliki errors. Ketika I studied 374 756 domains untuk Brighton SEO di 2023, di atas 67% dari ones menggunakan hreflang memiliki setidaknya satu error. So jangan panic ketika Anda pertama crawl lights up red — itu’s wajar. skill tidak getting untuk zero errors; ini adalah knowing yang dari them sebenarnya cost Anda traffic dan memperbaiki itu pertama.
untuk lebih luas international audit — struktur URL, geo-redirects, konten quality, country performa — see SEO internasional Audit. untuk apa hreflang bahkan adalah dan cara implement ini, mulai dengan Hreflang. ingin penuh di-scale methodology — reciprocal-tag matrix, cluster-graph walkthrough, Screaming Frog filters? Switch untuk Advanced tab.
Validate hreflang memperbaiki
Reciprocal cluster retest
Test untuk jalankan: Re-crawl setiap changed cluster dan bandingkan sebenarnya self dan alternate edges dengan yang diharapkan locale matrix. Yang diharapkan hasil: setiap member references itself dan semua yang dimaksud alternates, dan setiap edge memiliki sebuah kembalikan edge. Failure interpretation: perbaiki changed satu template atau halaman tanpa updating seluruh cluster. Monitoring window: Immediately setelah deployment dan setelah berikutnya generation cycle. Rollback trigger: sebuah changed cluster masih berisi asymmetric priority-locale pairs.
Target integrity
Test untuk jalankan: permintaan setiap changed hreflang destination tanpa berikut redirects dan collect status, robots directives, dan canonical. Yang diharapkan hasil: Targets kembalikan direct 200 respons, tetap dapat diindeks, dan canonicalize sebagai yang dimaksud. Failure interpretation: locale map poin untuk obsolete, redirected, blocked, atau consolidated URLs. Monitoring window: Rilis verification dan berikutnya penuh crawl. Rollback trigger: apa pun tinggi-nilai cluster targets errors atau unexpected non-canonical URLs.
Pengiriman-metode consistency
Test untuk jalankan: Bandingkan annotations ditemukan di HTML, header HTTP, dan sitemap XML untuk changed URLs. Yang diharapkan hasil: hanya yang dimaksud metode adalah present, atau semua generated metode declare yang sama cluster. Failure interpretation: Multiple sistem own hreflang dan memiliki drifted. Monitoring window: setelah deployment dan setelah berikutnya sitemap refresh. Rollback trigger: Contradictory metode tetap pada production URLs.
Code dan cakupan validation
Test untuk jalankan: Validate setiap changed nilai terhadap didukung language dan region codes dan approved locale inventory. Yang diharapkan hasil: setiap nilai begins dengan sebuah valid language dan menambahkan hanya sebuah intentional valid region. Failure interpretation: sebuah country adalah digunakan sebagai sebuah language, sebuah unsupported market leaked di, atau casing/format generation adalah wrong. Monitoring window: di CI atau predeployment QA dan again di production crawl. Rollback trigger: Tidak valid codes memengaruhi sebuah generated template atau multiple clusters.
TL;DR — sebuah scaled hreflang audit adalah graph validation, tidak tag validation. langkah 1: pull setiap annotation dari semua three legal locations (HTML head, HTTP
Linkheaders, sitemap XML) dengan sebuah crawler configured untuk Anda ccTLD/subdomain setup — GSC dapat’t melakukan ini (International Targeting dihapus Sept 22, 2022, dan bahkan sebelum itu ini hanya reported canonical member dari sebuah cluster). langkah 2: bangun reciprocal-tag matrix — setiap URL di sebuah cluster × setiap lainnya, melakukan sebuah→B exist, melakukan B→sebuah. Baca ini di my returntag cluster graph/matrix untuk sebuah focused periksa, atau gunakan Ahrefs dan Screaming Frog untuk situs-wide crawling. langkah 3: classify ke four patterns — missing kembalikan tags, wrong codes, non-canonical targets, mixed absolute/relative URLs. langkah 4: prioritize oleh damage, tidak frequency — kembalikan tags pertama (mereka break seluruh pair), lalu codes, lalu x-default terakhir (sebagian besar umum di 56,3%, least harmful). langkah 5: re-verify terhadap terindeks URL, tidak declared canonical.
ini artikel adalah hreflang-spesifik companion untuk my lebih luas SEO internasional Audit, yang memperlakukan hreflang sebagai satu dari six audit areas. Di sini I’m going satu tingkat deeper pada hreflang-hanya methodology di scale. untuk fundamentals — apa hreflang adalah, three cara untuk implement ini, reciprocal aturan — see Hreflang hub dan, untuk 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 versionscore reframe: ini adalah sebuah graph masalah
Di sini’s mental shift itu membuat scaled auditing tractable. Anda adalah tidak memeriksa “melakukan ini halaman memiliki a hreflang tag.” (terjemahan) “melakukan ini halaman memiliki sebuah hreflang tag.” Anda’re memeriksa “melakukan setiap halaman di ini halaman’s cluster point back untuk it, dan melakukan setiap URL di itu cluster resolve untuk a 200, canonical, indexable halaman.” (terjemahan) “melakukan setiap halaman di ini halaman’s cluster poin back untuk ini, dan melakukan setiap URL di cluster resolve untuk sebuah 200, canonical, dapat diindeks halaman.”
Google’s own documentation adalah alasan:
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.” (terjemahan) “Jika halaman X menaut ke halaman Y, halaman Y harus menaut kembali ke halaman X. Jika ketentuan ini tidak dipenuhi oleh semua halaman yang menggunakan anotasihreflang, anotasi tersebut dapat diabaikan atau ditafsirkan secara keliru.”
Baca itu dengan hati-hati. Satu missing kembalikan tautan dapat penyebab affected annotations untuk menjadi ignored atau interpreted incorrectly. itu’s mengapa sebuah single-halaman view adalah structurally incapable dari auditing hreflang: failure lives di hubungan antara halaman, tidak pada apa pun satu halaman. Anda perlu sebuah crawl itu records setiap cluster member dan cross-references them.
Cakupan penting di sini too: ignored annotations adalah ones di rusak pair, tidak secara otomatis setiap hubungan di sebuah lebih besar cluster. sebuah five-halaman cluster dengan satu missing kembalikan typically mempertahankan processing -nya lainnya menyelesaikan pairs biasanya — itu’s persis apa my returntag screenshot di bawah menampilkan: nine reciprocal pairs intact, satu missing kembalikan flagged. jangan assume satu rusak edge nukes seluruh cluster; go periksa setiap pair, karena alat memiliki untuk periksa setiap pair untuk tell Anda itu.
dan ini mendapatkan harder sebagai situs grows — yang adalah persis Google’s own explanation untuk mengapa big situs adalah ones dengan errors. pada Penelusuran Off Record, Gary Illyes described errors sebagai emerging ketika sebuah situs memiliki banyak properties, setiap dengan -nya own struktur URL — segera setelah Anda memiliki untuk vary pattern di seluruh properties, itu’s di mana errors come di, dengan Lizzi Sassman menambahkan itu ini adalah harder untuk sync them up ketika Anda’re localizing URLs dan lalu membuat typos. itu’s signature dari sebuah enterprise setup: multiple ccTLDs, setiap pada sebuah slightly berbeda penerbitan convention. So sebuah baik audit segments findings oleh property/domain group, karena itu’s di mana errors sebenarnya cluster operationally.
langkah 1 — Pull setiap hreflang annotation situs-wide
three places hreflang lives
Google accepts hreflang di three equivalent locations, dan Anda harus periksa semua 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 di<head>— umum case. - HTTP
Link:respons headers — digunakan untuk non-HTML files like PDFs. xhtml:linkentries di sebuah sitemap XML — umum di scale karena ini centralizes annotations di satu file alih-alih templating them onto setiap halaman.
sebuah crawler itu hanya membaca HTML head akan silently miss header- atau sitemap-declared alternates. ini tidak akan flag them sebagai rusak — ini hanya tidak akan see them, yang adalah worse, karena Anda’ll think sebuah halaman memiliki Tidak hreflang ketika ini sebenarnya memiliki sebuah penuh set delivered melalui sitemap. Configure crawl untuk baca semua three sebelum Anda trust sebuah single angka.
Configuring crawler untuk Anda structure
- Screaming Frog: enable Configuration > Spider > crawl Hreflang (ini juga picks up sitemap dan header hreflang ketika Anda poin ini di them). untuk ccTLDs/subdomains itu reference setiap lainnya, tambahkan sibling domains di bawah Config > CDNs — jika tidak cross-domain hreflang tautan adalah sekadar tidak validated, tidak flagged sebagai rusak. ini adalah single sebagian besar umum blind spot di scale, karena enterprise situs adalah ones sebagian besar mungkin untuk gunakan ccTLDs, dan ccTLDs adalah persis apa perlu ini extra langkah.
- Ahrefs situs Audit: pastikan sibling domains adalah di dalam project cakupan untuk yang sama alasan. lalu gunakan halaman Explorer untuk filter halaman oleh hreflang issue jenis di scale sebelum Anda drill ke individual cluster graphs.
Mengapa GSC dapat’t melakukan ini untuk Anda
Dua alasan, dan kedua adalah satu sebagian besar orang miss:
- ** report adalah hilang.** GSC International Targeting report — yang digunakan untuk flag beberapa hreflang issues — adalah deprecated dan dihapus (announced August 2022; dihapus setelah September 22, 2022). Tidak ada apa pun replaced ini secara langsung.
- bahkan ketika ini existed, ini hanya ever showed canonical. pada Penelusuran Off Record, Illyes dijelaskan itu Search Console hanya reports pada canonicals — untuk sebagian besar similar-language hreflang clusters, alternates tidak canonical, so Anda adalah effectively blind untuk apa adalah happening pada non-canonical members dari sebuah cluster, karena Google stores them di duplicate cluster tanpa mempertahankan alternate detail. itu’s sebuah structural alasan GSC adalah tidak pernah sebuah menyelesaikan hreflang audit alat, tidak hanya “the report got removed.” (terjemahan) “ report mendapat dihapus.” ini adalah direct justification untuk going crawler-pertama.
Google juga hanya tidak ship sebuah validator. pada yang sama podcast, Illyes mengatakan Google memiliki tidak pernah disediakan sebuah hreflang validator — mereka memiliki beberapa underused reporting dan lalu dihapus ini — dan now poin orang untuk external alat like Aleyda Solis’ alat, Bill Hunt’s hreflang checker, dan Merkle’s alat. Take itu sebagai permission untuk lean pada ketiga-party crawler untuk job GSC dapat’t melakukan — tetapi tidak sebagai sebuah endorsement. Google’s own documentation adalah jelas itu ini tidak maintain atau periksa ketiga-party hreflang debugging alat, so treat apa pun alat’s output, mine disertakan, sebagai diagnostic evidence Anda masih memiliki untuk alasan tentang, tidak sebuah official verdict. Ketika sebuah finding sebenarnya penting, konfirmasi ini terhadap mentah artifact — respons HTTP, sitemap XML, atau dirender HTML — alih-alih stopping di alat’s parsed summary.
langkah 2 — bangun reciprocal-tag matrix
Normalize apa Anda pulled
sebelum Anda bangun matrix, mendapatkan semuanya ke satu consistent shape. untuk setiap declared hreflang hubungan, record sumber URL, target URL, locale nilai, sumber metode (HTML head, header HTTP, atau sitemap), dan — critically — target’s kode status, rantai pengalihan, indexability, canonical target, dan apakah crawl saw ini di mentah HTML atau dirender DOM. berbeda crawler export ini differently; normalizing ini ke directed URL-untuk-URL edges dengan itu context attached adalah apa membuat matrix, dan setiap classification di langkah 3, reliable alih-alih sebuah pile dari disconnected rows.
Apa matrix mewakili
Conceptually, untuk setiap cluster Anda bangun table di mana rows dan columns adalah setiap URL di itu cluster, dan setiap cell jawaban sebuah Ya/Tidak pertanyaan: melakukan sebuah hreflang tautan exist dari baris URL untuk column URL? sebuah correct cluster adalah symmetric — jika sebuah→B adalah present, B→sebuah adalah present. setiap asymmetric cell (sebuah tautan itu ada di satu direction hanya) adalah sebuah missing kembalikan tag.
Anda tidak secara harfiah hand-bangun ini spreadsheet di scale — alat bangun ini untuk Anda. tetapi holding matrix di Anda head adalah apa lets Anda baca alat output correctly. My returntag alat draws matrix sebagai sebuah graph dan juga exposes underlying cells; Screaming Frog’s “Missing Return Links” (terjemahan) “Missing kembalikan tautan” filter pulls asymmetric cells ke sebuah list, dan Ahrefs situs Audit menyediakan lainnya di-scale cluster view. sama hubungan periksa, berbeda presentations dan crawl scopes.
Reading ini sebagai sebuah graph: my returntag cluster validator
untuk sebuah focused cluster periksa, my free returntag alat renders declared locale
relationships sebagai sebuah graph dan sebuah reciprocal matrix. setiap locale adalah sebuah node, setiap
declared hreflang annotation adalah sebuah edge, dan issue list identifies tepat URL
itu fails untuk tautan back. screenshot di bawah adalah sebuah sitemap-hanya jalankan: ini membaca apa
sitemap declares dan dengan sengaja melakukan tidak fetch halaman head tags atau HTTP Link headers.
gunakan halaman URL mode ketika Anda perlu penuh three-sumber picture untuk sebuah halaman’s cluster.
cara baca ini:
- sebuah bersih cluster adalah sebuah fully-connected mesh — setiap node ditautkan untuk setiap lainnya node, keduanya directions.
- sebuah satu-cara edge adalah Anda asymmetric cell: halaman X poin untuk Y tetapi Y tidak poin back. itu’s kembalikan-tag error, seen alih-alih baca.
- sebuah orphaned node — sebuah URL itu muncul di cluster tetapi tidak tautan back ke ini — adalah sebuah unlinked hreflang URL.
practical win adalah triage speed dan stakeholder communication: alih-alih handing sebuah developer sebuah abstract spreadsheet baris, Anda tampilkan satu-cara hubungan dan tepat missing kembalikan-tag error together. untuk hundreds atau thousands dari clusters, pertahankan Ahrefs situs Audit atau Screaming Frog di workflow untuk menyelesaikan crawl coverage; returntag adalah fast cara untuk inspect dan jelaskan sebuah spesifik cluster.
Reading ini sebagai sebuah spreadsheet: Screaming Frog filters
jika Anda’re di Screaming Frog, matrix surfaces sebagai sebuah set dari filters (setelah Anda jalankan crawl Analysis post-crawl untuk populate kembalikan-tautan data). berfungsi them di roughly ini order, karena ini maps untuk priority order di langkah 4:
- Missing kembalikan tautan — asymmetric cells; Anda highest-priority findings.
- Inconsistent Language & Region kembalikan tautan — sebuah kembalikan tautan ada tetapi dengan sebuah
berbeda code daripada outbound satu (sebuah says B adalah
fr-FR, B says sebuah adalahen-GBketika sebuah adalah benar-benaren-US) — sebuah subtler pair-breaker. - Non-Canonical kembalikan tautan — kembalikan tautan poin di sebuah URL itu’s canonicalized elsewhere, so sinyal chain breaks bahkan though sebuah tag ada.
- Noindex kembalikan tautan — kembalikan target adalah noindexed, so ini dapat’t carry annotation.
- Non-200 Hreflang URLs — target adalah sebuah redirect atau sebuah halaman error.
- Unlinked Hreflang URLs dan Incorrect Language & Region Codes — orphaned nodes dan code-validation errors.
Export itu seluruh set melalui Reports > Hreflang. (Untuk itu penuh filter-oleh-filter walkthrough di itu summary level, itu Screaming Frog hreflang tutorial adalah excellent — I’m tidak going untuk re-jenis mereka config steps di sini.)
langkah 3 — Classify apa Anda temukan ke four error patterns
Anda crawl output akan menjadi noisy. Sort setiap finding ke satu dari four buckets — ini adalah patterns itu repeat di seluruh 374 756-domain study. (I’m pulling hanya dua figures itu anchor priority argument; penuh nine-jenis error table adalah sudah di SEO internasional Audit artikel — Tidak poin re-pasting ini.)
1. Missing kembalikan tags — pair-breaker
asymmetric cells dari Anda matrix. 15,3% dari hreflang-menggunakan domains memiliki ini. sebagai I put ini di study 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.” (terjemahan) “Seperti yang saya sebutkan, tag hreflang bekerja secara berpasangan. Jika kedua halaman tidak saling merujuk, keduanya tidak dapat membentuk hubungan dan bertukar dengan benar dalam hasil penelusuran.” ini adalah category itu invalidates seluruh pair’s sinyal per Google’s docs, yang adalah mengapa ini adalah pertama di priority order — bahkan though ini adalah tidak paling umum error.
2. Wrong language/region codes — diam-diam-forgiving satu
gunakan ISO 639-1 untuk language dan ISO 3166-1 alpha-2 untuk region. classic breakers:
jp alih-alih ja untuk Japanese, typo js untuk ja, three-letter codes like
gbr alih-alih gb, la (Laos) misused untuk “Latin America.” (terjemahan) “wilayah Amerika Latin.”
Satu lebih pembedaan worth membangun ke Anda audit: BCP 47 ( underlying
language-tag spec) permits sebuah banyak lebih luas set dari nilai daripada Google’s hreflang
implementation sebenarnya acts pada — script subtags dan lainnya BCP 47-legal constructs
itu Google’s own hreflang documentation tidak konfirmasi sebagai recognized nilai. sebuah
code dapat menjadi perfectly well-formed BCP 47 dan masih tidak menjadi sesuatu Google’s
hreflang guidance documents sebagai didukung. Validate terhadap Google’s terdokumentasi
language/region/x-default aturan secara khusus, tidak generic BCP 47 well-formedness
— sebuah syntactically valid tag dapat masih menjadi functionally invisible untuk Google.
tetapi di sini’s nuance itu cuts terhadap naive prioritization: Google silently corrects
beberapa dari ini dan tidak others. -nya documentation status itu jika Anda gunakan codes reserved
untuk sesuatu else, “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).” (terjemahan) “Google Penelusuran mengabaikan bagian anotasi tersebut (misalnya,
penggunaan EU, UN, atau UK dalam anotasi hreflang tidak berpengaruh pada Google
Penelusuran).” So UK adalah effectively dropped (Anda ingin GB), tetapi ini tidak nuke rest
dari annotation — whereas sebuah code itu’s sekadar wrong (jp untuk ja) melakukan break itu
pair. sebuah audit perlu untuk distinguish “technically wrong but Google handles it” (terjemahan) “technically wrong tetapi Google menangani ini” dari
“wrong and actually breaks the pair,” (terjemahan) “wrong dan sebenarnya breaks pair,” karena mereka jangan mendapatkan yang sama urgency.
3. Non-canonical URLs di hreflang — invisible satu
ini adalah pattern itu looks fine di sebuah tag export dan breaks anyway. sebuah key pembedaan I drew di Pubcon 2019: hreflang adalah tentang terindeks versi, tidak canonical. jika Anda hreflang poin untuk sebuah URL itu’s canonicalized away dari apa sebenarnya terindeks, sinyal chain breaks bahkan though tag itself adalah “valid.” (terjemahan) “valid.” ini hanya surfaces ketika Anda cross-reference crawl export terhadap pengindeksan status — sebagian besar hreflang tutorials skip ini karena mereka treat hreflang sebagai sebuah isolated tag periksa alih-alih bagian dari pengindeksan pipeline. (Lebih pada verifying ini di langkah 5.)
ada sebuah sama-language alignment periksa worth menambahkan di sini too. Ketika several near-duplicate URLs dapat plausibly sajikan sebagai canonical untuk sebuah locale, Google’s own canonicalization guidance favors sebuah sama-language (atau best-substitute) URL, dan memberikan beberapa preference untuk sebuah halaman itu’s bagian dari sebuah menyelesaikan reciprocal hreflang cluster di atas satu itu tidak. itu’s sebuah alasan untuk pertahankan hreflang targets pointed di sama-language canonical candidates alih-alih letting them drift onto sebuah berbeda-language duplicate. None dari ini adalah sesuatu sebuah crawler atau checker dapat prove outright, though — ini dapat tampilkan Anda configured sinyal (tag canonical, hreflang edges, cluster membership), tidak Google’s sebenarnya akhir selection. Treat crawl output sebagai diagnostic evidence, tidak konfirmasi.
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 URLs — templating bug
Google adalah jelas: “Alternate URLs must be fully-qualified, including the transport
method (http/https), so: https://example.com/foo, not //example.com/foo or
/foo.” (terjemahan) “URL alternatif harus berupa URL lengkap, termasuk metode
transportasinya (http/https), jadi gunakan https://example.com/foo, bukan
//example.com/foo atau /foo.” di scale ini adalah hampir tidak pernah sebuah satu kali typo — ini adalah sebuah templating bug itu hits
thousands dari URLs di setelah karena hreflang block adalah generated dari sebuah sebagian URL
pattern. itu’s mengapa crawler flag ini sebagai sebuah systemic issue: temukan satu, dan Anda’ve biasanya
ditemukan sebuah seluruh template’s worth.
langkah 4 — Prioritize: kembalikan tags pertama, codes berikutnya, x-default terakhir
single sebagian besar penting idea di ini seluruh artikel: error severity adalah tidak proportional untuk error frequency. Sort Anda findings oleh damage, tidak oleh bagaimana banyak rows alat dikembalikan.
| Tier | Error pattern | Mengapa di sini |
|---|---|---|
| 1 — perbaiki pertama | Missing kembalikan tags; inconsistent kembalikan-tautan codes | Breaks entire pair’s sinyal per Google’s docs. Highest damage. |
| 2 — perbaiki berikutnya | Wrong codes itu Google tidak silently perbaiki (jp→ja); non-canonical / rusak targets | Breaks individual relationships; beberapa adalah silently handled, beberapa tidak — triage accordingly. |
| 3 — batch | Mixed absolute/relative URLs, missing self-reference | nyata hygiene issues, biasanya template-wide, tetapi tidak selalu cluster-breaking. |
| 4 — terakhir | Missing x-default | sebagian besar umum, least damaging. |
Mengapa x-default goes terakhir despite menjadi di mana-mana: ini adalah single sebagian besar umum finding di setiap study — 56,3% di my 374 756-domain study, dan 47,95% di Dan Taylor’s independent 18 786-domain SALT.agency study (dua studies, very berbeda scales, sama headline: sebagian besar situs adalah missing ini). tetapi sebagai I wrote di study: “Setting an x-default adalah tidak wajib. Tetapi it adalah recommended jika Anda perlu a fallback halaman untuk users milik siapa language settings jangan match any dari Anda localized versions.” (terjemahan) “Setting sebuah x-default adalah tidak diperlukan. tetapi ini adalah recommended jika Anda perlu sebuah fallback halaman untuk pengguna milik siapa language settings jangan match apa pun dari Anda localized versi.” Google’s own team memperlakukan ini sebagai sebuah UX fallback, tidak sebuah pengindeksan-critical sinyal — pada Penelusuran Off Record, Illyes described x-default sebagai annotating sebuah fallback halaman untuk ketika ada Tidak matching language untuk sebuah pengguna, dan noted ini dapat bahkan menjadi lainnya language halaman alih-alih sebuah dedicated selector. Perbaiki ini, tetapi perbaiki ini setelah hal itu sebenarnya break clusters.
Self-reference sits di tier 3 untuk yang sama alasan: bahkan Illyes, siapa worked pada Google’s hreflang implementation, mengatakan pada record he tidak fully remember mengapa self-reference adalah diperlukan dan adalah fairly sure clusters akan berfungsi tanpa ini — he dibingkai ini mainly sebagai membuat clusters easier untuk siapkan karena Anda dapat copy/paste yang sama block di mana-mana. ini adalah implementation hygiene, tidak sebuah functional requirement.
untuk lebih luas impact × effort matrix itu spans semua six international audit areas (tidak hanya hreflang), gunakan Kerangka kerja lens di SEO internasional Audit alih-alih rebuilding ini di sini.
langkah 5 — Re-verify terhadap terindeks URL, tidak crawl
Anda crawl validates tags. ini tidak validate itu URL tag poin untuk adalah satu Google sebenarnya terindeks. Karena hreflang mengikuti terindeks versi (langkah 3, pattern 3), sebuah tag itu poin di sebuah URL itu’s telah canonicalized away — atau itu redirects, atau adalah noindexed downstream — masih breaks sinyal bahkan setelah Anda bulk perbaiki lulus reports “clean.” (terjemahan) “laporan tanpa masalah.”
So setelah memperbaiki ship, spot-periksa highest-nilai clusters dengan pemeriksaan URL di Search Console: konfirmasi URL Google reports sebagai terindeks adalah yang sama URL Anda hreflang references. ini adalah langkah itu catches canonical-chain drift, yang adalah invisible di sebuah plain hreflang-tag export. Anda tidak melakukan ini untuk setiap URL — Anda melakukan ini untuk Anda money halaman di setiap market, setelah crawl says Anda’re selesai.
sebuah satu-line note pada Bing
jangan expect Bing Webmaster alat untuk validate apa pun dari ini. Bing memperlakukan hreflang sebagai sebuah banyak weaker sinyal daripada Google melakukan dan dihapus -nya Geo Targeting fitur back di 2020 — ini leans pada konten-Language header alih-alih. sebuah hreflang-di-scale audit adalah fundamentally sebuah Google-facing exercise; periksa konten-Language untuk Bing secara terpisah (covered di SEO internasional Audit).
AI summary
sebuah condensed take pada Advanced versi:
- ini adalah sebuah graph masalah, tidak sebuah tag masalah. Anda periksa apakah setiap halaman di sebuah cluster poin back untuk setiap lainnya halaman — tidak apakah satu halaman memiliki sebuah tag. Per Google: “Jika halaman X links untuk halaman Y, halaman Y harus link back untuk halaman X,” (terjemahan) “jika halaman X tautan untuk halaman Y, halaman Y harus tautan back untuk halaman X,” atau annotations “mungkin menjadi ignored.” (terjemahan) “dapat menjadi ignored.” Satu missing kembalikan tautan dapat invalidate sebuah seluruh cluster.
- langkah 1 — pull semuanya. Hreflang lives di three places (HTML head, HTTP
Linkheaders, sitemap XML); sebuah crawler harus baca semua three. Configure ccTLD/subdomain siblings (Screaming Frog: Config > CDNs; Ahrefs: project cakupan) atau cross-domain tautan go unvalidated. GSC dapat’t melakukan ini — International Targeting report adalah dihapus Sept 22, 2022, dan bahkan sebelum itu ini hanya reported canonical member dari sebuah cluster. - langkah 2 — reciprocal-tag matrix. setiap URL × setiap URL di sebuah cluster; asymmetric cells = missing kembalikan tags. Baca sebuah focused cluster visually di returntag’s graph dan matrix, atau berfungsi situs-wide melalui Ahrefs situs Audit dan Screaming Frog.
- langkah 3 — four error patterns: missing kembalikan tags; wrong codes (Google silently memperbaiki
reserved ones like
UK→ignored, tidak others likejpuntukja); non-canonical targets (hreflang mengikuti terindeks URL); mixed absolute/relative URLs (sebuah template bug di scale). - langkah 4 — prioritize oleh damage, tidak frequency. kembalikan tags pertama (break seluruh pair), lalu codes/rusak targets, lalu x-default terakhir — sebagian besar umum (56,3% di my 374 756-domain study; 47,95% di SALT.agency’s) tetapi least harmful dan “tidak wajib.” (terjemahan) “tidak diperlukan.”
- langkah 5 — re-verify terhadap terindeks URL dengan pemeriksaan URL setelah perbaiki lulus; crawl validates tags, tidak pengindeksan-status drift.
- Scale context: di atas 67% dari hreflang-menggunakan domains memiliki setidaknya satu error (my Brighton SEO 2023 study dari 374 756 domains). Bing adalah sebuah satu-line caveat — periksa konten-Language, tidak hreflang.
Dokumentasi resmi
Utama-sumber references untuk sebuah hreflang audit.
- Tell Google tentang localized versi dari Anda halaman — hreflang reference: reciprocal kembalikan-tag requirement, fully-qualified-URL aturan, reserved-code menangani, dan three equivalent implementation metode (HTML tautan tags, HTTP
Linkheaders, sitemap XML). - International Targeting report adalah deprecated — Search Console Help — dihapus report itu digunakan untuk flag beberapa hreflang issues (dihapus setelah September 22, 2022).
- Managing Multi-Regional dan Multilingual situs — URL-structure context untuk mengapa multi-property setups generate paling hreflang errors.
- cara specify sebuah canonical URL dengan rel=canonical dan lainnya metode — yang sama-language canonical-preference guidance behind langkah 3’s non-canonical hreflang periksa.
Bing / Microsoft
- Bing Webmaster alat help — Bing memiliki Tidak hreflang validation workflow; ini weights konten-Language header alih-alih dan dihapus Geo Targeting di 2020.
Quotes dari sumber
pada—record statements itu anchor audit methodology.
Google — reciprocal requirement ( backbone dari seluruh 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.” (terjemahan) “Bila halaman X menaut ke halaman Y, halaman Y wajib memberikan tautan balik ke halaman X. Jika semua halaman beranotasihreflangtidak memenuhi aturan ini, anotasinya mungkin diabaikan atau dibaca secara tidak tepat.” — Google Search Central docs. Jump untuk quote
Google — fully-qualified URLs (root penyebab dari 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.” (terjemahan) “URL alternatif harus berupa URL lengkap, termasuk metode transportasinya (http/https), jadi gunakanhttps://example.com/foo, bukan//example.com/fooatau/foo.” — Google Search Central docs. Jump untuk quote
Google — reserved codes adalah silently dropped, tidak halaman-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).” (terjemahan) “Jika Anda memakai kode yang dicadangkan untuk tujuan lain, Google Penelusuran mengabaikan bagian anotasi itu (misalnya, penggunaanEU,UN, atauUKdalam anotasihreflangtidak berpengaruh pada Google Penelusuran).” — Google Search Central docs. Jump untuk quote
Patrick Stox — mengapa pairs adalah muat-bearing (dari 374 756-domain study)
-
“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.” (terjemahan) “Tag hreflang berfungsi sebagai pasangan: tanpa rujukan timbal balik, kedua halaman tidak dapat membentuk hubungan dan bertukar sebagaimana mestinya di hasil penelusuran.” — di atas 67% dari Domains menggunakan Hreflang memiliki Issues, 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.” (terjemahan) “Setting sebuah x-default adalah tidak diperlukan. tetapi ini adalah recommended jika Anda perlu sebuah fallback halaman untuk pengguna milik siapa language settings jangan match apa pun dari Anda localized versi.” — di atas 67% dari Domains menggunakan Hreflang memiliki Issues, Ahrefs
Gary Illyes, Google — mengapa GSC dapat’t audit hreflang, dan mengapa ada Tidak validator
- pada Penelusuran Off Record, Illyes dijelaskan itu Search Console hanya reports canonicals, so untuk banyak hreflang clusters di mana alternates tidak canonical Anda’re effectively blind untuk non-canonical members — Google puts them di duplicate cluster tanpa storing alternate detail. He juga mengatakan Google memiliki tidak pernah disediakan sebuah hreflang validator (mereka memiliki underused reporting dan dihapus ini) dan now poin orang untuk external alat. Paraphrased dari transcript — verify wording terhadap episode halaman sebelum quoting verbatim.
Yang finding melakukan I perbaiki pertama?
Anda’ve jalankan crawl dan Anda’re staring di sebuah wall dari red. Walk setiap finding melalui ini:
-
adalah kembalikan tautan missing atau code-inconsistent (asymmetric cell)? → Ya → Tier 1. Perbaiki sekarang. Ini merusak seluruh pasangan menurut dokumentasi Google. Semua temuan lain menunggu di belakangnya. → Tidak → lanjutkan.
-
melakukan hreflang poin untuk sebuah non-200, redirected, noindexed, atau non-canonical URL? → Ya → Tier 2. Perbaiki berikutnya. target dapat’t carry annotation. untuk non-canonical secara khusus, konfirmasi terhadap terindeks URL (pemeriksaan URL), tidak hanya canonical tag. → Tidak → continue.
-
adalah language/region code wrong? → adalah ini sebuah reserved code Google silently ignores (
UK,EU,UN)? → Ya → rendah urgency. Google drops hanya itu bagian; perbaiki untuk correctness, tidak sebagai sebuah emergency. → adalah ini sebuah genuinely wrong code itu breaks match (jpuntukja,jstypo, three-lettergbr)? → Ya → Tier 2. Perbaiki berikutnya. ini breaks hubungan. -
adalah ini sebuah mixed absolute/relative URL (
//example.com/…atau/…)? → Ya → Tier 3, tetapi periksa template. Hampir selalu sebuah situs-wide templating bug — satu instance berarti thousands. Perbaiki di template, batch rest. -
adalah ini sebuah missing self-reference atau missing x-default? → Ya → Tier 4. Terakhir. nyata hygiene, tidak cluster-breaking. x-default adalah “recommended, not required” (terjemahan) “recommended, tidak diperlukan”; self-reference adalah copy/paste convenience. melakukan ini di sebuah akhir sweep.
** aturan underneath tree:** sort oleh damage, tidak oleh bagaimana banyak rows alat dikembalikan. paling umum error (x-default) adalah least damaging.
SOP: recurring hreflang audit
Hreflang breaks silently setiap time developers ship sebuah template perubahan, so jalankan ini pada sebuah schedule (monthly untuk active international situs, atau setelah apa pun rilis itu touches localized templates).
Prep
- Konfirmasi crawler cakupan covers setiap property di hreflang network — semua ccTLDs, subdomains, subfolders. di Screaming Frog, tambahkan siblings di bawah Config > CDNs; di Ahrefs situs Audit, konfirmasi mereka’re di project cakupan.
- Konfirmasi crawler membaca semua three annotation locations (HTML head, HTTP
Linkheaders, sitemap XML). Verify oleh memeriksa sebuah halaman Anda know menggunakan sitemap-based hreflang.
crawl 3. Enable hreflang extraction (Screaming Frog: Configuration > Spider > crawl Hreflang). Jalankan crawl. 4. Jalankan post-crawl analysis (Screaming Frog: crawl Analysis) so kembalikan-tautan filters populate. di Ahrefs, let situs Audit finish dan open hreflang issue set.
Triage (di ini order) 5. Tier 1 — Missing kembalikan tautan + Inconsistent kembalikan-tautan Codes. Export ini pertama. Open worst-hit clusters di returntag’s graph/matrix untuk jelaskan rusak edges; retain crawler export sebagai situs-wide sumber dari coverage. 6. Tier 2 — Non-canonical / rusak / noindexed targets, dan genuinely wrong codes. 7. Tier 3 — Mixed absolute/relative URLs (perbaiki di template), missing self-reference. 8. Tier 4 — Missing x-default. Terakhir.
Segment 9. Group setiap finding oleh property/domain, tidak hanya oleh error jenis — errors cluster di mana URL patterns vary di seluruh properties. ini tells Anda yang team’s template untuk perbaiki.
Verify 10. setelah memperbaiki ship, re-crawl. lalu spot-periksa money halaman per market dengan pemeriksaan URL untuk konfirmasi hreflang poin untuk terindeks URL, tidak sebuah canonicalized-away satu. 11. Record error counts oleh tier setiap cycle so Anda dapat see drift di atas time.
Hreflang audit myths dan mistakes
Concrete misconceptions itu lead orang untuk audit wrong hal — setiap dengan mengapa ini adalah wrong dan apa untuk melakukan alih-alih.
1. “Broken hreflang gets my site penalized, so any error is urgent.” (terjemahan) “Rusak hreflang mendapatkan my situs penalized, so apa pun error adalah urgent.”
- Mengapa wrong: Google ignores rusak atau asymmetric hreflang; ini tidak penalize untuk ini. Gary Illyes memiliki mengatakan secara langsung itu sebuah incorrect hreflang implementation tidak akan hurt sebuah situs — Google sekadar ignores ini (reported oleh mesin pencari Roundtable dan corroborated oleh mesin pencari Journal). cost adalah lost opportunity (wrong-language halaman surfacing, market cannibalization), tidak sebuah peringkat penalty.
- melakukan alih-alih: Triage oleh lost opportunity per cluster (traffic, revenue), tidak oleh fear dari sebuah penalty itu tidak exist.
2. “Missing x-default is the most common error, so fix it first.” (terjemahan) “Missing x-default adalah paling umum error, so perbaiki ini pertama.”
- Mengapa wrong: Frequency dan severity adalah berbeda axes. x-default adalah single sebagian besar umum finding (56,3% di my study; 47,95% di SALT.agency’s) tetapi ini adalah “recommended, not required” (terjemahan) “recommended, tidak diperlukan” dan functions sebagai sebuah UX fallback, tidak sebuah cluster-critical sinyal.
- melakukan alih-alih: Put x-default terakhir. Perbaiki missing kembalikan tags pertama — mereka break entire pairs.
3. “Self-referencing tags are mandatory, flag every missing one as critical.” (terjemahan) “Self-referencing tags adalah mandatory, flag setiap missing satu sebagai critical.”
- Mengapa wrong: bahkan Illyes, siapa worked pada Google’s hreflang implementation, mengatakan pada record he tidak sure mengapa self-reference adalah diperlukan dan believes clusters akan berfungsi tanpa ini — ini adalah mainly copy/paste convenience.
- melakukan alih-alih: Perbaiki self-reference di akhir hygiene sweep (tier 3–4), tidak ahead dari kembalikan-tag dan code errors.
4. “The html lang attribute is a language signal Google checks, so audit it alongside
hreflang.” (terjemahan) “Atribut html lang adalah sinyal bahasa yang diperiksa Google, jadi audit atribut itu bersama
hreflang.”
- Mengapa wrong: ditanyakan secara langsung pada Penelusuran Off Record apakah Google cares tentang HTML
langattribute, Illyes mengatakan Tidak — ini adalah sering baked ke CMS templates oleh default dan karena itu untrustworthy, so Google detects language dari terlihat konten alih-alih. - melakukan alih-alih: pertahankan
html langcorrect untuk accessibility dan lainnya mesin, tetapi jangan let sebuah hreflang-vs-langmismatch outrank sebuah sebenarnya kembalikan-tag error di Anda triage.
5. “GSC’s report is gone, so without a paid crawler I can’t audit hreflang at all.” (terjemahan) “GSC’s report adalah hilang, so tanpa sebuah paid crawler I dapat’t audit hreflang di semua.”
- Mengapa wrong: sebuah manual view-sumber spot-periksa plus free/freemium validators (Aleyda Solis’ alat, Bill Hunt’s checker, Merkle’s alat — semua named oleh Illyes sebagai alat he’s ditemukan reliable, though Google’s own documentation adalah jelas ini tidak maintain atau periksa ketiga-party hreflang alat) berfungsi fine untuk kecil situs. ini adalah scale itu memerlukan sebuah crawler, tidak absence dari GSC.
- melakukan alih-alih: Match alat untuk size. Spot-periksa kecil situs manually; reserve crawler untuk situs di mana hand-memeriksa clusters adalah genuinely impossible.
6. “My hreflang export is clean, so hreflang is fine.” (terjemahan) “My hreflang export adalah bersih, so hreflang adalah fine.”
- Mengapa wrong: sebuah bersih tag export tidak berarti targets adalah terindeks. Hreflang mengikuti terindeks URL, tidak canonical — sebuah tag pointing di sebuah canonicalized-away atau noindexed URL masih breaks bahkan though tag “looks” (terjemahan) “looks” valid.
- melakukan alih-alih: Cross-reference terhadap pengindeksan status (pemeriksaan URL) untuk Anda top clusters setelah tag-tingkat lulus.
sebelum / setelah: reading four patterns
Concrete, minimal contoh dari setiap error pattern dan -nya perbaiki. (Illustrative markup.)
1. Missing kembalikan tag ( pair-breaker)
sebelum — US halaman poin untuk UK halaman, tetapi UK halaman tidak pernah poin back:
<!-- 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/" />setelah — UK halaman names US halaman di kembalikan, so pair adalah 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. Wrong language/region code
sebelum — jp adalah sebuah country code, tidak language code untuk Japanese; en-UK tidak valid:
<link rel="alternate" hreflang="jp" href="https://example.com/jp/" />
<link rel="alternate" hreflang="en-UK" href="https://example.com/uk/" />setelah — ISO 639-1 language (ja) dan ISO 3166-1 alpha-2 region (GB, tidak 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 URLs (sebuah template bug di scale)
sebelum — protocol-relative dan root-relative URLs; Google memerlukan fully-qualified:
<link rel="alternate" hreflang="fr-FR" href="//example.com/fr/" />
<link rel="alternate" hreflang="de-DE" href="/de/" />setelah — fully-qualified, including transport metode:
<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 target (looks valid, masih breaks)
sebelum — hreflang poin di sebuah URL itu’s canonicalized away dari terindeks versi:
<!-- 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"> -->setelah — hreflang poin di canonical/terindeks URL, so sinyal chain holds:
<link rel="alternate" hreflang="es-ES" href="https://example.com/es/producto" />catch dengan #4: Anda dapat’t see ini dari tag alone. Konfirmasi terindeks URL dengan URL Inspection sebelum Anda trust itu ini satu’s fixed.
Pulling dan memeriksa hreflang yourself
untuk spot-memeriksa, ad-hoc extraction, dan validating sebuah perbaiki sebelum berikutnya penuh crawl. crawler adalah masih Anda sumber kebenaran di scale — ini adalah untuk di-antara.
Chrome DevTools Console — dump setiap hreflang pada saat ini halaman
Paste ke Console pada apa pun halaman untuk list -nya annotations dan flag protocol-relative atau root-relative URLs:
[...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).';jika ini prints “No HTML hreflang tags,” (terjemahan) “Tidak HTML hreflang tags,” halaman dapat deliver hreflang melalui header HTTP atau sitemap — Console hanya sees DOM, so periksa itu secara terpisah.
Bookmarklet — satu-click reciprocity spot-periksa di seluruh sebuah cluster
Fetches setiap alternate saat ini halaman names dan reports yang ones fail untuk tautan back (sama-origin hanya, karena browser CORS — cross-ccTLD pairs perlu 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 dari sebuah saved sitemap atau HTML dump
Pull setiap annotation out dari sebuah downloaded sitemap XML atau 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 — bangun reciprocity matrix dari sebuah Screaming Frog export
Turn sebuah Screaming Frog hreflang_all.csv-style export (columns: sumber URL, hreflang nilai,
target URL) ke sebuah set dari satu-cara (missing-kembalikan) 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 column names untuk match Anda export. output adalah persis asymmetric cells dari reciprocal-tag matrix — tier-1 memperbaiki.
alat untuk sebuah scaled hreflang audit
- returntag (utama untuk graph/matrix spot-memeriksa). My free alat turns sebuah halaman atau sitemap cluster ke sebuah graph dan reciprocal matrix, lalu names missing kembalikan relationships dan mereka memperbaiki. halaman URL mode memeriksa sebuah halaman cluster; Sitemap mode validates hanya apa sitemap declares. gunakan ini untuk investigate dan communicate sebuah spesifik cluster, tidak sebagai sebuah substitute untuk sebuah seluruh-situs crawl.
- Ahrefs situs Audit (di scale). Extracts hreflang dari HTML, headers, dan sitemaps, berjalan reciprocal memeriksa, dan renders setiap cluster sebagai sebuah network graph — URL detail > Hreflangs tab, rusak edges di red. fastest cara untuk see yang hubungan di sebuah cluster adalah rusak, dan easiest untuk tampilkan sebuah stakeholder. gunakan halaman Explorer untuk filter halaman oleh hreflang issue jenis sebelum drilling ke individual graphs.
- Screaming Frog SEO Spider. Enable Configuration > Spider > crawl Hreflang; tambahkan sibling ccTLDs di bawah Config > CDNs untuk cross-domain validation; jalankan crawl Analysis untuk populate kembalikan-tautan filters (Missing kembalikan tautan, Inconsistent Language & Region kembalikan tautan, Non-Canonical kembalikan tautan, Noindex kembalikan tautan, Non-200 Hreflang URLs, Unlinked Hreflang URLs). Export melalui Reports > Hreflang. mereka hreflang tutorial adalah definitive config reference.
- Google Search Console — pemeriksaan URL. Tidak untuk bulk auditing ( International Targeting report adalah hilang, dan GSC hanya ever reported canonical member dari sebuah cluster), tetapi essential untuk langkah 5: confirming Anda hreflang poin di terindeks URL setelah perbaiki lulus.
- Free/freemium validators untuk kecil situs dan spot-memeriksa — Aleyda Solis’ hreflang tag generator/tester, Bill Hunt’s hreflang checker, dan Merkle’s hreflang alat (named oleh Google’s Gary Illyes sebagai alat he knows berfungsi well — though Google’s own documentation adalah jelas itu ini tidak maintain atau periksa ketiga-party hreflang alat). gunakan ini ketika hand-memeriksa adalah masih feasible; reserve crawler untuk benar scale, dan treat apa pun alat’s verdict sebagai diagnostic, tidak official.
- Bing Webmaster alat — Tidak hreflang validation; audit konten-Language secara terpisah untuk Bing markets.
Resources worth Anda time
My related writing
- di atas 67% dari Domains menggunakan Hreflang memiliki Issues (Study dari 374 756 Domains) — my Brighton SEO 2023 study, largest hreflang study untuk date dan spine dari ini seluruh methodology; error distribution dan kembalikan-tag/x-default figures come dari di sini.
- Hreflang: Easy Guide untuk Beginners — Ahrefs implementation guide, untuk fundamentals ini artikel assumes Anda sudah know.
- Beginner’s Guide untuk SEO teknis — di mana international sinyal sit di wider teknis picture.
My speaking
- Hreflang Study dan Interesting Issues — Brighton SEO 2023 (Speaker Deck) — slides behind study.
- paling umum hreflang issues di seluruh 374 756 domains — Brighton SEO, Sept 2023 (YouTube) — talk itself.
- SEO internasional: Weird Teknis bagian — Pubcon Vegas 2019 (SlideShare) — di mana I membuat “hreflang follows itu indexed version, tidak itu canonical” (terjemahan) “hreflang mengikuti terindeks versi, tidak canonical” poin itu drives langkah 3 dan langkah 5.
dari sekitar industry
- Tell Google tentang localized versi dari Anda halaman — Google’s canonical hreflang reference (reciprocity, fully-qualified URLs, reserved codes).
- Penelusuran Off Record — “Bagaimana serving berfungsi, hreflang, dan lebih!” (terjemahan) “Bagaimana serving berfungsi, hreflang, dan lebih!” — Google’s Penelusuran Relations team (Illyes, Splitt, Sassman) pada mengapa GSC hanya reports canonicals, mengapa ada Tidak validator, dan mengapa big multi-property situs generate paling errors.
- cara Audit & Test Hreflang (Screaming Frog) — definitive filter-oleh-filter config walkthrough.
- Study: 31% dari international situs web berisi hreflang errors (mesin pencari Land) — Dan Taylor / SALT.agency’s independent 18 786-domain study, sebuah berguna cross-periksa pada my lebih besar satu.
- Google Says mereka akan Ignore Incorrect hreflang Implementation (mesin pencari Roundtable) — “ignored, tidak penalized” (terjemahan) “ignored, tidak penalized” poin itu reorders Anda triage away dari panic.
- Google Insights: dapat Incorrect Hreflang Tags Hurt SEO? (mesin pencari Journal) — corroborates yang sama finding.
Uji pemahaman Anda: Auditing hreflang di scale
Five quick pertanyaan pada di-scale methodology. Pick sebuah jawaban untuk setiap, lalu periksa.
Log perubahan
Diperbarui 10 Agu 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 25 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 18 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.