Discourse-indexnow — إشعار فوري لـ Bing وYandex عند إنشاء المواضيع أو تحريرها

:information_source: الملخص يُرسل تلقائيًا عناوين URL للمواضيع العامة عند الإنشاء، والتعديل، والحذف، والردود إلى بروتوكول IndexNow حتى تتمكن محركات البحث المتوافقة مثل Bing وYandex وغيرها من اكتشاف محتواك أو إزالة فهرسته خلال دقائق دون انتظار زواحف البحث.
:hammer_and_wrench: المستودع github.com/imlotso/discourse-indexnow
:open_book: دليل التثبيت كيفية تثبيت الإضافات في Discourse

يتوفر أيضًا مقال باللغة الصينية يحتوي على مزيد من الخلفية على منتدي الخاص بي: sitetalk.net/t/topic/642

الميزات

  • يرسل تلقائيًا المواضيع العامة الجديدة؛ ويعيد الإرسال عند تغيير المنشور الأول أو سمات الموضوع المهمة.
  • الإرسال عند الرد: يُرسل تلقائيًا عنوان URL المُقسّم (مثل ?page=3) عند نشر ردود جديدة، مع فترة تهدئة قابلة للتكوين لكل عنوان URL لمنع الإغراق.
  • يُرسل تلقائيًا عناوين URL للمواضيع عند حذفها لمساعدة المحركات على اكتشاف أخطاء 404/410 وإزالة الفهرسة بسرعة.
  • يُجمّع تلقائيًا عناوين URL المحلية للمواضيع عند تفعيل توطين المحتوى ومعلمات استعلام اللغة المحلية لزواحف البحث. يستخدم معلمة اللغة المحلية الفعلية المُهيأة، وليس القيم الثابتة.
  • يجمع العناوين الرسمية (Canonical) والعناوين المحلية في طلبات دفعة واحدة عبر urlList في IndexNow بدلاً من إرسالها واحدة تلو الأخرى.
  • التعبئة الرجعية التاريخية: تصفية حسب الفئة ونطاق التاريخ، معاينة عدد المطابقات، والإرسال الجماعي. تقسيم تلقائي للدفعات التي تتجاوز حد البروتوكول البالغ 10,000. يمكن إلغاء المهام النشطة من تبويب السجلات.
  • الإرسال اليدوي: إرسال عناوين URL مخصصة عند الطلب سطرًا بسطر؛ يتم تصفية الروابط الخارجية أو غير المؤهلة تلقائيًا.
  • تحديد معدل ذكي: يطبق حدودًا بالساعة وباليوم باستخدام خوارزمية نافذة منزلقة دقيقة. يتراجع تلقائيًا عند حدوث خطأ 429 (مع احترام Retry-After). يتميز واجهة الإدارة بأشرطة حصة مرئية تعرض الاستخدام الحالي والوقت الدقيق حتى يتوفر السعة.
  • استبعاد فئات محددة ووسوم كقواعد على مستوى الأعمال فوق مرشحات الخصوصية الآلية.
  • تدوير المفاتيح مع مربع حوار لتأكيد الكتابة فوق غير المقصودة؛ يتم تعطيل المفاتيح السابقة فورًا.
  • تحقق الإدارة من إمكانية الوصول العام إلى /<key>.txt.
  • تحركات المواضيع، وتغييرات رؤية الفئات، وتحديثات الوسم تُطلق إعادة إرسال غير متزامنة أو استبعاد عبر مهام الخلفية لمنع حجب واجهة المستخدم.
  • إدخالات سجل غنية تتضمن معرفات الدفعة، اللغة، أسباب التفعيل، رسوم بيانية لاتجاه النجاح/الفشل لمدة 7 أيام، وأسباب فشل مصنفة (محدود المعدل، خطأ في المفتاح، عدم تطابق النطاق).
  • إرسالات غير متزامنة بالكامل تلتزم بحدود الخصوصية: الرسائل الخاصة، الفئات المقيدة، المواضيع غير المدرجة/المحذوفة، والمواقع التي تتطلب تسجيل الدخول لا تُرسل أبدًا.
  • متوفر باللغتين الإنجليزية والصينية المبسطة.

خطوات الإعداد

  1. قم بتثبيت الإضافة وفقًا للدليل أعلاه وأعد بناء حاويتك.
  2. انتقل إلى الإدارة > الإضافات > discourse-indexnow.
  3. تحت الإعدادات، انقر على توليد مفتاح (أو الصق مفتاح سداسي عشري موجودًا من 32 حرفًا).
  4. فعّل تفعيل إرسالات IndexNow.
  5. تحقق من إمكانية الوصول العام للمفتاح:
https://your-forum-domain.com/<key>.txt

يجب أن يعيد HTTP 200 مع سلسلة المفتاح. تعرض لوحة الإدارة أيضًا مؤشرًا أخضر/أحمر مخزنًا مؤقتًا.
6. (اختياري) في تبويب السجلات، استخدم لوحة “التعبئة الرجعية”: حدد المعايير، انقر على معاينة، ثم إرسال.
7. (اختياري) استخدم مربع الإرسال اليدوي لإرسال عناوين URL فردية خارج التدفق الآلي.

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

