क्रॉस-डोमेन मेज़रमेंट

इस गाइड में analytics.js का इस्तेमाल करके, कई डोमेन पर इवेंट मेज़र करने का तरीका बताया गया है.

खास जानकारी

कोई उपयोगकर्ता नया है या लौटने वाला, यह तय करने के लिए analytics.js लाइब्रेरी एक खास Client-ID का इस्तेमाल करती है. किसी उपयोगकर्ता को वापस लौटने वाला तब माना जाता है, जब मेल खाने वाले क्लाइंट आईडी वाला हिट उसी प्रॉपर्टी को पहले ही भेज दिया गया हो.

डिफ़ॉल्ट रूप से, Client-ID को ब्राउज़र की कुकी में सेव किया जाता है. इसका मतलब है कि इसे सिर्फ़ उसी डोमेन के पेज से ऐक्सेस किया जा सकता है. किसी उपयोगकर्ता के लिए एक ही Client-ID को अलग-अलग डोमेन में ट्रैक करने के लिए, क्रॉस-डोमेन ट्रैकिंग का इस्तेमाल करें.

अलग-अलग डोमेन में Client-ID शेयर करने के लिए, उसे क्वेरी पैरामीटर के तौर पर उन यूआरएल में जोड़ा जा सकता है जो मौजूदा डोमेन (सोर्स डोमेन) से उस डेस्टिनेशन डोमेन पर ले जाते हैं जिसे आपको मेज़र करना है. जब कोई उपयोगकर्ता किसी लिंक पर क्लिक करता है या सोर्स डोमेन पर कोई फ़ॉर्म सबमिट करता है और डेस्टिनेशन डोमेन पर जाता है, तो डेस्टिनेशन पेज पर मौजूद कोड, यूआरएल से Client-ID को ऐक्सेस कर सकता है.

सोर्स डोमेन पर क्लाइंट आईडी पाना

सोर्स डोमेन पर क्लाइंट आईडी को फिर से पाने के लिए, get तरीके का इस्तेमाल करें:

ga(function(tracker) {
  var clientId = tracker.get('clientId');
});

सोर्स डोमेन पर क्लाइंट आईडी मिलने के बाद, उसे उन लिंक में जोड़ा जा सकता है जो डेस्टिनेशन डोमेन पर ले जाते हैं.

<a href="https://destination.com/?clientId=XXXXXX">destination.com</a>

डेस्टिनेशन डोमेन पर क्लाइंट आईडी सेट करना

डेस्टिनेशन डोमेन पर ट्रैकर ऑब्जेक्ट को यह बताया जा सकता है कि क्लाइंट आईडी का इस्तेमाल करने के लिए कौनसा क्लाइंट आईडी इस्तेमाल करना है. इसके लिए, create कमांड में क्लाइंट आईडी फ़ील्ड की जानकारी देनी होगी:

ga('create', 'UA-XXXXX-Y', 'auto', {
  'clientId': getClientIdFromUrl()
});

अगर डेस्टिनेशन डोमेन पर कोई क्लाइंट आईडी पहले से मौजूद है, तो यह तरीका उसे बदल देगा.

यूआरएल शेयर किए जाने का पता लगाया जा रहा है

किसी यूआरएल में क्लाइंट आईडी पास करने में एक समस्या यह हो सकती है कि उपयोगकर्ता, यूआरएल शेयर करते हैं. हो सकता है कि उपयोगकर्ता ऐसा यूआरएल शेयर करे जिसमें किसी दूसरे व्यक्ति का क्लाइंट आईडी शामिल हो.

इस समस्या से बचने का एक तरीका यह है कि आप क्लाइंट आईडी में टाइमस्टैंप जोड़ें. इससे यह पता लगाया जा सकता है कि यूआरएल को कब बनाया गया था. साथ ही, अगर बहुत ज़्यादा समय बीत चुका है, तो क्लाइंट आईडी को अमान्य मानें. टाइमस्टैंप के अलावा, उपयोगकर्ता एजेंट स्ट्रिंग या अन्य ब्राउज़र या डिवाइस के हिसाब से मेटाडेटा जोड़ा जा सकता है. इसके बाद, डेस्टिनेशन डोमेन पर अगर मेटाडेटा मेल नहीं खाता, तो आपको पता चल जाएगा कि क्लाइंट आईडी किसी और का है.

सेल्फ़-रेफ़रल को अनदेखा करना

