Blog · 2026-08-30

আগে ট্র্যাকিং, তারপর বাজেট বাড়ানো: Pixel আর CAPI-তে একই event_id দিয়ে দুবার পাঠিয়ে ডিডুপ্লিকেশন

iOS-এর গোপনীয়তার যুগে ব্রাউজারের Pixel ইভেন্ট হারায়। আমরা একই event_id দিয়ে দুই পথে পাঠিয়ে ডিডুপ্লিকেশন আর পরিষ্কার ম্যাচিং কী ব্যবহার করে সাইটের ইভেন্টগুলোর ম্যাচ কোয়ালিটি বাস্তবে 6 থেকে 7-এ নিয়ে গেছি।

বিজ্ঞাপনে টাকা খরচ হচ্ছে, অথচ কনসোলের কনভার্শন সংখ্যা আর আসল অর্ডার মিলছে না। গ্রাহক স্পষ্টতই কিনেছে, কিন্তু Pixel কিছু রিপোর্ট করেনি, কারণ লেনদেনটা হয়েছে সাইটের বাইরে তৃতীয় পক্ষের অর্ডার পাতায়, আর ব্রাউজারের ট্র্যাকিং কোড ওই ধাপটা দেখতেই পায় না; এমনকি লেনদেন সাইটেই হলেও iOS ব্যবহারকারীদের অংশটা থেকে একটা টুকরো হারিয়ে যায়। অ্যালগরিদম ভাঙা সংকেত নিয়ে অডিয়েন্স খুঁজতে যায়, আর বাজেট যত বাড়ে সে তত ভুল শেখে।

শুধু Pixel-এ কেন অবশ্যই ফাঁক থাকবে

ব্রাউজারের দিকের ট্র্যাকিং গত কয়েক বছরে একের পর এক দুর্বল হয়েছে: iOS-এর ATT ব্যবহারকারীকে এক ট্যাপে ট্র্যাকিং প্রত্যাখ্যান করতে দেয়; Safari আর Firefox-এর ট্র্যাকিং সুরক্ষা cookie-র আয়ু অনেকটা কমিয়ে দেয়; আর অ্যাড ব্লকার Pixel-এর রিকোয়েস্টটাই পুরো আটকে দেয়। শিল্পে সাধারণভাবে ধরা হয়, এই সব মিলিয়ে শুধু ব্রাউজারের দিকের ট্র্যাকিংয়ে প্রায় 20 থেকে 30 শতাংশ ইভেন্ট রিপোর্ট হয় না।

যা হারায় তা কেবল রিপোর্টের সংখ্যা নয়। Meta-র বিজ্ঞাপন অ্যালগরিদম কনভার্শন ইভেন্ট থেকে শেখে "কে কিনবে", আর পাঠ্যবই থেকে যদি বিশ-তিরিশ শতাংশ পাতা ছেঁড়া থাকে তাহলে যে অডিয়েন্স বেরোবে সেটা বাঁকা হবেই। সমাধানের দিকটা পরিষ্কার: সার্ভারের দিকে আরেকটা চ্যানেল খুলুন (Conversions API), যেখানে রিকোয়েস্ট সার্ভার থেকে সরাসরি Meta-তে যায় আর ব্রাউজারের প্লাগইন সেটাকে ছুঁতেই পারে না। কিন্তু দুই চ্যানেলে একসঙ্গে পাঠালে একই কনভার্শন দুবার গোনা হবে, তাই ডিডুপ্লিকেশনই এই কাঠামোর প্রথম প্রকৌশলগত সমস্যা।

দুই পথে পাঠানো আর ডিডুপ্লিকেশন: event_id-ই একমাত্র সেতু

