اكتشاف RSS feeder التلقائي قد يفوت خلاصات خاصة بمواضيع معينة

مرحباً! في NLnet Labs، قمنا بإعداد Discourse لمنتجاتنا (community.nlnetlabs.nl). سأل أحد المستخدمين عن كيفية الحصول على موجز RSS لموضوع معين (على سبيل المثال، Cascade - NLnet Labs Community)، حيث لم يتمكن قارئ RSS الخاص به من العثور عليه.

حاولت استخدام صفحة الموضوع المحددة هذه مع قارئ موجز RSS المفضل لدي، ووجد خلاصتين: “أحدث المشاركات في مجتمع NLnet Labs” (/posts.rss) و “أحدث المواضيع في مجتمع NLnet Labs” (/latest.rss). أنا أعلم أن /c/cascade/10.rss هو موجز RSS صالح، لكن قارئي لم يتمكن من العثور عليه تلقائيًا. هذا محبط بعض الشيء، حيث سنحتاج إلى البدء في إبلاغ هذه العناوين بنفسنا.

لقد بحثت في الاكتشاف التلقائي لموجز RSS لموقعي الشخصي، لذا لدي بعض الخبرة في هذا الشأن. تحققت من head صفحة الويب؛ ولاحظت الروابط التالية:

<link rel="alternate" type="application/rss+xml" title="Latest posts" href="https://community.nlnetlabs.nl/posts.rss">
<link rel="alternate" type="application/rss+xml" title="Latest topics" href="https://community.nlnetlabs.nl/latest.rss">
<link rel="alternate nofollow" type="application/rss+xml" title="RSS feed of topics in the 'Cascade' category" href="https://community.nlnetlabs.nl/c/cascade/10.rss">

إذًا، فإن head يتضمن رابطًا ثالثًا لموجز RSS الخاص بالموضوع؛ ولكن يبدو أن بعض قراء موجز RSS لا يحبون السمة rel=”nofollow”.

بالطبع، تحققت من MDN (HTML attribute: rel - HTML | MDN)؛ يتم توثيق nofollow على النحو التالي:

يشير إلى أن المؤلف أو الناشر الأصلي للمستند الحالي لا يؤيد المستند المشار إليه.

ولكن أيضًا:

فيما يتعلق بـ form و a و area، تخبر الكلمة الرئيسية nofollow زواحف محركات البحث بتجاهل علاقة الارتباط. قد تشير علاقة nofollow إلى أن مالك المستند الحالي لا يؤيد المستند المشار إليه. غالبًا ما يتم تضمينها من قبل مُحسِّني محركات البحث الذين يتظاهرون بأن مزارع الروابط الخاصة بهم ليست صفحات بريد عشوائي.

لقد بحثت في الكود المصدري لـ Discourse على GitHub، وباستخدام بعض عمليات البحث و Git blame، تمكنت من العثور على FEATURE: add nofollow to RSS alternate link in topics and categories by rr-it · Pull Request #16013 · discourse/discourse · GitHub. لذا أعتقد أن المعنى الثاني لـ rel=”nofollow” كان مقصودًا هنا. بالنظر إلى المناقشة الخلفية، يبدو أنه مفيد لتوجيه تحديد الأولويات في زواحف الموقع. كان هناك بعض المتابعة الإضافية في https://meta.discourse.org/t/search-engines-now-blocked-from-indexing-non-canonical-pages/218985/4، لكنني لم أتمكن من معرفة ما إذا كانت rel=\"nofollow” لا تزال مهمة.

لم أتمكن من العثور على أي مناقشة حول هذا الموضوع في Discourse Meta، على الرغم من دمج طلب السحب هذا في عام 2022. من الواضح أن هناك سوء فهم في الاتفاقيات المتعلقة بروابط <link> لموجزات RSS، بين بعض قراء موجز RSS و Discourse. لذا أسأل:

  1. هل لا تزال rel=”nofollow” تخدم غرضها الأصلي لتحسين تحديد أولويات زواحف الموقع، أم تم استبدالها بتقنيات أخرى؟
  2. هل هذا السلوك (أي تجاهل الروابط rel=”nofollow”) في الاكتشاف التلقائي لقارئ موجز RSS شائع؟ هل يمكن للآخرين تكراره؟ أنا لست على دراية بمعيار موثوق به بشأن الاكتشاف التلقائي لموجز RSS.
  3. هل هناك استعداد لدعم حالة الاستخدام هذه، حتى يتمكن قراء موجز RSS من اكتشاف المشاركات الصحيحة تلقائيًا؟ وجود روابط <link> الخاصة بالموضوع هذه، حتى لو لم يستخدمها قارئي، يجعلني أعتقد ذلك؛ ربما تم التغاضي عن فقدان الوظيفة عند إضافة rel=”nofollow”.

إلى مطوري Discourse: شكرًا لكم على بناء هذا!

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

مرحباً آريا،

