شعار أوسكار أوسكار كل المقالات

إعلانات المواقع العربية: تجربة حقيقية بأرقامها ودروسها

ركّبنا الإعلانات على منصّة محتوى صحي عربية، وانتظرنا خمسة أيام. جاءت النتيجة: آلاف المشاهدات، وتسع نقرات، وعائد صفر. لا خطأ في الكود، ولا حساب موقوف، ولا شكوى من الشبكة. مجرّد صفر نظيف أمام رقم مشاهدات مريح.

هذا المقال ليس نصائح عامة عن «كيف تربح من موقعك». هو تشخيص ما حدث فعلاً، بالخطوات التي اتّبعناها لعزل السبب، وبالأخطاء التي كنّا نرتكبها ونحن نظنّها الحلّ. إن كنت تدير موقعاً عربياً وتشعر أن أرقام المشاهدات لا تنعكس على الأرباح، فأحد هذه الأسباب الأربعة هو سببك تقريباً.

الخطأ الأول: نفس الوحدة الإعلانية في كل موضع

كان لدينا ستّ فتحات إعلانية موزّعة على الصفحة الرئيسية وقائمة المواضيع وأعلى الموضوع وبين الردود وصفحة الأسابيع ونافذة بينية. وضعنا في كلّها نفس كود الوحدة الإعلانية. المنطق الذي أقنعنا: «الكود يعمل، فلماذا أنشئ ستّة أكواد لنفس المقاس؟»

هذا بالضبط ما قتل العائد. شبكات الإعلان تفرض سقف تكرار (frequency cap) لكل وحدة إعلانية على الزائر نفسه. الطلب الأول يعبّئ إعلاناً مدفوعاً، والطلبات التالية من نفس الوحدة في نفس الجلسة تُرجع إمّا فراغاً وإمّا «إعلان بيت» (house ad) لا يدفع شيئاً. النتيجة الحسابية قاسية: كل مشاهدة من الخمس الباقية تُحتسب في عدّاد المشاهدات وقيمتها صفر، فيهبط متوسّط الألف مشاهدة (CPM) إلى ما يقارب الصفر.

بعبارة أخرى: رقم المشاهدات المريح كان وهماً. كنّا نضخّم البسط ونترك المقام صفراً.

قاعدة: وحدة إعلانية مستقلّة لكل موضع في الصفحة، لا وحدة واحدة مكرّرة. إنشاء ستّ وحدات في لوحة الشبكة يستغرق دقائق، وتوفيرها يستغرق منك كل العائد.

الخطأ الثاني: اقتصاد المقاسات

المقاس ليس تفصيلاً جمالياً، هو قرار مالي. البنر الأفقي الصغير 320×50 هو أدنى الصيغ عائداً في كل الشبكات تقريباً: مساحته صغيرة، والمعلنون لا يزايدون عليه بجدّية، وموضعه غالباً أسفل الشاشة أو أعلاها حيث يتجاهله المستخدم بصرياً.

المستطيل 300×250 الموضوع داخل المحتوى — بين فقرتين، بعد الفقرة الثالثة مثلاً — يعطي مضاعفات ذلك. السبب ليس المساحة وحدها بل القابلية للمشاهدة (viewability): إعلان يراه المستخدم فعلاً وهو يقرأ يستحقّ سعراً أعلى من إعلان موجود تقنياً في الصفحة لكن لا يمرّ عليه بصر أحد.

ما كان يجب أن نفعله من البداية: مستطيل داخل المحتوى في الصفحات الطويلة، والبنر الصغير للمواضع التي لا تتحمّل أكثر، لا العكس.

الخطأ الثالث: عدم التفريق بين no-fill وخطأ برمجي

هذه أهم مهارة تشخيصية في هذا الملف، وغيابها يُهدر أياماً. عندما لا يظهر إعلان، الاحتمالان مختلفان تماماً:

  • خطأ برمجي: السكربت لم يُحمَّل أصلاً — حجب من سياسة أمان المحتوى، أو خطأ في المسار، أو تعارض متغيّرات.
  • no-fill: السكربت حُمِّل بنجاح تماماً، لكن الشبكة لم تُرجع إعلاناً — لا يوجد معلن يزايد على هذا الزائر في هذه اللحظة.

