تتبع التحليلات: جمع الأحداث مع الأولوية للخصوصية
يشرح هذا المقال كيف نتتبع سلوك المستخدم مع احترام الخصوصية وتجنب حركة مرور الروبوتات.
المشكلة: فهم سلوك المستخدم
نحتاج إلى معرفة:
-
أي الصفحات يزورها المستخدمون
-
أي المنتجات يشاهدونها
-
من أين يأتي الزوار (إعلانات جوجل، بحث عضوي، وسائل التواصل الاجتماعي)
-
أي الحملات تقود إلى التحويلات (المبيعات)
ولكن يجب علينا تجنب:
-
تتبع الروبوتات والعناكب (Bots & Crawlers)
-
تخزين المعلومات الشخصية القابلة للتحديد (PII)
-
انتهاك لوائح الخصوصية
الحل: التتبع من جانب العميل + جانب الخادم
جانب العميل: التتبع عبر جافاسكريبت
معرف الزائر (Visitor ID): معرف عشوائي مخزن في ملف تعريف الارتباط (كوكي) (لمدة 365 يومًا)
معرف الجلسة (Session ID): معرف عشوائي مخزن في تخزين الجلسة (sessionStorage) (حتى إغلاق المتصفح)
معلمات الحملة (Campaign params): مستخرجة من عنوان URL ومخزنة في تخزين الجلسة
المعلمات التي يتم تتبعها:
-
gclid- معرف نقر جوجل (إعلانات البحث) -
gbraid- معرف نقر إعلانات جوجل (إعلانات التسوق) -
wbraid- معرف نقر إعلانات جوجل (iOS) -
fbclid- معرف نقر فيسبوك -
srsltid- معرف نتيجة البحث العضوي في جوجل -
utm_source,utm_medium,utm_campaign,utm_term,utm_content
التخزين: تُخزن المعلمات في ملفات تعريف الارتباط (كوكيز) (لمدة 30 دقيقة) لربط التحويلات بنقرات واتساب أو الهاتف
جانب الخادم: الإثراء
يقوم الخادم بإثراء الأحداث بـ:
بيانات تحديد الموقع الجغرافي (GeoIP): الدولة، المنطقة، المدينة من عنوان IP
تحليل وكيل المستخدم (User-Agent): المتصفح، نظام التشغيل، نوع الجهاز
الطابع الزمني (Timestamp): وقت الخادم (UTC)
كشف الروبوتات: يقوم بتصفية وكيل المستخدم المعروف للروبوتات
أنواع الأحداث
عرض الصفحة (Page view): زيارة المستخدم لصفحة
عرض المنتج (Product view): عرض المستخدم لصفحة منتج
إضافة إلى السلة (Add to cart): إضافة المستخدم منتجًا إلى سلة التسوق
الدفع (Checkout): بدء المستخدم لعملية الدفع
الشراء (Purchase): إكمال المستخدم للشراء
نقر واتساب (WhatsApp click): نقر المستخدم على زر واتساب
نقر الهاتف (Phone click): نقر المستخدم على رقم الهاتف
تدفق البيانات
sequenceDiagram
participant User
participant JS as JavaScript
participant API as /api/analytics
participant Firehose as Kinesis Firehose
participant S3
User->>JS: زيارة الصفحة
JS->>JS: استخراج معلمات الرابط
(gclid, utm_*, إلخ.)
JS->>JS: التخزين في sessionStorage
JS->>API: إرسال حدث POST + المعلمات
API->>API: إثراء ببيانات تحديد الموقع الجغرافي
API->>API: تحليل وكيل المستخدم
API->>API: تصفية الروبوتات
API->>Firehose: إرسال الحدث المثرى
Firehose->>S3: التخزين في حزمة التحليلات (bucket)كشف الروبوتات
نقوم بتصفية حركة مرور الروبوتات باستخدام إشارات متعددة:
أنماط وكيل المستخدم (User-Agent patterns): سلاسل نصية معروفة للروبوتات (Googlebot, Bingbot, إلخ.)
أنماط السلوك (Behavior patterns): سريعة جدًا، طلبات كثيرة جدًا
غياب جافاسكريبت (Missing JavaScript): غالبًا لا تقوم الروبوتات بتنفيذ JS
كوكي الاستبعاد (Exclusion cookie): tv_exclude=true يوقف جميع عمليات التتبع
حماية الخصوصية
لا لمعلومات التعريف الشخصية (No PII): لا نقوم أبدًا بتخزين الأسماء أو البريد الإلكتروني أو أرقام الهواتف
عناوين IP مجهولة المصدر (Anonymized IPs): إزالة الجزء الأخير من عنوان IP قبل التخزين
لا للتتبع عبر المواقع (No cross-site tracking): ملفات تعريف الارتباط (كوكيز) خاصة بالموقع الأول فقط
الانسحاب (Opt-out): يمكن للمستخدمين تعيين كوكي الاستبعاد
احتفاظ بالبيانات (Data retention): يتم حذف الأحداث بعد 90 يومًا
تحميل بكسل التتبع المشروط
نقوم بتحميل بكسل التتبع فقط عندما يكون ذا صلة:
بكسل إعلانات جوجل (Google Ads pixel): فقط إذا كان gclid أو gbraid أو wbraid موجودًا
بكسل لينكد إن (LinkedIn pixel): فقط إذا كان msclkid موجودًا
بكسل فيسبوك (Facebook pixel): فقط إذا كان fbclid موجودًا
الفائدة: تحميل أسرع للصفحات، حمل تتبع أقل
اكتشاف مصدر الزوار
نكتشف مصدر الزوار من معلمات عنوان URL:
إعلانات جوجل (Google Ads): gclid, gbraid, wbraid → utm_source=google_ads
بحث جوجل العضوي (Google Organic): srsltid → utm_source=google_search
فيسبوك (Facebook): fbclid → utm_source=facebook
لينكد إن (LinkedIn): msclkid → utm_source=linkedin
مباشر (Direct): لا توجد معلمات → utm_source=direct
تتبع التحويلات
نتتبع التحويلات عبر مسار المبيعات:
عرض المنتج → إضافة إلى السلة → الدفع → الشراء
تتضمن كل خطوة:
-
معرف الزائر (لربط التحويلات)
-
معرف الجلسة (لتحليل الجلسة)
-
معلمات الحملة (لحساب عائد الاستثمار ROI)
-
رمز المنتج (SKU) (لتحليل المنتج)
تتبع اتصالات العملاء المحتملين
عندما يتصل بنا المستخدمون (واتساب، هاتف، بريد إلكتروني)، نقوم بتسجيل:
طريقة الاتصال (Contact method): واتساب، هاتف، بريد إلكتروني
معلمات الحملة (Campaign params): من ملفات تعريف الارتباط (كوكيز) (نافذة زمنية مدتها 30 دقيقة)
سياق المنتج (Product context): صفحة المنتج التي كانوا عليها
الفائدة: ربط التحويلات غير المتصلة بالإنترنت (Offline) بالحملات عبر الإنترنت
تحديد معدل الطلبات
نقطة نهاية التحليلات محددة بمعدل الطلبات:
الحد (Limit): 100 طلب كل 10 دقائق لكل عنوان IP
الفائدة: يمنع إساءة الاستخدام وطوفان الطلبات من الروبوتات
التخزين
يتم تخزين الأحداث في S3 عبر Kinesis Firehose:
التنسيق (Format): أسطر JSON (حدث واحد لكل سطر)
التقسيم (Partitioning): حسب التاريخ (سنة/شهر/يوم/ساعة)
الضغط (Compression): Gzip
الاحتفاظ (Retention): 90 يومًا
الاستعلام
يتم الاستعلام عن الأحداث عبر AWS Athena:
المخطط (Schema): معرف في كتالوج بيانات Glue
الاستعلامات (Queries): SQL على بيانات S3
حالات الاستخدام (Use cases): عائد الاستثمار للحملات، شعبية المنتجات، مصادر الزوار
المراجع
المفاهيم التقنية
-
تحليلات الويب (Web analytics) - ويكيبيديا
-
الخصوصية عبر التصميم (Privacy by design) - ويكيبيديا
خدمات AWS
-
Kinesis Firehose - وثائق AWS
-
Athena - وثائق AWS
مقالات ذات صلة
- هندسة الخوادم المتعددة (Multi-Server Architecture) - مكان تشغيل التحليلات
الملخص
يتتبع نظام التحليلات لدينا سلوك المستخدم مع احترام الخصوصية:
جانب العميل:
-
✅ استخراج معلمات الحملة من عنوان URL
-
✅ التخزين في تخزين الجلسة (sessionStorage) (محدود بالجلسة)
-
✅ التخزين في ملفات تعريف الارتباط (كوكيز) (30 دقيقة لربط التحويلات)
-
✅ إرسال الأحداث إلى API
جانب الخادم:
-
✅ الإثراء ببيانات تحديد الموقع الجغرافي ووكيل المستخدم
-
✅ تصفية حركة مرور الروبوتات
-
✅ الإرسال إلى Kinesis Firehose
-
✅ التخزين في S3 (مقسم حسب التاريخ)
الخصوصية:
-
✅ لا يتم تخزين معلومات التعريف الشخصية (PII)
-
✅ عناوين IP مجهولة المصدر
-
✅ ملفات تعريف الارتباط (كوكيز) خاصة بالموقع الأول فقط
-
✅ خيار الانسحاب متاح
-
✅ احتفاظ لمدة 90 يومًا
التحميل المشروط:
-
✅ بكسل إعلانات جوجل فقط إذا كان gclid موجودًا
-
✅ بكسل لينكد إن فقط إذا كان msclkid موجودًا
-
✅ بكسل فيسبوك فقط إذا كان fbclid موجودًا
يوازن هذا النهج بين الحصول على رؤى وبين الخصوصية والأداء.