আমাদের পদ্ধতি: ফ্রন্টএন্ডের Pixel আগের মতোই ইভেন্ট পাঠায়; একই সময়ে সেই একই ইভেন্ট সার্ভারের দিক থেকে CAPI দিয়ে আরেকবার পাঠানো হয়। CAPI এন্ডপয়েন্টটা আমরা নিজেরা Cloudflare Pages Function-এ বসিয়েছি, ফ্রন্টএন্ড নিজেদের এন্ডপয়েন্টেই কল করে আর সেটাই ক্রেডেনশিয়াল নিয়ে Meta-তে ফরোয়ার্ড করে, ফলে কী ফ্রন্টএন্ডে পড়ে থাকে না আর পরে যাচাই বা ফিল্টার যোগ করতে চাইলে সেটাও নিজেদের হাতেই থাকে।

ডিডুপ্লিকেশন চলে Meta-র মিলিয়ে দেখার নিয়মে: ইভেন্টের নাম এক আর event_id এক হলে সেটাকে একই ইভেন্ট ধরা হয় এবং একবারই গোনা হয়। তাই event_id ফ্রন্টএন্ডে একবারই তৈরি হতে হবে এবং একই সঙ্গে Pixel আর ব্যাকএন্ড দুজনকেই দিতে হবে; দুই দিকে আলাদা করে তৈরি করবেন না, আর কোনো নির্দিষ্ট স্ট্রিং বসিয়ে কাজ চালাবেন না, এটা প্রতিটা ইভেন্টের জন্য অনন্য মান হতেই হবে। ডিডুপ্লিকেশন ব্যর্থ হলে শুধু রিপোর্ট বাজে দেখায় তা নয়: একই লেনদেন দুবার গোনা হলে ফলাফল দেখতে সরাসরি দ্বিগুণ লাগে, আর আপনি ভুল সংখ্যার উপর দাঁড়িয়ে বাজেট বাড়ানোর সিদ্ধান্ত নেবেন।

যাচাই বাদ দেওয়া যাবে না। চালু করার আগে আমরা বাস্তবে মেপে দেখেছি দুই দিকের event_id হুবহু এক, CAPI-র দিকে Meta থেকে events_received:1 উত্তর এসেছে, আর টেস্ট ইভেন্ট টুলে দুই দিকের ইভেন্ট জোড়ায় জোড়ায় দেখা গেছে এবং ডিডুপ্লিকেটেড বলে চিহ্নিত হয়েছে। সব কটা পাস করার পরেই আমরা ছাড় দিয়েছি।

ম্যাচিং কী: আগে নরমালাইজ, তারপর হ্যাশ, আর আবর্জনা সংকেত সরাসরি বাদ

Meta ম্যাচিং কী ব্যবহার করে ইভেন্টকে আসল ব্যবহারকারীর সঙ্গে মেলায়, আর ইভেন্ট ম্যাচ কোয়ালিটি (EMQ) ঠিক এই জিনিসটাই মাপে। আমরা ছয়টা কী পাঠাই: email, ফোন, পদবি, নাম, শহর আর দেশ, আর সবগুলোকেই সার্ভারের দিকে নরমালাইজ করার পরেই SHA256 হ্যাশ করে পাঠাই। নরমালাইজেশন অফিসিয়াল স্পেক ধরেই হয়: email ছোট হাতের অক্ষরে, আগে-পরের ফাঁকা জায়গা বাদ, ফোন থেকে চিহ্ন আর শুরুর শূন্য বাদ দিয়ে দেশের কোড যোগ। নিয়ম মিললে তবেই দুই দিকের হিসাব করা হ্যাশ একই মান হবে।

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

এই ব্যবস্থা শেষ করার পর সাইটের ইনটেন্ট ইভেন্টগুলোর EMQ বাস্তবে 6 থেকে 7-এর ঘরে এসেছে (Meta-র দশ পয়েন্টের স্কেলে)। এতে কোনো জাদু নেই, কী-গুলো সম্পূর্ণ আর পরিষ্কার দেওয়া হয়েছে, এটুকুই।