الفحص الذي يحسم الأمر في دقيقتين، ننفّذه في وحدة تحكّم المتصفّح على الصفحة الحقيقية:

١. اجلب ملف السكربت مباشرة وتحقّق من رمز الاستجابة وحجمه:
fetch('https://…/invoke.js').then(r => r.status)

٢. حمّل الكود مرّتين: مرّة داخل إطار معزول ومرّة مباشرة في الصفحة، ثم افحص هل بقيت الحاوية فارغة:
container.children.length

النتيجة التي وصلتنا: الملف يُجلب بنجاح برمز 200 وبحجم أربعة وثلاثين كيلوبايت، والحاوية فارغة في الحالتين، ولا رسالة حجب واحدة في وحدة التحكّم. هذا يعني no-fill قاطعاً. الشبكة لا تملك إعلاناً لهذا الشكل على هذا الحساب — والبحث في الكود عن خطأ غير موجود مضيعة كاملة للوقت.

تحذير: لا تصدّق «الإعلان لا يظهر» كوصف للمشكلة. اسأل دائماً: هل السكربت حُمِّل؟ إن حُمِّل وبقيت الحاوية فارغة فالمشكلة تجارية لا برمجية، ولا يوجد سطر كود يحلّها.

ونتيجة عملية مترتّبة: عند no-fill يجب إخفاء الفتحة برمجياً لا تركها مساحة بيضاء. عندنا يبدأ الإطار مخفياً، ونفحص كل نصف ثانية حتى خمس عشرة ثانية بحثاً عن عنصر إعلان داخله؛ فإن وُجد أظهرناه وحجّمناه على ارتفاع محتواه، وإن لم يُوجد أخفيناه نهائياً. الصفحة تبدو مصمّمة في الحالتين.

مصيدة تقنية: تعارض المتغيّرات العامة

بعض أكواد الإعلانات تعمل بضبط متغيّر عام قبل تحميل السكربت — شيء مثل كائن إعدادات يحمل المفتاح والمقاس. هذا يعمل بلا مشاكل حين يكون في الصفحة إعلان واحد. أمّا حين تضع إعلاناً أعلى الموضوع وثلاثة أخرى بين الردود، فكل السكربتات تقرأ نفس المتغيّر العام، فيسبق أحدها الآخر ويكتب فوق إعداداته. النتيجة: إعلان واحد يظهر والبقية تتأخّر أو تفشل، بلا رسالة خطأ تشرح شيئاً.

الحلّ الذي طبّقناه: عزل كل إعلان في إطار صديق (friendly iframe) — إطار بمستند مستقلّ يُكتب محتواه ضمن الصفحة نفسها. كل إعلان يصبح في مستند خاصّ به، فلا مشترك بينها، فتظهر كلها معاً بلا تسابق. الأثر كان فورياً: أربع فتحات في صفحة واحدة تعرض أربعة إعلانات مختلفة.

لكن انتبه لتفصيلين تعلّمناهما بالتجربة: الإطار المكتوب محتواه ضمن الصفحة يورّث سياسة أمان المحتوى من الصفحة الأمّ، فلا تظنّ أنه يفلت منها — تفصيل شرحناه في سياسة أمان المحتوى مع أطراف ثالثة. والثاني أن أي مسافة أو سطر فارغ بين وسوم قالب الإطار يُعرض كعقدة نصّ بارتفاع ملموس، فيتضخّم الصندوق إلى أضعاف ارتفاع الإعلان الحقيقي — القالب يُكتب بلا أسطر فارغة.

الصيغ عالية العائد التي رفضناها بوعي

