Next.js, Gatsby और Static Sites के लिए Cookie Consent: डेवलपर्स के लिए इंटीग्रेशन गाइड

स्टैटिक साइट्स में Consent की समस्या

Next.js, Gatsby और Nuxt.js जैसे आधुनिक JavaScript फ्रेमवर्क्स ने वेब पेजों के बनने और डिलीवर होने का तरीका बदल दिया है। पेज या तो बिल्ड टाइम पर या सर्वर पर पहले से प्री-रेंडर हो जाते हैं, और फिर क्लाइंट पर हाइड्रेट होते हैं। इससे कुकी कंसेंट के लिए एक अनोखी चुनौती पैदा होती है: कंसेंट बैनर को किसी भी ट्रैकिंग स्क्रिप्ट के चलने से पहले तैयार होना चाहिए, लेकिन पेज खुद पहले से रेंडर होकर edge पर कैश हो चुका हो सकता है।

पारंपरिक CMPs को सर्वर-रेंडर्ड PHP या साधारण HTML पेजों के लिए डिज़ाइन किया गया था, जहाँ डॉक्यूमेंट ऊपर से नीचे तक लाइनियर तरीके से लोड होता है। फ्रेमवर्क वाली दुनिया में, जहाँ code splitting, lazy loading और streaming server-side rendering होती है, ये धारणाएँ टूट जाती हैं। इन एनवायरनमेंट्स में सही तरीके से कंसेंट सेट करना रेंडरिंग पाइपलाइन को समझने पर निर्भर करत��� है।

टाइमिंग आपकी सोच से ज़्यादा अहम क्यों है

एक साधारण HTML पेज में, CMP स्क्रिप्ट को <head> में बाकी स्क्रिप्ट्स से पहले रखना आसान है। Next.js App Router या Gatsby में स्थिति ज़्यादा जटिल हो जाती है:

मूल सिद्धांत यह है: कंसेंट को कंपोनेंट लेवल पर नहीं, स्क्रिप्ट लेवल पर स्थापित करना चाहिए। एक React कंपोनेंट जो कंसेंट बैनर रेंडर करता है, अगर केवल हाइड्रेशन के बाद इंटरैक्टिव होता है, तो वह बहुत देर से आता है।

Next.js App Router इंटीग्रेशन

App Router के साथ Next.js 13+ ने स्क्रिप्ट्स को हैंडल करने का नया तरीका दिया है। कंसेंट इंटीग्रेशन के लिए अनुशंसित तरीका यह है:

स्टेप 1: Root Layout में CMP स्क्रिप्ट लोड करें

अपने root layout.tsx में Next.js के Script कंपोनेंट को beforeInteractive स्ट्रैटेजी के साथ इस्तेमाल करें। यह Next.js को बताता है कि हाइड्रेशन शुरू होने से पहले इस स्क्रिप्ट को शुरुआती HTML डॉक्यूमेंट में इंजेक्ट किया जाए:

beforeInteractive स्ट्रैटेजी बेहद अहम है। डिफ़ॉल्ट afterInteractive स्ट्रैटेजी स्क्रिप्ट्स को हाइड्रेशन के बाद लोड करती है, जो कंसेंट के लिए बहुत द���र हो जाती है। beforeInteractive के साथ CMP स्क्रिप्ट सर्वर-रेंडर्ड HTML में शामिल होती है और पेज लोड होते ही चल जाती है।

स्टेप 2: Google Tags से पहले डिफ़ॉल्ट कंसेंट सेट करें

अपने Google Tag Manager या gtag.js स्निपेट से पहले एक inline स्क्रिप्ट शामिल करें जो डिफ़ॉल्ट कंसेंट स्टेट्स सेट करे। इससे यह सुनिश्चित होता है कि भले ही GTM, CMP बैनर के दिखने से पहले लोड हो जाए, वह डिनाइड डिफ़ॉल्ट्स का सम्मान करेगा:

यह inline स्क्रिप्ट आपके root layout के <head> में, CMP और GTM स्क्रिप्ट्स से पहले रखी जानी चाहिए। Next.js में आप इस काम के लिए अपने layout के <head> एलिमेंट के अंदर एक साधारण <script> टैग का उपयोग कर सकते हैं।

स्टेप 3: Route Changes को हैंडल करें

