वीडियो URL मानकीकरण (Canonicalization) पाइपलाइन बनाना
मैंने अपने प्रोडक्शन SQLite डेटाबेस पर एक क्वेरी चलाई और मुझे एक बड़ी समस्या का पता चला।
videos टेबल में 41,283 पंक्तियाँ (rows) थीं, लेकिन केवल 29,000 यूनिक टाइटल थे। हम एक ही वीडियो को कई बार स्टोर कर रहे थे।
ऐसा क्यों हुआ? एक ही YouTube वीडियो अलग-अलग URL फॉर्मेट में आ रहा था:
• शॉर्ट लिंक: youtu.be/ID • डेस्कटॉप लिंक: youtube.com/watch?v=ID • मोबाइल लिंक: m.youtube.com/watch?v=ID • शॉर्ट्स: youtube.com/shorts/ID
एक वीडियो का मतलब था डेटाबेस में चार पंक्तियाँ और चार लगभग एक जैसे वेब पेज। इससे मेरा क्रॉल बजट बर्बाद हो रहा था और Google Search Console में एरर (errors) आ रहे थे।
मैं TrendVidStream चलाता हूँ। हम आठ अलग-अलग क्षेत्रों से ट्रेंडिंग डेटा निकालते हैं। हर क्षेत्र एक ही वायरल वीडियो को अलग-अलग URL फॉर्मेट में दिखा सकता है।
मैंने PHP 8.4 और SQLite का उपयोग करके इसे ठीक करने के लिए एक पाइपलाइन बनाई।
यह पाइपलाइन इस प्रकार काम करती है:
- Extract: किसी भी URL वेरिएंट को एक स्थिर 11-कैरेक्टर वीडियो ID में बदलें।
- Normalize: उस ID से एक सिंगल कैनोनिकल (canonical) URL बनाएं।
- Validate: डेटाबेस को छूने से पहले त्वरित जांच करें।
- Upsert: नई पंक्तियाँ जोड़ने के बजाय डेटा को मर्ज करने के लिए SQLite UPSERT का उपयोग करें।
- Emit: कैनोनिकल टैग और 301 रीडायरेक्ट्स जोड़ें ताकि सर्च इंजन को केवल एक ही URL मिले।
मुख्य तकनीकी निर्णय:
• एक सटीक होस्ट allowlist का उपयोग करें। Suffix matching का उपयोग न करें। यह सुरक्षा जोखिमों को रोकता है।
• IDs को कभी भी lowercase न करें। YouTube IDs केस-सेंसिटिव (case-sensitive) होते हैं। उन्हें lowercase करने से अलग-अलग वीडियो आपस में मिल सकते हैं।
• video_id पर एक UNIQUE constraint का उपयोग करें। यह डुप्लिकेट्स के खिलाफ आपका सबसे मजबूत बचाव है।
• SQLite WAL मोड का उपयोग करें। यह राइट्स (writes) को तेज़ और विश्वसनीय बनाता है।
परिणाम:
हमारी वीडियो टेबल 41,283 पंक्तियों से घटकर 28,094 पंक्तियाँ रह गई। हमने एक भी वीडियो नहीं खोया। Google Search Console के एरर 412 से घटकर 9 रह गए। सर्च रिजल्ट्स अधिक साफ-सुथरे हो गए क्योंकि हमने एक ही वीडियो को चार बार दिखाना बंद कर दिया।
सबक सरल है: जब आप कई स्रोतों से डेटा इकट्ठा करते हैं, तो सबसे पहले अपने सिस्टम में 'आइडेंटिटी' (identity) का निर्माण करें। एक स्थिर ID निकालें, उसे डेटाबेस कंस्ट्रेंट्स के साथ लागू करें, और हर राइट (write) को इडम्पोटेंट (idempotent) बनाएं।
आपको जटिल उपकरणों की आवश्यकता नहीं है। PHP और SQLite पर्याप्त हैं।