الشبكات البديلة تدفع أعلى ما تدفعه على صيغ عدوانية: نافذة تُفتح خلف الصفحة عند أول نقرة (popunder)، وشريط عائم يلاحق المستخدم ويحاكي شكل إشعارات النظام (social bar). الرقم أفضل، والقرار كان الرفض. سببان:

  1. الثقة أغلى. منصّة محتوى صحي تقرأ فيها امرأة حامل عن صحّتها لا تتحمّل نافذة تُفتح بلا إذنها. المستخدمة التي تخرج غاضبة لا تعود، وقيمتها على مدى سنة أعلى بكثير من كسور السنتات التي يدفعها ذلك الإعلان.
  2. خطر إيقاف التطبيق. موقعنا يُحمَّل داخل تطبيق أندرويد بغلاف WebView، وهذه الصيغ داخل تطبيق منشور تُعدّ إعلانات خارج التطبيق أو محاكاة لواجهة النظام — وهي مخالفة تُعرّض التطبيق للإزالة. القصة كاملة في من موقع إلى تطبيق أندرويد بـ Capacitor.

وحين جرّبنا الشريط العائم فعلياً على الويب، كانت المفارقة أنه لم يعبّئ أصلاً: السكربت حُمِّل، وحادثة onload وقعت، ولم يُحقن أي عنصر في الصفحة. رفضٌ أخلاقي لم نُضطرّ حتى لدفع ثمنه.

النطاق الفرعي وأدسنس: قاعدة كثيرون يجهلونها

كان تصوّرنا أن النطاق الفرعي يُقدَّم لأدسنس كموقع مستقلّ. هذا لم يعد صحيحاً: أُلغيت إمكانية إضافة نطاق فرعي كموقع منفصل، والتحقّق يجري على مستوى النطاق الأصل. فإن قُبل النطاق الأصل، صار كل نطاق فرعي تحته مؤهّلاً لعرض الإعلانات بنفس كود الناشر تلقائياً.

الأثر العملي على ترتيب الأولويات: لا معنى لمحاولة اعتماد نطاق فرعي أصلاً. الجهد كلّه يذهب إلى تجهيز النطاق الأصل — محتواه وصفحاته الأساسية — وما دونه يأتي مجاناً.

ads.txt: ما هو، وما ليس هو

هذا الخلط أهدر علينا وقتاً حقيقياً، ويستحقّ التوضيح صريحاً.

ملف ads.txt معيار من اتحاد الإعلانات التفاعلية، يوضع في جذر النطاق ويصرّح فيه صاحب الموقع بمن يحقّ له بيع مساحاته الإعلانية. سطر واحد لكل شبكة، يحمل اسم النطاق البائع ومعرّف الناشر ونوع العلاقة. الغرض منه حماية عائدك من انتحال الهوية: بلا هذا الملف يمكن لطرف أن يعرض مخزوناً وهمياً باسم موقعك، والمعلنون الذين يشترون عبر منصّات آلية يتجاهلون المخزون غير المصرّح به.

وما ليس هو: ads.txt لا علاقة له بقبول موقعك في أي شبكة، ولا بجودة محتواك. ظننا أن رفضاً بسبب «محتوى غير ذي قيمة» قد يعالجه إصلاح هذا الملف — وهذا خطأ محض. الرفض المحتوائي لا يعالجه إلا المحتوى.

فرق جوهري: ads.txt يحمي العائد بعد القبول. القبول نفسه يعتمد على قيمة المحتوى وبنية الموقع وصفحاته الأساسية. لا يُغني أحدهما عن الآخر، ولا يُعالج أحدهما مشكلة الآخر.

وملاحظة تكميلية: هناك ملف مشابه للتطبيقات باسم app-ads.txt. وجوده لا يُغني عن ads.txt — تحقّق أن الملف الذي يطلبه زاحف الإعلانات موجود بالاسم الصحيح في جذر النطاق فعلاً، لا بالاسم المشابه.

البديل الذي نراه أصدق: العمولة بمنتج مناسب

إعلانات الشبكات تعرض ما يزايد عليه المعلن، لا ما يناسب قارئك. أمّا التسويق بالعمولة فيسمح لك بعرض ما يخصّ الصفحة تحديداً: منتجات مرتبطة بموضوع المقال نفسه. النتيجة أعلى تحويلاً وأقلّ إزعاجاً، ومظهرها ينسجم مع تصميم موقعك لأنك تتحكّم في شكلها بالكامل.

