La découverte automatique du flux RSS peut manquer les flux spécifiques à un sujet

Bonjour ! Chez NLnet Labs, nous avons configuré Discourse pour nos produits (community.nlnetlabs.nl). Un utilisateur a posé une question sur l’obtention du flux RSS pour un sujet particulier (par exemple, Cascade - NLnet Labs Community), car son lecteur RSS ne parvenait pas à le trouver.

J’ai essayé d’utiliser cette page spécifique au sujet avec mon lecteur de flux RSS préféré, et il a trouvé deux flux : « NLnet Labs Community - Latest Posts » (/posts.rss) et « NLnet Labs Community - Latest topics » (/latest.rss). Je sais que /c/cascade/10.rss est un flux RSS valide, mais mon lecteur n’a pas pu le trouver automatiquement. C’est un peu frustrant, car nous devrons commencer à communiquer ces URL nous-mêmes.

J’ai étudié la découverte automatique de flux RSS pour mon site personnel, j’ai donc une certaine expérience à ce sujet. J’ai vérifié le <head> de la page web ; j’ai remarqué les liens suivants :

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

Ainsi, le <head> inclut bien un troisième lien pour le flux RSS spécifique au sujet ; mais il semble que certains lecteurs de flux RSS n’aiment pas l’attribut rel=”nofollow”.

Bien sûr, j’ai vérifié MDN ( HTML attribute: rel - HTML | MDN ) ; nofollow est documenté comme suit :

Indique que l’auteur ou l’éditeur original du document actuel n’approuve pas le document référencé.

Mais aussi :

Pertinent pour <form>, <a>, et <area>, le mot-clé nofollow indique aux robots d’exploration des moteurs de recherche d’ignorer la relation de lien. La relation nofollow peut indiquer que le propriétaire du document actuel n’approuve pas le document référencé. Elle est souvent incluse par les référenceurs qui prétendent que leurs fermes de liens ne sont pas des pages de spam.

J’ai parcouru le code source de Discourse sur GitHub, et après quelques recherches et git blame, j’ai pu trouver FEATURE: add nofollow to RSS alternate link in topics and categories by rr-it · Pull Request #16013 · discourse/discourse · GitHub. Je suppose donc que la deuxième signification de rel=”nofollow” était l’intention ici. En suivant la discussion de fond, il semble que cela soit utile pour guider la priorisation dans les robots d’exploration du site. Il y a eu un suivi supplémentaire dans Search engines now blocked from indexing non-canonical pages - #4 by rrit, mais je n’ai pas pu déterminer si rel=\"nofollow” est toujours important.

Je n’ai trouvé aucune discussion sur Discourse Meta concernant ce problème, même si la PR a été fusionnée en 2022. Clairement, il y a un malentendu dans les conventions concernant les <link> pour les flux RSS, entre certains lecteurs de flux RSS et Discourse. Je demande donc :

  1. rel=”nofollow” sert-il toujours son intention originale d’améliorer la priorisation des robots d’exploration du site, ou a-t-il été remplacé par d’autres techniques ?
  2. Ce comportement (c’est-à-dire ignorer les liens rel=”nofollow”) dans la découverte automatique des lecteurs de flux RSS semble-t-il courant ? D’autres peuvent-ils le reproduire ? Je ne connais pas de norme faisant autorité sur la découverte automatique des flux RSS.
  3. Y a-t-il une volonté de prendre en charge ce cas d’utilisation, pour que les lecteurs de flux RSS puissent découvrir automatiquement les bons messages ? L’existence de ces <link> spécifiques aux sujets, même s’ils ne sont pas utilisés par mon lecteur, me fait penser que oui ; peut-être que la perte de fonctionnalité a été simplement négligée lorsque rel=”nofollow” a été ajouté.

Aux développeurs de Discourse : merci pour la création de cet outil !

1 « J'aime »

Bonjour Arya,

