RSS-Feeder-Autodiskoverierung kann themenspezifische Feeds übersehen

Hallo! Wir bei NLnet Labs haben Discourse für unsere Produkte eingerichtet (community.nlnetlabs.nl). Ein Benutzer fragte nach dem Abrufen des RSS-Feeds für ein bestimmtes Thema (z. B. https://community.nlnetlabs.nl/c/cascade/10), da sein RSS-Reader ihn nicht finden konnte.

Ich habe versucht, diese themenspezifische Seite mit meinem bevorzugten RSS-Feed-Reader zu verwenden, und er fand zwei Feeds: „NLnet Labs Community - Latest Posts“ (/posts.rss) und „NLnet Labs Community - Latest topics“ (/latest.rss). Ich weiß, dass /c/cascade/10.rss ein gültiger RSS-Feed ist, aber mein Reader konnte ihn nicht automatisch finden. Das ist etwas frustrierend, da wir anfangen müssen, diese URLs selbst mitzuteilen.

Ich habe die automatische RSS-Feed-Erkennung für meine persönliche Website untersucht, daher habe ich einige Erfahrung damit. Ich habe den <head> der Webseite überprüft; mir fielen die folgenden Links auf:

<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">

Der <head> enthält also tatsächlich einen dritten Link für den themenspezifischen RSS-Feed; aber es scheint, dass einige RSS-Feed-Reader das Attribut rel=”nofollow” nicht mögen.

Natürlich habe ich MDN überprüft (HTML attribute: rel - HTML | MDN); nofollow wird dokumentiert als:

Zeigt an, dass der ursprüngliche Autor oder Herausgeber des aktuellen Dokuments die referenzierte Ressource nicht befürwortet.

Aber auch:

Relevant für <form>, <a> und <area> teilt das Schlüsselwort nofollow Suchmaschinen-Spiders mit, die Link-Beziehung zu ignorieren. Die nofollow-Beziehung kann angeben, dass der Eigentümer des aktuellen Dokuments die referenzierte Ressource nicht befürwortet. Es wird oft von Suchmaschinenoptimierern eingefügt, die ihre Linkfarmen als Spam-Seiten ausgeben.

Ich habe den Discourse-Quellcode auf GitHub durchsucht und mit einigen Suchen und Git Blame konnte ich FEATURE: add nofollow to RSS alternate link in topics and categories by rr-it · Pull Request #16013 · discourse/discourse · GitHub finden. Ich vermute also, dass die zweite Bedeutung für rel=”nofollow” hier beabsichtigt war. Wenn man der Hintergrunddiskussion folgt, scheint es hilfreich zu sein, die Priorisierung bei Web-Crawlern zu steuern. Es gab eine zusätzliche Nachverfolgung in Search engines now blocked from indexing non-canonical pages - #4 by rrit, aber ich konnte nicht herausfinden, ob rel=\"nofollow” immer noch wichtig ist.

Ich konnte keine Diskussion auf Discourse Meta zu diesem Problem finden, obwohl der PR bereits 2022 zusammengeführt wurde. Offensichtlich gibt es ein Missverständnis bei den Konventionen rund um <link>s für RSS-Feeds, zwischen einigen RSS-Feed-Readern und Discourse. Daher frage ich:

  1. Dient rel=”nofollow” immer noch seinem ursprünglichen Zweck zur Verbesserung der Priorisierung von Web-Crawlern, oder wurde es durch andere Techniken ersetzt?
  2. Scheint dieses Verhalten (d. h. das Ignorieren von rel=”nofollow”-Links) bei der automatischen Erkennung von RSS-Feeds üblich zu sein? Können andere dies reproduzieren? Mir ist kein maßgeblicher Standard für die automatische Erkennung von RSS-Feeds bekannt.
  3. Besteht die Bereitschaft, diesen Anwendungsfall zu unterstützen, damit RSS-Feed-Reader die richtigen Beiträge automatisch erkennen können? Die Existenz dieser themenspezifischen <link>s, auch wenn sie von meinem Reader nicht verwendet werden, lässt mich das vermuten; vielleicht wurde der Funktionsverlust einfach übersehen, als rel=”nofollow” hinzugefügt wurde.

An die Discourse-Entwickler: Vielen Dank für die Entwicklung!

1 „Gefällt mir“

Hallo Arya,

Ja – dies ist tatsächlich ein Ergebnis davon, wie Discourse derzeit themenspezifische RSS-Feeds behandelt, und kein Fehler in Ihrem Feed-Reader. Die eigentliche Ursache ist, dass Discourse rel="nofollow" zu dem <link>-Element für Themen-/Kategorie-RSS-Feeds hinzufügt. Viele Feed-Reader ignorieren Links mit nofollow, was die automatische Erkennung verhindert, obwohl der Feed selbst gültig ist und funktioniert, wenn direkt darauf zugegriffen wird.

Eine praktikable Lösung besteht darin, eine Theme Component zu verwenden, um themenspezifische RSS-Links ohne nofollow hinzuzufügen. Hier ist ein einfaches Beispiel:

<!-- Fügt themenspezifische RSS-Links ohne nofollow hinzu -->
<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>

Dies scannt nach allen Themen-/Kategorie-RSS-Links und fügt neue <link>-Elemente ohne nofollow in den <head> ein.

Feed-Reader sollten nun themenspezifische Feeds automatisch erkennen.

Alternativ, für einen einfacheren Ansatz, können Sie den Feed-URL einfach direkt mit den Benutzern teilen, z. B. Cascade - NLnet Labs Community.

Diese Methode vermeidet die Änderung des Kerns von Discourse und funktioniert auch nach Updates. Hoffentlich hilft dies, damit die automatische Erkennung von Feeds wie erwartet funktioniert!

Viele Grüße!

1 „Gefällt mir“

Darf ich fragen, um welchen RSS-Feed-Reader es sich handelt?

Hallo Ayke! Ich verwende GitHub - spacecowboy/Feeder: Android feed reader app (verfügbar im F-Droid und im Play Store). Ich weiß nicht, welche Feeds unsere Benutzer ausprobiert haben.

Bearbeitung: Ich habe einen Blick in den Quellcode geworfen: Feeder/app/src/main/java/com/nononsenseapps/feeder/model/FeedParser.kt at bd98548f7a900b92c2fab9e7d5046827e12e2dbf · spacecowboy/Feeder · GitHub scheint nach exakten Übereinstimmungen von rel=”alternate” zu suchen, weshalb rel=”alternate nofollow” fehlt. Ich würde dies als Fehler ihrerseits bezeichnen, falls andere Feed-Reader vorsichtiger sind.

Es stellt sich heraus, dass es einen Standard für die automatische Erkennung von RSS-Feeds gibt: RSS Autodiscovery. Er untersagt ausdrücklich alles im rel-Attribut außer alternate. Discurses generiertes HTML verstößt also gegen den Standard. Das bedeutet nicht, dass es sich unbedingt ändern sollte, aber es ist wichtig zu beachten. Vielleicht hat das Hinzufügen von rel=”nofollow” bei diesen Website-Crawlern funktioniert, weil sie dem Standard zur automatischen Erkennung entsprachen, nicht unterscheidbar von den RSS-Feed-Readern der Benutzer, und die Änderung beide beschädigt hat.

1 „Gefällt mir“

Guter Fund!

Dann könnte mein Fehlerbericht hinfällig sein:

Der nächste korrekte Weg, rel=”nofollow zu verwenden, ist die Nutzung des HTTP-Headers Link: <…>; rel="canonical" für alle RSS-Feed-URLs.
Dies würde dazu führen, dass alle RSS-URLs einmal von Google gecrawlt und dann letztendlich fallengelassen werden.

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

Fügen Sie beispielsweise für Aufrufe der URL
https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890.rss
diesen HTTP-Header hinzu:
Link: <https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890>; rel="canonical"

Siehe auch die Implementierung für dieselbe Idee für Joomla: Canonical HTTP Headers for RSS Feeds

Um es klarzustellen: Glaubst du, es gibt ein geeignetes alternatives Verhalten, zu dem Discourse wechseln könnte, das es ihm ermöglichen würde, die Spezifikation einzuhalten? Das wäre großartig. Die RSS-Benutzer werden jubeln :slight_smile:

Edit: Auch danke, dass du einen Fehlerbericht in Feeder eingereicht und das Spezifikationsupdate erwähnt hast. Es ist schön, eine klare, engagierte Diskussion zu haben, in der selbst kleinere Probleme wie dieses ernst genommen werden können.

1 „Gefällt mir“