ثلاث قواعد تعلّمناها في التنفيذ:

  • الإفصاح إلزامي وبصياغة محدّدة. برامج العمولة الكبرى تفرض عبارة إفصاح معيّنة تظهر قريباً من الروابط، ومخالفتها سبب معروف لإغلاق الحسابات. لا تكتفِ بجملة عامة من إنشائك.
  • استضف صور المنتجات عندك. روابط صور المتاجر تتعطّل مع تغيّر المخزون، وبعض البرامج تشترط جلب الصور عبر واجهتها البرمجية لا نسخها من الصفحة. صورة مستضافة على نطاقك لا تتعطّل وتُخدَّم من كاش طويل.
  • روابط عادية لا سكربتات. بطاقات المنتجات وسوم a وimg فقط، فلا يحجبها مانع إعلانات، ولا تخالف سياسة متجر التطبيقات، ولا تُبطئ الصفحة — وهو ما يخدم تحسين الأداء بدل أن يضرّه.

الترتيب الذي انتهينا إليه

بعد كل ما سبق، هذا ترتيبنا للمصادر بحسب العائد الفعلي المتوقّع لموقع عربي متوسّط الحجم:

  1. إعلانات المتاجر للتطبيق إن كان لديك تطبيق منشور — الشكل النظامي الوحيد داخل التطبيقات وأسعاره جدّية.
  2. شبكة الإعلانات الكبرى للويب عبر النطاق الأصل، فأسعارها للجمهور الخليجي في المحتوى الصحي والأسري من أعلى الفئات.
  3. العمولة بمنتجات مرتبطة بموضوع الصفحة.
  4. رعاة مباشرون — أعلى سعر لكل ظهور بلا وسيط، ويحتاج جهد بيع لا كوداً.
  5. الشبكات البديلة بصيغ منوّعة، كمصدر تكميلي لا أساسي.

أسئلة شائعة

لماذا يظهر لي عائد صفر مع وجود نقرات؟ النقرة على إعلان بيت أو على مخزون غير مبيع لا تدفع شيئاً. راجع أولاً هل فتحاتك تتقاسم وحدة إعلانية واحدة، فهذا أشهر سبب لهذه المفارقة تحديداً.

هل زيادة عدد الإعلانات في الصفحة ترفع العائد؟ لا بالضرورة، وقد تخفضه. الإعلانات المتقاربة تتنافس على نفس المزايدين وتضرّ سرعة الصفحة وتجربة القراءة، وسقف التكرار يجعل الزائدة منها بلا قيمة. عدد أقل في مواضع أفضل يتفوّق دائماً.

كم أنتظر قبل أن أحكم على شبكة؟ أسبوعان بحدّ أدنى، وبشرط أن يكون التوزيع صحيحاً أصلاً (وحدة مستقلّة لكل موضع، ومقاسات مناسبة). الحكم على توزيع خاطئ يقيس خطأك لا يقيس الشبكة.

هل مانع الإعلانات يفسد كل شيء؟ يخفض نسبة معتبرة من المخزون، لكنه لا يمسّ بطاقات العمولة لأنها روابط وصور عادية. هذا وحده سبب كافٍ لعدم الاعتماد على مصدر واحد.

خلاصة

العائد الصفري رغم آلاف المشاهدات لم يكن سوء حظّ ولا خللاً في الكود. كان أربعة قرارات خاطئة متراكمة: وحدة واحدة مكرّرة في ستّ فتحات فأكلها سقف التكرار، وأدنى المقاسات عائداً في كل موضع، وخلط no-fill بخطأ برمجي فبحثنا في المكان الخطأ، وظنّ أن ملف ads.txt يعالج رفضاً سببه المحتوى.

الدرس الأعمق: قِس ما يهمّ لا ما يُطمئن. عدّاد المشاهدات كان يصعد ونحن نطمئنّ إليه، ومتوسّط الألف مشاهدة — الرقم الوحيد الذي يعني شيئاً — كان صفراً من اليوم الأول. لو نظرنا إليه لوفّرنا خمسة أيام.

الإعلانات تحتاج صفحات سريعة ومفهرسة أصلاً حتى يكون هناك زائر يراها: أساسيات السيو خطوة بخطوة →