जब किसी पेज का दस्तावेज़ रेफ़रर किसी ऐसे होस्टनेम से आता है जो आपकी प्रॉपर्टी के लिए, रेफ़रल एक्सक्लूज़न की सूची में मौजूद किसी भी एंट्री से मेल नहीं खाता, तो एक नया रेफ़रल कैंपेन बनाया जाएगा.

डिफ़ॉल्ट रूप से, बाहर रखे गए रेफ़रल की सूची में सिर्फ़ वह डोमेन शामिल होता है जो आपने प्रॉपर्टी बनाते समय दिया था. उपयोगकर्ताओं के एक से दूसरे डोमेन पर जाने पर, नए रेफ़रल कैंपेन जनरेट होने से रोकने के लिए, आपको रेफ़रल एक्सक्लूज़न सूची में हर उस डोमेन के लिए एंट्री जोड़नी है जिसे आपको मेज़र करना है.

iframe

ऊपर बताई गई तकनीक के लिए JavaScript कोड की ज़रूरत होती है, जो analytics.js लोड होने के बाद चलता है. आम तौर पर analytics.js के लोड होने से पहले, पेज पर <iframe> एलिमेंट मौजूद होते हैं. इसलिए, iframe के सोर्स पैरामीटर में यूआरएल में Client-ID जोड़ना अक्सर एक विकल्प नहीं होता.

इस समस्या को हल करने के लिए, iframe में पेज को कॉन्फ़िगर किया जा सकता है, ताकि ट्रैकर बनाने में तब तक की देरी हो, जब तक उसे पैरंट पेज से Client-ID डेटा न मिल जाए. साथ ही, पैरंट पेज पर postMessage का इस्तेमाल करके, उसे iframe पेज पर क्लाइंट आईडी भेजने के लिए कॉन्फ़िगर किया जाता है.

यहां source.com पर पैरंट पेज कोड का उदाहरण दिया गया है:

<iframe id="destination-frame" src="https://destination.com"></iframe>

<script>
ga('create', 'UA-XXXXX-Y', 'auto');
ga(function(tracker) {
  // Gets the client ID of the default tracker.
  var clientId = tracker.get('clientId');

  // Gets a reference to the window object of the destionation iframe.
  var frameWindow = document.getElementById('destination-frame').contentWindow;

  // Sends the client ID to the window inside the destination frame.
  frameWindow.postMessage(clientId, 'https://destination.com');
});
</script>

और destination.com पर होस्ट किए गए iframe में मैसेज पाने वाला कोड यह है:

window.addEventListener('message', function(event) {
  // Ignores messages from untrusted domains.
  if (event.origin != 'https://destination.com') return;

  ga('create', 'UA-XXXXX-Y', 'auto', {
    clientId: event.data
  });
});

ऐसा हो सकता है कि analytics.js पैरंट पेज पर लोड न हो पाए और फिर iframe में मौजूद पेज को कभी क्लाइंट आईडी न मिले. इस मामले को कैसे हैंडल किया जाएगा, यह इस बात पर निर्भर करता है कि क्लाइंट आईडी का मेल खाना कितना ज़रूरी है.

अगर डेटा सिर्फ़ तब कैप्चर करना है, जब आपको पता हो कि एक जैसे क्लाइंट आईडी हैं, तो ऊपर दिया गया कोड ही काफ़ी है. अगर आप फ़्रेम में पेज पर मौजूद डेटा कैप्चर करना चाहते हैं, भले ही उसे पैरंट पेज से क्लाइंट आईडी मिल रहा हो या नहीं, तो आपको एक फ़ॉलबैक जोड़ना होगा.

नीचे दिया गया कोड, iframe में मौजूद पेज पर टाइम आउट का इस्तेमाल करता है. ऐसा उन मामलों को हैंडल करने के लिए किया जाता है जहां पैरंट पेज धीमा होता है या क्लाइंट आईडी नहीं भेज पाता:

// Stores whether or not the tracker has been created.
var trackerCreated = false;

function createTracker(opt_clientId) {
  if (!trackerCreated) {
    var fields = {};
    if (opt_clientId) {
      fields.clientId = opt_clientId;
    }

    ga('create', 'UA-XXXXX-Y', 'auto', fields);
    trackerCreated = true;
  }
}


window.addEventListener('message', function(event) {
  // Ignores messages from untrusted domains.
  if (event.origin != 'https://destination.com') return;

  // Creates the tracker with the data from the parent page.
  createTracker(event.data);
});


// Waits for three seconds to receive the client ID from the parent page.
// If that doesn't happen, it creates the tracker as normal.
setTimeout(createTracker, 3000);