المدونة
SignalHost لـ Drupal: ثبّت الوحدة، واربط مرة واحدة، فيعمل التتبّع من جانب الخادم
نُشر · 6 دقائق قراءة
تضع وحدة SignalHost خدمة Google Tag Manager من جانب الخادم على موقع Drupal دون سطر واحد من الكود الملصوق. فهي تضيف مُحمِّل التتبّع إلى كل صفحة ليست من صفحات الإدارة، وتُبقيه محدّثًا كلما تغيّر شيء في جانبنا، وتزيله مجددًا حين تقطع الاتصال. يتبع هذا الدليل الترتيب الذي تصادفها به: تثبيت الوحدة، ثم ربط حاوٍ، ثم التحقق من أنها تعمل، وما تفعله حين لا تعمل.
قبل أن تبدأ
- Drupal 10.3 أو 11، يعمل على PHP 8.1 أو أحدث مع امتداد sodium، وهو جزء من PHP منذ الإصدار 7.2.
- حساب SignalHost. الخطة المجانية تكفي للتجربة: عشرة آلاف طلب شهريًا وحاوٍ واحد. ويمكنك إنشاء الحساب أثناء الربط.
- حساب يملك الصلاحية Administer SignalHost Server-Side Tagging. لا يستطيع ربط الموقع أو قطع اتصاله إلا المستخدمون الذين يملكونها.
1. ثبّت الوحدة
ثبّتها مثل أي وحدة مساهَمة من صفحة مشروعها على drupal.org: أضفها عبر Composer، ثم فعّلها.
composer require drupal/signalhost_server_side_tagging
drush en signalhost_server_side_taggingدون Drush، فعّلها ضمن Extend، حيث تظهر باسم SignalHost Server-Side Tagging في مجموعة Statistics. ولا تطبع شيئًا حتى يُربط الموقع.
2. اربط الموقع بحاوٍ
افتح Configuration › Web services › SignalHost (/admin/config/services/signalhost) واضغط «Connect with SignalHost». وإن لم يكن لديك حساب بعد، فإن «Create a free account» ينقلك إلى صفحة التسجيل بدلًا من ذلك. لا يُرسَل أي شيء إلى SignalHost قبل أن تضغط زر الربط.
على signalhost.io، سجّل الدخول. تسرد الشاشة التالية ما ستتمكن الوحدة من فعله وما لن تتمكن منه، وتسألك أي حاوٍ يجب أن يستخدمه الموقع. الحاوي هو خادم الوسم الخاص بك: حاوي ويب وحاوي خادم في Tag Manager، يُبنيان في حساب Google الخاص بك، فيبقيان ملكك.
اختر حاويًا موجودًا، أو اضغط «حاوية جديدة لـ…» مع اسم موقعك ومُرّ بالمعالج القصير. يستغرق بناء حاوٍ جديد بضع دقائق؛ ويمكنك الربط فورًا، ويُضاف الكود فور جاهزيته. اضغط «اربط». فتعود إلى صفحة SignalHost في Drupal مع الرسالة «Connected». وقد أصبح كود SignalHost الآن مضافًا إلى كل صفحة من موقعك.
3. تحقّق من وجود الكود على موقعك
تعرض الصفحة الآن «Tracking is live»، أو «Tracking starts as soon as your container is ready» بينما ما زال حاوٍ جديد قيد البناء. ثم اقرأ السطر «On your home page»: فبعد الربط مباشرة، تجلب الوحدة صفحتك الرئيسية كما يفعل الزائر وتبحث عن الكود الخاص بها. والجواب الذي تريده هو «Code found». يكرّر «Check again» الفحص في أي وقت، والأجوبة الأخرى مشروحة في قسم «حين لا يعمل شيء ما».
4. اختبره
افتح موقعك في نافذة خاصة وتنقّل بين بضع صفحات؛ فالزائر الذي يرفض لافتة ملفات تعريف الارتباط لديك يُحتسب مع ذلك، كإشارة Google بلا ملفات تعريف ارتباط. ثم اضغط «Open statistics & settings» لتفتح صفحة الحاوي على signalhost.io.
ضمن «تحليلات مفصّلة»، تعرض علامة التبويب «الأحدث» مشاهدات الصفحات في آخر 30 دقيقة، ومنها مشاهداتك. ويقارن «تشغيل الفحوصات»، ضمن «استكشاف الأخطاء وإصلاحها» أسفل الصفحة، ما تلقّاه خادم الوسم الخاص بك بما يُبلغ عنه Google Analytics للدقائق الثلاثين نفسها. ومن الطبيعي أن يكون الرقم في Analytics أقل: فهو يستبعد الزوار الذين رفضوا ملفات تعريف الارتباط. وبدءًا من خطة Growth، تعرض «مراقبة الأحداث مباشرة» كل حدث لحظة وصوله.
ما تضيفه الوحدة إلى موقعك
سكربت صغير واحد، وتواصل واحد كل ساعة:
- مُحمِّل Google Tag Manager، في قسم head من كل صفحة ليست من صفحات الإدارة، موجَّهًا إلى عنوان الوسم الخاص بك بدلًا من googletagmanager.com. يحمّل حاوي Tag Manager لديك من هناك. تبنيه الوحدة بنفسها من قيمتين جرى التحقق منهما؛ ولا يُطبع أي شيء ترسله SignalHost كسكربت أبدًا. وتحمل تلك الصفحات وسم ذاكرة تخزين مؤقت (cache tag)، فتتجدد ذاكرة التخزين المؤقت للصفحات كلما تغيّر المُحمِّل، بما في ذلك الصفحات المخزّنة قبل أن تربط.
- مرة كل ساعة، بعد إرسال استجابة، تتواصل الوحدة مع signalhost.io لتبقى محدّثة. ولا ترسل إلا إصدارات الوحدة وDrupal وPHP، وعنوان موقعك، وما إذا عُثر على الكود في صفحتك الرئيسية: لا بيانات زوار، ولا محتوى، ولا حسابات مستخدمين. وإن تعذّر الوصول إلى signalhost.io، يحتفظ الموقع بآخر إعداد سليم. ولا ينتقل شيء مما تخزّنه مع تصدير الإعدادات (configuration export).
يغادر كل طلب المتصفح بشكل لا تتعرّف عليه حاجبات الإعلانات، ويمرّره خادم الوسم الخاص بك إلى Google Analytics 4 وإلى منصات الإعلانات التي تُعدّها في صفحة الحاوي: Google Ads وMeta وTikTok وغيرها. ويتبع التتبّع لافتة ملفات تعريف الارتباط لديك عبر Google Consent Mode؛ فضع كود لافتتك قبل كود SignalHost.
لا تقرأ الوحدة النماذج ولا الطلبات، بما في ذلك Drupal Commerce. تصل مشاهدات الصفحات من تلقاء نفسها؛ أما عملية الشراء أو العميل المحتمل فيصل إلى حاويك حين يدفعه موقعك إلى طبقة البيانات.
نطاق التتبّع الخاص بك
يبدأ حاويك على عنوان تحت signalhost.io. في خطة مدفوعة، ينقله «إعداد نطاقك الخاص» في صفحة الحاوي إلى نطاق فرعي من موقعك أنت، مثل sgtm.yoursite.com، بسجل DNS واحد لدى مزوّدك. ينجو ذلك العنوان من قوائم المرشّحات ويُبقي ملفات تعريف الارتباط الخاصة بالنقرات من الطرف الأول. وحين يبدأ الخدمة، تنقل الوحدة موقعك إليه عند تواصلها التالي، عادةً خلال ساعة، ويجدّد وسم ذاكرة التخزين المؤقت صفحاتك المخزّنة. لا يلزم استبدال أي شيء يدويًا، ويظل العنوان القديم يعمل حتى ذلك الحين.
إضافة SignalHost يدويًا
يمكنك أيضًا لصق الكود بنفسك. في صفحة الحاوي، ابحث عن المقتطف الخاص بك في بطاقة «التثبيت على موقعك» واضغط «نسخ». ألصقه في قسم head من كل صفحة (في Drupal، عبر قالبك)، مباشرة بعد سكربت لافتة ملفات تعريف الارتباط، واضغط «لقد فعلت ذلك». ويسلّم «نسخ لوكيل ذكاء اصطناعي» المهمة نفسها إلى وكيل برمجة.
اللصق اليدوي يتخلى عمّا تفعله الوحدة: لا شيء يفحص صفحتك الرئيسية، ولا شيء يزيل الكود حين تقطع الاتصال، وحين يبدأ نطاقك الخاص الخدمة تستبدل الكود بنفسك، من «حدّث مقتطف موقعك» في البطاقة أو من البريد الإلكتروني الذي يعلن عن النطاق. ولا تستخدم الطريقتين معًا أبدًا: فنسختان تحتسبان كل زيارة مرتين.
التحديثات والإدارة وقطع الاتصال
تصل التحديثات عبر Composer، ويُبلغ تقرير حالة التحديثات في Drupal عن الإصدارات الجديدة، كما هو الحال مع كل وحدة على drupal.org.
يسألك «Disconnect»، في صفحة SignalHost، مرة واحدة: «Disconnect this site from SignalHost?». والتأكيد يلغي وصول الموقع، ويزيل الكود من كل صفحة، ويجدّد صفحاتك المخزّنة. يبقى حاويك وإحصاءاته، ويمكنك الربط مجددًا في أي وقت.
على signalhost.io، تقول صفحة الحاوي «مثبّت بواسطة وحدة Drupal على» متبوعة بموقعك. ويقودك زر «إدارة» فيها إلى «الإعدادات»، ضمن «المواقع المرتبطة»، حيث يعمل «قطع الاتصال» أيضًا: تتوقف الوحدة عن تحميل SignalHost عند تواصلها التالي، عادةً خلال ساعة.
إلغاء تثبيت الوحدة يلغي أيضًا وصول الموقع ويزيل كل ما خزّنته الوحدة.
حين لا يعمل شيء ما
- «Could not check (your server refused a request to itself)»: مضيفك يحجب الطلبات إلى عنوانه هو. وهذا لا يقول شيئًا عن زوارك؛ ابحث عن عنوان الوسم الخاص بك في مصدر صفحتك الرئيسية.
- «An older copy is on the page» أو «The code is on the page twice»: لُصقت نسخة يدويًا في قالب أو في كتلة (block) أو في وحدة أخرى. أزلها؛ فالوحدة تضيف النسخة الحالية، ونسختان تحتسبان كل زيارة مرتين.
- إشعار بأن موقعك يحمّل أصلًا حاوي Tag Manager بمقتطف Google نفسها: أزل ذلك المقتطف، لأن SignalHost تحمّل الحاوي الآن، والاثنان معًا يحتسبان كل زيارة مرتين. والأمر نفسه ينطبق على وحدة Google Tag Manager (google_tag): استخدم إحداهما لا كلتيهما.
- «This site's address has changed since it was connected»: على نسخة مثل بيئة staging، لا يُرسَل شيء. وإن انتقل الموقع المباشر، فاقطع الاتصال واربط مجددًا.
- «Last update» قديم: تتواصل الوحدة بعد طلبات الصفحات، ولا تفعل ذلك من cron أبدًا. وفتح صفحة SignalHost يُجري تواصلًا أيضًا، و«Check again» يفرض واحدًا.
- أي شيء آخر: اكتب إلى hello@signalhost.io مع عنوان موقعك.
العلامات التجارية
SignalHost منتج مستقل من Algorithmo GmbH، وهو غير تابع لمشروع Drupal أو Google أو Meta أو TikTok ولا يحظى بتأييد أيٍّ منها. Google Analytics وGoogle Ads وGoogle Tag Manager علامات تجارية لـ Google LLC؛ وMeta علامة تجارية لـ Meta Platforms, Inc.؛ وTikTok علامة تجارية لـ ByteDance Ltd.؛ وDrupal علامة تجارية مسجّلة لـ Dries Buytaert.