إعدادات التكوين

الإعداد الوصف
indexnow_enabled المفتاح الرئيسي. يُعطَّل تلقائيًا إذا تم تفعيل login_required.
indexnow_api_key المفتاح السداسي العشري المكون من 32 حرفًا للتحقق من الإرسال.
indexnow_submit_on_create الإرسال التلقائي عند إنشاء موضوع عام جديد.
indexnow_submit_on_edit إعادة الإرسال التلقائي عند تغيير المنشور الأول أو سمات الموضوع.
indexnow_submit_on_reply الإرسال التلقائي لعنوان URL المُقسّم المحدد عند نشر ردود جديدة.
indexnow_url_cooldown_minutes فترة التهدئة لكل عنوان URL (بالدقائق) لمنع الإرسالات المكررة.
indexnow_excluded_category_ids الفئات المستبعدة حتى لو كانت عامة.
indexnow_excluded_tag_names الوسم المستبعد حتى لو كانت فئة الموضوع مؤهلة.
indexnow_hourly_limit الحد الأقصى لعناوين URL المراد إرسالها في الساعة (نافذة منزلقة).
indexnow_daily_limit الحد الأقصى لعناوين URL المراد إرسالها في اليوم (نافذة منزلقة).

قيود معروفة

  • لا تشارك Google حاليًا في بروتوكول IndexNow.
  • تُرسل العناوين المحلية فقط عندما تكون معلمات اللغة المحلية لزواحف البحث مفعلة ويتوفر محتوى محلي.
  • حاليًا، يتم دعم تعديلات المنشور الأول وترقيم الصفحات للردود الجديدة، لكن تعديلات الردود الوسيطة لا تُطلق إرسالات بشكل مستقل.

هذه إضافة مستقلة وغير رسمية — لا تُدار من قبل فريق Discourse. إنها تعمل في بيئة الإنتاج على منتدي الخاص بي، ولديها تغطية اختبار RSpec مع CI عند كل دفع/طلب سحب، وسأقدّر أي تقارير أخطاء أو طلبات ميزات عبر مشاكل GitHub أو الردود هنا.

7 إعجابات

شكرًا لك على هذا! كنتُ أقول للتو حرفيًا: هل عليّ أن أنشئ إضافة Indexnow خاصة بي؟ وفجأة! وجدت هذا!

هل يمكنك إخباري ما إذا كانت indexnow_submit_on_edit تُصدر إرسال Indexnow عند جميع عمليات إعادة الخبز التي تُغيّر المحتوى؟

لا — لا يُطلق هذا الحدث إلا عند التعديلات الحقيقية عبر مسار PostRevisor العادي، وذلك فقط
للرسالة الأولى في الموضوع (OP). لا تُطلق الردود غير الأصلية أو عمليات إعادة الخَبز المحفَّزة من النظام
(مهام إصلاح الصور الدورية، إعادة الخَبز الجماعية من قبل المدير، إلخ) إعادة الإرسال، لأن هذه العمليات
لا تمر عبر الحدث الذي يتفاعل معه هذا الإضافة.

لقد كنت أستخدم هذا الإضافة (plugin) طوال الأسبوع الماضي، وكانت تجربة رائعة. فهي تعمل تمامًا كما أحتاجها، على الرغم من أنني واجهت بعض الأخطاء البرمجية التي تسببت في فشل الإضافة فور التثبيت.

تحديداً، اكتشفت تعارضات في المسارات (route collisions) مع إضافات أخرى تستخدم نفس نقاط النهاية (endpoints). كما كان هناك مشكلة في تحديد معدل الطلبات (rate limiting)، حيث كان بالإمكان الوصول إلى الحد الأقصى، والانتظار بضع دقائق، ثم الوصول إليه مرة أخرى. بالإضافة إلى ذلك، كان ملف التنسيق (stylesheet) الخاص بلوحة الإدارة يُحقن في المناطق العامة، ولم تكن فئات CSS مُسبقة البادئة (prefixed) بشكل صحيح للإضافة.

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

إعجابَين (2)

تم الدمج.

شكرًا لك على أخذ الوقت الكافي لإجراء هذا التحليل العميق لقاعدة الكود. منطق التجميع (Bucketing) للنافذة المنزلقة (Sliding Window) ودفعات المهام في الخلفية (Background Job Batching) هي تحسينات قوية. كما أن مُشغّل الرد (Reply Trigger) لمسة رائعة أيضًا.

لقد حدّثت مستندات المنشور الرئيسي لتغطية أشرطة الحصة الجديدة (Quota Bars) وإعدادات فترة التبريد (Cooldown) التي أضفتها.

أقدّر حقًا طلب الإرسال عالي الجودة (PR) والشرح المفصّل. :content:

إعجاب واحد (1)