Oui, c’est bien le résultat de la manière dont Discourse gère actuellement les flux RSS spécifiques aux sujets, et non un bogue dans votre lecteur de flux. La cause profonde est que Discourse ajoute rel="nofollow" à l’élément <link> pour les flux RSS de sujets/catégories. De nombreux lecteurs de flux ignorent les liens avec nofollow, ce qui empêche la découverte automatique, même si le flux lui-même est valide et fonctionne s’il est accédé directement.

Une solution de contournement pratique consiste à utiliser un Composant de Thème pour ajouter des liens RSS spécifiques aux sujets sans nofollow. Voici un exemple simple :

<!-- Ajouter des liens RSS spécifiques aux sujets sans 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>

Ceci analyse tous les liens RSS de sujets/catégories et injecte de nouveaux éléments <link> sans nofollow dans l’en-tête (<head>).

Les lecteurs de flux devraient maintenant détecter automatiquement les flux spécifiques aux sujets.

Alternativement, pour une approche plus simple, vous pouvez simplement partager l’URL du flux directement avec les utilisateurs, par exemple Cascade - NLnet Labs Community.

Cette méthode évite de modifier le cœur de Discourse et fonctionne lors des mises à jour. J’espère que cela aidera la découverte automatique des flux à fonctionner comme prévu !

Cordialement !

1 « J'aime »

Puis-je demander quel est ce lecteur de flux RSS ?

Salut Ayke ! J’utilise GitHub - spacecowboy/Feeder: Android feed reader app (disponible sur F-Droid et le Play Store). Je ne sais pas quels lecteurs de flux nos utilisateurs ont essayé.

Édit : J’ai jeté un œil au code source : \u003chttps://github.com/spacecowboy/Feeder/blob/bd98548f7a900b92c2fab9e7d5046827e12e2dbf/app/src/main/java/com/nononsenseapps/feeder/model/FeedParser.kt#L122\u003e semble rechercher des correspondances exactes de rel=”alternate”, c’est pourquoi il manque rel=”alternate nofollow”. J’appellerais cela un bug de leur côté si d’autres lecteurs de flux sont plus prudents.

Il s’avère qu’il existe une norme sur la découverte automatique des flux RSS : RSS Autodiscovery. Elle interdit explicitement tout ce qui se trouve dans l’attribut rel sauf alternate. Ainsi, le HTML généré par Discourse enfreint la norme. Cela ne signifie pas que cela doit absolument changer, mais il est important de le noter. Peut-être que l’ajout de rel=”nofollow” a fonctionné sur ces robots d’exploration de sites parce qu’ils se conformaient à la norme de découverte automatique, de manière indiscernable des lecteurs de flux RSS des utilisateurs, et que le changement a cassé les deux.

1 « J'aime »

Bonne trouvaille !

Alors mon rapport de bug pourrait être nul et non avenu :

La prochaine manière appropriée d’utiliser rel="nofollow" est l’utilisation de l’en-tête HTTP Link: <...> ; rel="canonical" sur toutes les URL de flux RSS.
Cela aurait pour conséquence que toutes les URL RSS seraient explorées une fois par Google, puis finalement ignorées.

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

Par exemple, pour les appels à l’URL
https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890.rss
ajoutez cet en-tête HTTP :
Link: <https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890> ; rel="canonical"

Voir également l’implémentation de cette même idée pour Joomla : Canonical HTTP Headers for RSS Feeds

Pour être clair : pensez-vous qu’il existe un comportement alternatif approprié auquel Discourse pourrait passer, qui lui permettrait de se conformer à la spécification ? Ce serait génial. Les utilisateurs de RSS se réjouiront :slight_smile:

Edit : merci aussi d’avoir signalé un bogue dans Feeder et mentionné la mise à jour de la spécification. C’est agréable d’avoir une discussion claire et engagée où même des problèmes mineurs comme celui-ci peuvent être pris au sérieux.

1 « J'aime »