एनालिटिक्स
फ़र्स्ट-पार्टी वेब एनालिटिक्स — PostHog, Google Analytics, Plausible, Mixpanel, Segment, और अन्य — blume.config.ts में एडैप्टर्स के रूप में।
Blume आपके लिए blume.config.ts में एक analytics सूची से एनालिटिक्स इंजेक्ट करता है। हर एंट्री blume/analytics से इम्पोर्ट किया गया एक एडैप्टर है: हर प्रोवाइडर के लिए एक, और जिनका कोई एडैप्टर नहीं है उनके लिए script()।
import { defineConfig } from "blume";
import { googleAnalytics, plausible, posthog, vercel } from "blume/analytics";
export default defineConfig({
analytics: [
posthog({ key: "phc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }),
vercel(),
googleAnalytics({ id: "G-XXXXXXXXXX" }),
plausible({ domain: "docs.example.com" }),
],
});
एडैप्टर्स <head> में उसी क्रम में उत्सर्जित होते हैं जिसमें आप उन्हें सूचीबद्ध करते हैं, और आप जितने चाहें उतने एडैप्टर्स को मिला सकते हैं। हर एडैप्टर सादा डेटा है: वह जो लौटाता है, उसे आपके बाक़ी कॉन्फ़िग के साथ वैलिडेट किया जाता है और बिल्ट साइट में इनलाइन किया जाता है, इसलिए उसमें कोई भी JSON मान हो सकता है, लेकिन कभी कोई फ़ंक्शन नहीं। कोई पासथ्रू विकल्प जिसे JSON वहन नहीं कर सकता (एक फ़ंक्शन, undefined, एक bigint) बिल्ड से गायब होने के बजाय अपने पाथ के साथ वैलिडेशन में विफल होता है।
एनालिटिक्स केवल प्रोडक्शन बिल्ड में लोड होता है। स्क्रिप्ट्स blume build द्वारा उत्सर्जित की जाती हैं, कभी भी blume dev द्वारा नहीं, इसलिए लोकल ट्रैफ़िक कभी आपके डैशबोर्ड तक नहीं पहुँचता और आपको अलग “डेवलपमेंट” प्रोजेक्ट की ज़रूरत नहीं पड़ती।
पाठकों से पहले अनुमति लेने के लिए consent सेट करें: तब यहाँ दिया गया हर एडैप्टर तब तक प्रतीक्षा करता है जब तक पाठक एनालिटिक्स की अनुमति नहीं दे देता।
नीचे दिया गया हर आइडेंटिफ़ायर — प्रोजेक्ट की, मेज़रमेंट ID, साइट टोकन — प्रोवाइडर के अपने इंस्टॉल स्निपेट वाला सार्वजनिक, ब्राउज़र-साइड आइडेंटिफ़ायर है। हर एडैप्टर वही स्निपेट रेंडर करता है, इसलिए इसे अपनी डॉक्स रिपॉज़िटरी में कमिट करना सुरक्षित है; Blume कभी कोई सीक्रेट नहीं माँगता।
एडैप्टर्स
| एडैप्टर | प्रोवाइडर | आवश्यक |
|---|---|---|
adobe() |
Adobe Analytics | url |
amplitude() |
Amplitude | key |
clarity() |
Microsoft Clarity | id |
clearbit() |
Clearbit | key |
clics() |
Clics | projectId |
cloudflare() |
Cloudflare Web Analytics | token |
databuddy() |
Databuddy | clientId |
fathom() |
Fathom | site |
googleAnalytics() |
Google Analytics 4 | id |
googleTagManager() |
Google Tag Manager | id |
heap() |
Heap | id |
hightouch() |
Hightouch | key |
hotjar() |
Hotjar | id |
logrocket() |
LogRocket | id |
mixpanel() |
Mixpanel | token |
oneDollarStats() |
OneDollarStats | — |
pirsch() |
Pirsch | code |
plausible() |
Plausible | domain |
posthog() |
PostHog | key |
segment() |
Segment | key |
vercel() |
Vercel Web Analytics | — |
script() |
अन्य कुछ भी | src या content |
Blume के डॉक्स क्लाइंट-साइड राउटर का उपयोग करते हैं, इसलिए अधिकांश नेविगेशन पूरे पेज लोड के बजाय पेज के भीतर एक स्वैप होता है। हर एडैप्टर इन्हें पेजव्यू के रूप में गिनता है: जिन प्रोवाइडर्स की स्क्रिप्ट हिस्ट्री में होने वाले बदलावों को स्वयं ट्रैक करती है, उन्हें कुछ अतिरिक्त नहीं चाहिए, और जो केवल वास्तविक लोड गिनते हैं (PostHog, Segment, Hightouch), उनके लिए Blume स्वयं पेजव्यू भेजता है। दो अपवाद टैग मैनेजर्स हैं — Google Tag Manager और Adobe एक कंटेनर लोड करते हैं जिसके अपने नियम तय करते हैं कि क्या फ़ायर होगा, इसलिए उसे एक हिस्ट्री-चेंज ट्रिगर दें।
PostHog
PostHog जोड़ने के लिए posthog() को अपनी प्रोजेक्ट API की दें। होस्ट डिफ़ॉल्ट रूप से PostHog Cloud US होता है; EU Cloud (https://eu.i.posthog.com) या सेल्फ़-होस्टेड इंस्टेंस के लिए host सेट करें।
analytics: [
posthog({
key: "phc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
host: "https://us.i.posthog.com", // optional, this is the default
}),
],
key और host वे दो विकल्प हैं जिन्हें Blume मैप करता है (host, api_host बन जाता है)। आप जो कुछ भी और पास करते हैं — persistence, capture_pageview, autocapture, disable_session_recording, और posthog.init का हर अन्य विकल्प — वह ज्यों का त्यों posthog.init को फ़ॉरवर्ड किया जाता है।
Blume हर क्लाइंट-राउटर नेविगेशन के लिए $pageview केवल तभी भेजता है जब PostHog सिर्फ़ पेज लोड कैप्चर करता है, और यह उसका व्यवहार तब होता है जब आप न तो capture_pageview सेट करते हैं और न ही defaults। capture_pageview: "history_change" के साथ, या PostHog के मौजूदा स्निपेट की "2025-05-24" जैसी किसी defaults तिथि के साथ, PostHog नेविगेशन को स्वयं कैप्चर करता है, इसलिए Blume कुछ अतिरिक्त नहीं भेजता। capture_pageview: false के साथ, कोई भी पेजव्यू नहीं भेजा जाता।
Vercel Web Analytics
Vercel Web Analytics शामिल करने के लिए vercel() जोड़ें। Blume, Vercel का आधिकारिक Astro कंपोनेंट रेंडर करता है, जो Vercel डैशबोर्ड में प्रोजेक्ट के लिए Web Analytics सक्षम होने के बाद आपके अपने डोमेन से सर्व की जाने वाली फ़र्स्ट-पार्टी स्क्रिप्ट इंजेक्ट करता है।
analytics: [vercel()],
किसी की-ज़रूरत नहीं है — स्क्रिप्ट उसी प्रोजेक्ट को रिपोर्ट करती है जिसके तहत वह डिप्लॉय हुई है। यह केवल Vercel डिप्लॉयमेंट्स पर डेटा एकत्र करती है, जहाँ /_vercel/insights एंडपॉइंट मौजूद होता है। आप जो भी विकल्प पास करते हैं, वह कंपोनेंट को प्रॉप के रूप में फ़ॉरवर्ड किया जाता है (mode, debug, endpoint, scriptSrc, …); beforeSend एक फ़ंक्शन है और कॉन्फ़िग के ज़रिए नहीं जा सकता, इसलिए इसके बजाय किसी script() एडैप्टर से window.webAnalyticsBeforeSend असाइन करें।
Cloudflare Web Analytics
Cloudflare Web Analytics के दो सेटअप हैं, और उनमें से केवल एक को एडैप्टर की ज़रूरत होती है।
प्रॉक्सी किया गया ज़ोन (स्वचालित सेटअप)। यदि Cloudflare आपकी साइट सर्व करता है — कस्टम डोमेन वाला Worker, Pages, या कोई भी ज़ोन जिसमें ऑरेंज क्लाउड चालू हो — तो Cloudflare डैशबोर्ड में ज़ोन के लिए Web Analytics सक्षम करें और बस इतना ही करें। Cloudflare एज पर बीकन इंजेक्ट करता है, इसलिए cloudflare() को शामिल न करें; इसे भी सूचीबद्ध करने पर हर पेजव्यू दो बार गिना जाएगा।
कोई अन्य होस्ट (मैनुअल सेटअप)। जिस साइट को Cloudflare प्रॉक्सी नहीं करता, उसके लिए डैशबोर्ड में Web Analytics के अंतर्गत साइट जोड़ें, आपको दिए गए JS स्निपेट से टोकन कॉपी करें (data-cf-beacon के अंदर का token), और उसे यहाँ दें। Blume वही बीकन टैग रेंडर करता है जो स्निपेट करता है।
analytics: [
cloudflare({
token: "0123456789abcdef0123456789abcdef",
}),
],
पूरा विकल्प ऑब्जेक्ट बीकन का data-cf-beacon JSON बन जाता है, इसलिए कोई भी अन्य बीकन सेटिंग (spa, …) सीधे आगे पहुँच जाती है।
Google Analytics 4
अपनी GA4 वेब डेटा स्ट्रीम की मेज़रमेंट ID (G-…, जो प्रॉपर्टी के Admin → Data Streams में स्ट्रीम के विवरण के अंतर्गत मिलती है) googleAnalytics() को दें। Blume, Google टैग को ठीक वैसे ही रेंडर करता है जैसा स्ट्रीम के इंस्टॉल निर्देशों में दिया गया है: async gtag.js लोडर के साथ dataLayer बूटस्ट्रैप और config कॉल।
analytics: [
googleAnalytics({
id: "G-XXXXXXXXXX",
anonymize_ip: true, // optional: any other `config` parameter
}),
],
id ही वह एकमात्र विकल्प है जिसे Blume मैप करता है। आप जो कुछ भी और पास करते हैं, वह ज्यों का त्यों gtag('config', …) कॉल के साथ जाता है (send_page_view, cookie_domain, debug_mode, …)। GA4 का एन्हांस्ड मेज़रमेंट डिफ़ॉल्ट रूप से हिस्ट्री में होने वाले बदलावों को पेज व्यू के रूप में गिनता है, इसलिए क्लाइंट-साइड नेविगेशन बिना किसी अतिरिक्त सेटअप के ट्रैक होते हैं। Google Analytics को नया डेटा दिखाने में एक-दो दिन लगते हैं; Google Analytics Debugger एक्सटेंशन रिक्वेस्ट्स को होते ही दिखाता है।
Google Tag Manager
अपनी कंटेनर ID (GTM-…, जो वर्कस्पेस हेडर में दिखाई देती है) googleTagManager() को दें। Blume कंटेनर स्निपेट का <head> वाला हिस्सा रेंडर करता है; <noscript> iframe बिना JavaScript वाले ब्राउज़र्स के लिए है, जो वैसे भी कभी एनालिटिक्स नहीं चलाते।
analytics: [
googleTagManager({
id: "GTM-XXXXXXX",
dataLayer: "dataLayer", // optional, this is the default
}),
],
कौन-से टैग फ़ायर होते हैं, और किस पर, यह कंटेनर के कॉन्फ़िगरेशन पर निर्भर है। क्लाइंट-साइड नेविगेशन कंटेनर तक हिस्ट्री में बदलाव के रूप में पहुँचते हैं, इसलिए पेजव्यू टैग्स को पेज-लोड ट्रिगर के बजाय History Change ट्रिगर से फ़ायर करें। कुकी सहमति बैनर भी आपको कंटेनर में ही सेट अप करने होंगे।
Plausible
Plausible में आपके द्वारा जोड़ा गया डोमेन plausible() को दें। सेल्फ़-होस्टेड या प्रॉक्सी किए गए इंस्टेंस के लिए, host को उसके ओरिजिन पर सेट करें; डिफ़ॉल्ट Plausible Cloud है।
analytics: [
plausible({
domain: "docs.example.com",
host: "https://plausible.example.com", // optional, defaults to https://plausible.io
}),
],
domain, data-domain बन जाता है और host तय करता है कि /js/script.js कहाँ से लोड हो। कोई भी अन्य विकल्प टैग पर अपना अलग data- एट्रिब्यूट बन जाता है (api: "/api/event" → data-api)। जिन स्क्रिप्ट वेरिएंट्स का अतिरिक्त व्यवहार फ़ाइलनाम में ही निहित होता है (script.outbound-links.js, …), वे एक अलग टैग हैं; उन्हें script() से लोड करें।
Clics
Clics डैशबोर्ड में Configure → Tracking से मिली प्रोजेक्ट ID clics() को दें। Blume आवश्यक data-project-id एट्रिब्यूट के साथ Clics ब्राउज़र ट्रैकर जोड़ता है।
import { clics } from "blume/analytics";
analytics: [clics({ projectId: "YOUR_PROJECT_ID" })],
ट्रैकर पेज लोड और क्लाइंट-साइड नेविगेशन, Blume के क्लाइंट राउटर सहित, स्वचालित रूप से गिनता है, इसलिए दूसरा पेजव्यू हुक न जोड़ें। यह डिफ़ॉल्ट रूप से आउटबाउंड लिंक्स को भी ट्रैक करता है। उन इवेंट्स को बंद करने के लिए disableOutboundLinks: true सेट करें। localhost पर प्रीव्यू किए जा रहे प्रोडक्शन बिल्ड के लिए allowLocalhost: true सेट करें; सामान्य blume dev एनालिटिक्स लोड नहीं करता।
Blume के कस्टम इवेंट्स Clics तक नहीं पहुँचते: इसके ब्राउज़र ट्रैकर में कोई ग्लोबल इवेंट फ़ंक्शन नहीं है जिसे उन्हें फ़ॉरवर्ड किया जा सके। अपने स्वयं के इवेंट्स भेजने के लिए, अपने क्लाइंट कोड में @clicsdev/tracker से track() हेल्पर को कॉल करें।
Fathom
अपनी साइट ID (Fathom में साइट की स्क्रिप्ट सेटिंग्स से) fathom() को दें।
analytics: [
fathom({
site: "ABCDEFGH",
"honor-dnt": "true", // optional: any other `data-` setting
}),
],
site, data-site बन जाता है। कोई भी अन्य विकल्प स्ट्रिंग के रूप में टैग पर अपना अलग data- एट्रिब्यूट बन जाता है (honor-dnt, excluded-domains, canonical, …)। spa डिफ़ॉल्ट रूप से "auto" होता है ताकि Fathom क्लाइंट राउटर के नेविगेशन गिन सके; इसे ओवरराइड करने के लिए अपना spa मान पास करें।
Pirsch
अपना आइडेंटिफ़िकेशन कोड (Pirsch में Settings → Developer → Identification Code) pirsch() को दें।
analytics: [
pirsch({
code: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
}),
],
code, data-code बन जाता है, और Blume टैग को वह pianjs id देता है जिससे Pirsch की स्क्रिप्ट स्वयं को ढूँढती है। कोई भी अन्य विकल्प अपना अलग data- एट्रिब्यूट बन जाता है (dev, exclude, include, domain, endpoint, …)।
Databuddy
अपनी क्लाइंट ID (Databuddy में वेबसाइट की सेटिंग्स से) databuddy() को दें।
analytics: [
databuddy({
clientId: "xxxxxxxxxxxxxxxxxxxxx",
"track-web-vitals": "true", // optional: any other `data-` setting
"skip-patterns": '["/admin/*"]',
}),
],
clientId, data-client-id बन जाता है। कोई भी अन्य विकल्प टैग पर अपना अलग data- एट्रिब्यूट बन जाता है, इसलिए उसका नाम ठीक वैसे ही रखें जैसा एट्रिब्यूट में लिखा जाता है, यानी kebab-case में (track-web-vitals, track-errors, track-outgoing-links, api-url, …)। Databuddy trackWebVitals जैसे camelCase नाम को अनदेखा करता है। मान स्ट्रिंग्स होते हैं: किसी स्विच के लिए "true" या "false", और skip-patterns तथा mask-patterns के लिए एक JSON ऐरे। Databuddy किसी भी अन्य रूप में दिए गए सूची मान को खाली मानता है।
OneDollarStats
OneDollarStats में साइट का डोमेन जोड़ें, फिर oneDollarStats() को सूचीबद्ध करें। इसके लिए कोई की ज़रूरी नहीं है, क्योंकि OneDollarStats इवेंट्स को उस डोमेन के आधार पर किसी साइट से मिलाता है जहाँ से वे आते हैं।
analytics: [oneDollarStats()],
हर विकल्प टैग पर अपना अलग data- एट्रिब्यूट बन जाता है, और मान स्ट्रिंग्स होते हैं:
hostnameहर इवेंट को उस होस्ट नाम (docs.example.com, बिनाhttps://या पाथ के) के अंतर्गत रिपोर्ट करता है, और यह केवलlocalhostपर नहीं बल्कि हर होस्ट पर लागू होता है, इसलिए प्रीव्यू डिप्लॉय और स्टेजिंग भी उस साइट के ट्रैफ़िक के रूप में गिने जाते हैं। इसे तब तक सेट न करें जब तक हर बिल्ड को उसी नाम के अंतर्गत रिपोर्ट न करना हो।hostnameके साथdevmode: "true"सेट करने पर लोकलblume previewइवेंट्स भेज पाता है।localhostपर इन दोनों के बिना ट्रैकर कुछ नहीं भेजता, इसलिए इन्हें कमिट किए गए कॉन्फ़िग से बाहर रखें।urlवह कलेक्टर एंडपॉइंट है जिस पर इवेंट्स पोस्ट किए जाते हैं (डिफ़ॉल्ट रूप सेhttps://collector.onedollarstats.com/events), साइट का URL नहीं।autocollect: "false"स्वचालित पेज व्यू बंद कर देता है।"hash-routing": "true"हर नेविगेशन पर एक पेज व्यू भेजता है, तब भी जब केवल#fragmentबदलता है, जैसे विषय-सूची में किसी लिंक पर क्लिक करने पर।"false"होने पर Blume यह एट्रिब्यूट नहीं जोड़ता, क्योंकि जब भी यह मौजूद होता है, ट्रैकर हैश रूटिंग चालू कर देता है।
Mixpanel
अपना प्रोजेक्ट टोकन (Mixpanel में project settings → Access Keys) mixpanel() को दें। यदि प्रोजेक्ट EU या India डेटा रेज़िडेंसी का उपयोग करता है, तो region को उसी के अनुसार सेट करें, अन्यथा Mixpanel इवेंट्स को ड्रॉप कर देगा।
analytics: [
mixpanel({
token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
region: "eu", // optional: "us" (default), "eu", or "in"
}),
],
token और region वे विकल्प हैं जिन्हें Blume मैप करता है (region, api_host बन जाता है)। Blume track_pageview को भी "url-with-path-and-query-string" पर सेट करता है, ताकि लाइब्रेरी हर नेविगेशन को स्वयं ट्रैक करे। आप जो कुछ भी और पास करते हैं — track_pageview सहित — वह ज्यों का त्यों mixpanel.init को फ़ॉरवर्ड किया जाता है (persistence, autocapture, record_sessions_percent, …)।
Amplitude
अपनी प्रोजेक्ट API की (Amplitude में प्रोजेक्ट सेटिंग्स से) amplitude() को दें। Blume, Browser SDK का स्क्रिप्ट-लोडर स्निपेट रेंडर करता है: की-युक्त SDK बंडल के साथ init कॉल।
analytics: [
amplitude({
key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
serverZone: "EU", // optional: any other `init` option
}),
],
key ही वह एकमात्र विकल्प है जिसे Blume मैप करता है। init विकल्प उन्हीं मानों से शुरू होते हैं जो डैशबोर्ड स्निपेट में आते हैं — autocapture: true और fetchRemoteConfig: true — और आप जो कुछ भी और पास करते हैं, वह ज्यों का त्यों उनके ऊपर मर्ज किया जाता है। Autocapture पेज व्यू और हिस्ट्री में होने वाले बदलावों को कवर करता है, इसलिए क्लाइंट-साइड नेविगेशन गिने जाते हैं।
Segment
Segment में अपने JavaScript सोर्स की राइट की segment() को दें। यदि आप ऐड ब्लॉकर्स से बचने के लिए analytics.js को किसी कस्टम डोमेन से सर्व करते हैं, तो cdn को उस ओरिजिन पर सेट करें।
analytics: [
segment({
key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
cdn: "https://cdn.example.com", // optional, defaults to https://cdn.segment.com
}),
],
key और cdn वे विकल्प हैं जिन्हें Blume मैप करता है: स्निपेट लाइब्रेरी को cdn से लोड करता है और उसे अपने इंटीग्रेशन्स भी वहीं से फ़ेच करने के लिए कहता है। आप जो कुछ भी और पास करते हैं, वह ज्यों का त्यों analytics.load विकल्पों के रूप में फ़ॉरवर्ड किया जाता है (integrations, …)।
Hightouch
Hightouch में अपने इवेंट सोर्स की राइट की hightouch() को दें। इवेंट्स API होस्ट डिफ़ॉल्ट रूप से US East रीजन होता है; यदि आपका वर्कस्पेस किसी अन्य रीजन का उपयोग करता है, तो host (बिना स्कीम के) सेट करें।
analytics: [
hightouch({
key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
host: "us-east-1.hightouch-events.com", // optional, this is the default
}),
],
key और host वे विकल्प हैं जिन्हें Blume मैप करता है (host, apiHost बन जाता है)। आप जो कुछ भी और पास करते हैं, वह ज्यों का त्यों htevents.load विकल्पों के रूप में फ़ॉरवर्ड किया जाता है।
Heap
अपनी ऐप ID (Heap में प्रोजेक्ट की इंस्टॉल सेटिंग्स के अंतर्गत एनवायरनमेंट ID) heap() को दें।
analytics: [
heap({
id: "1234567890",
disableTextCapture: true, // optional: any other `heap.load` option
}),
],
id ही वह एकमात्र विकल्प है जिसे Blume मैप करता है। आप जो कुछ भी और पास करते हैं, वह ज्यों का त्यों heap.load का कॉन्फ़िग ऑब्जेक्ट बन जाता है।
Hotjar
अपनी साइट ID (Hotjar में साइट के ट्रैकिंग कोड में दी गई संख्या) hotjar() को दें।
analytics: [
hotjar({
id: 1234567,
version: 6, // optional, this is the default
}),
],
Hotjar के ट्रैकिंग कोड में id, hjid है और version, hjsv है; एडैप्टर इसके अलावा कुछ नहीं लेता।
Microsoft Clarity
अपनी प्रोजेक्ट ID (Clarity में प्रोजेक्ट के ट्रैकिंग कोड से) clarity() को दें।
analytics: [
clarity({
id: "xxxxxxxxxx",
}),
],
एडैप्टर इसके अलावा कुछ नहीं लेता; Clarity की सेटिंग्स उसके डैशबोर्ड में रहती हैं।
LogRocket
अपनी ऐप ID (org/app, LogRocket में प्रोजेक्ट सेटिंग्स से) logrocket() को दें। Blume इंस्टॉल स्निपेट रेंडर करता है: SDK के साथ गार्ड किया गया LogRocket.init कॉल।
analytics: [
logrocket({
id: "your-org/your-app",
release: "1.2.0", // optional: any other `init` option
}),
],
id ही वह एकमात्र विकल्प है जिसे Blume मैप करता है। आप जो कुछ भी और पास करते हैं, वह ज्यों का त्यों LogRocket.init को फ़ॉरवर्ड किया जाता है (release, console, network, dom, …)। रिक्वेस्ट या रिस्पॉन्स सैनिटाइज़र एक फ़ंक्शन होता है और कॉन्फ़िग के ज़रिए नहीं जा सकता; उनके लिए, एडैप्टर हटा दें और किसी script() एडैप्टर से LogRocket.init को स्वयं कॉल करें।
Clearbit
अपनी पब्लिशेबल API की (pk_…) clearbit() को दें। Blume, Clearbit टैग रेंडर करता है, जो Clearbit में आपके द्वारा प्रबंधित सभी टैग्स — Reveal, फ़ॉर्म्स — लोड करता है।
analytics: [
clearbit({
key: "pk_xxxxxxxxxxxxxxxx",
}),
],
एडैप्टर इसके अलावा कुछ नहीं लेता।
Adobe Analytics
अपने Launch (Adobe Experience Platform Tags) एनवायरनमेंट का एम्बेड स्क्रिप्ट URL adobe() को दें। इसे Data Collection में Environments के अंतर्गत एनवायरनमेंट के इंस्टॉल निर्देशों से कॉपी करें; प्रोडक्शन वाला URL https://assets.adobedtm.com/…/launch-….min.js जैसा दिखता है।
analytics: [
adobe({
url: "https://assets.adobedtm.com/xxxxxxxx/launch-xxxxxxxx.min.js",
}),
],
Blume स्क्रिप्ट को एसिंक्रोनस रूप से लोड करता है; यह क्या ट्रैक करती है, यह प्रॉपर्टी के नियमों पर निर्भर है। क्लाइंट-साइड नेविगेशन पेज को रीलोड नहीं करते, इसलिए प्रॉपर्टी को हिस्ट्री में होने वाले बदलावों पर एक नियम दें (या किसी script() एडैप्टर से _satellite.track कॉल करें)।
कस्टम स्क्रिप्ट्स
बिना एडैप्टर वाले किसी भी प्रोवाइडर को, या किसी प्रोवाइडर के टैग को ऐसे रूप में जिसे उसका एडैप्टर रेंडर नहीं करता, लोड करने के लिए script() का उपयोग करें। हर एक, एक <script> टैग रेंडर करता है और उसमें src (बाहरी) या content (इनलाइन) में से ठीक एक सेट होना चाहिए।
analytics: [
// Umami
script({
src: "https://cloud.umami.is/script.js",
strategy: "defer",
attributes: { "data-website-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" },
}),
// An inline snippet
script({
content: "console.log('analytics ready')",
}),
],
attributes अतिरिक्त HTML एट्रिब्यूट्स (data-*, id, …) का मैप है जो टैग पर स्प्रेड किए जाते हैं, और strategy बाहरी स्क्रिप्ट्स में async या defer जोड़ता है।
रूट-रिलेटिव src, public/ में मौजूद किसी फ़ाइल की ओर इशारा करता है (public/js/redirects.js के लिए src: "/js/redirects.js"), इसलिए किसी deployment.base के अंतर्गत, किसी लिंक की तरह, उसमें भी बेस जुड़ जाता है: base: "/docs" के साथ, टैग /docs/js/redirects.js लोड करता है। जो src पहले से ही बेस से शुरू होता है, उसे वैसे ही छोड़ दिया जाता है जैसा वह लिखा गया है, और एब्सोल्यूट या प्रोटोकॉल-रिलेटिव URL ज्यों का त्यों आगे जाता है, इसलिए साइट के बेस के बाहर से सर्व की जाने वाली स्क्रिप्ट के लिए उसका पूरा URL दें।
विकल्प
| एडैप्टर | विकल्प | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
adobe() |
url |
— | Launch एनवायरनमेंट का एम्बेड स्क्रिप्ट URL। आवश्यक। |
amplitude() |
key |
— | Amplitude प्रोजेक्ट API की। आवश्यक। |
amplitude() |
अन्य कुछ भी | autocapture: true, fetchRemoteConfig: true |
amplitude.init विकल्पों में ज्यों का त्यों मर्ज किया जाता है। |
clarity() |
id |
— | Clarity प्रोजेक्ट ID। आवश्यक। |
clearbit() |
key |
— | Clearbit पब्लिशेबल API की। आवश्यक। |
clics() |
projectId |
— | सार्वजनिक Clics प्रोजेक्ट ID। आवश्यक। |
clics() |
allowLocalhost |
false |
प्रोडक्शन बिल्ड के लोकल प्रीव्यू के लिए data-allow-localhost उत्सर्जित करता है। |
clics() |
disableOutboundLinks |
false |
आउटबाउंड-लिंक ट्रैकिंग रोकने के लिए data-disable-outbound-links उत्सर्जित करता है। |
cloudflare() |
token |
— | Cloudflare Web Analytics साइट टोकन (मैनुअल सेटअप)। आवश्यक। |
cloudflare() |
अन्य कुछ भी | — | बीकन के data-cf-beacon JSON में ज्यों का त्यों फ़ॉरवर्ड किया जाता है। |
databuddy() |
clientId |
— | Databuddy क्लाइंट ID। आवश्यक। |
databuddy() |
अन्य कुछ भी | — | टैग पर data- एट्रिब्यूट के रूप में रेंडर किया जाता है। |
fathom() |
site |
— | Fathom साइट ID। आवश्यक। |
fathom() |
spa |
"auto" |
Fathom की हिस्ट्री-चेंज ट्रैकिंग (data-spa)। |
fathom() |
अन्य कुछ भी | — | टैग पर data- एट्रिब्यूट के रूप में रेंडर किया जाता है। |
googleAnalytics() |
id |
— | GA4 मेज़रमेंट ID। आवश्यक। |
googleAnalytics() |
अन्य कुछ भी | — | gtag('config', …) कॉल पर ज्यों का त्यों फ़ॉरवर्ड किया जाता है। |
googleTagManager() |
id |
— | Tag Manager कंटेनर ID। आवश्यक। |
googleTagManager() |
dataLayer |
dataLayer |
उस डेटा लेयर ग्लोबल का नाम जिसे कंटेनर पढ़ता है। |
heap() |
id |
— | Heap ऐप ID। आवश्यक। |
heap() |
अन्य कुछ भी | — | heap.load कॉन्फ़िग के रूप में ज्यों का त्यों फ़ॉरवर्ड किया जाता है। |
hightouch() |
key |
— | Hightouch इवेंट सोर्स राइट की। आवश्यक। |
hightouch() |
host |
us-east-1.hightouch-events.com |
इवेंट्स API होस्ट, बिना स्कीम के। |
hightouch() |
अन्य कुछ भी | — | htevents.load विकल्पों के रूप में ज्यों का त्यों फ़ॉरवर्ड किया जाता है। |
hotjar() |
id |
— | Hotjar साइट ID (hjid)। आवश्यक। |
hotjar() |
version |
6 |
ट्रैकिंग-कोड वर्ज़न (hjsv)। |
logrocket() |
id |
— | LogRocket ऐप ID (org/app)। आवश्यक। |
logrocket() |
अन्य कुछ भी | — | ज्यों का त्यों LogRocket.init को फ़ॉरवर्ड किया जाता है। |
mixpanel() |
token |
— | Mixpanel प्रोजेक्ट टोकन। आवश्यक। |
mixpanel() |
region |
us |
डेटा रेज़िडेंसी रीजन: us, eu, या in। |
mixpanel() |
अन्य कुछ भी | track_pageview: "url-with-path-and-query-string" |
mixpanel.init विकल्पों में ज्यों का त्यों मर्ज किया जाता है। |
oneDollarStats() |
hostname |
— | वह सादा होस्ट नाम जिसके अंतर्गत हर होस्ट पर हर इवेंट रिपोर्ट किया जाता है। |
oneDollarStats() |
अन्य कुछ भी | — | टैग पर data- एट्रिब्यूट के रूप में रेंडर किया जाता है ("hash-routing": "false" छोड़ दिया जाता है)। |
pirsch() |
code |
— | Pirsch आइडेंटिफ़िकेशन कोड। आवश्यक। |
pirsch() |
अन्य कुछ भी | — | टैग पर data- एट्रिब्यूट के रूप में रेंडर किया जाता है। |
plausible() |
domain |
— | Plausible में साइट का डोमेन। आवश्यक। |
plausible() |
host |
https://plausible.io |
सेल्फ़-होस्टेड या प्रॉक्सी किए गए इंस्टेंस का ओरिजिन। |
plausible() |
अन्य कुछ भी | — | टैग पर data- एट्रिब्यूट के रूप में रेंडर किया जाता है। |
posthog() |
key |
— | PostHog प्रोजेक्ट API की। आवश्यक। |
posthog() |
host |
https://us.i.posthog.com |
PostHog इंजेशन होस्ट (EU Cloud या सेल्फ़-होस्टेड)। |
posthog() |
अन्य कुछ भी | — | ज्यों का त्यों posthog.init को फ़ॉरवर्ड किया जाता है। |
segment() |
key |
— | Segment सोर्स राइट की। आवश्यक। |
segment() |
cdn |
https://cdn.segment.com |
Segment के CDN को प्रॉक्सी करने वाले कस्टम डोमेन का ओरिजिन। |
segment() |
अन्य कुछ भी | — | analytics.load विकल्पों के रूप में ज्यों का त्यों फ़ॉरवर्ड किया जाता है। |
vercel() |
mode, debug, … |
— | आधिकारिक Astro कंपोनेंट को प्रॉप्स के रूप में फ़ॉरवर्ड किए जाते हैं। |
script() |
src |
— | बाहरी स्क्रिप्ट URL। content के साथ परस्पर अनन्य। |
script() |
content |
— | इनलाइन स्क्रिप्ट बॉडी। src के साथ परस्पर अनन्य। |
script() |
strategy |
— | बाहरी स्क्रिप्ट के लिए async या defer। |
script() |
attributes |
— | <script> टैग पर स्प्रेड किए जाने वाले अतिरिक्त HTML एट्रिब्यूट्स। |
कस्टम इवेंट्स
Blume का पेज फ़ीडबैक (feedback, और लिखित फ़ीडबैक चालू होने पर feedback_comment), सर्च (search, search_select), असिस्टेंट (ask, ask_answer, ask_error), और नैरेशन प्लेयर (narration_play, narration_complete) हर उस कॉन्फ़िगर किए गए एडैप्टर के ज़रिए कस्टम इवेंट्स भेजते हैं जिसके पास क्लाइंट API है — PostHog, Mixpanel, Heap, Segment, Hightouch, Amplitude, LogRocket, Adobe, Google Analytics, Google Tag Manager (window.dataLayer पर { event } पुश के रूप में), Plausible, Databuddy, Fathom, OneDollarStats (हर प्रॉपर्टी मान को स्ट्रिंग के रूप में), Pirsch, Clarity, Hotjar, और Vercel। Fathom, Clarity, और Hotjar केवल इवेंट का नाम लेते हैं, इसलिए वे हर इवेंट को उसकी प्रॉपर्टीज़ के बिना गिनते हैं। Cloudflare और Clearbit के पास कोई इवेंट API नहीं है, और Clics के पास कोई ग्लोबल इवेंट API नहीं है जिसे Blume कॉल कर सके। हर इवेंट window पर blume:track CustomEvent के रूप में भी फ़ायर होता है, जिसके detail में { event, props } होता है, इसलिए कोई script() एडैप्टर उसे कहीं और भी फ़ॉरवर्ड कर सकता है। असिस्टेंट कभी भी किसी प्रश्न का टेक्स्ट किसी प्रोवाइडर को नहीं भेजता, और सर्च अपनी क्वेरीज़ को ठीक वैसे ही भेजता है जैसे वे टाइप की गई हैं, जब तक कि आप search.analytics.queries को false पर सेट न करें, जिससे इसके बजाय हर क्वेरी की लंबाई भेजी जाती है; दोनों ही स्थितियों में टेक्स्ट फिर भी blume:track इवेंट तक पहुँचता है, ताकि आपके द्वारा लिखा गया कोई लिसनर उसे फ़ॉरवर्ड कर सके। अपनी बिल्ट साइट को डिप्लॉय करने के लिए, Deployment देखें।