نعم - هذه بالفعل نتيجة لكيفية تعامل Discourse حاليًا مع خلاصات RSS الخاصة بالمواضيع، وليست خطأ في قارئ الخلاصات الخاص بك. السبب الجذري هو أن Discourse يضيف rel="nofollow" إلى العنصر <link> الخاص بخلاصات RSS للمواضيع/الفئات. تتجاهل العديد من قارئات الخلاصات الروابط التي تحتوي على nofollow، مما يمنع الاكتشاف التلقائي، على الرغم من أن الخلاصات نفسها صالحة وتعمل عند الوصول إليها مباشرة.

الحل العملي هو استخدام مكوّن سمة (Theme Component) لإضافة روابط خلاصات RSS خاصة بالمواضيع بدون nofollow. إليك مثال بسيط:

<!-- إضافة روابط خلاصات RSS خاصة بالمواضيع بدون nofollow -->
<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    document.querySelectorAll('link.custom-rss').forEach(e => e.remove());
    document.querySelectorAll('link[title^="RSS feed of"]').forEach(link => {
      const newLink = document.createElement('link');
      newLink.rel = "alternate";
      newLink.type = "application/rss+xml";
      newLink.href = link.href;
      newLink.title = link.title;
      newLink.classList.add('custom-rss');
      document.head.appendChild(newLink);
    });
  });
</script>

يقوم هذا بفحص جميع روابط خلاصات RSS الخاصة بالمواضيع/الفئات وحقن عناصر <link> جديدة بدون nofollow في <head>.

يجب أن يكتشف قارئ الخلاصات الآن الخلاصات الخاصة بالمواضيع تلقائيًا.

بدلاً من ذلك، للحصول على نهج أبسط، يمكنك ببساطة مشاركة عنوان URL الخاص بالخلاصة مباشرة مع المستخدمين، على سبيل المثال Cascade - NLnet Labs Community.

تتجنب هذه الطريقة تعديل جوهر Discourse وتعمل عبر التحديثات. نأمل أن يساعد هذا في عمل الاكتشاف التلقائي للخلاصات كما هو متوقع!

مع خالص تحياتي!

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

هل لي أن أسأل ما هو قارئ خلاصات RSS هذا؟

مرحباً آيك! أنا أستخدم GitHub - spacecowboy/Feeder: Android feed reader app (متاح على F-Droid و Play Store). لا أعرف أي قارئات تغذية جربها مستخدمونا.

تعديل: ألقيت نظرة على الكود المصدري: https://github.com/spacecowboy/Feeder/blob/bd98548f7a900b92c2fab9e7d5046827e12e2dbf/app/src/main/java/com/nononsenseapps/feeder/model/FeedParser.kt#L122 يبدو أنه يبحث عن تطابقات تامة لـ rel=”alternate”، ولهذا السبب يفتقد rel=”alternate nofollow”. سأعتبر هذا خطأ من جانبهم إذا كانت قارئات التغذية الأخرى أكثر دقة.

اتضح أن هناك بالفعل معيارًا للاكتشاف التلقائي لخلاصات RSS: \u003chttps://www.rssboard.org/rss-autodiscovery#element-link-rel\u003e. ينص صراحةً على عدم السماح بأي شيء في السمة rel باستثناء alternate. لذا فإن HTML الذي يولده Discourse يخرق المعيار. هذا لا يعني أنه يجب تغييره بالتأكيد، ولكنه أمر مهم للملاحظة. ربما نجح إضافة rel=”nofollow” مع زواحف تلك المواقع لأنها كانت متوافقة مع معيار الاكتشاف التلقائي، مما يجعلها غير قابلة للتمييز عن قارئات خلاصات RSS الخاصة بالمستخدمين، وكسر التغيير كلاهما.

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

اكتشاف جيد!

إذًا قد يكون تقرير الخطأ الخاص بي لاغيًا وباطلًا:

الطريقة الصحيحة التالية لاستخدام rel=”nofollow هي استخدام ترويسة HTTP Link: <...> ; rel="canonical" على جميع عناوين URL لخلاصة RSS.
سيؤدي هذا إلى زحف جوجل إلى جميع عناوين URL لخلاصة RSS مرة واحدة ثم إسقاطها في النهاية.

انظر How to Specify a Canonical with rel="canonical" and Other Methods | Google Search Central  |  Documentation  |  Google for Developers

على سبيل المثال، بالنسبة للاستدعاءات إلى عنوان URL
https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890.rss
أضف ترويسة HTTP هذه:
Link: <https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890> ; rel="canonical"

انظر أيضًا التنفيذ لنفس الفكرة تمامًا لـ Joomla: Canonical HTTP Headers for RSS Feeds

لتوضيح الأمر: هل تعتقد أن هناك سلوكًا بديلاً مناسبًا يمكن لـ Discourse التحول إليه، والذي سيسمح له بالامتثال للمواصفات؟ سيكون ذلك رائعًا. سيسعد مستخدمو RSS :slight_smile:

تعديل: شكرًا لك أيضًا على تقديم تقرير خطأ في Feeder وذكر تحديث المواصفات. من الجيد إجراء مناقشة واضحة ومشاركة حيث يمكن أخذ المشكلات الطفيفة كهذه على محمل الجد.

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