hreflang tag: हमारा 12 भाषाओं का सेटअप और 5 आम ग़लतियाँ
संक्षिप्त उत्तर: hreflang tag पेज के HTML में लिखी वह जानकारी है जो Google को बताती है कि कौन-से पेज एक ही सामग्री के भाषा या क्षेत्र वाले संस्करण हैं, ताकि Search हर व्यक्ति को सही संस्करण दिखा सके। हर संस्करण को अपना और बाक़ी सबका नाम देना होता है, और हर जोड़ी का एक-दूसरे की ओर इशारा करना ज़रूरी है, वरना ये tag अनदेखे हो सकते हैं। नीचे बताया है कि seogrinder.com बारह भाषाओं के लिए hreflang tag कैसे लगाता है, और उसके बाद Google के दस्तावेज़ से hreflang की पाँच ग़लतियाँ।
hreflang tag क्या करता है, और आपको इसकी ज़रूरत कब है?
Google अपने पेज Tell Google about localized versions of your page पर विचार समझाता है: अगर किसी पेज के अलग-अलग भाषाओं या क्षेत्रों के कई संस्करण हैं और आप Google को उनके बारे में बताते हैं, तो इससे Google Search को उपयोगकर्ताओं को भाषा या क्षेत्र के हिसाब से सबसे उपयुक्त संस्करण तक पहुँचाने में मदद मिलती है। Google के शब्द हैं: “help Google Search point users to the most appropriate version of your page by language or region”।
Google तीन स्थितियाँ गिनाता है जिनमें यह जानकारी देने की सलाह दी जाती है:
- मुख्य सामग्री एक ही भाषा में रहती है और सिर्फ़ ढाँचा, यानी नेविगेशन और फ़ुटर, अनुवादित है।
- एक ही भाषा में मिलती-जुलती सामग्री के छोटे क्षेत्रीय भेद हैं, जैसे अमेरिका, ब्रिटेन और आयरलैंड के लिए अंग्रेज़ी।
- सामग्री पूरी तरह अनुवादित है, जैसे हर पेज का जर्मन और अंग्रेज़ी संस्करण।
Google संस्करण अपने आप भी खोज सकता है, पर कहता है कि उन्हें साफ़ बताना आम तौर पर सबसे अच्छा है। अनुवादित पेज duplicate नहीं होता: Google के अनुसार स्थानीय संस्करण “are only considered duplicates if the main content of the page remains untranslated”, यानी तभी duplicate गिने जाते हैं जब पेज की मुख्य सामग्री अनुवादित न हुई हो (Google)।
दो चीज़ें जो hreflang नहीं है। पहली, यह वह तरीक़ा नहीं है जिससे Google पेज की भाषा पहचानता है। Google लिखता है कि वह पेज की भाषा जानने के लिए hreflang या HTML के lang attribute का इस्तेमाल नहीं करता (“doesn't use hreflang or the HTML lang attribute to detect the language of a page”, Google), और बहुभाषी साइटों वाला पेज जोड़ता है कि इसके लिए वह दिखने वाली सामग्री देखता है। दूसरी, यह रैंकिंग का वादा नहीं है: Google सिर्फ़ एक मक़सद बताता है, हर खोजने वाले को उसके मुताबिक़ संस्करण दिखाना।
seogrinder.com बारह भाषाएँ कैसे जोड़ता है
यह हिस्सा seogrinder.com के ब्लॉग का वह हाल बताता है जो हमने 5 नवंबर 2026 को पाया। होम पेज / पर कोई hreflang tag नहीं है। हर लेख एक भाषा में अपना अलग पेज है। tag ख़ुद पढ़कर देखिए:
curl -sS https://seogrinder.com/hi/blog/seo-audit-checklist-hindi | grep '<link rel="alternate" hreflang'
इससे 13 पंक्तियाँ निकलती हैं, और इस लेख के सभी बारह संस्करणों पर यही पंक्तियाँ हैं:
<link rel="alternate" hreflang="en" href="https://seogrinder.com/en/blog/seo-audit-checklist">
<link rel="alternate" hreflang="ar" href="https://seogrinder.com/ar/blog/qaimat-tadqiq-seo">
<link rel="alternate" hreflang="de" href="https://seogrinder.com/de/blog/seo-audit-checkliste">
<link rel="alternate" hreflang="es" href="https://seogrinder.com/es/blog/checklist-seo-auditoria">
<link rel="alternate" hreflang="fr" href="https://seogrinder.com/fr/blog/checklist-audit-seo-gratuite">
<link rel="alternate" hreflang="hi" href="https://seogrinder.com/hi/blog/seo-audit-checklist-hindi">
<link rel="alternate" hreflang="it" href="https://seogrinder.com/it/blog/checklist-audit-seo">
<link rel="alternate" hreflang="ja" href="https://seogrinder.com/ja/blog/seo-chekkurisuto">
<link rel="alternate" hreflang="ko" href="https://seogrinder.com/ko/blog/seo-chekeuliseuteu-jeomgeom">
<link rel="alternate" hreflang="nl" href="https://seogrinder.com/nl/blog/seo-audit-checklist-uitvoeren">
<link rel="alternate" hreflang="pl" href="https://seogrinder.com/pl/blog/checklista-seo-audyt">
<link rel="alternate" hreflang="pt" href="https://seogrinder.com/pt/blog/checklist-de-auditoria-seo">
<link rel="alternate" hreflang="x-default" href="https://seogrinder.com/en/blog/seo-audit-checklist">
इस ब्लॉक से ये बातें दिखती हैं:
- सिर्फ़ एक तरीक़ा। tag HTML के head में हैं। ये पेज HTTP हेडर में hreflang नहीं भेजते, और
sitemap.xmlमेंxhtml:linkकी कोई प्रविष्टि नहीं है। Google तीनों तरीक़ों को बराबर मानता है और सबको एक साथ इस्तेमाल करने में कोई फ़ायदा नहीं देखता। - सीधे भाषा कोड। बारह कोड हैं, कोई क्षेत्र नहीं, क्योंकि हर भाषा में लेख का ठीक एक संस्करण है।
- हर पेज ख़ुद का नाम लेता है। हिंदी संस्करण पर
hiवाली पंक्ति पेज का अपना पता है। बारहों संस्करणों पर पंक्तियाँ एक जैसी हैं। - सादे tag। वे
<head>में हैं, हर एक<link>अलग, बिना किसी अतिरिक्त attribute के। Google साफ़-सुथरा head माँगता है और चेताता है कि hreflang कोmediaजैसे attribute के साथ एक ही tag में न मिलाएँ। - Canonical अपने ही पते पर। हर संस्करण अपना पता canonical के रूप में बताता है, अंग्रेज़ी वाला नहीं। यह Google के उस कथन से मेल खाता है कि अनुवादित संस्करण duplicate नहीं हैं।
- हर भाषा का अलग पता, कोई अपने आप होने वाला रीडायरेक्ट नहीं।
/de/blog/seo-audit-checklisteका slug जर्मन है। Google कुकी या ब्राउज़र सेटिंग के बजाय हर भाषा के लिए अलग URL की सलाह देता है और आगंतुकों को अनुमानित भाषा के आधार पर रीडायरेक्ट करने से मना करता है। अंग्रेज़ी पेज परAccept-Language: deवाला अनुरोध 200 लौटाता है और वहीं रहता है (5 नवंबर 2026 को जाँचा गया)। हर लेख में एक भाषा मेनू भी है जिसमें बाक़ी संस्करणों के सादे लिंक हैं।
यह कैसे बना है। हर लेख की फ़ाइल अपना विषय group नाम की एक पंक्ति में लिखती है। ब्लॉग का कोड एक ही group वाली सारी फ़ाइलें इकट्ठा करता है, हर सदस्य के लिए एक <link> छापता है (पहले अंग्रेज़ी, फिर भाषा कोड के क्रम में) और x-default को अंग्रेज़ी संस्करण पर रखता है। जिस भाषा की फ़ाइल नहीं है, उसकी पंक्ति नहीं बनती, इसलिए जो विषय सिर्फ़ अंग्रेज़ी और जर्मन में है, उस पर तीन पंक्तियाँ होती हैं: en, de और x-default। Google अधूरे सेट की इजाज़त देता है: “you can omit some languages on some pages; Google will still process the ones that point to each other”, यानी कुछ पेजों पर कुछ भाषाएँ छोड़ी जा सकती हैं, और जो एक-दूसरे की ओर इशारा करती हैं उन्हें Google फिर भी प्रोसेस करेगा (Google)।
हमने कैसे गिना। यह लूप साइटमैप से लेखों के सारे पते पढ़ता है और हर पेज पर hreflang की पंक्तियाँ गिनता है:
for u in $(curl -sS https://seogrinder.com/sitemap.xml | grep -o 'https://seogrinder.com/[a-z][a-z]/blog/[^<]*'); do
curl -sS "$u" | grep -c '<link rel="alternate" hreflang'
done | sort | uniq -c
5 नवंबर 2026 को इससे 408 13 निकला: 13 पंक्तियों वाले 408 पेज (बारह भाषाएँ और x-default)। इसके बाद एक छोटी स्क्रिप्ट ने वही 408 पेज लाकर tag की तुलना की: हर पेज अपना नाम लेता है, हर बताया गया पता 200 देता है और पेज को वापस नाम से बताता है, और x-default अंग्रेज़ी पता है। हमारी ब्लॉग जाँच (check:blog) ब्लॉग में हर बदलाव पर हर लेख-पेज के लिए ये नियम परखती है।
x-default किसलिए है?
Google x-default को इस काम के लिए “recommended” बताता है: “recommended for specifying the fallback page for users whose language settings don't match any of your site's localized versions” (Google)। यानी जिन उपयोगकर्ताओं की भाषा सेटिंग आपकी साइट के किसी भी स्थानीय संस्करण से मेल नहीं खाती, उनके लिए फ़ॉलबैक पेज बताने को यह सुझाया गया है। यह अनिवार्य नहीं है।
Google जोड़ता है कि कोई भी पेज यह मान रख सकता है, पर इसे भाषा चुनने वाले पेजों के लिए बनाया गया था (“designed for language selector pages and so it will work best with those”), इसलिए वहीं सबसे अच्छा चलेगा। लेखों के लिए हमारे पास भाषा चुनने वाला पेज नहीं है, इसलिए हमारा फ़ॉलबैक उसी लेख का अंग्रेज़ी संस्करण है; ब्लॉग के सूची-पेजों के लिए यह /en/blog है। यह हमारा फ़ैसला है, कोई नियम नहीं।
आम ग़लतियाँ: Google के दस्तावेज़ से 5 hreflang tag ग़लतियाँ
Google के पेज में “Common Mistakes” नाम का हिस्सा है जिसमें तीन प्रविष्टियाँ हैं, और उसके दिशानिर्देश “must” के साथ दो और ज़रूरतें बताते हैं। नीचे यही पाँच हैं। Google यह नहीं बताता कि हर ग़लती कितनी बार होती है। सिर्फ़ दो के साथ नतीजा बताया गया है: वापसी लिंक का न होना (tag अनदेखे) और आरक्षित क्षेत्र कोड (वह हिस्सा अनदेखा)। बाक़ी के लिए पेज सिर्फ़ नियम बताता है।
1. वापसी लिंक का न होना
अगर पेज X पेज Y का नाम लेता है, तो पेज Y को भी पेज X का नाम लेना होगा। Google का नियम उसी के शब्दों में: “If two pages don't both point to each other, the tags will be ignored” (Google)। वजह भी Google साथ में देता है: किसी दूसरी साइट को यह कहने की छूट नहीं होनी चाहिए कि वह आपके पेज का वैकल्पिक संस्करण है। इसे ठीक करने का तरीक़ा है कि हर संस्करण पर लिंकों का वही ब्लॉक एक ही स्रोत से छापा जाए। अगर पूरा सेट सँभालना मुश्किल हो, तो Google कुछ पेजों पर कुछ भाषाएँ छोड़ने देता है, पर कहता है कि नई जोड़ी गई भाषाएँ मूल या प्रमुख भाषा के साथ दोनों दिशाओं में जुड़ी होनी चाहिए।
2. ऐसा संस्करण जो ख़ुद का नाम नहीं लेता
सभी तरीक़ों के लिए दिशानिर्देश: “Each language version must list itself as well as all other language versions” (Google)। HTML तरीक़े में इसका मतलब है हर संस्करण के लिए एक लिंक, “including itself”, और हर संस्करण पर वही सेट। ख़ुद का नाम न लेने पर क्या होता है, यह Google नहीं बताता, इसलिए इसे ग़लती मानिए और वह पंक्ति जोड़ दीजिए।
3. भाषा कोड जो वैध नहीं हैं
मान का पहला हिस्सा ISO 639-1 रूप की भाषा है, उसके बाद चाहें तो क्षेत्र। Google लिखता है: “Specifying the region alone is not valid”, यानी अकेला क्षेत्र वैध नहीं है। बेल्जियम के उदाहरण में be ग़लत है, क्योंकि वह बेलारूसी भाषा का कोड है; सही कोड de-BE, nl-BE और fr-BE हैं। जो कोड इन मानकों में नहीं हैं, जैसे es-419, समर्थित नहीं हैं (लिपि वाले कोड जैसे zh-Hans की अनुमति है)। अक्षरों का छोटा-बड़ा होना मायने नहीं रखता, पर मानक के अनुसार क्षेत्र बड़े अक्षरों में लिखा जाता है।
4. क्षेत्र कोड जो वैध नहीं हैं
क्षेत्र ISO 3166-1 Alpha 2 का आधिकारिक रूप से दिया गया कोड होना चाहिए। जो कोड किसी और चीज़ के लिए आरक्षित हैं, उनके बारे में: “Google Search ignores that part of the annotation”। Google EU, UN और UK को बेअसर बताता है। यूनाइटेड किंगडम का कोड GB है, जैसा Google के अपने उदाहरण en-GB में है।
5. सापेक्ष या अधूरे पते
“Alternate URLs must be fully-qualified, including the transport method (http/https)” (Google)। Google का उदाहरण: https://example.com/foo, न कि //example.com/foo या /foo।
hreflang tag की जाँच कैसे करें
हाथ से: ऊपर वाला curl कमांड अपने किसी पेज पर चलाइए और देखिए कि पेज ख़ुद का नाम लेता है या नहीं। फिर आउटपुट के हर पते पर वही कमांड चलाइए और पहला पेज ढूँढिए; यही वापसी लिंक की जाँच है। Google तीसरे पक्ष के डीबग टूल भी गिनाता है और कहता है कि वे “are not maintained or checked by Google”, यानी Google उन्हें न सँभालता है, न जाँचता है।
SEOgrinder से, जो हमारा अपना टूल है और जिसे हम बनाते हैं: कोई पेज स्कैन कीजिए, “Google पर पेज” खोलिए और “भाषाएँ (hreflang)” कार्ड ढूँढिए। वह कोड, ख़ुद का उल्लेख, x-default, यह कि गंतव्य जवाब देते हैं या नहीं, और यह कि वे वापस जोड़ते हैं या नहीं, जाँचता है। सब ठीक हो तो वहाँ एक पंक्ति दिखती है; वरना कार्ड हर जाँच को उसके नतीजे के साथ गिनाता है, और समस्याएँ कार्य-सूची में चली जाती हैं।
| ग़लती | SEOgrinder क्या दिखाता है (उदाहरण के शब्द) |
|---|---|
| 1. वापसी लिंक का न होना | “2 गंतव्य वापस नहीं जोड़ते” |
| 2. ख़ुद का उल्लेख नहीं | “पेज स्वयं का उल्लेख नहीं करता” |
| 3 और 4. अवैध कोड | “1 अवैध भाषा कोड” (भाषा और क्षेत्र को उन मानकों से जाँचा जाता है जिनका नाम Google लेता है) |
| 5. सापेक्ष पते | इसकी अपनी कोई पंक्ति नहीं: SEOgrinder जाँच से पहले सापेक्ष पते को पेज के सहारे पूरा कर लेता है, इसलिए यह ग़लती सोर्स में ढूँढिए |
दो सीमाएँ। वह हर पेज के लिए ज़्यादा से ज़्यादा दस गंतव्य लाता है; हमारे 13 प्रविष्टियों वाले पेजों पर वह दस जाँचता है और यह बताता भी है (“13 में से 10 प्रविष्टियाँ लाकर जाँची गईं”)। और वह उसी पेज को परखता है जो आप डालते हैं; पूरी वेबसाइट के लिए पतों पर ऊपर की तरह लूप चलाइए।
अक्सर पूछे जाने वाले सवाल
अगर हर भाषा का अपना पता है, तो क्या मुझे hreflang tag चाहिए?
अनिवार्य नहीं है। Google संस्करण इसके बिना भी खोज सकता है, पर कहता है कि उन्हें साफ़ बताना आम तौर पर सबसे अच्छा है।
क्या hreflang tag से मेरी रैंकिंग सुधरती है?
Google का पेज यह दावा नहीं करता। वह मक़सद यह बताता है कि उपयोगकर्ता को भाषा या क्षेत्र के हिसाब से सबसे उपयुक्त संस्करण तक पहुँचाया जाए। कोई भी किसी स्थान का वादा नहीं कर सकता।
तीन तरीक़ों में से कौन-सा लूँ?
Google के लिए वे बराबर हैं, और कई एक साथ इस्तेमाल करने से कोई फ़ायदा नहीं। Google का नोट है कि HTML tag उन साइटों के लिए ठीक हैं जिनके पास साइटमैप या हेडर पर नियंत्रण नहीं है, और हेडर उन फ़ाइलों के लिए ठीक है जो HTML नहीं हैं, जैसे PDF। हम HTML tag इस्तेमाल करते हैं।
आपका अगला कदम
अपने किसी पेज पर curl कमांड चलाइए और जाँचिए कि वह ख़ुद का नाम लेता है और कोई एक गंतव्य वापस जोड़ता है। फिर पेज को SEOgrinder से स्कैन कीजिए, “Google पर पेज” खोलिए, “भाषाएँ (hreflang)” कार्ड की पहली समस्या वाली पंक्ति ठीक कीजिए और “दोबारा जाँचें” दबाइए। बड़ी तस्वीर के लिए हमारी SEO audit checklist दिखाती है कि आठ जाँच-समूहों में hreflang कहाँ बैठता है।