অফলাইন ইভেন্টে IP/UA না পাঠানোটা ইচ্ছাকৃত

লেনদেনের যে অংশটা সাইটের বাইরে ঘটে, সেখানে আমরা CAPI দিয়ে Purchase ইভেন্ট ফেরত পাঠাই, action_source দেওয়া হয় system_generated, আর সঙ্গে IP বা UA পাঠানো হয় না।

কারণটা খুব সরল: ওই লেনদেন ব্যবহারকারীর ব্রাউজারে ঘটেনি, তাই ওই মুহূর্তের আসল IP আর UA আপনার হাতে থাকার প্রশ্নই ওঠে না। সার্ভারের নিজের IP বসিয়ে কাজ চালানো মানে ভুয়া সংকেত খাওয়ানো, যা কারও সঙ্গে মিলবে না, উল্টো ম্যাচ কোয়ালিটি নষ্ট করবে, লাভের চেয়ে ক্ষতি বেশি। কম দেওয়া ভালো, ভুল দেওয়া নয়। আর যেহেতু অফলাইন ইভেন্টে ব্রাউজারের পরিবেশগত সংকেত থাকে না, ম্যাচিংয়ের পুরো ভারটাই পড়ে ম্যাচিং কী-র উপর, তাই আগের অংশের নরমালাইজেশন আর বাদ দেওয়ার নিয়মই এখানে সরাসরি ঠিক করে দেয় ইভেন্টটা কারও সঙ্গে মিলবে কি না। এই দফায় বাস্তবে 7টি অফলাইন ইভেন্ট সফলভাবে ফেরত পাঠানো গেছে, আর অ্যালগরিদম প্রথমবার সাইটের বাইরের আসল ক্রেতাদের তালিকা পেয়েছে, আগে সে শুধু দেখত কে সাইটে ঢুকেছে, শেষ পর্যন্ত কী হলো তা জানত না।

শেষ কথা: ট্র্যাকিং যাচাই না করে বাজেট ছাড়বেন না

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

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

ট্র্যাকিংয়ের এই কাজটা আমরা সেবা বানিয়ে ফেলেছি

উপরের এই ডিডুপ্লিকেশন আর প্যারামিটার পূরণের কাজটা আমরা প্রতিটা নতুন অ্যাকাউন্ট নেওয়ার সঙ্গে সঙ্গেই একবার করে চালাই, এটাই বিজ্ঞাপন শুরুর আগের প্রথম স্টেশন।

তিনটা স্তর, একবারের সেটআপ:

প্ল্যান খরচ কী থাকছে
Basic $150 একটিমাত্র Pixel, স্ট্যান্ডার্ড ইভেন্ট, প্রাথমিক ডিডুপ্লিকেশন
Complete $400 সঙ্গে সার্ভার সাইড CAPI, প্যারামিটার পূরণ, ইভেন্ট যাচাই
Advanced $800 সঙ্গে একাধিক সাইট ও একাধিক Pixel, কাস্টম ইভেন্ট, Postback ফেরত পাঠানো

স্পেসিফিকেশন আর ডেলিভারির সময়সূচি আছে ডেটা ট্র্যাকিং ও অ্যাট্রিবিউশন সেটআপ পাতায়। ট্র্যাকিং ঠিকমতো বসার আগে বাজেট বাড়ানোর তাড়া করবেন না, প্রতিটা অ্যাকাউন্ট হাতে নেওয়ার সময় এটাই আমাদের নিয়ম।

এই ধরনের সমস্যা আমরা প্রতিদিন সমাধান করি

আপনার পরিস্থিতি জানান, আমরা সরাসরি বলব এটা সম্ভব কিনা এবং আনুমানিক খরচ কত।

Telegram-এ আলাপ করুন
মূল্যায়ন ও কোটেশন বিনামূল্যে · উত্তর দেবেন ইঞ্জিনিয়ার নিজেই
TG-তে আলাপ করুন