সার্ভার-সাইড ট্যাগিংয়ের একটি ভূমিকাতে , আপনি ট্যাগ ম্যানেজারে সার্ভার-সাইড ট্যাগিংয়ের একটি ওভারভিউ পেয়েছেন। আপনি ক্লায়েন্ট কী এবং তারা কী করেন তা আপনি শিখেছেন: ক্লায়েন্টরা আপনার ব্যবহারকারীদের ডিভাইস থেকে ইভেন্ট ডেটা গ্রহণ করে এবং বাকি ধারক দ্বারা ব্যবহারের জন্য এটি মানিয়ে নেয়। এই নিবন্ধটি সার্ভার-সাইড ট্যাগগুলিতে সেই ডেটা কীভাবে প্রক্রিয়া করতে হয় তা বর্ণনা করে।
একটি সার্ভার কন্টেইনারে, ট্যাগগুলি আপনার ক্লায়েন্টদের কাছ থেকে ইনকামিং ইভেন্ট ডেটা গ্রহণ করে, এটিকে রূপান্তরিত করে এবং সংগ্রহ ও বিশ্লেষণের জন্য ফেরত পাঠায়। ট্যাগ আপনি যেখানে চান ডেটা পাঠাতে পারেন। যতক্ষণ না গন্তব্য HTTP অনুরোধগুলি গ্রহণ করে, এটি একটি সার্ভার কন্টেইনার থেকে ডেটাও গ্রহণ করতে পারে।
সার্ভার পাত্রে তিনটি অন্তর্নির্মিত ট্যাগ রয়েছে যা কোন কাস্টম কনফিগারেশন ছাড়াই ব্যবহারের জন্য প্রস্তুত:
- Google Analytics 4
- Google Analytics: সর্বজনীন বিশ্লেষণ
- HTTP অনুরোধ
আপনি যদি Google Analytics ব্যতীত অন্য কোথাও ডেটা পাঠাতে চান, বা HTTP অনুরোধ ট্যাগ প্রদান করে তার থেকে আপনার আরও বেশি বৈশিষ্ট্যের প্রয়োজন, আপনাকে একটি ভিন্ন ট্যাগ ব্যবহার করতে হবে। আপনি কমিউনিটি টেমপ্লেট গ্যালারিতে অতিরিক্ত ট্যাগ খুঁজে পেতে পারেন বা আপনি নিজের লিখতে পারেন। এই টিউটোরিয়ালটি আপনাকে একটি সার্ভার কন্টেইনারের জন্য আপনার নিজস্ব ট্যাগ লেখার মূল বিষয়গুলি শেখাবে।
উদ্দেশ্য
- ইভেন্ট ডেটা পড়তে, HTTP অনুরোধ পাঠাতে এবং ব্রাউজারে কুকি সেট করতে কোন API ব্যবহার করতে হবে তা জানুন।
- আপনার ট্যাগের কনফিগারেশন বিকল্পগুলি ডিজাইন করার জন্য সেরা অনুশীলনগুলি শিখুন৷
- ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটার মধ্যে পার্থক্য এবং কেন সেই পার্থক্য গুরুত্বপূর্ণ তা জানুন।
- সার্ভার কন্টেইনারে ট্যাগের ভূমিকা জানুন। বুঝুন একটি ট্যাগ কি করা উচিত এবং কি করা উচিত নয়।
- কমিউনিটি টেমপ্লেট গ্যালারিতে একটি ট্যাগ টেমপ্লেট জমা দেওয়ার বিষয়ে কখন বিবেচনা করতে হবে তা জানুন।
পূর্বশর্ত
- একটি স্থাপন করা সার্ভার ধারক
- ট্যাগ ম্যানেজার, সার্ভার কন্টেনার এবং তাদের মৌলিক ধারণা যেমন ক্লায়েন্ট , ট্যাগ , ট্রিগার এবং ভেরিয়েবলের সাথে পরিচিতি
- ট্যাগ এবং ভেরিয়েবলের জন্য টেমপ্লেট লেখার মৌলিক বিষয়গুলির সাথে পরিচিতি
Baz বিশ্লেষণ ট্যাগ
এই টিউটোরিয়ালে আপনি একটি ট্যাগ তৈরি করবেন যা Baz Analytics নামক একটি পরিষেবাতে পরিমাপের ডেটা পাঠায়।
Baz অ্যানালিটিক্স হল একটি সহজ, অনুমানমূলক বিশ্লেষণ পরিষেবা যা HTTP GET অনুরোধের মাধ্যমে https://example.com/baz_analytics
এ ডেটা গ্রহণ করে। এটির নিম্নলিখিত পরামিতি রয়েছে:
প্যারামিটার | উদাহরণ | বর্ণনা |
---|---|---|
আইডি | বিএ-1234 | আপনার Baz Analytics অ্যাকাউন্টের আইডি। |
en | ক্লিক | ইভেন্টের নাম। |
l | https://www.google.com/search?q=sgtm | পৃষ্ঠার URL যেখানে ঘটনা ঘটেছে। |
u | 2384294892 | কর্ম সম্পাদনকারী ব্যবহারকারীর আইডি। একাধিক অ্যাকশনকে একক ব্যবহারকারীর সাথে টাই করতে ব্যবহৃত হয়। |
ট্যাগ কনফিগারেশন
প্রথম কাজটি ট্যাগ টেমপ্লেট তৈরি করা হয়। আপনার কন্টেইনারের টেমপ্লেট বিভাগে যান এবং ট্যাগ টেমপ্লেট বিভাগে নতুন ক্লিক করুন। আপনার ট্যাগে একটি নাম এবং বিবরণ যোগ করুন।
এরপরে, আপনার ট্যাগের জন্য বিভিন্ন কনফিগারেশন বিকল্প যোগ করতে টেমপ্লেট সম্পাদকের ক্ষেত্র বিভাগে যান। সুস্পষ্ট পরবর্তী প্রশ্ন হল: আপনার কোন বিকল্পগুলি প্রয়োজন? ট্যাগ তৈরি করার জন্য আপনি তিনটি উপায় বেছে নিতে পারেন:
- মোট কনফিগারেশন : প্রতিটি প্যারামিটারের জন্য একটি কনফিগারেশন ক্ষেত্র যোগ করুন। ব্যবহারকারীকে স্পষ্টভাবে সবকিছু সেট করতে হবে।
- কোন কনফিগারেশন নেই : ট্যাগ কনফিগার করার জন্য কোন বিকল্প নেই। সমস্ত তথ্য ইভেন্ট থেকে সরাসরি নেওয়া হয়.
- কিছু কনফিগারেশন : কিছু প্যারামিটারের জন্য ক্ষেত্র আছে এবং অন্যদের জন্য নয়।
প্রতিটি প্যারামিটারের জন্য ক্ষেত্র থাকা খুবই নমনীয় এবং ব্যবহারকারীকে তাদের ট্যাগ কনফিগারেশনের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। অনুশীলনে যাইহোক, এটি সাধারণত অনেক সদৃশ কাজ করে। বিশেষ করে, Baz Analytics l
প্যারামিটারের মতো জিনিস, যাতে পৃষ্ঠার URL থাকে, দ্ব্যর্থহীন এবং সর্বজনীন। প্রতিবার ট্যাগ কনফিগার করার সময় একই রকম, অপরিবর্তিত ডেটা প্রবেশ করানো কম্পিউটারের জন্য সবচেয়ে ভালো কিছু থাকে।
হয়তো উত্তর হল একটি ট্যাগ যা শুধুমাত্র একটি ইভেন্ট থেকে ডেটা নেয়। এটি একজন ব্যবহারকারীর পক্ষে কনফিগার করার জন্য সবচেয়ে সহজ সম্ভাব্য ট্যাগ, যেহেতু তাদের আসলে করার মতো কিছুই নেই। অন্যদিকে, এটি সবচেয়ে সীমাবদ্ধ এবং ভঙ্গুর বিকল্পও। প্রয়োজনে ব্যবহারকারীরা ট্যাগের আচরণ পরিবর্তন করতে পারে না। উদাহরণস্বরূপ, হয়ত তারা তাদের ওয়েবসাইটে এবং Google Analytics-এ একটি ইভেন্ট purchase
বলে, কিন্তু Baz Analytics এটিকে buy
বলে। অথবা, ইনকামিং ইভেন্ট ডেটার গঠন সম্পর্কে ট্যাগটি যে অনুমানগুলি তৈরি করে তা বাস্তবের সাথে মেলে না৷ উভয় ক্ষেত্রে, ব্যবহারকারী আটকে আছে.
অনেক কিছুর মতো, উত্তরটি দুটি চরমের মধ্যে কোথাও রয়েছে। কিছু ডেটা সর্বদা ইভেন্ট থেকে নেওয়ার বোধগম্য হয়। অন্যান্য ডেটা ব্যবহারকারীর দ্বারা কনফিগার করা উচিত। আপনি কিভাবে সিদ্ধান্ত নেবেন কোনটি কোনটি? এই প্রশ্নের উত্তর দেওয়ার জন্য, আমাদের কন্টেইনারে আসা ডেটাগুলিকে ঘনিষ্ঠভাবে দেখতে হবে।
তথ্য কোথা থেকে আসে?
Google Analytics 4 ট্যাগ থেকে একটি সার্ভার কন্টেইনারে আসা ডেটা মোটামুটিভাবে দুটি বিভাগে বিভক্ত করা যেতে পারে: ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগ্রহ করা ডেটা।
ব্যবহারকারী-নির্দিষ্ট ডেটা হল সবকিছু যা একজন ব্যবহারকারী একটি gtag.js event
কমান্ডে রাখে। উদাহরণস্বরূপ, এই মত একটি কমান্ড:
gtag('event', 'search', {
search_term: 'beets',
});
সার্ভার কন্টেইনারে নিম্নলিখিত পরামিতিগুলির ফলাফল হবে:
{
event_name: 'search',
search_term: 'beets',
}
এটি যথেষ্ট সহজ, কিন্তু ট্যাগের দৃষ্টিকোণ থেকে এটির সাথে কাজ করা খুব কঠিন। কারণ এই ডেটা ব্যবহারকারীর দ্বারা প্রবেশ করা হয়, এটি যে কোনও কিছু হতে পারে। সম্ভবত, উপরের মত, ব্যবহারকারী শুধুমাত্র প্রস্তাবিত ইভেন্ট এবং পরামিতি পাঠান, কিন্তু তাদের এটি করার কোন প্রয়োজন নেই। event_name
প্যারামিটারের অবস্থানের (কিন্তু মান নয়!) গুরুত্বপূর্ণ ব্যতিক্রমের সাথে, ব্যবহারকারীর ডেটার ফর্ম বা গঠন সম্পর্কে কোনও গ্যারান্টি নেই।
সৌভাগ্যবশত, ব্যবহারকারীর প্রবেশ করা ডেটাই একমাত্র জিনিস নয় যা ধারকটি গ্রহণ করবে। এটি ব্রাউজারে Google Analytics 4 ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা একগুচ্ছ ডেটাও পাবে। এর মধ্যে রয়েছে:
-
ip_override
-
language
-
page_location
-
page_referrer
-
page_title
-
screen_resolution
-
user_agent
অতিরিক্তভাবে, যদি সার্ভারের অনুরোধ কোনো ওয়েব ব্রাউজার থেকে আসে, তাহলে getCookieValue
API-এর মাধ্যমে ব্রাউজার কুকি ডেটাও পাওয়া যেতে পারে।
একসাথে, এগুলি স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা তৈরি করে যা আমরা উপরে উল্লেখ করেছি। সাধারণভাবে, এটি এমন ডেটা নিয়ে গঠিত যা সর্বজনীন এবং শব্দার্থগতভাবে দ্ব্যর্থহীন। যখন ব্রাউজারে একটি GA4 ট্যাগ থেকে একটি অনুরোধ আসে, এই ডেটা সর্বদা উপলব্ধ থাকবে এবং এটি সর্বদা একই বিন্যাসে থাকবে৷ এই পরামিতিগুলির আরও বিশদ বিবরণের জন্য, ইভেন্টের রেফারেন্সটি দেখুন।
এই শ্রেণিবিন্যাসটি ব্যবহারকারীর দ্বারা কোন ডেটা কনফিগার করা উচিত এবং ট্যাগে কোন ডেটা নির্দিষ্ট করা উচিত তা নির্ধারণ করার সময় ব্যবহার করার জন্য আমাদের একটি দরকারী টুল দেয়৷ স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা ইভেন্ট থেকে সরাসরি পড়তে নিরাপদ। অন্য সবকিছু ব্যবহারকারী দ্বারা কনফিগার করা উচিত.
এটি মাথায় রেখে, Baz Analytics ট্যাগের পরামিতিগুলিকে আরও একবার দেখুন৷
- পরিমাপ আইডি,
id
: যেহেতু এটি স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয় না, এটি একটি মানের একটি স্পষ্ট উদাহরণ যা ট্যাগ কনফিগার করার সময় ব্যবহারকারীর দ্বারা প্রবেশ করা উচিত। - ইভেন্টের নাম,
en
: উপরে উল্লিখিত হিসাবে, ইভেন্টের নাম সর্বদা সরাসরিevent_name
প্যারামিটার থেকে নেওয়া যেতে পারে। যাইহোক, যেহেতু এর মান ব্যবহারকারী-সংজ্ঞায়িত, তাই প্রয়োজন হলে নামটি ওভাররাইড করার ক্ষমতা দেওয়া একটি ভাল ধারণা। - পৃষ্ঠা URL,
l
: এই মানটিpage_location
প্যারামিটার থেকে নেওয়া যেতে পারে, যা প্রতিটি ইভেন্টে Google Analytics GA4 ব্রাউজার ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয়। অতএব, আপনার ব্যবহারকারীকে ম্যানুয়ালি একটি মান লিখতে হবে না। - ইউজার আইডি,
u
: Baz অ্যানালিটিক্স সার্ভার ট্যাগে,u
প্যারামিটারটি ব্যবহারকারী-নির্দিষ্ট নয় বা পৃষ্ঠায় ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয় না। পরিবর্তে, এটি একটি ব্রাউজার কুকিতে সংরক্ষণ করা হয় যাতে ব্যবহারকারীরা ওয়েবসাইটে একাধিক ভিজিট জুড়ে সনাক্ত করা যায়। আপনি নীচের বাস্তবায়নে দেখতে পাবেন, এটি Baz Analytics সার্ভার ট্যাগ যা কুকি সেট করতেsetCookie
API ব্যবহার করে। এর মানে হল Baz Analytics ট্যাগই একমাত্র জিনিস যা জানে কোথায় এবং কিভাবে কুকি সংরক্ষণ করা হয়।l
মত,u
প্যারামিটার স্বয়ংক্রিয়ভাবে সংগ্রহ করা উচিত।
একবার আপনি ট্যাগ কনফিগারেশন সেট আপ করার পরে, এটি এই মত কিছু দেখা উচিত:
ট্যাগ বাস্তবায়ন
এখন যেহেতু ট্যাগের কনফিগারেশনটি স্কোয়ার করা হয়েছে, আপনি স্যান্ডবক্সযুক্ত জাভাস্ক্রিপ্টে এর আচরণ বাস্তবায়নের জন্য এগিয়ে যেতে প্রস্তুত।
ট্যাগটি চারটি জিনিস করতে হবে:
- ট্যাগের কনফিগারেশন থেকে ইভেন্টের নাম পান।
- ইভেন্টের
page_location
প্রপার্টি থেকে পৃষ্ঠার URL পান। - একটি ব্যবহারকারী আইডি গণনা. ট্যাগটি
_bauid
নামক একটি কুকিতে ব্যবহারকারী আইডি খুঁজবে। যদি সেই কুকিটি উপস্থিত না থাকে, ট্যাগটি একটি নতুন মান গণনা করবে এবং পরবর্তী অনুরোধের জন্য এটি সংরক্ষণ করবে৷ - একটি URL তৈরি করুন এবং Baz Analytics সংগ্রহ সার্ভারে একটি অনুরোধ করুন৷
ট্যাগটি সামগ্রিকভাবে কন্টেইনারে কীভাবে ফিট করে সে সম্পর্কে চিন্তা করার জন্য একটু সময় নেওয়াও মূল্যবান। বিভিন্ন ধারক উপাদান বিভিন্ন ভূমিকা পালন করে, তাই এমন কিছু জিনিস রয়েছে যা ট্যাগ করে না বা করা উচিত নয়। আপনার ট্যাগ:
- এটি চালানো উচিত কিনা তা বের করতে ইভেন্টটি পরীক্ষা করা উচিত নয়। যে একটি ট্রিগার জন্য কি.
-
runContainer
API দিয়ে কন্টেইনার চালানো উচিত নয়। এটাই ক্লায়েন্টের কাজ। - কুকিজের গুরুত্বপূর্ণ ব্যতিক্রমের সাথে, অনুরোধ বা প্রতিক্রিয়ার সাথে সরাসরি যোগাযোগ করার চেষ্টা করা উচিত নয়। এটাও ক্লায়েন্টের কাজ।
একটি ট্যাগ টেমপ্লেট লেখা যা এই জিনিসগুলির মধ্যে যেকোন একটি করে তা আপনার ট্যাগের ব্যবহারকারীদের জন্য বিভ্রান্তিকর আচরণের কারণ হবে৷ উদাহরণস্বরূপ, একটি ট্যাগ যা আগত অনুরোধের প্রতিক্রিয়া পাঠায় তা ক্লায়েন্টকে একই কাজ করতে বাধা দেবে। এটি কনটেইনারটি কীভাবে আচরণ করবে সে সম্পর্কে ব্যবহারকারীদের প্রত্যাশা ভঙ্গ করবে।
এই সমস্ত কিছু মাথায় রেখে, নীচে স্যান্ডবক্সযুক্ত JS-এ ট্যাগের একটি টীকাযুক্ত বাস্তবায়ন রয়েছে।
const encodeUriComponent = require('encodeUriComponent');
const generateRandom = require('generateRandom');
const getCookieValues = require('getCookieValues');
const getEventData = require('getEventData');
const logToConsole = require('logToConsole');
const makeString = require('makeString');
const sendHttpGet = require('sendHttpGet');
const setCookie = require('setCookie');
const USER_ID_COOKIE = '_bauid';
const MAX_USER_ID = 1000000000;
// The event name is taken from either the tag's configuration or from the
// event. Configuration data comes into the sandboxed code as a predefined
// variable called 'data'.
const eventName = data.eventName || getEventData('event_name');
// page_location is automatically collected by the Google Analytics 4 tag.
// Therefore, it's safe to take it directly from event data rather than require
// the user to specify it. Use the getEventData API to retrieve a single data
// point from the event. There's also a getAllEventData API that returns the
// entire event.
const pageLocation = getEventData('page_location');
const userId = getUserId();
const url = 'https://www.example.com/baz_analytics?' +
'id=' + encodeUriComponent(data.measurementId) +
'en=' + encodeUriComponent(eventName) +
(pageLocation ? 'l=' + encodeUriComponent(pageLocation) : '') +
'u=' + userId;
// The sendHttpGet API takes a URL and returns a promise that resolves with the
// result once the request completes. You must call data.gtmOnSuccess() or
// data.gtmOnFailure() so that the container knows when the tag has finished
// executing.
sendHttpGet(url).then((result) => {
if (result.statusCode >= 200 && result.statusCode < 300) {
data.gtmOnSuccess();
} else {
data.gtmOnFailure();
}
});
// The user ID is taken from a cookie, if present. If it's not present, a new ID
// is randomly generated and stored for later use.
//
// Generally speaking, tags should not interact directly with the request or
// response. This prevents different tags from conflicting with each other.
// Cookies, however, are an exception. Tags are the only container entities that
// know which cookies they need to read or write. Therefore, it's okay for tags
// to interact with them directly.
function getUserId() {
const userId = getCookieValues(USER_ID_COOKIE)[0] || generateRandom(0, MAX_USER_ID);
// The setCookie API adds a value to the 'cookie' header on the response.
setCookie(USER_ID_COOKIE, makeString(userId), {
'max-age': 3600 * 24 * 365 * 2,
domain: 'auto',
path: '/',
httpOnly: true,
secure: true,
});
return userId;
}
যে সঙ্গে, ট্যাগ বাস্তবায়িত হয়. আপনি ট্যাগটি ব্যবহার করার আগে, আপনাকে এর API অনুমতিগুলি সঠিকভাবে সেট করতে হবে৷ টেমপ্লেট এডিটরের অনুমতি ট্যাবে যান এবং নিম্নলিখিত অনুমতিগুলি নির্দিষ্ট করুন:
- কুকি মান পড়ে:
_bauid
- ইভেন্ট ডেটা পড়ে:
event_name
এবংpage_location
- HTTP অনুরোধ পাঠায়:
https://www.example.com/*
- একটি কুকি সেট করে:
_bauid
আপনার ট্যাগের জন্য পরীক্ষাও লিখতে হবে। টেমপ্লেট পরীক্ষা সম্পর্কে আরও পড়তে, টেমপ্লেট বিকাশকারী গাইডের পরীক্ষা বিভাগটি পড়ুন।
অবশেষে, অন্তত একবার রান কোড বোতাম দিয়ে আপনার ট্যাগ চালানোর চেষ্টা করতে ভুলবেন না। এটি আপনার সার্ভারে তৈরি করা থেকে অনেক সহজ ভুল প্রতিরোধ করবে।
কমিউনিটি টেমপ্লেট গ্যালারিতে আপনার ট্যাগ জমা দিন
যেহেতু আপনি একটি নতুন ট্যাগ তৈরি, পরীক্ষা এবং স্থাপন করার সমস্ত কাজের মধ্য দিয়ে গেছেন, তাই এটি নিজের কাছে রাখার কোন কারণ নেই৷ আপনি যদি মনে করেন যে আপনার নতুন ট্যাগটি অন্য লোকেদের জন্য উপযোগী হবে, তা কমিউনিটি টেমপ্লেট গ্যালারিতে জমা দেওয়ার কথা বিবেচনা করুন।
উপসংহার
এই টিউটোরিয়ালে, আপনি একটি সার্ভার কন্টেইনারের জন্য একটি ট্যাগ লেখার মূল বিষয়গুলো শিখেছেন। আপনি শিখেছেন:
- ইভেন্ট ডেটা পড়তে, HTTP অনুরোধ পাঠাতে এবং ব্রাউজারে কুকি সেট করতে কোন API ব্যবহার করতে হবে।
- একটি ট্যাগের জন্য কনফিগারেশন বিকল্পগুলি ডিজাইন করার জন্য সর্বোত্তম অনুশীলন।
- ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটার মধ্যে পার্থক্য এবং কেন সেই পার্থক্য গুরুত্বপূর্ণ।
- পাত্রে একটি ট্যাগের ভূমিকা; এটা কি করা উচিত এবং কি করা উচিত নয়।
- কখন এবং কিভাবে কমিউনিটি টেমপ্লেট গ্যালারিতে ট্যাগ টেমপ্লেট জমা দিতে হয়।
সার্ভার-সাইড ট্যাগিংয়ের একটি ভূমিকাতে , আপনি ট্যাগ ম্যানেজারে সার্ভার-সাইড ট্যাগিংয়ের একটি ওভারভিউ পেয়েছেন। আপনি ক্লায়েন্ট কী এবং তারা কী করেন তা আপনি শিখেছেন: ক্লায়েন্টরা আপনার ব্যবহারকারীদের ডিভাইস থেকে ইভেন্ট ডেটা গ্রহণ করে এবং বাকি ধারক দ্বারা ব্যবহারের জন্য এটি মানিয়ে নেয়। এই নিবন্ধটি সার্ভার-সাইড ট্যাগগুলিতে সেই ডেটা কীভাবে প্রক্রিয়া করতে হয় তা বর্ণনা করে।
একটি সার্ভার কন্টেইনারে, ট্যাগগুলি আপনার ক্লায়েন্টদের কাছ থেকে ইনকামিং ইভেন্ট ডেটা গ্রহণ করে, এটিকে রূপান্তরিত করে এবং সংগ্রহ ও বিশ্লেষণের জন্য ফেরত পাঠায়। ট্যাগ আপনি যেখানে চান ডেটা পাঠাতে পারেন। যতক্ষণ না গন্তব্য HTTP অনুরোধগুলি গ্রহণ করে, এটি একটি সার্ভার কন্টেইনার থেকে ডেটাও গ্রহণ করতে পারে।
সার্ভার পাত্রে তিনটি অন্তর্নির্মিত ট্যাগ রয়েছে যা কোন কাস্টম কনফিগারেশন ছাড়াই ব্যবহারের জন্য প্রস্তুত:
- Google Analytics 4
- Google Analytics: সর্বজনীন বিশ্লেষণ
- HTTP অনুরোধ
আপনি যদি Google Analytics ব্যতীত অন্য কোথাও ডেটা পাঠাতে চান, বা HTTP অনুরোধ ট্যাগ প্রদান করে তার থেকে আপনার আরও বেশি বৈশিষ্ট্যের প্রয়োজন, আপনাকে একটি ভিন্ন ট্যাগ ব্যবহার করতে হবে। আপনি কমিউনিটি টেমপ্লেট গ্যালারিতে অতিরিক্ত ট্যাগ খুঁজে পেতে পারেন বা আপনি নিজের লিখতে পারেন। এই টিউটোরিয়ালটি আপনাকে একটি সার্ভার কন্টেইনারের জন্য আপনার নিজস্ব ট্যাগ লেখার মূল বিষয়গুলি শেখাবে।
উদ্দেশ্য
- ইভেন্ট ডেটা পড়তে, HTTP অনুরোধ পাঠাতে এবং ব্রাউজারে কুকি সেট করতে কোন API ব্যবহার করতে হবে তা জানুন।
- আপনার ট্যাগের কনফিগারেশন বিকল্পগুলি ডিজাইন করার জন্য সেরা অনুশীলনগুলি শিখুন৷
- ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটার মধ্যে পার্থক্য এবং কেন সেই পার্থক্য গুরুত্বপূর্ণ তা জানুন।
- সার্ভার কন্টেইনারে ট্যাগের ভূমিকা জানুন। বুঝুন একটি ট্যাগ কি করা উচিত এবং কি করা উচিত নয়।
- কমিউনিটি টেমপ্লেট গ্যালারিতে একটি ট্যাগ টেমপ্লেট জমা দেওয়ার বিষয়ে কখন বিবেচনা করতে হবে তা জানুন।
পূর্বশর্ত
- একটি স্থাপন করা সার্ভার ধারক
- ট্যাগ ম্যানেজার, সার্ভার কন্টেনার এবং তাদের মৌলিক ধারণা যেমন ক্লায়েন্ট , ট্যাগ , ট্রিগার এবং ভেরিয়েবলের সাথে পরিচিতি
- ট্যাগ এবং ভেরিয়েবলের জন্য টেমপ্লেট লেখার মৌলিক বিষয়গুলির সাথে পরিচিতি
Baz বিশ্লেষণ ট্যাগ
এই টিউটোরিয়ালে আপনি একটি ট্যাগ তৈরি করবেন যা Baz Analytics নামক একটি পরিষেবাতে পরিমাপের ডেটা পাঠায়।
Baz অ্যানালিটিক্স হল একটি সহজ, অনুমানমূলক বিশ্লেষণ পরিষেবা যা HTTP GET অনুরোধের মাধ্যমে https://example.com/baz_analytics
এ ডেটা গ্রহণ করে। এটির নিম্নলিখিত পরামিতি রয়েছে:
প্যারামিটার | উদাহরণ | বর্ণনা |
---|---|---|
আইডি | বিএ-1234 | আপনার Baz Analytics অ্যাকাউন্টের আইডি। |
en | ক্লিক | ইভেন্টের নাম। |
l | https://www.google.com/search?q=sgtm | পৃষ্ঠার URL যেখানে ঘটনা ঘটেছে। |
u | 2384294892 | কর্ম সম্পাদনকারী ব্যবহারকারীর আইডি। একাধিক অ্যাকশনকে একক ব্যবহারকারীর সাথে টাই করতে ব্যবহৃত হয়। |
ট্যাগ কনফিগারেশন
প্রথম কাজটি ট্যাগ টেমপ্লেট তৈরি করা হয়। আপনার কন্টেইনারের টেমপ্লেট বিভাগে যান এবং ট্যাগ টেমপ্লেট বিভাগে নতুন ক্লিক করুন। আপনার ট্যাগে একটি নাম এবং বিবরণ যোগ করুন।
এরপরে, আপনার ট্যাগের জন্য বিভিন্ন কনফিগারেশন বিকল্প যোগ করতে টেমপ্লেট সম্পাদকের ক্ষেত্র বিভাগে যান। সুস্পষ্ট পরবর্তী প্রশ্ন হল: আপনার কোন বিকল্পগুলি প্রয়োজন? ট্যাগ তৈরি করার জন্য আপনি তিনটি উপায় বেছে নিতে পারেন:
- মোট কনফিগারেশন : প্রতিটি প্যারামিটারের জন্য একটি কনফিগারেশন ক্ষেত্র যোগ করুন। ব্যবহারকারীকে স্পষ্টভাবে সবকিছু সেট করতে হবে।
- কোন কনফিগারেশন নেই : ট্যাগ কনফিগার করার জন্য কোন বিকল্প নেই। সমস্ত তথ্য ইভেন্ট থেকে সরাসরি নেওয়া হয়.
- কিছু কনফিগারেশন : কিছু প্যারামিটারের জন্য ক্ষেত্র আছে এবং অন্যদের জন্য নয়।
প্রতিটি প্যারামিটারের জন্য ক্ষেত্র থাকা খুবই নমনীয় এবং ব্যবহারকারীকে তাদের ট্যাগ কনফিগারেশনের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। অনুশীলনে যাইহোক, এটি সাধারণত অনেক সদৃশ কাজ করে। বিশেষ করে, Baz Analytics l
প্যারামিটারের মতো জিনিস, যাতে পৃষ্ঠার URL থাকে, দ্ব্যর্থহীন এবং সর্বজনীন। প্রতিবার ট্যাগ কনফিগার করার সময় একই রকম, অপরিবর্তিত ডেটা প্রবেশ করানো কম্পিউটারের জন্য সবচেয়ে ভালো কিছু থাকে।
হয়তো উত্তর হল একটি ট্যাগ যা শুধুমাত্র একটি ইভেন্ট থেকে ডেটা নেয়। এটি একজন ব্যবহারকারীর পক্ষে কনফিগার করার জন্য সবচেয়ে সহজ সম্ভাব্য ট্যাগ, যেহেতু তাদের আসলে করার মতো কিছুই নেই। অন্যদিকে, এটি সবচেয়ে সীমাবদ্ধ এবং ভঙ্গুর বিকল্পও। প্রয়োজনে ব্যবহারকারীরা ট্যাগের আচরণ পরিবর্তন করতে পারে না। উদাহরণস্বরূপ, হয়ত তারা তাদের ওয়েবসাইটে এবং Google Analytics-এ একটি ইভেন্ট purchase
বলে, কিন্তু Baz Analytics এটিকে buy
বলে। অথবা, ইনকামিং ইভেন্ট ডেটার গঠন সম্পর্কে ট্যাগটি যে অনুমানগুলি তৈরি করে তা বাস্তবের সাথে মেলে না৷ উভয় ক্ষেত্রে, ব্যবহারকারী আটকে আছে.
অনেক কিছুর মতো, উত্তরটি দুটি চরমের মধ্যে কোথাও রয়েছে। কিছু ডেটা সর্বদা ইভেন্ট থেকে নেওয়ার বোধগম্য হয়। অন্যান্য ডেটা ব্যবহারকারীর দ্বারা কনফিগার করা উচিত। আপনি কিভাবে সিদ্ধান্ত নেবেন কোনটি কোনটি? এই প্রশ্নের উত্তর দেওয়ার জন্য, আমাদের কন্টেইনারে আসা ডেটাগুলিকে ঘনিষ্ঠভাবে দেখতে হবে।
তথ্য কোথা থেকে আসে?
Google Analytics 4 ট্যাগ থেকে একটি সার্ভার কন্টেইনারে আসা ডেটা মোটামুটিভাবে দুটি বিভাগে বিভক্ত করা যেতে পারে: ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগ্রহ করা ডেটা।
ব্যবহারকারী-নির্দিষ্ট ডেটা হল সবকিছু যা একজন ব্যবহারকারী একটি gtag.js event
কমান্ডে রাখে। উদাহরণস্বরূপ, এই মত একটি কমান্ড:
gtag('event', 'search', {
search_term: 'beets',
});
সার্ভার কন্টেইনারে নিম্নলিখিত পরামিতিগুলির ফলাফল হবে:
{
event_name: 'search',
search_term: 'beets',
}
এটি যথেষ্ট সহজ, কিন্তু ট্যাগের দৃষ্টিকোণ থেকে এটির সাথে কাজ করা খুব কঠিন। কারণ এই ডেটা ব্যবহারকারীর দ্বারা প্রবেশ করা হয়, এটি যে কোনও কিছু হতে পারে। সম্ভবত, উপরের মত, ব্যবহারকারী শুধুমাত্র প্রস্তাবিত ইভেন্ট এবং পরামিতি পাঠান, কিন্তু তাদের এটি করার কোন প্রয়োজন নেই। event_name
প্যারামিটারের অবস্থানের (কিন্তু মান নয়!) গুরুত্বপূর্ণ ব্যতিক্রমের সাথে, ব্যবহারকারীর ডেটার ফর্ম বা গঠন সম্পর্কে কোনও গ্যারান্টি নেই।
সৌভাগ্যবশত, ব্যবহারকারীর প্রবেশ করা ডেটাই একমাত্র জিনিস নয় যা ধারকটি গ্রহণ করবে। এটি ব্রাউজারে Google Analytics 4 ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা একগুচ্ছ ডেটাও পাবে। এর মধ্যে রয়েছে:
-
ip_override
-
language
-
page_location
-
page_referrer
-
page_title
-
screen_resolution
-
user_agent
অতিরিক্তভাবে, যদি সার্ভারের অনুরোধ কোনো ওয়েব ব্রাউজার থেকে আসে, তাহলে getCookieValue
API-এর মাধ্যমে ব্রাউজার কুকি ডেটাও পাওয়া যেতে পারে।
একসাথে, এগুলি স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা তৈরি করে যা আমরা উপরে উল্লেখ করেছি। সাধারণভাবে, এটি এমন ডেটা নিয়ে গঠিত যা সর্বজনীন এবং শব্দার্থগতভাবে দ্ব্যর্থহীন। যখন ব্রাউজারে একটি GA4 ট্যাগ থেকে একটি অনুরোধ আসে, এই ডেটা সর্বদা উপলব্ধ থাকবে এবং এটি সর্বদা একই বিন্যাসে থাকবে৷ এই পরামিতিগুলির আরও বিশদ বিবরণের জন্য, ইভেন্টের রেফারেন্সটি দেখুন।
এই শ্রেণিবিন্যাসটি ব্যবহারকারীর দ্বারা কোন ডেটা কনফিগার করা উচিত এবং ট্যাগে কোন ডেটা নির্দিষ্ট করা উচিত তা নির্ধারণ করার সময় ব্যবহার করার জন্য আমাদের একটি দরকারী টুল দেয়৷ স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা ইভেন্ট থেকে সরাসরি পড়তে নিরাপদ। অন্য সবকিছু ব্যবহারকারী দ্বারা কনফিগার করা উচিত.
এটি মাথায় রেখে, Baz Analytics ট্যাগের পরামিতিগুলিকে আরও একবার দেখুন৷
- পরিমাপ আইডি,
id
: যেহেতু এটি স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয় না, এটি একটি মানের একটি স্পষ্ট উদাহরণ যা ট্যাগ কনফিগার করার সময় ব্যবহারকারীর দ্বারা প্রবেশ করা উচিত। - ইভেন্টের নাম,
en
: উপরে উল্লিখিত হিসাবে, ইভেন্টের নাম সর্বদা সরাসরিevent_name
প্যারামিটার থেকে নেওয়া যেতে পারে। যাইহোক, যেহেতু এর মান ব্যবহারকারী-সংজ্ঞায়িত, তাই প্রয়োজন হলে নামটি ওভাররাইড করার ক্ষমতা দেওয়া একটি ভাল ধারণা। - পৃষ্ঠা URL,
l
: এই মানটিpage_location
প্যারামিটার থেকে নেওয়া যেতে পারে, যা প্রতিটি ইভেন্টে Google Analytics GA4 ব্রাউজার ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয়। অতএব, আপনার ব্যবহারকারীকে ম্যানুয়ালি একটি মান লিখতে হবে না। - ইউজার আইডি,
u
: Baz অ্যানালিটিক্স সার্ভার ট্যাগে,u
প্যারামিটারটি ব্যবহারকারী-নির্দিষ্ট নয় বা পৃষ্ঠায় ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয় না। পরিবর্তে, এটি একটি ব্রাউজার কুকিতে সংরক্ষণ করা হয় যাতে ব্যবহারকারীরা ওয়েবসাইটে একাধিক ভিজিট জুড়ে সনাক্ত করা যায়। আপনি নীচের বাস্তবায়নে দেখতে পাবেন, এটি Baz Analytics সার্ভার ট্যাগ যা কুকি সেট করতেsetCookie
API ব্যবহার করে। এর মানে হল Baz Analytics ট্যাগই একমাত্র জিনিস যা জানে কোথায় এবং কিভাবে কুকি সংরক্ষণ করা হয়।l
মত,u
প্যারামিটার স্বয়ংক্রিয়ভাবে সংগ্রহ করা উচিত।
একবার আপনি ট্যাগ কনফিগারেশন সেট আপ করার পরে, এটি এই মত কিছু দেখা উচিত:
ট্যাগ বাস্তবায়ন
এখন যেহেতু ট্যাগের কনফিগারেশনটি স্কোয়ার করা হয়েছে, আপনি স্যান্ডবক্সযুক্ত জাভাস্ক্রিপ্টে এর আচরণ বাস্তবায়নের জন্য এগিয়ে যেতে প্রস্তুত।
ট্যাগটি চারটি জিনিস করতে হবে:
- ট্যাগের কনফিগারেশন থেকে ইভেন্টের নাম পান।
- ইভেন্টের
page_location
প্রপার্টি থেকে পৃষ্ঠার URL পান। - একটি ব্যবহারকারী আইডি গণনা. ট্যাগটি
_bauid
নামে একটি কুকিতে ব্যবহারকারী আইডি খুঁজবে। যদি সেই কুকিটি উপস্থিত না থাকে, ট্যাগটি একটি নতুন মান গণনা করবে এবং পরবর্তী অনুরোধের জন্য এটি সংরক্ষণ করবে৷ - একটি URL তৈরি করুন এবং Baz Analytics সংগ্রহ সার্ভারে একটি অনুরোধ করুন৷
ট্যাগটি সামগ্রিকভাবে কন্টেইনারে কীভাবে ফিট করে সে সম্পর্কে চিন্তা করার জন্য একটু সময় নেওয়াও মূল্যবান। বিভিন্ন ধারক উপাদান বিভিন্ন ভূমিকা পালন করে, তাই এমন কিছু জিনিস রয়েছে যা ট্যাগ করে না বা করা উচিত নয়। আপনার ট্যাগ:
- এটি চালানো উচিত কিনা তা বের করতে ইভেন্টটি পরীক্ষা করা উচিত নয়। যে একটি ট্রিগার জন্য কি.
-
runContainer
API দিয়ে কন্টেইনার চালানো উচিত নয়। এটাই ক্লায়েন্টের কাজ। - কুকিজের গুরুত্বপূর্ণ ব্যতিক্রমের সাথে, অনুরোধ বা প্রতিক্রিয়ার সাথে সরাসরি যোগাযোগ করার চেষ্টা করা উচিত নয়। এটাও ক্লায়েন্টের কাজ।
একটি ট্যাগ টেমপ্লেট লেখা যা এই জিনিসগুলির মধ্যে যেকোন একটি করে তা আপনার ট্যাগের ব্যবহারকারীদের জন্য বিভ্রান্তিকর আচরণের কারণ হবে৷ উদাহরণস্বরূপ, একটি ট্যাগ যা আগত অনুরোধের প্রতিক্রিয়া পাঠায় তা ক্লায়েন্টকে একই কাজ করতে বাধা দেবে। এটি কনটেইনারটি কীভাবে আচরণ করবে সে সম্পর্কে ব্যবহারকারীদের প্রত্যাশা ভঙ্গ করবে।
এই সমস্ত কিছু মাথায় রেখে, নীচে স্যান্ডবক্সযুক্ত JS-এ ট্যাগের একটি টীকাযুক্ত বাস্তবায়ন রয়েছে।
const encodeUriComponent = require('encodeUriComponent');
const generateRandom = require('generateRandom');
const getCookieValues = require('getCookieValues');
const getEventData = require('getEventData');
const logToConsole = require('logToConsole');
const makeString = require('makeString');
const sendHttpGet = require('sendHttpGet');
const setCookie = require('setCookie');
const USER_ID_COOKIE = '_bauid';
const MAX_USER_ID = 1000000000;
// The event name is taken from either the tag's configuration or from the
// event. Configuration data comes into the sandboxed code as a predefined
// variable called 'data'.
const eventName = data.eventName || getEventData('event_name');
// page_location is automatically collected by the Google Analytics 4 tag.
// Therefore, it's safe to take it directly from event data rather than require
// the user to specify it. Use the getEventData API to retrieve a single data
// point from the event. There's also a getAllEventData API that returns the
// entire event.
const pageLocation = getEventData('page_location');
const userId = getUserId();
const url = 'https://www.example.com/baz_analytics?' +
'id=' + encodeUriComponent(data.measurementId) +
'en=' + encodeUriComponent(eventName) +
(pageLocation ? 'l=' + encodeUriComponent(pageLocation) : '') +
'u=' + userId;
// The sendHttpGet API takes a URL and returns a promise that resolves with the
// result once the request completes. You must call data.gtmOnSuccess() or
// data.gtmOnFailure() so that the container knows when the tag has finished
// executing.
sendHttpGet(url).then((result) => {
if (result.statusCode >= 200 && result.statusCode < 300) {
data.gtmOnSuccess();
} else {
data.gtmOnFailure();
}
});
// The user ID is taken from a cookie, if present. If it's not present, a new ID
// is randomly generated and stored for later use.
//
// Generally speaking, tags should not interact directly with the request or
// response. This prevents different tags from conflicting with each other.
// Cookies, however, are an exception. Tags are the only container entities that
// know which cookies they need to read or write. Therefore, it's okay for tags
// to interact with them directly.
function getUserId() {
const userId = getCookieValues(USER_ID_COOKIE)[0] || generateRandom(0, MAX_USER_ID);
// The setCookie API adds a value to the 'cookie' header on the response.
setCookie(USER_ID_COOKIE, makeString(userId), {
'max-age': 3600 * 24 * 365 * 2,
domain: 'auto',
path: '/',
httpOnly: true,
secure: true,
});
return userId;
}
যে সঙ্গে, ট্যাগ বাস্তবায়িত হয়. আপনি ট্যাগটি ব্যবহার করার আগে, আপনাকে এর API অনুমতিগুলি সঠিকভাবে সেট করতে হবে৷ টেমপ্লেট এডিটরের অনুমতি ট্যাবে যান এবং নিম্নলিখিত অনুমতিগুলি নির্দিষ্ট করুন:
- কুকি মান পড়ে:
_bauid
- ইভেন্ট ডেটা পড়ে:
event_name
এবংpage_location
- HTTP অনুরোধ পাঠায়:
https://www.example.com/*
- একটি কুকি সেট করে:
_bauid
আপনার ট্যাগের জন্য পরীক্ষাও লিখতে হবে। টেমপ্লেট পরীক্ষা সম্পর্কে আরও পড়তে, টেমপ্লেট বিকাশকারী গাইডের পরীক্ষা বিভাগটি পড়ুন।
অবশেষে, অন্তত একবার রান কোড বোতাম দিয়ে আপনার ট্যাগ চালানোর চেষ্টা করতে ভুলবেন না। এটি আপনার সার্ভারে তৈরি করা থেকে অনেক সহজ ভুল প্রতিরোধ করবে।
কমিউনিটি টেমপ্লেট গ্যালারিতে আপনার ট্যাগ জমা দিন
যেহেতু আপনি একটি নতুন ট্যাগ তৈরি, পরীক্ষা এবং স্থাপনের সমস্ত কাজ করেছেন, তাই এটি নিজের কাছে রাখার কোন কারণ নেই৷ আপনি যদি মনে করেন যে আপনার নতুন ট্যাগটি অন্য লোকেদের জন্য উপযোগী হবে, তা কমিউনিটি টেমপ্লেট গ্যালারিতে জমা দেওয়ার কথা বিবেচনা করুন৷
উপসংহার
এই টিউটোরিয়ালে, আপনি একটি সার্ভার কন্টেইনারের জন্য একটি ট্যাগ লেখার মূল বিষয়গুলো শিখেছেন। আপনি শিখেছেন:
- ইভেন্ট ডেটা পড়তে, HTTP অনুরোধ পাঠাতে এবং ব্রাউজারে কুকি সেট করতে কোন API ব্যবহার করতে হবে।
- একটি ট্যাগের জন্য কনফিগারেশন বিকল্পগুলি ডিজাইন করার জন্য সর্বোত্তম অনুশীলন।
- ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটার মধ্যে পার্থক্য এবং কেন সেই পার্থক্য গুরুত্বপূর্ণ।
- পাত্রে একটি ট্যাগের ভূমিকা; এটা কি করা উচিত এবং কি করা উচিত নয়।
- কখন এবং কিভাবে কমিউনিটি টেমপ্লেট গ্যালারিতে ট্যাগ টেমপ্লেট জমা দিতে হয়।
সার্ভার-সাইড ট্যাগিংয়ের একটি ভূমিকাতে , আপনি ট্যাগ ম্যানেজারে সার্ভার-সাইড ট্যাগিংয়ের একটি ওভারভিউ পেয়েছেন। আপনি ক্লায়েন্ট কী এবং তারা কী করেন তা আপনি শিখেছেন: ক্লায়েন্টরা আপনার ব্যবহারকারীদের ডিভাইস থেকে ইভেন্ট ডেটা গ্রহণ করে এবং বাকি ধারক দ্বারা ব্যবহারের জন্য এটি মানিয়ে নেয়। এই নিবন্ধটি সার্ভার-সাইড ট্যাগগুলিতে সেই ডেটা কীভাবে প্রক্রিয়া করতে হয় তা বর্ণনা করে।
একটি সার্ভার কন্টেইনারে, ট্যাগগুলি আপনার ক্লায়েন্টদের কাছ থেকে ইনকামিং ইভেন্ট ডেটা গ্রহণ করে, এটিকে রূপান্তরিত করে এবং সংগ্রহ ও বিশ্লেষণের জন্য ফেরত পাঠায়। ট্যাগ আপনি যেখানে চান ডেটা পাঠাতে পারেন। যতক্ষণ না গন্তব্য HTTP অনুরোধগুলি গ্রহণ করে, এটি একটি সার্ভার কন্টেইনার থেকে ডেটাও গ্রহণ করতে পারে।
সার্ভার পাত্রে তিনটি অন্তর্নির্মিত ট্যাগ রয়েছে যা কোন কাস্টম কনফিগারেশন ছাড়াই ব্যবহারের জন্য প্রস্তুত:
- Google Analytics 4
- Google Analytics: সর্বজনীন বিশ্লেষণ
- HTTP অনুরোধ
আপনি যদি Google Analytics ব্যতীত অন্য কোথাও ডেটা পাঠাতে চান, বা HTTP অনুরোধ ট্যাগ প্রদান করে তার থেকে আপনার আরও বেশি বৈশিষ্ট্যের প্রয়োজন, আপনাকে একটি ভিন্ন ট্যাগ ব্যবহার করতে হবে। আপনি কমিউনিটি টেমপ্লেট গ্যালারিতে অতিরিক্ত ট্যাগ খুঁজে পেতে পারেন বা আপনি নিজের লিখতে পারেন। এই টিউটোরিয়ালটি আপনাকে একটি সার্ভার কন্টেইনারের জন্য আপনার নিজস্ব ট্যাগ লেখার মূল বিষয়গুলি শেখাবে।
উদ্দেশ্য
- ইভেন্ট ডেটা পড়তে, HTTP অনুরোধ পাঠাতে এবং ব্রাউজারে কুকি সেট করতে কোন API ব্যবহার করতে হবে তা জানুন।
- আপনার ট্যাগের কনফিগারেশন বিকল্পগুলি ডিজাইন করার জন্য সেরা অনুশীলনগুলি শিখুন৷
- ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটার মধ্যে পার্থক্য এবং কেন সেই পার্থক্য গুরুত্বপূর্ণ তা জানুন।
- সার্ভার কন্টেইনারে ট্যাগের ভূমিকা জানুন। বুঝুন একটি ট্যাগ কি করা উচিত এবং কি করা উচিত নয়।
- কমিউনিটি টেমপ্লেট গ্যালারিতে একটি ট্যাগ টেমপ্লেট জমা দেওয়ার বিষয়ে কখন বিবেচনা করতে হবে তা জানুন।
পূর্বশর্ত
- একটি স্থাপন করা সার্ভার ধারক
- ট্যাগ ম্যানেজার, সার্ভার কন্টেনার এবং তাদের মৌলিক ধারণা যেমন ক্লায়েন্ট , ট্যাগ , ট্রিগার এবং ভেরিয়েবলের সাথে পরিচিতি
- ট্যাগ এবং ভেরিয়েবলের জন্য টেমপ্লেট লেখার মৌলিক বিষয়গুলির সাথে পরিচিতি
Baz বিশ্লেষণ ট্যাগ
এই টিউটোরিয়ালে আপনি একটি ট্যাগ তৈরি করবেন যা Baz Analytics নামক একটি পরিষেবাতে পরিমাপের ডেটা পাঠায়।
Baz অ্যানালিটিক্স হল একটি সহজ, অনুমানমূলক বিশ্লেষণ পরিষেবা যা HTTP GET অনুরোধের মাধ্যমে https://example.com/baz_analytics
এ ডেটা গ্রহণ করে। এটির নিম্নলিখিত পরামিতি রয়েছে:
প্যারামিটার | উদাহরণ | বর্ণনা |
---|---|---|
আইডি | বিএ-1234 | আপনার Baz Analytics অ্যাকাউন্টের আইডি। |
en | ক্লিক | ইভেন্টের নাম। |
l | https://www.google.com/search?q=sgtm | পৃষ্ঠার URL যেখানে ঘটনা ঘটেছে। |
u | 2384294892 | কর্ম সম্পাদনকারী ব্যবহারকারীর আইডি। একাধিক অ্যাকশনকে একক ব্যবহারকারীর সাথে টাই করতে ব্যবহৃত হয়। |
ট্যাগ কনফিগারেশন
প্রথম কাজটি ট্যাগ টেমপ্লেট তৈরি করা হয়। আপনার কন্টেইনারের টেমপ্লেট বিভাগে যান এবং ট্যাগ টেমপ্লেট বিভাগে নতুন ক্লিক করুন। আপনার ট্যাগে একটি নাম এবং বিবরণ যোগ করুন।
এরপরে, আপনার ট্যাগের জন্য বিভিন্ন কনফিগারেশন বিকল্প যোগ করতে টেমপ্লেট সম্পাদকের ক্ষেত্র বিভাগে যান। সুস্পষ্ট পরবর্তী প্রশ্ন হল: আপনার কোন বিকল্পগুলি প্রয়োজন? ট্যাগ তৈরি করার জন্য আপনি তিনটি উপায় বেছে নিতে পারেন:
- মোট কনফিগারেশন : প্রতিটি প্যারামিটারের জন্য একটি কনফিগারেশন ক্ষেত্র যোগ করুন। ব্যবহারকারীকে স্পষ্টভাবে সবকিছু সেট করতে হবে।
- কোন কনফিগারেশন নেই : ট্যাগ কনফিগার করার জন্য কোন বিকল্প নেই। সমস্ত তথ্য ইভেন্ট থেকে সরাসরি নেওয়া হয়.
- কিছু কনফিগারেশন : কিছু প্যারামিটারের জন্য ক্ষেত্র আছে এবং অন্যদের জন্য নয়।
প্রতিটি প্যারামিটারের জন্য ক্ষেত্র থাকা খুবই নমনীয় এবং ব্যবহারকারীকে তাদের ট্যাগ কনফিগারেশনের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। অনুশীলনে যাইহোক, এটি সাধারণত অনেক সদৃশ কাজ করে। বিশেষ করে, Baz Analytics l
প্যারামিটারের মতো জিনিস, যাতে পৃষ্ঠার URL থাকে, দ্ব্যর্থহীন এবং সর্বজনীন। প্রতিবার ট্যাগ কনফিগার করার সময় একই রকম, অপরিবর্তিত ডেটা প্রবেশ করানো কম্পিউটারের জন্য সবচেয়ে ভালো কিছু থাকে।
হয়তো উত্তর হল একটি ট্যাগ যা শুধুমাত্র একটি ইভেন্ট থেকে ডেটা নেয়। এটি একজন ব্যবহারকারীর পক্ষে কনফিগার করার জন্য সবচেয়ে সহজ সম্ভাব্য ট্যাগ, যেহেতু তাদের আসলে করার মতো কিছুই নেই। অন্যদিকে, এটি সবচেয়ে সীমাবদ্ধ এবং ভঙ্গুর বিকল্পও। প্রয়োজনে ব্যবহারকারীরা ট্যাগের আচরণ পরিবর্তন করতে পারে না। উদাহরণস্বরূপ, হয়ত তারা তাদের ওয়েবসাইটে এবং Google Analytics-এ একটি ইভেন্ট purchase
বলে, কিন্তু Baz Analytics এটিকে buy
বলে। অথবা, ইনকামিং ইভেন্ট ডেটার গঠন সম্পর্কে ট্যাগটি যে অনুমানগুলি তৈরি করে তা বাস্তবের সাথে মেলে না৷ উভয় ক্ষেত্রে, ব্যবহারকারী আটকে আছে.
অনেক কিছুর মতো, উত্তরটি দুটি চরমের মধ্যে কোথাও রয়েছে। কিছু ডেটা সর্বদা ইভেন্ট থেকে নেওয়ার বোধগম্য হয়। অন্যান্য ডেটা ব্যবহারকারীর দ্বারা কনফিগার করা উচিত। আপনি কিভাবে সিদ্ধান্ত নেবেন কোনটি কোনটি? এই প্রশ্নের উত্তর দেওয়ার জন্য, আমাদের কন্টেইনারে আসা ডেটাগুলিকে ঘনিষ্ঠভাবে দেখতে হবে।
তথ্য কোথা থেকে আসে?
Google Analytics 4 ট্যাগ থেকে একটি সার্ভার কন্টেইনারে আসা ডেটা মোটামুটিভাবে দুটি বিভাগে বিভক্ত করা যেতে পারে: ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগ্রহ করা ডেটা।
ব্যবহারকারী-নির্দিষ্ট ডেটা হল সবকিছু যা একজন ব্যবহারকারী একটি gtag.js event
কমান্ডে রাখে। উদাহরণস্বরূপ, এই মত একটি কমান্ড:
gtag('event', 'search', {
search_term: 'beets',
});
সার্ভার কন্টেইনারে নিম্নলিখিত পরামিতিগুলির ফলাফল হবে:
{
event_name: 'search',
search_term: 'beets',
}
এটি যথেষ্ট সহজ, কিন্তু ট্যাগের দৃষ্টিকোণ থেকে এটির সাথে কাজ করা খুব কঠিন। কারণ এই ডেটা ব্যবহারকারীর দ্বারা প্রবেশ করা হয়, এটি যে কোনও কিছু হতে পারে। সম্ভবত, উপরের মত, ব্যবহারকারী শুধুমাত্র প্রস্তাবিত ইভেন্ট এবং পরামিতি পাঠান, কিন্তু তাদের এটি করার কোন প্রয়োজন নেই। event_name
প্যারামিটারের অবস্থানের (কিন্তু মান নয়!) গুরুত্বপূর্ণ ব্যতিক্রমের সাথে, ব্যবহারকারীর ডেটার ফর্ম বা গঠন সম্পর্কে কোনও গ্যারান্টি নেই।
সৌভাগ্যবশত, ব্যবহারকারীর প্রবেশ করা ডেটাই একমাত্র জিনিস নয় যা ধারকটি গ্রহণ করবে। এটি ব্রাউজারে Google Analytics 4 ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা একগুচ্ছ ডেটাও পাবে। এর মধ্যে রয়েছে:
-
ip_override
-
language
-
page_location
-
page_referrer
-
page_title
-
screen_resolution
-
user_agent
অতিরিক্তভাবে, যদি সার্ভারের অনুরোধ কোনো ওয়েব ব্রাউজার থেকে আসে, তাহলে getCookieValue
API-এর মাধ্যমে ব্রাউজার কুকি ডেটাও পাওয়া যেতে পারে।
একসাথে, এগুলি স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা তৈরি করে যা আমরা উপরে উল্লেখ করেছি। সাধারণভাবে, এটি এমন ডেটা নিয়ে গঠিত যা সর্বজনীন এবং শব্দার্থগতভাবে দ্ব্যর্থহীন। যখন ব্রাউজারে একটি GA4 ট্যাগ থেকে একটি অনুরোধ আসে, এই ডেটা সর্বদা উপলব্ধ থাকবে এবং এটি সর্বদা একই বিন্যাসে থাকবে৷ এই পরামিতিগুলির আরও বিশদ বিবরণের জন্য, ইভেন্টের রেফারেন্সটি দেখুন।
এই শ্রেণিবিন্যাসটি ব্যবহারকারীর দ্বারা কোন ডেটা কনফিগার করা উচিত এবং ট্যাগে কোন ডেটা নির্দিষ্ট করা উচিত তা নির্ধারণ করার সময় ব্যবহার করার জন্য আমাদের একটি দরকারী টুল দেয়৷ স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা ইভেন্ট থেকে সরাসরি পড়তে নিরাপদ। অন্য সবকিছু ব্যবহারকারী দ্বারা কনফিগার করা উচিত.
এটি মাথায় রেখে, Baz Analytics ট্যাগের পরামিতিগুলিকে আরও একবার দেখুন৷
- পরিমাপ আইডি,
id
: যেহেতু এটি স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয় না, এটি একটি মানের একটি স্পষ্ট উদাহরণ যা ট্যাগ কনফিগার করার সময় ব্যবহারকারীর দ্বারা প্রবেশ করা উচিত। - ইভেন্টের নাম,
en
: উপরে উল্লিখিত হিসাবে, ইভেন্টের নাম সর্বদা সরাসরিevent_name
প্যারামিটার থেকে নেওয়া যেতে পারে। যাইহোক, যেহেতু এর মান ব্যবহারকারী-সংজ্ঞায়িত, তাই প্রয়োজন হলে নামটি ওভাররাইড করার ক্ষমতা দেওয়া একটি ভাল ধারণা। - পৃষ্ঠা URL,
l
: এই মানটিpage_location
প্যারামিটার থেকে নেওয়া যেতে পারে, যা প্রতিটি ইভেন্টে Google Analytics GA4 ব্রাউজার ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয়। অতএব, আপনার ব্যবহারকারীকে ম্যানুয়ালি একটি মান লিখতে হবে না। - ইউজার আইডি,
u
: Baz অ্যানালিটিক্স সার্ভার ট্যাগে,u
প্যারামিটারটি ব্যবহারকারী-নির্দিষ্ট নয় বা পৃষ্ঠায় ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয় না। পরিবর্তে, এটি একটি ব্রাউজার কুকিতে সংরক্ষণ করা হয় যাতে ব্যবহারকারীরা ওয়েবসাইটে একাধিক ভিজিট জুড়ে সনাক্ত করা যায়। আপনি নীচের বাস্তবায়নে দেখতে পাবেন, এটি Baz Analytics সার্ভার ট্যাগ যা কুকি সেট করতেsetCookie
API ব্যবহার করে। এর মানে হল Baz Analytics ট্যাগই একমাত্র জিনিস যা জানে কোথায় এবং কিভাবে কুকি সংরক্ষণ করা হয়।l
মত,u
প্যারামিটার স্বয়ংক্রিয়ভাবে সংগ্রহ করা উচিত।
একবার আপনি ট্যাগ কনফিগারেশন সেট আপ করার পরে, এটি এই মত কিছু দেখা উচিত:
ট্যাগ বাস্তবায়ন
এখন যেহেতু ট্যাগের কনফিগারেশনটি স্কোয়ার করা হয়েছে, আপনি স্যান্ডবক্সযুক্ত জাভাস্ক্রিপ্টে এর আচরণ বাস্তবায়নের জন্য এগিয়ে যেতে প্রস্তুত।
ট্যাগটি চারটি জিনিস করতে হবে:
- ট্যাগের কনফিগারেশন থেকে ইভেন্টের নাম পান।
- ইভেন্টের
page_location
প্রপার্টি থেকে পৃষ্ঠার URL পান। - একটি ব্যবহারকারী আইডি গণনা. ট্যাগটি
_bauid
নামক একটি কুকিতে ব্যবহারকারী আইডি খুঁজবে। যদি সেই কুকিটি উপস্থিত না থাকে, ট্যাগটি একটি নতুন মান গণনা করবে এবং পরবর্তী অনুরোধের জন্য এটি সংরক্ষণ করবে৷ - একটি URL তৈরি করুন এবং Baz Analytics সংগ্রহ সার্ভারে একটি অনুরোধ করুন৷
ট্যাগটি সামগ্রিকভাবে কন্টেইনারে কীভাবে ফিট করে সে সম্পর্কে চিন্তা করার জন্য একটু সময় নেওয়াও মূল্যবান। বিভিন্ন ধারক উপাদান বিভিন্ন ভূমিকা পালন করে, তাই এমন কিছু জিনিস রয়েছে যা ট্যাগ করে না বা করা উচিত নয়। আপনার ট্যাগ:
- এটি চালানো উচিত কিনা তা বের করতে ইভেন্টটি পরীক্ষা করা উচিত নয়। যে একটি ট্রিগার জন্য কি.
-
runContainer
API দিয়ে কন্টেইনার চালানো উচিত নয়। এটাই ক্লায়েন্টের কাজ। - কুকিজের গুরুত্বপূর্ণ ব্যতিক্রমের সাথে, অনুরোধ বা প্রতিক্রিয়ার সাথে সরাসরি যোগাযোগ করার চেষ্টা করা উচিত নয়। এটাও ক্লায়েন্টের কাজ।
একটি ট্যাগ টেমপ্লেট লেখা যা এই জিনিসগুলির মধ্যে যেকোন একটি করে তা আপনার ট্যাগের ব্যবহারকারীদের জন্য বিভ্রান্তিকর আচরণের কারণ হবে৷ উদাহরণস্বরূপ, একটি ট্যাগ যা আগত অনুরোধের প্রতিক্রিয়া পাঠায় তা ক্লায়েন্টকে একই কাজ করতে বাধা দেবে। এটি কনটেইনারটি কীভাবে আচরণ করবে সে সম্পর্কে ব্যবহারকারীদের প্রত্যাশা ভঙ্গ করবে।
এই সমস্ত কিছু মাথায় রেখে, নীচে স্যান্ডবক্সযুক্ত JS-এ ট্যাগের একটি টীকাযুক্ত বাস্তবায়ন রয়েছে।
const encodeUriComponent = require('encodeUriComponent');
const generateRandom = require('generateRandom');
const getCookieValues = require('getCookieValues');
const getEventData = require('getEventData');
const logToConsole = require('logToConsole');
const makeString = require('makeString');
const sendHttpGet = require('sendHttpGet');
const setCookie = require('setCookie');
const USER_ID_COOKIE = '_bauid';
const MAX_USER_ID = 1000000000;
// The event name is taken from either the tag's configuration or from the
// event. Configuration data comes into the sandboxed code as a predefined
// variable called 'data'.
const eventName = data.eventName || getEventData('event_name');
// page_location is automatically collected by the Google Analytics 4 tag.
// Therefore, it's safe to take it directly from event data rather than require
// the user to specify it. Use the getEventData API to retrieve a single data
// point from the event. There's also a getAllEventData API that returns the
// entire event.
const pageLocation = getEventData('page_location');
const userId = getUserId();
const url = 'https://www.example.com/baz_analytics?' +
'id=' + encodeUriComponent(data.measurementId) +
'en=' + encodeUriComponent(eventName) +
(pageLocation ? 'l=' + encodeUriComponent(pageLocation) : '') +
'u=' + userId;
// The sendHttpGet API takes a URL and returns a promise that resolves with the
// result once the request completes. You must call data.gtmOnSuccess() or
// data.gtmOnFailure() so that the container knows when the tag has finished
// executing.
sendHttpGet(url).then((result) => {
if (result.statusCode >= 200 && result.statusCode < 300) {
data.gtmOnSuccess();
} else {
data.gtmOnFailure();
}
});
// The user ID is taken from a cookie, if present. If it's not present, a new ID
// is randomly generated and stored for later use.
//
// Generally speaking, tags should not interact directly with the request or
// response. This prevents different tags from conflicting with each other.
// Cookies, however, are an exception. Tags are the only container entities that
// know which cookies they need to read or write. Therefore, it's okay for tags
// to interact with them directly.
function getUserId() {
const userId = getCookieValues(USER_ID_COOKIE)[0] || generateRandom(0, MAX_USER_ID);
// The setCookie API adds a value to the 'cookie' header on the response.
setCookie(USER_ID_COOKIE, makeString(userId), {
'max-age': 3600 * 24 * 365 * 2,
domain: 'auto',
path: '/',
httpOnly: true,
secure: true,
});
return userId;
}
যে সঙ্গে, ট্যাগ বাস্তবায়িত হয়. আপনি ট্যাগটি ব্যবহার করার আগে, আপনাকে এর API অনুমতিগুলি সঠিকভাবে সেট করতে হবে৷ টেমপ্লেট এডিটরের অনুমতি ট্যাবে যান এবং নিম্নলিখিত অনুমতিগুলি নির্দিষ্ট করুন:
- কুকি মান পড়ে:
_bauid
- ইভেন্ট ডেটা পড়ে:
event_name
এবংpage_location
- HTTP অনুরোধ পাঠায়:
https://www.example.com/*
- একটি কুকি সেট করে:
_bauid
আপনার ট্যাগের জন্য পরীক্ষাও লিখতে হবে। টেমপ্লেট পরীক্ষা সম্পর্কে আরও পড়তে, টেমপ্লেট বিকাশকারী গাইডের পরীক্ষা বিভাগটি পড়ুন।
অবশেষে, অন্তত একবার রান কোড বোতাম দিয়ে আপনার ট্যাগ চালানোর চেষ্টা করতে ভুলবেন না। এটি আপনার সার্ভারে তৈরি করা থেকে অনেক সহজ ভুল প্রতিরোধ করবে।
কমিউনিটি টেমপ্লেট গ্যালারিতে আপনার ট্যাগ জমা দিন
যেহেতু আপনি একটি নতুন ট্যাগ তৈরি, পরীক্ষা এবং স্থাপন করার সমস্ত কাজের মধ্য দিয়ে গেছেন, তাই এটি নিজের কাছে রাখার কোন কারণ নেই৷ আপনি যদি মনে করেন যে আপনার নতুন ট্যাগটি অন্য লোকেদের জন্য উপযোগী হবে, তা কমিউনিটি টেমপ্লেট গ্যালারিতে জমা দেওয়ার কথা বিবেচনা করুন।
উপসংহার
এই টিউটোরিয়ালে, আপনি একটি সার্ভার কন্টেইনারের জন্য একটি ট্যাগ লেখার মূল বিষয়গুলো শিখেছেন। আপনি শিখেছেন:
- ইভেন্ট ডেটা পড়তে, HTTP অনুরোধ পাঠাতে এবং ব্রাউজারে কুকি সেট করতে কোন API ব্যবহার করতে হবে।
- একটি ট্যাগের জন্য কনফিগারেশন বিকল্পগুলি ডিজাইন করার জন্য সর্বোত্তম অনুশীলন।
- ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটার মধ্যে পার্থক্য এবং কেন সেই পার্থক্য গুরুত্বপূর্ণ।
- পাত্রে একটি ট্যাগের ভূমিকা; এটা কি করা উচিত এবং কি করা উচিত নয়।
- কখন এবং কিভাবে কমিউনিটি টেমপ্লেট গ্যালারিতে ট্যাগ টেমপ্লেট জমা দিতে হয়।
সার্ভার-সাইড ট্যাগিংয়ের পরিচিতিতে , আপনি ট্যাগ ম্যানেজারে সার্ভার-সাইড ট্যাগিংয়ের একটি ওভারভিউ পেয়েছেন। আপনি ক্লায়েন্টরা কী এবং তারা কী তা শিখেছেন: ক্লায়েন্টরা আপনার ব্যবহারকারীর ডিভাইসগুলি থেকে ইভেন্টের ডেটা গ্রহণ করে এবং বাকী ধারক দ্বারা এটি ব্যবহারের জন্য মানিয়ে দেয়। এই নিবন্ধটি কীভাবে সার্ভার-সাইড ট্যাগগুলিতে সেই ডেটা প্রক্রিয়া করবেন তা বর্ণনা করে।
একটি সার্ভার পাত্রে, ট্যাগগুলি আপনার ক্লায়েন্টদের কাছ থেকে আগত ইভেন্টের ডেটা গ্রহণ করে, এটি রূপান্তর করে এবং সংগ্রহ এবং বিশ্লেষণের জন্য এটি আবার প্রেরণ করে। ট্যাগগুলি আপনি যেখানেই চান ডেটা প্রেরণ করতে পারেন। যতক্ষণ না গন্তব্য এইচটিটিপি অনুরোধগুলি গ্রহণ করে, এটি কোনও সার্ভারের ধারক থেকে ডেটাও গ্রহণ করতে পারে।
সার্ভার পাত্রে তিনটি অন্তর্নির্মিত ট্যাগ রয়েছে যা কোনও কাস্টম কনফিগারেশন ছাড়াই ব্যবহারের জন্য প্রস্তুত:
- Google Analytics 4
- গুগল অ্যানালিটিক্স: ইউনিভার্সাল অ্যানালিটিক্স
- HTTP অনুরোধ
আপনি যদি গুগল অ্যানালিটিক্স ব্যতীত অন্য কোথাও ডেটা প্রেরণ করতে চান বা এইচটিটিপি অনুরোধ ট্যাগ সরবরাহের চেয়ে আপনার আরও বৈশিষ্ট্য প্রয়োজন, আপনাকে একটি আলাদা ট্যাগ ব্যবহার করতে হবে। আপনি কমিউনিটি টেম্পলেট গ্যালারীটিতে অতিরিক্ত ট্যাগগুলি পেতে পারেন বা আপনি নিজের লিখতে পারেন। এই টিউটোরিয়ালটি আপনাকে সার্ভার ধারকটির জন্য আপনার নিজস্ব ট্যাগ লেখার মূল বিষয়গুলি শিখিয়ে দেবে।
উদ্দেশ্য
- ইভেন্টের ডেটা পড়তে, এইচটিটিপি অনুরোধগুলি প্রেরণ করতে এবং ব্রাউজারে কুকিজ সেট করতে কোন এপিআই ব্যবহার করতে হবে তা শিখুন।
- আপনার ট্যাগের কনফিগারেশন বিকল্পগুলি ডিজাইনের জন্য সেরা অনুশীলনগুলি শিখুন।
- ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটার মধ্যে পার্থক্যটি শিখুন এবং কেন সেই পার্থক্যটি গুরুত্বপূর্ণ।
- একটি সার্ভার পাত্রে একটি ট্যাগের ভূমিকা শিখুন। একটি ট্যাগ কী করা উচিত এবং কী করা উচিত তা বুঝতে পারেন।
- কমিউনিটি টেম্পলেট গ্যালারীটিতে ট্যাগ টেম্পলেট জমা দেওয়ার বিষয়ে কখন বিবেচনা করবেন তা শিখুন।
পূর্বশর্ত
- একটি মোতায়েন করা সার্ভার ধারক
- ট্যাগ ম্যানেজার, সার্ভার পাত্রে এবং তাদের মৌলিক ধারণা যেমন ক্লায়েন্ট , ট্যাগ , ট্রিগার এবং ভেরিয়েবলগুলির সাথে পরিচিত
- ট্যাগ এবং ভেরিয়েবলের জন্য টেম্পলেট লেখার মূল বিষয়গুলির সাথে পরিচিতি
বাজ অ্যানালিটিক্স ট্যাগ
এই টিউটোরিয়ালে আপনি এমন একটি ট্যাগ তৈরি করবেন যা বাজ অ্যানালিটিক্স নামে একটি পরিষেবাতে পরিমাপের ডেটা প্রেরণ করে।
বাজ অ্যানালিটিক্স একটি সাধারণ, অনুমানমূলক বিশ্লেষণ পরিষেবা যা http এর মাধ্যমে ডেটা ইনজেস্ট করে https://example.com/baz_analytics
এ অনুরোধগুলি পান। এটিতে নিম্নলিখিত পরামিতি রয়েছে:
প্যারামিটার | উদাহরণ | বর্ণনা |
---|---|---|
আইডি | বিএ -1234 | আপনার বাজ বিশ্লেষণ অ্যাকাউন্টের আইডি। |
en | ক্লিক | ইভেন্টের নাম। |
l | https://www.google.com/search?q=sgtm | পৃষ্ঠার url যেখানে ঘটনা ঘটেছে। |
u | 2384294892 | ব্যবহারকারীর আইডি ক্রিয়াটি সম্পাদন করছে। একক ব্যবহারকারীর সাথে একাধিক ক্রিয়া বেঁধে রাখতে ব্যবহৃত হয়। |
ট্যাগ কনফিগারেশন
প্রথম কাজটি হ'ল ট্যাগ টেম্পলেট তৈরি করা। আপনার ধারকটির টেমপ্লেট বিভাগে যান এবং ট্যাগ টেম্পলেট বিভাগে নতুন ক্লিক করুন। আপনার ট্যাগে একটি নাম এবং বিবরণ যুক্ত করুন।
এরপরে, আপনার ট্যাগের জন্য বিভিন্ন কনফিগারেশন বিকল্পগুলি যুক্ত করতে টেমপ্লেট সম্পাদকের ক্ষেত্রগুলি বিভাগে যান। সুস্পষ্ট পরবর্তী প্রশ্নটি হ'ল: আপনার কোন বিকল্পগুলির প্রয়োজন? ট্যাগটি তৈরি করতে আপনি তিনটি উপায় বেছে নিতে পারেন:
- মোট কনফিগারেশন : প্রতিটি প্যারামিটারের জন্য একটি কনফিগারেশন ক্ষেত্র যুক্ত করুন। ব্যবহারকারীকে স্পষ্টভাবে সবকিছু সেট করতে প্রয়োজন।
- কোনও কনফিগারেশন নেই : ট্যাগটি কনফিগার করার জন্য কোনও বিকল্প নেই। সমস্ত ডেটা সরাসরি ইভেন্ট থেকে নেওয়া হয়।
- কিছু কনফিগারেশন : কিছু পরামিতিগুলির জন্য ক্ষেত্র রয়েছে এবং অন্যদের নয়।
প্রতিটি প্যারামিটারের জন্য ক্ষেত্র থাকা খুব নমনীয় এবং ব্যবহারকারীকে তাদের ট্যাগ কনফিগারেশনের উপর মোট নিয়ন্ত্রণ দেয়। বাস্তবে তবে, এর ফলে সাধারণত প্রচুর নকল কাজ হয়। বিশেষত, বাজ অ্যানালিটিক্স l
প্যারামিটারের মতো জিনিসগুলি, যা পৃষ্ঠার ইউআরএল রয়েছে, তা দ্ব্যর্থহীন এবং সর্বজনীন। ট্যাগটি কনফিগার করা থাকাকালীন একই সময়ে, অপরিবর্তিত ডেটাগুলির টুকরো প্রবেশ করা কম্পিউটারের কাছে সেরা কিছু।
সম্ভবত উত্তরটি এমন একটি ট্যাগ রয়েছে যা কেবল কোনও ইভেন্ট থেকে ডেটা নেয়। এটি কোনও ব্যবহারকারীর কনফিগার করার জন্য সবচেয়ে সহজ সম্ভাব্য ট্যাগ, যেহেতু তাদের আসলে করার মতো কিছুই নেই। অন্যদিকে, এটি সবচেয়ে সীমাবদ্ধ এবং ভঙ্গুর বিকল্পও। ব্যবহারকারীরা প্রয়োজন হলেও ট্যাগের আচরণ পরিবর্তন করতে পারবেন না। উদাহরণস্বরূপ, সম্ভবত তারা তাদের ওয়েবসাইটে এবং গুগল অ্যানালিটিক্সে কোনও ইভেন্ট purchase
কল করে তবে বাজ অ্যানালিটিক্স এটিকে buy
বলে। অথবা, সম্ভবত ট্যাগটি আগত ইভেন্টের ডেটার কাঠামো সম্পর্কে যে অনুমানগুলি তৈরি করে তা আসলে বাস্তবতার সাথে মেলে না। উভয় ক্ষেত্রেই, ব্যবহারকারী আটকে আছে।
অনেক কিছুর মতো, উত্তরটি দুটি চূড়ান্ততার মধ্যে কোথাও রয়েছে। কিছু ডেটা সর্বদা ইভেন্ট থেকে নেওয়া বোধগম্য। অন্যান্য ডেটা ব্যবহারকারী দ্বারা কনফিগার করা উচিত। কোনটি কোনটি সিদ্ধান্ত নেবেন কোনটি? এই প্রশ্নের উত্তর দেওয়ার জন্য, আমাদের পাত্রে আসা ডেটাগুলি ঘনিষ্ঠভাবে দেখতে হবে।
তথ্য কোথা থেকে আসে?
গুগল অ্যানালিটিক্স 4 ট্যাগ থেকে একটি সার্ভার পাত্রে আসা ডেটা মোটামুটি দুটি বিভাগে বিভক্ত করা যেতে পারে: ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা।
ব্যবহারকারী-নির্দিষ্ট ডেটা হ'ল এমন সমস্ত কিছু যা কোনও ব্যবহারকারী জিটিএজি.জেএস event
কমান্ডে রাখে। উদাহরণস্বরূপ, এর মতো একটি কমান্ড:
gtag('event', 'search', {
search_term: 'beets',
});
সার্ভারের ধারকটিতে নিম্নলিখিত পরামিতিগুলির ফলাফল হবে:
{
event_name: 'search',
search_term: 'beets',
}
এটি যথেষ্ট সহজ, তবে ট্যাগের দৃষ্টিকোণ থেকে এটি কাজ করা খুব কঠিন। যেহেতু এই ডেটা ব্যবহারকারী দ্বারা প্রবেশ করা হয়, এটি যে কোনও কিছু হতে পারে। সম্ভবত, উপরে হিসাবে, ব্যবহারকারী কেবল প্রস্তাবিত ইভেন্ট এবং পরামিতিগুলিতে প্রেরণ করে, তবে তারা এটি করার কোনও প্রয়োজন নেই। event_name
প্যারামিটারের অবস্থানের (তবে মান নয়!) এর গুরুত্বপূর্ণ ব্যতিক্রম সহ, ব্যবহারকারীর ডেটার ফর্ম বা কাঠামো সম্পর্কে কোনও গ্যারান্টি নেই।
ভাগ্যক্রমে, ব্যবহারকারী-প্রবেশ করা ডেটা কেবলমাত্র পাত্রটি গ্রহণ করবে না। এটি ব্রাউজারে গুগল অ্যানালিটিক্স 4 ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা একগুচ্ছ ডেটাও পাবেন। এর মধ্যে রয়েছে:
-
ip_override
-
language
-
page_location
-
page_referrer
-
page_title
-
screen_resolution
-
user_agent
অতিরিক্তভাবে, যদি সার্ভারের অনুরোধটি কোনও ওয়েব ব্রাউজার থেকে আসে তবে getCookieValue
এপিআইয়ের মাধ্যমে ব্রাউজার কুকি ডেটাও উপলব্ধ থাকতে পারে।
একসাথে, এগুলি আমরা উপরে উল্লিখিত স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা তৈরি করে। সাধারণভাবে, এটিতে এমন ডেটা থাকে যা সর্বজনীন এবং শব্দার্থগতভাবে দ্ব্যর্থহীন। ব্রাউজারে যখন জিএ 4 ট্যাগ থেকে কোনও অনুরোধ আসে, তখন এই ডেটা সর্বদা উপলভ্য থাকবে এবং এটিতে সর্বদা একই ফর্ম্যাট থাকবে। এই পরামিতিগুলির আরও তথ্যের জন্য, ইভেন্টের রেফারেন্সটি একবার দেখুন।
কোন ডেটা ব্যবহারকারীর দ্বারা কনফিগার করা উচিত এবং কোন ডেটা ট্যাগে নির্দিষ্ট করা উচিত তা সিদ্ধান্ত নেওয়ার সময় এই শ্রেণিবিন্যাসটি আমাদের ব্যবহারের জন্য একটি দরকারী সরঞ্জাম দেয়। স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটা ইভেন্ট থেকে সরাসরি পড়তে নিরাপদ। অন্য সমস্ত কিছু ব্যবহারকারী দ্বারা কনফিগার করা উচিত।
এটি মাথায় রেখে, বাজ অ্যানালিটিক্স ট্যাগের পরামিতিগুলি আরও দেখুন।
- পরিমাপ আইডি,
id
: যেহেতু এটি স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয়নি, এটি ট্যাগটি কনফিগার করার সময় ব্যবহারকারী দ্বারা প্রবেশ করা উচিত এমন একটি মানের একটি স্পষ্ট উদাহরণ। - ইভেন্টের নাম,
en
: উপরে উল্লিখিত হিসাবে, ইভেন্টের নাম সর্বদাevent_name
প্যারামিটার থেকে সরাসরি নেওয়া যেতে পারে। তবে এর মানটি ব্যবহারকারী-সংজ্ঞায়িত হওয়ায় প্রয়োজনে নামটি ওভাররাইড করার ক্ষমতা দেওয়া ভাল ধারণা। - পৃষ্ঠা ইউআরএল,
l
: এই মানটিpage_location
প্যারামিটার থেকে নেওয়া যেতে পারে, যা প্রতিটি ইভেন্টে গুগল অ্যানালিটিক্স জিএ 4 ব্রাউজার ট্যাগ দ্বারা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয়। অতএব, আপনার ব্যবহারকারীর ম্যানুয়ালি কোনও মান প্রবেশের প্রয়োজন হবে না। - ব্যবহারকারী আইডি,
u
: বিএজেড অ্যানালিটিক্স সার্ভার ট্যাগে,u
প্যারামিটারটি ব্যবহারকারী নির্দিষ্ট নয় বা স্বয়ংক্রিয়ভাবে পৃষ্ঠায় ট্যাগ দ্বারা সংগ্রহ করা হয় না। পরিবর্তে, এটি একটি ব্রাউজার কুকিতে সংরক্ষণ করা হয় যাতে ব্যবহারকারীরা ওয়েবসাইটে একাধিক ভিজিট জুড়ে সনাক্ত করা যায়। আপনি নীচের বাস্তবায়নে যেমন দেখতে পাবেন, এটি বাজ বিশ্লেষণ সার্ভার ট্যাগ যা কুকি সেট করতেsetCookie
এপিআই ব্যবহার করে। এর অর্থ হ'ল বাজ অ্যানালিটিক্স ট্যাগটিই একমাত্র জিনিস যা কুকিটি কোথায় এবং কীভাবে সংরক্ষণ করা হয় তা জানে।l
মতো,u
প্যারামিটারটি স্বয়ংক্রিয়ভাবে সংগ্রহ করা উচিত।
একবার আপনি ট্যাগ কনফিগারেশন সেট আপ হয়ে গেলে, এটি এর মতো কিছু দেখতে হবে:
ট্যাগ বাস্তবায়ন
এখন যেহেতু ট্যাগের কনফিগারেশনটি স্কোয়ার হয়ে গেছে, আপনি স্যান্ডবক্সযুক্ত জাভাস্ক্রিপ্টে এর আচরণ বাস্তবায়নে এগিয়ে যেতে প্রস্তুত।
ট্যাগটির চারটি জিনিস করা দরকার:
- ট্যাগের কনফিগারেশন থেকে ইভেন্টের নামটি পান।
- ইভেন্টের
page_location
সম্পত্তি থেকে পৃষ্ঠা URL পান। - একটি ব্যবহারকারী আইডি গণনা করুন। ট্যাগটি
_bauid
নামক একটি কুকিতে ব্যবহারকারী আইডি সন্ধান করবে। যদি সেই কুকি উপস্থিত না থাকে তবে ট্যাগটি একটি নতুন মান গণনা করবে এবং পরবর্তী অনুরোধগুলির জন্য এটি সংরক্ষণ করবে। - একটি ইউআরএল তৈরি করুন এবং বাজ অ্যানালিটিক্স সংগ্রহ সার্ভারে একটি অনুরোধ করুন।
ট্যাগটি সামগ্রিকভাবে কীভাবে ধারকটিতে ফিট করে তা ভেবে এক মুহূর্ত সময় নেওয়াও মূল্যবান। বিভিন্ন ধারক উপাদানগুলি বিভিন্ন ভূমিকা পালন করে, তাই এমন কিছু জিনিস রয়েছে যা ট্যাগটি করে না বা করা উচিত নয়। আপনার ট্যাগ:
- এটি চালানো উচিত কিনা তা নির্ধারণের জন্য ইভেন্টটি পরীক্ষা করা উচিত নয়। এটাই ট্রিগার।
-
runContainer
এপিআই দিয়ে ধারক চালানো উচিত নয়। এটাই ক্লায়েন্টের কাজ। - কুকিজের গুরুত্বপূর্ণ ব্যতিক্রম সহ, এটি অনুরোধ বা প্রতিক্রিয়ার সাথে সরাসরি ইন্টারঅ্যাক্ট করার চেষ্টা করা উচিত নয়। এটিও ক্লায়েন্টের কাজ।
এমন একটি ট্যাগ টেম্পলেট লেখার ফলে যা এর মধ্যে যে কোনও কাজ করে তা আপনার ট্যাগ ব্যবহারকারীদের জন্য বিভ্রান্তিকর আচরণে পরিণত হবে। উদাহরণস্বরূপ, আগত অনুরোধের প্রতিক্রিয়া প্রেরণ করে এমন একটি ট্যাগ ক্লায়েন্টকে একই কাজ করতে বাধা দেবে। এটি ধারকটি কীভাবে আচরণ করার কথা রয়েছে সে সম্পর্কে ব্যবহারকারীদের প্রত্যাশা ভঙ্গ করবে।
এই সমস্ত কিছু মাথায় রেখে, নীচে স্যান্ডবক্সড জেএসে ট্যাগের একটি টীকাযুক্ত বাস্তবায়ন দেওয়া হল।
const encodeUriComponent = require('encodeUriComponent');
const generateRandom = require('generateRandom');
const getCookieValues = require('getCookieValues');
const getEventData = require('getEventData');
const logToConsole = require('logToConsole');
const makeString = require('makeString');
const sendHttpGet = require('sendHttpGet');
const setCookie = require('setCookie');
const USER_ID_COOKIE = '_bauid';
const MAX_USER_ID = 1000000000;
// The event name is taken from either the tag's configuration or from the
// event. Configuration data comes into the sandboxed code as a predefined
// variable called 'data'.
const eventName = data.eventName || getEventData('event_name');
// page_location is automatically collected by the Google Analytics 4 tag.
// Therefore, it's safe to take it directly from event data rather than require
// the user to specify it. Use the getEventData API to retrieve a single data
// point from the event. There's also a getAllEventData API that returns the
// entire event.
const pageLocation = getEventData('page_location');
const userId = getUserId();
const url = 'https://www.example.com/baz_analytics?' +
'id=' + encodeUriComponent(data.measurementId) +
'en=' + encodeUriComponent(eventName) +
(pageLocation ? 'l=' + encodeUriComponent(pageLocation) : '') +
'u=' + userId;
// The sendHttpGet API takes a URL and returns a promise that resolves with the
// result once the request completes. You must call data.gtmOnSuccess() or
// data.gtmOnFailure() so that the container knows when the tag has finished
// executing.
sendHttpGet(url).then((result) => {
if (result.statusCode >= 200 && result.statusCode < 300) {
data.gtmOnSuccess();
} else {
data.gtmOnFailure();
}
});
// The user ID is taken from a cookie, if present. If it's not present, a new ID
// is randomly generated and stored for later use.
//
// Generally speaking, tags should not interact directly with the request or
// response. This prevents different tags from conflicting with each other.
// Cookies, however, are an exception. Tags are the only container entities that
// know which cookies they need to read or write. Therefore, it's okay for tags
// to interact with them directly.
function getUserId() {
const userId = getCookieValues(USER_ID_COOKIE)[0] || generateRandom(0, MAX_USER_ID);
// The setCookie API adds a value to the 'cookie' header on the response.
setCookie(USER_ID_COOKIE, makeString(userId), {
'max-age': 3600 * 24 * 365 * 2,
domain: 'auto',
path: '/',
httpOnly: true,
secure: true,
});
return userId;
}
তার সাথে, ট্যাগটি প্রয়োগ করা হয়েছে। আপনি ট্যাগটি ব্যবহার করার আগে আপনাকে তার এপিআই অনুমতিগুলি সঠিকভাবে সেট করতে হবে। টেমপ্লেট সম্পাদকের অনুমতি ট্যাবে যান এবং নিম্নলিখিত অনুমতিগুলি নির্দিষ্ট করুন:
- কুকির মানগুলি পড়ুন:
_bauid
- ইভেন্টের ডেটা পড়ুন:
event_name
এবংpage_location
- HTTP অনুরোধ পাঠায়:
https://www.example.com/*
- একটি কুকি সেট করে:
_bauid
আপনার ট্যাগের জন্য আপনারও পরীক্ষা লিখতে হবে। টেমপ্লেট পরীক্ষা সম্পর্কে আরও পড়তে, টেমপ্লেট বিকাশকারী গাইডের পরীক্ষা বিভাগটি পড়ুন।
অবশেষে, কমপক্ষে একবার রান কোড বোতামের সাথে আপনার ট্যাগটি চালানোর চেষ্টা করতে ভুলবেন না। এটি আপনার সার্ভারে এটি তৈরি করা থেকে অনেক সাধারণ ভুলকে আটকাবে।
আপনার ট্যাগটি কমিউনিটি টেম্পলেট গ্যালারিতে জমা দিন
যেহেতু আপনি সমস্ত কাজ তৈরি, পরীক্ষা এবং একটি নতুন ট্যাগ স্থাপন করেছেন, তাই এটি নিজের কাছে রাখার কোনও কারণ নেই। আপনি যদি ভাবেন যে আপনার নতুন ট্যাগটি অন্য লোকের পক্ষে কার্যকর হবে তবে এটি কমিউনিটি টেম্পলেট গ্যালারীটিতে জমা দেওয়ার বিষয়টি বিবেচনা করুন।
উপসংহার
এই টিউটোরিয়ালে, আপনি একটি সার্ভার ধারক জন্য একটি ট্যাগ লেখার মূল বিষয়গুলি শিখেছেন। আপনি শিখেছেন:
- ইভেন্টের ডেটা পড়তে, এইচটিটিপি অনুরোধগুলি প্রেরণ করতে এবং ব্রাউজারে কুকিজ সেট করতে কোন এপিআই ব্যবহার করতে হবে।
- একটি ট্যাগের জন্য কনফিগারেশন বিকল্পগুলি ডিজাইনের জন্য সেরা অনুশীলন।
- ব্যবহারকারী-নির্দিষ্ট ডেটা এবং স্বয়ংক্রিয়ভাবে সংগৃহীত ডেটাগুলির মধ্যে পার্থক্য এবং কেন সেই পার্থক্যটি গুরুত্বপূর্ণ।
- পাত্রে একটি ট্যাগের ভূমিকা; এটি করা উচিত এবং করা উচিত নয়।
- কখন এবং কীভাবে কমিউনিটি টেম্পলেট গ্যালারীটিতে ট্যাগ টেম্পলেট জমা দিতে হবে।