एक लेख के लिए बारह URL
इस ब्लॉग की हर पोस्ट बारह पतों पर मौजूद है। ग्यारह पतों में भाषा का प्रीफ़िक्स है — /en/blog/…, /de/blog/… और नौ अन्य — और बारहवें पते में कोई प्रीफ़िक्स नहीं है। वह ब्राउज़र का Accept-Language हेडर पढ़ता है और ग्यारह में से उस भाषा में जवाब देता है, जिसे वह पहचान लेता है।
27 और 28 अगस्त को क्रॉलरों ने इस वेबसाइट से 1,609 ब्लॉग पेज लोड किए। पाठकों ने 628।
पेज एक-दूसरे को पहले से क्या बताते हैं
सभी बारह पेज अपने हेड सेक्शन में यही तीन बातें कहते हैं, और मैंने कोड पर भरोसा करने के बजाय आज तीनों की जाँच की।
हर पेज का canonical लिंक खुद उसी पेज की ओर इशारा करता है। ग्यारह hreflang लाइनें भाषा के बाकी संस्करणों के नाम बताती हैं, और बारहवीं लाइन बिना प्रीफ़िक्स वाले पते को यह नाम देती है: x-default, क्योंकि वह पता किसी एक भाषा का नहीं है। बिना प्रीफ़िक्स वाला पता जवाब के साथ यह हेडर भेजता है: Vary: Accept-Language, Accept-Encoding, ताकि उसके आगे कैश करने वाली हर चीज़ जान ले कि जवाब का कंटेंट एक अनुरोध हेडर पर निर्भर है।
भाषा तय करने की यह प्रक्रिया काम करती है। उसी URL को Accept-Language: de के साथ माँगने पर ऐसा पेज मिलता है, जिस पर यह निशान है: lang="de", और ja के साथ जापानी पेज, और किसी ऐसे कोड के साथ, जिसे कोई इस्तेमाल नहीं करता, अंग्रेज़ी पेज। चार भाषाओं के बीच बारी-बारी से भेजे गए बारह अनुरोधों ने तीनों बार चारों सही कंटेंट लौटाए, यानी पेज कैश की कुंजी भाषा पर आधारित है, सिर्फ़ पाथ पर नहीं।
स्पेसिफ़िकेशन यही माँगता है: एक पूरा, परस्पर समूह, जिसमें हर सदस्य अपना और अपने सभी बाकी संस्करणों का नाम लेता है। यही वह व्यवस्था है, जिससे कोई सर्च इंजन बारह पतों को आपस में होड़ करते बारह लेखों के बजाय बारह भाषाओं में एक ही लेख मान सकता है।
इससे कोई कम पेज लोड नहीं करता
इससे पेज लोड होना कम भी नहीं होता, और एक्सेस लॉग यह बात व्याख्या की ज़्यादा गुंजाइश छोड़े बिना कहता है।
ClaudeBot ने 36 पोस्ट पर 396 ब्लॉग अनुरोध किए — हर पोस्ट के ठीक 11.0 भाषा संस्करण, हर भाषा, हर बार। bingbot का औसत 37 पोस्ट पर 8.7 रहा, PetalBot का 6.0, Applebot का 4.3। SemrushBot सिर्फ़ 1.8 तक पहुँचा। Googlebot ने 42 पोस्ट पर 72 अनुरोध किए, यानी हर पोस्ट पर औसतन 1.5 भाषा संस्करण, और छह में से यही अकेला है, जो ऐसा बर्ताव करता है, मानो एनोटेशन उस तक पहुँच गया हो।
सभी क्रॉलरों को मिलाकर 76 में से 73 पोस्ट कम से कम एक बार लोड हुईं, और उनमें से 68 एक से ज़्यादा भाषा में। औसत ग्यारह में से 7.84 भाषा संस्करण प्रति पोस्ट रहा।
इसमें से कुछ भी किसी नियम का उल्लंघन नहीं है। hreflang एक संकेत है कि पेज आपस में कैसे जुड़े हैं, और यह सर्च इंजन के उस हिस्से के लिए है, जो तय करता है कि कौन-सा नतीजा दिखाया जाए। यह उस हिस्से के लिए निर्देश नहीं है, जो तय करता है कि क्या डाउनलोड किया जाए। जिस क्रॉलर ने /uk/blog/… को कभी नहीं देखा, उसके पास यह जानने का कोई तरीका नहीं कि वह एक अनुवाद है, जब तक वह उसे लोड करके उसका हेड न पढ़ ले — एनोटेशन का असर उसी अनुरोध के बाद ही हो सकता है, जिसे वह शायद बचा सकता था।
इसकी लागत क्या है
ऊपर वाले पैराग्राफ़ से जितनी लगती है, उससे कम। 1,609 पोस्ट पेजों में ब्लॉग के ओवरव्यू और टैग पेज जोड़ दिए जाएँ, तो क्रॉलरों ने /blog के तहत 1,689 अनुरोध भेजे: इस वर्चुअल होस्ट ने दो दिन में जिन 3,73,019 अनुरोधों का जवाब दिया, उनका 0.5 प्रतिशत, और उसने जो 4,363 MB भेजे, उनमें से 19.9 MB। एक ब्लॉग पेज लगभग सेकंड के दसवें हिस्से में लौटता है, इसलिए यह पूरी ग्यारह गुना क्रॉलिंग रोज़ लगभग अस्सी सेकंड का प्रोसेसर समय लेती है।
साइटमैप मेरी उम्मीद से थोड़ा ज़्यादा महँगा है। इसमें 3,136 पते हैं, जिनके साथ 13,248 वैकल्पिक भाषा एनोटेशन जुड़े हैं: 1.85 MB XML, कंप्रेस करने पर 35 KB। इसे ज़्यादा से ज़्यादा हर छह घंटे में दोबारा बनाया जाता है, इसीलिए दोपहर एक बजकर दस मिनट पर प्रकाशित पोस्ट इसमें तुरंत नहीं, बल्कि कुछ घंटे बाद पूरी तरह दिखती है।
इन संख्याओं में कुछ भी बदलने लायक नहीं है। लोड होना कम करने का अकेला तरीका यह होगा कि ये पते ही न हों, और ये पते ही तो असली मकसद हैं।
पाठक और क्रॉलर अलग-अलग चीज़ें चाहते हैं
उन्हीं दो दिनों को भाषा के हिसाब से बाँटने पर दो बिल्कुल अलग आदतें दिखती हैं।
क्रॉलर लगभग बराबर बँटे हुए हैं: उनके ब्लॉग अनुरोधों का 5.5 से 10.5 प्रतिशत हिस्सा ग्यारह प्रीफ़िक्स वाले संस्करणों में से हर एक पर गया, और 16 प्रतिशत बिना प्रीफ़िक्स वाले पते पर। यह किसी ऐसी चीज़ का पैटर्न है, जो एक सूची पर एक-एक करके चल रही हो।
पाठक बराबर नहीं बँटते। उनके 38 प्रतिशत अनुरोध बिना प्रीफ़िक्स वाले पते पर गए और अन्य 18 प्रतिशत इस पते पर: /en/, यानी आधे से ज़्यादा या तो अंग्रेज़ी में आए या भाषा तय करने की प्रक्रिया के ज़रिए। बाकी दस भाषाओं में बँटे हैं, जिनमें सबसे बड़ी जर्मन 7 प्रतिशत पर है और सबसे छोटी फ़्रेंच 2 प्रतिशत पर।
बचा हुआ यह 44 प्रतिशत ही वह पूरी वजह है, जिसके लिए भाषा वाले पाथ मौजूद हैं। यह इतना छोटा भी है कि भाषा वाले पाथ को आसानी से गैरज़रूरी ठहराया जा सकता है — और यह वही गलती है, जो क्रॉलर वाला कॉलम पढ़कर यह नतीजा निकालने में है कि पेज लोकप्रिय हैं।
आम सबक
सही संकेत निर्देश नहीं होता। इन पेजों के हेड में सब कुछ सही, परस्पर और जाँचने योग्य है, और छह में से पाँच क्रॉलर ऐसे लोड करते हैं, मानो उसमें से कुछ भी वहाँ न हो। स्पेसिफ़िकेशन बताता है कि एनोटेशन का मतलब क्या है, यह नहीं कि कोई खास प्रोग्राम उसे देखकर क्या करेगा।
इसलिए उपयोगी सवाल कभी यह नहीं था कि मार्कअप सही है या नहीं। सवाल यह था कि पेज लोड करने वाला हर प्रोग्राम असल में कितनी बार आता है, और इसका जवाब सिर्फ़ लॉग दे सकता है — और जवाब मिलने के बाद ईमानदार नतीजा यह है कि ग्यारह गुना क्रॉलिंग की लागत आधा प्रतिशत है और उसे वैसे ही छोड़ देना चाहिए।