Server-side GTM (sGTM) সেটআপ
আপনার Google Tag Manager server container আমাদের এখানে host করুন: container তৈরি, নিজের domain যুক্ত করা, GTM configure, loader বসানো, আর double counting ছাড়া GA4 ও Meta Conversions API event পাঠানো।
TrackPilot আপনার জন্য Google-এর official tagging-server চালায়। আপনি আগের মতোই Google Tag Manager-এ tag বানাবেন; আমরা server container host করি, তাকে একটা first-party URL দিই আর তার request গুনি। পুরো setup-এ প্রায় ২০ মিনিট লাগে।
GTM একদম খালি? Data layer, প্রতিটা variable, trigger, tag আর server container বানাতে দেখুন GTM সেটআপ শুরু থেকে।
শুরুর আগে যা লাগবে
- একটা Google Tag Manager account, যেখানে একটা web container (ID যেমন
GTM-ABC1234) আগে থেকেই আপনার site-এ বসানো আছে। - একটা TrackPilot account। কয়টা sGTM container চালাতে পারবেন সেটা আপনার plan-এর উপর নির্ভর করে (Billing দেখুন)।
- আপনার domain-এর DNS-এ access — একটা CNAME record যোগ করার জন্য।
ধাপ ১ — Google Tag Manager-এ server container তৈরি
- tagmanager.google.com খুলুন → Admin → Container-এর পাশে +।
- একটা নাম দিন (যেমন
server-yourshop.com), target platform হিসেবে Server বেছে নিন। - Manually provision tagging server বেছে নিয়ে Container Config copy করুন — একটা লম্বা string, যেটা
aWQ9R1RN…দিয়ে শুরু হয়।
আগে থেকেই server container আছে (যেমন অন্য host-এ)? সেটা খুলুন → Admin → Container Settings থেকে একই Container Config copy করুন। আপনার সব tag, trigger আর client সাথেই থাকবে।
ধাপ ২ — TrackPilot-এ container তৈরি
- Dashboard → sGTM → New container।
- একটা নাম দিন, Container Config paste করুন, তারপর Create container।
- ১–২ মিনিটের মধ্যে status requested → deploying → running হবে। দেখতে page reload করুন।
Container page-এ sGTM container ID, built-in URL আর এই মাসের ব্যবহৃত request দেখা যায়। ওখান থেকে যেকোনো সময় container stop, start বা delete করতে পারবেন।
ধাপ ৩ — নিজের domain যুক্ত করুন
আপনার site-এর একটা subdomain ব্যবহার করলে gtm.js আর প্রতিটা hit first-party হয়: cookie বেশি দিন থাকে, আর ad blocker-এ অনেক কম data হারায়।
- Container page → Domains → একটা hostname যোগ করুন, যেমন
data.yourshop.com। নিরপেক্ষ শব্দ নিন:gtm,analytics,tracking,pixelবাtagএড়িয়ে চলুন — ad blocker এগুলো খোঁজে। - DNS provider-এ dashboard-এ দেখানো CNAME record তৈরি করুন। DNS Cloudflare-এ হলে DNS only (ধূসর মেঘ) রাখুন।
- hostname আর SSL দুটোই active হওয়া পর্যন্ত অপেক্ষা করুন (সাধারণত কয়েক মিনিট; page নিজেই refresh হয়)।
নিচে আমরা https://data.yourshop.com লিখছি — যেখানে যেখানে আছে, সেখানে আপনার নিজের hostname বসাবেন।
ধাপ ৪ — GTM-এ server container configure করুন
- Server container URL: server container → Admin → Container Settings →
https://data.yourshop.comযোগ করুন → Save। - Web Container client (বাধ্যতামূলক): Clients → New → Google Tag Manager: Web Container → Allowed Container IDs = আপনার web container ID (
GTM-ABC1234) → Save। এই client না থাকলে tagging servergtm.jsআরns.html-এ 400 Bad Request দেয়। - GA4 client: নতুন server container-এ এটা আগে থেকেই থাকে। রেখে দিন — আপনার website থেকে পাঠানো event এটাই গ্রহণ করে।
- Submit → Publish। নতুন version tagging server-এ প্রায় এক মিনিটের মধ্যে চালু হয়।
যাচাই: https://data.yourshop.com/gtm.js?id=GTM-ABC1234 খুললে JavaScript আসবে, আর https://data.yourshop.com/healthz status 200 দেবে।
ধাপ ৫ — website-এ first-party loader বসান
- Container page → Install code (Custom Loader) → tagging-server URL বেছে নিন, web container ID দিন → Generate।
- প্রথম snippet-টা
<head>-এর যত উপরে সম্ভব বসান, আর<noscript>snippet-টা<body>tag খোলার ঠিক পরে। - পুরনো Google Tag Manager snippet সরিয়ে দিন — page-এ GTM একবারই load হতে হবে।
Snippet দেখতে এরকম (নিজেরটা dashboard থেকে generate করুন):
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});
var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;
j.src='https://data.yourshop.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-ABC1234');</script>
ধাপ ৬ — GA4 event server-এ পাঠান
- Web container → আপনার Google tag (GA4 configuration) → Configuration settings →
server_container_url=https://data.yourshop.comযোগ করুন। চাইলেfirst_party_collection=true-ও দিন। - যে GA4 event tag-গুলো shop-এর data বহন করে (
view_item,add_to_cart,add_payment_info,purchase), প্রতিটায়: More settings → Ecommerce → Send Ecommerce data টিক দিন, data source Data Layer। এতেitemslist server-এ যায়। - এই event parameter-গুলোও যোগ করুন, যাতে server পূর্ণ Meta event বানাতে পারে:
| Parameter | Value |
|---|---|
event_id | {{Event ID}} — Meta Pixel tag যেই variable ব্যবহার করে সেটাই (ধাপ ৮) |
value | order বা item-এর মূল্য (number) |
currency | যেমন BDT |
content_ids, content_type, content_name, num_items | আপনার data layer থেকে |
contents | {{JS - FB Contents (String)}} — অবশ্যই JSON string হতে হবে, নিচে দেখুন |
GA4 প্রতিটা parameter text হিসেবে পাঠায়, তাই array গেলে সেটা [object Object] হয়ে যায়। দুটো Custom JavaScript variable বানান (এগুলো Data Layer Variable ecommerce.items পড়ে):
JS - FB Contents (String)
function () {
var items = {{DLV - ecommerce.items}} || [];
return JSON.stringify(items.map(function (i) {
return { id: String(i.item_id), quantity: Number(i.quantity) || 1, item_price: Number(i.price) || 0 };
}));
}
JS - FB Value (data layer-এ order total না থাকলে value-এ এটা ব্যবহার করুন)
function () {
var items = {{DLV - ecommerce.items}} || [];
var total = 0;
for (var k = 0; k < items.length; k++) {
total += (Number(items[k].price) || 0) * (Number(items[k].quantity) || 1);
}
return total;
}
purchase-এর জন্য data layer-এ আসল order total (shipping আর discount সহ) থাকলে সেটাই ব্যবহার করুন।
ধাপ ৭ — server container-এ Meta Conversions API
- Server container → Templates → Search Gallery → Conversions API Tag (facebookincubator-এর) যোগ করুন।
- Tags → New → Conversions API Tag:
- Pixel ID — আপনার Meta Pixel / dataset ID।
- API Access Token — Events Manager → আপনার dataset → Settings → Generate access token।
- Action Source = Website, Extend Meta Pixel cookies (fbp/fbc) আর Enable Event Enhancement টিক দিন।
- Test Event Code — শুধু test করার সময় (Events Manager → Test events থেকে copy)। Live করার আগে এটা মুছে দিন, নাহলে Meta সব server event-কে test হিসেবে ধরবে।
- Trigger: একটা Custom trigger, যেটা GA4 client থেকে আসা সব event-এ fire করে (যেমন Client Name equals GA4)।
- Submit → Publish।
ধাপ ৮ — Deduplication: browser আর server-এর জন্য একটাই Event ID
Browser Pixel আর server একই event পাঠায়। দুটোতে একই event ID থাকলেই Meta একটা রাখে, double count হয় না।
- Web container-এ একটা Event ID variable বানান (যেমন Community Gallery-র Event Id variable template)।
- Official Meta Pixel tag template ব্যবহার করুন। পুরনো "Facebook Pixel" template-এর update দেখালে accept করুন — পুরনোটায় Event ID field নেই।
- প্রতিটা Meta Pixel tag (PageView, ViewContent, AddToCart, AddPaymentInfo, Purchase) → More Settings → Event ID = {{Event ID}}।
- মিলে যাওয়া প্রতিটা GA4 event tag → parameter
event_id= {{Event ID}} (ধাপ ৬)।
নিজেই server event পাঠাচ্ছেন বলে Meta Pixel tag-এর Meta-enabled Conversions API integration option দরকার নেই; বন্ধ রাখতে পারেন।
Matching কীভাবে কাজ করে: Event deduplication।
ধাপ ৯ — Test
- Server container-এ GTM Preview: site খুলে প্রতিটা event-এর Event Data দেখুন —
contentsএকটা JSON list আরvalueএকটা number হতে হবে — আর Conversions API tag-এgraph.facebook.com-এ outgoing request status 200 দেখাবে। - Events Manager → Test events: প্রতিটা action-এ একটা Browser আর একটা Server row আসবে। Server row-এ Deduplicated লেখা থাকবে, আর দুটোর Event ID একই।
- Meta Pixel Helper (Chrome extension): event খুললে browser যে Event ID পাঠিয়েছে সেটা দেখায়।
Publish করার পর test page Ctrl+Shift+R দিয়ে reload করুন: browser কয়েক মিনিট পুরনো gtm.js রেখে দেয়।
সমস্যা ও সমাধান
| যা দেখছেন | কারণ | সমাধান |
|---|---|---|
gtm.js 400 দেয় | Web Container client নেই, বা এখনো publish হয়নি | ধাপ ৪, publish, এক মিনিট অপেক্ষা |
| Domain pending-এ আটকে আছে | CNAME নেই বা proxied | Dashboard-এর CNAME যোগ করুন; Cloudflare-এ DNS only |
| Container error দেখায় | Container Config পুরোটা paste হয়নি, বা plan-এর container limit শেষ | Config আবার copy করুন; Billing দেখুন; support-এ যোগাযোগ করুন |
| Test events-এ server row নেই | CAPI tag-এর Test Event Code আজকের code নয় | Test events থেকে বর্তমান code tag-এ দিন (live-এর আগে মুছবেন) |
contents-এ [object Object] | Array সরাসরি GA4 parameter হিসেবে গেছে | ধাপ ৬-এর JSON string variable ব্যবহার করুন |
Server event-এ শুধু value আর currency | items server-এ যাচ্ছে না | GA4 event tag-এ Send Ecommerce data টিক দিন (ধাপ ৬) |
| Test events-এ browser row-এ Event ID নেই | Browser row-এ ওই column প্রায়ই খালি থাকে; অথবা page এখনো পুরনো gtm.js load করছে | Hard reload করে Meta Pixel Helper দিয়ে দেখুন |
| Event দুবার গোনা হচ্ছে | Browser আর server-এর event ID আলাদা | দুই দিকে একই {{Event ID}} variable (ধাপ ৮) |
অন্য sGTM host থেকে চলে আসা
- TrackPilot-এ একই Container Config দিয়ে container বানান (ধাপ ২) — আপনার সব tag, trigger, client Google Tag Manager-এই থাকে।
- আপনার tagging domain-এর DNS আমাদের দিকে point করুন (ধাপ ৩)। active দেখালেই traffic নতুন container-এ আসবে।
- পুরনো host নিজের উপায়ে
gtm.jsদিলে Web Container client যোগ করুন (ধাপ ৪), আর আমাদের loader snippet বসান (ধাপ ৫)। - Test করুন (ধাপ ৯), তারপর পুরনো hosting বাতিল করুন।
ব্যবহার ও limit
আপনার tagging server-এ আসা প্রতিটা request plan-এর মাসিক সীমার মধ্যে গোনা হয়। sGTM page-এ requests this month / limit আর আপনার plan-এ কয়টা container চলবে দেখা যায়; বেশি লাগলে Billing page থেকে upgrade করুন।
Stuck? Ask for setup help — we answer in বাংলা or English.