Single-page application नेविगेशन में CMP स्क्रिप्ट एक बार लोड होती है, लेकिन route changes पर पूरा पेज रीलोड नहीं होता। आपका CMP क्लाइंट-साइड नेविगेशन के दौरान भी बना रहना चाहिए। FlexyConsent यह अपने आप हैंडल करता है — एक बार लोड होने के बाद यह बिना दोबारा इनिशियलाइज़ किए सभी route changes पर एक्टिव रहता है।

Next.js Pages Router इंटीग्रेशन

जो प्रोजेक्ट अभी भी Pages Router का इस्तेमाल कर रहे हैं, उनके लिए तरीका लगभग वही है, लेकिन root layout की जगह _document.tsx का उपयोग होता है। CMP स्क्रिप्ट को अपनी custom Document क्लास के <Head> कंपोनेंट में रखें। Pages Router में भी beforeInteractive स्ट्रैटेजी उसी तरह काम करती है।

मुख्य अंतर यह है कि _document.tsx केवल सर्वर पर रेंडर होता है, इसलिए यहाँ की कोई भी कंसेंट लॉजिक शुरुआती HTML payload में होना तय है।

Gatsby Static Site इंटीग्रेशन

Gatsby बिल्ड टाइम पर पूरी तरह स्टैटिक HTML जेनरेट करता है। रिक्वेस्ट टाइम पर कोई सर्वर-साइड रेंडरिंग नहीं होती, जिससे कुछ चीजें आसान हो जाती हैं, लेकिन कुछ और जटिल:

Gatsby का build-time एप्रोच मतलब यह है कि आपके CDN पर हर HTML फाइल में कंसेंट स्क्रिप्ट शामिल होगी। यह वास्तव में आदर्श है — यहाँ कोई सर्वर लॉजिक नहीं है जो फेल हो सके या गलत तरीके से कैश हो सके।

Nuxt.js से जुड़ी बातें

Nuxt.js (Vue-आधारित) के अपने पैटर्न हैं। Nuxt 3 में, CMP स्क्रिप्ट को ग्लोबली जोड़ने के लिए useHead composable या nuxt.config.ts की app head कॉन्फ़िगरेशन का उपयोग करें। Nuxt body: false ऑप्शन सपोर्ट करता है (जो स्क्रिप्ट्स को head में रखता है) और non-blocking लोडिंग के लिए async एट्रिब्यूट भी।

Nuxt के server-side rendering मोड के लिए भी वही सिद्धांत लागू होता है: CMP स्क्रिप्ट शुरुआती HTML response में होनी चाहिए, न कि Vue कंपोनेंट द्वारा mount होने के बाद डायनेमिकली इंजेक्ट की ज��ए।

Layout Shift से बचना

कंसेंट बैनर्स Cumulative Layout Shift (CLS) के लिए बदनाम हैं, जो एक Core Web Vital है और SEO रैंकिंग को प्रभावित करता है। जब बैनर पेज रेंडर होने के बाद अचानक दिखता है, तो वह कंटेंट को नीचे धकेल देता है या अनपेक्षित रूप से overlay कर देता है।

कंसेंट बैनर्स से CLS कम करने की रणनीतियाँ:

FlexyConsent का Framework-Agnostic एप्रोच

FlexyConsent को किसी भी फ्रेमवर्क — या बिना किसी फ्रेमवर्क ��� के साथ काम करने के लिए डिज़ाइन किया गया है, क्योंकि यह कंपोनेंट लेवल की बजाय स्क्रिप्ट लेवल पर ऑपरेट करता है। यह क्यों मायने रखता है:

डेवलपर टिप: सही CMP इंटीग्रेशन की सबसे आसान टेस्ट यह है कि ब्राउज़र का Network टैब खोलें, Google डोमेन्स से फ़िल्टर करें और पेज को रीलोड करें। कंसेंट डिफ़ॉल्ट कमांड के कंसोल मे�� दिखने से पहले कोई भी Google रिक्वेस्ट फायर नहीं होनी चाहिए। अगर होती है, तो आपका CMP बहुत देर से लोड हो रहा है।

FlexyConsent का फ्री प्लान अनलिमिटेड pageviews सपोर्ट करता है और Next.js, Gatsby, Nuxt, Astro, SvelteKit, Remix और plain HTML के साथ काम करता है। इन सबमें इंटीग्रेशन एक जैसा है: एक स्क्रिप्ट टैग, सही जगह पर रखा हुआ।

← ब्लaderegistrdelays delays सभी पढ़ें →