ক্রস-ডোমেন পরিমাপ

এই নির্দেশিকা বর্ণনা করে কিভাবে analytics.js ব্যবহার করে একাধিক ডোমেনে ইভেন্ট পরিমাপ করা যায়।

ওভারভিউ

analytics.js লাইব্রেরি একটি অনন্য ক্লায়েন্ট আইডি ব্যবহার করে তা নির্ধারণ করে যে ব্যবহারকারী নতুন নাকি ফিরে আসছেন। একই সম্পত্তিতে ইতিমধ্যেই একটি মিলিত ক্লায়েন্ট আইডি সহ একটি হিট পাঠানো হলে একজন ব্যবহারকারীকে ফেরত বলে বিবেচনা করা হয়।

ডিফল্টরূপে, ক্লায়েন্ট আইডি ব্রাউজারের কুকিজে সংরক্ষিত থাকে, যার মানে এটি শুধুমাত্র একই ডোমেনের পৃষ্ঠাগুলি দ্বারা অ্যাক্সেস করা যেতে পারে। বিভিন্ন ডোমেনে প্রদত্ত ব্যবহারকারীর জন্য একই ক্লায়েন্ট আইডি ট্র্যাক করতে ক্রস ডোমেন ট্র্যাকিং ব্যবহার করুন।

ডোমেন জুড়ে একটি ক্লায়েন্ট আইডি ভাগ করার জন্য, আপনি এটিকে একটি ক্যোয়ারী প্যারামিটার হিসেবে ইউআরএলগুলিতে যুক্ত করতে পারেন যা বর্তমান ডোমেন (সোর্স ডোমেন) থেকে গন্তব্য ডোমেনে নির্দেশ করে যা আপনি পরিমাপ করতে চান। যখন একজন ব্যবহারকারী একটি লিঙ্কে ক্লিক করেন বা উৎস ডোমেনে একটি ফর্ম জমা দেন এবং গন্তব্য ডোমেনে নেভিগেট করেন, তখন গন্তব্য পৃষ্ঠার কোডটি URL থেকে পড়ে ক্লায়েন্ট আইডি অ্যাক্সেস করতে পারে।

সোর্স ডোমেনে ক্লায়েন্ট আইডি পাওয়া

উৎস ডোমেনে একটি ক্লায়েন্ট আইডি পুনরুদ্ধার করতে, আপনি 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()
});

যদি গন্তব্য ডোমেনে একটি ক্লায়েন্ট আইডি ইতিমধ্যেই বিদ্যমান থাকে তবে এই পদ্ধতিটি এটিকে ওভাররাইট করবে।

ইউআরএল শেয়ারিং শনাক্ত করা হচ্ছে

একটি ইউআরএলে ক্লায়েন্ট আইডি পাস করার একটি সম্ভাব্য সমস্যা হল যে ব্যবহারকারীরা ইউআরএল শেয়ার করে এবং এটা সম্ভব যে একজন ব্যবহারকারী এমন একটি ইউআরএল শেয়ার করবে যাতে অন্য কারোর একটি ক্লায়েন্ট আইডি রয়েছে।

এই সমস্যা এড়ানোর একটি উপায় হল ক্লায়েন্ট আইডিতে একটি টাইমস্ট্যাম্প যুক্ত করা। এটি আপনাকে সনাক্ত করতে দেয় যে কখন URLটি তৈরি করা হয়েছিল এবং যদি খুব বেশি সময় চলে যায় তবে ক্লায়েন্ট আইডিটিকে অবৈধ বিবেচনা করুন৷ একটি টাইমস্ট্যাম্প ছাড়াও, আপনি ব্যবহারকারী এজেন্ট স্ট্রিং বা অন্য ব্রাউজার বা ডিভাইস-নির্দিষ্ট মেটাডেটা যোগ করতে পারেন। তারপর গন্তব্য ডোমেনে, যদি মেটাডেটা মেলে না, আপনি জানতে পারবেন ক্লায়েন্ট আইডি অন্য কারো কাছ থেকে এসেছে।

স্ব-রেফারেল উপেক্ষা করা

একটি নতুন রেফারেল প্রচারাভিযান তৈরি করা হবে যখনই একটি পৃষ্ঠার নথির রেফারার একটি হোস্টনাম থেকে আসে যা আপনার সম্পত্তির জন্য রেফারেল বর্জন তালিকার কোনো এন্ট্রির সাথে মেলে না।

ডিফল্টরূপে, রেফারেল এক্সক্লুশন তালিকায় শুধুমাত্র সেই ডোমেন অন্তর্ভুক্ত থাকে যা আপনি প্রপার্টি তৈরি করার সময় প্রদান করেছিলেন। ব্যবহারকারীরা ডোমেন জুড়ে নেভিগেট করার সময় নতুন রেফারেল প্রচারাভিযান তৈরি হওয়া থেকে বিরত রাখতে, আপনাকে অবশ্যই রেফারেল বর্জন তালিকায় পরিমাপ করতে চান এমন প্রতিটি ডোমেনের জন্য একটি এন্ট্রি যোগ করতে হবে।

আইফ্রেম

উপরে বর্ণিত কৌশলটির জন্য JavaScript কোড প্রয়োজন যা analytics.js লোড হওয়ার পরে চলে। যেহেতু <iframe> উপাদানগুলি সাধারণত analytics.js লোড হওয়ার আগে পৃষ্ঠায় বিদ্যমান থাকে, তাই iframe-এর সোর্স প্যারামিটারে URL-এ ক্লায়েন্ট আইডি যুক্ত করা প্রায়শই একটি বিকল্প নয়।

এই সমস্যাটি সমাধান করতে আপনি আইফ্রেমের ভিতরে পৃষ্ঠাটিকে কনফিগার করতে পারেন যাতে এটির ট্র্যাকার তৈরি করতে দেরি হয় যতক্ষণ না এটি মূল পৃষ্ঠা থেকে ক্লায়েন্ট আইডি ডেটা না পায়। এবং মূল পৃষ্ঠায় আপনি 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-এর পৃষ্ঠাটি কখনই ক্লায়েন্ট আইডি পাবে না। আপনি এই কেসটি কীভাবে পরিচালনা করবেন তা নির্ভর করে ক্লায়েন্ট আইডিগুলি কতটা গুরুত্বপূর্ণ তার উপর।

আপনি যদি শুধুমাত্র ডেটা ক্যাপচার করতে চান যখন আপনি জানেন যে ক্লায়েন্ট আইডিগুলি একই, উপরের কোডটি যথেষ্ট। আপনি যদি প্যারেন্ট পৃষ্ঠা থেকে ক্লায়েন্ট আইডি গ্রহণ করে কিনা তা নির্বিশেষে ফ্রেমে পৃষ্ঠায় ডেটা ক্যাপচার করতে চান তবে আপনাকে একটি ফলব্যাক যোগ করতে হবে।

নিম্নলিখিত কোডটি আইফ্রেমে পৃষ্ঠায় একটি টাইমআউট ব্যবহার করে যে ক্ষেত্রে মূল পৃষ্ঠাটি ধীর বা ক্লায়েন্ট আইডি পাঠাতে ব্যর্থ হয় তা পরিচালনা করতে:

// 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);