La funzione di auto-discovery del lettore RSS può non rilevare feed specifici per argomento

Ciao! Noi di NLnet Labs abbiamo configurato Discourse per i nostri prodotti (community.nlnetlabs.nl). Un utente ha chiesto come ottenere il feed RSS per un argomento specifico (ad esempio, https://community.nlnetlabs.nl/c/cascade/10), poiché il suo lettore RSS non riusciva a trovarlo.

Ho provato a usare quella pagina specifica per l’argomento con il mio lettore RSS preferito e ha trovato due feed: “NLnet Labs Community - Latest Posts” (/posts.rss) e “NLnet Labs Community - Latest topics” (/latest.rss). So che /c/cascade/10.rss è un feed RSS valido, ma il mio lettore non è riuscito a trovarlo automaticamente. Questo è un po’ frustrante, poiché dovremo iniziare a comunicare noi stessi questi URL.

Ho indagato sulla scoperta automatica dei feed RSS per il mio sito web personale, quindi ho una certa esperienza in merito. Ho controllato l’ <head> della pagina web; ho notato i seguenti link:

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

Quindi l’ <head> include un terzo link per il feed RSS specifico dell’argomento; ma sembra che alcuni lettori di feed RSS non apprezzino l’attributo rel=”nofollow”.

Naturalmente, ho controllato MDN ( HTML attribute: rel - HTML | MDN ); nofollow è documentato come:

Indica che l’autore o l’editore originale del documento corrente non approva il documento referenziato.

Ma anche:

Rilevante per <form>, <a> e <area>, la parola chiave nofollow indica ai crawler dei motori di ricerca di ignorare la relazione del link. La relazione nofollow può indicare che il proprietario del documento corrente non approva il documento referenziato. Viene spesso inclusa dagli ottimizzatori per i motori di ricerca che fingono che le loro fattorie di link non siano pagine spam.

Ho cercato nel codice sorgente di Discourse su GitHub, e con alcune ricerche e Git blame sono riuscito a trovare FEATURE: add nofollow to RSS alternate link in topics and categories by rr-it · Pull Request #16013 · discourse/discourse · GitHub. Quindi suppongo che il secondo significato di rel=”nofollow” fosse quello inteso qui. Seguendo la discussione di background, sembra essere utile per guidare la prioritizzazione nei crawler del sito. C’è stato un ulteriore seguito in Search engines now blocked from indexing non-canonical pages - #4 by rrit, ma non sono riuscito a capire se rel=\"nofollow” sia ancora importante.

Non sono riuscito a trovare alcuna discussione su Discourse Meta riguardo a questo problema, anche se la PR è stata unita nel 2022. Chiaramente, c’è un malinteso nelle convenzioni riguardanti i <link> per i feed RSS, tra alcuni lettori di feed RSS e Discourse. Quindi chiedo:

  1. rel=”nofollow” serve ancora al suo intento originale per migliorare la prioritizzazione dei crawler del sito, o è stato sostituito da altre tecniche?
  2. Questo comportamento (cioè ignorare i link rel=”nofollow”) nella autoscoperta dei feed RSS sembra essere comune? Altri possono replicarlo? Non sono a conoscenza di uno standard autorevole sulla scoperta automatica dei feed RSS.
  3. C’è la volontà di supportare questo caso d’uso, affinché i lettori di feed RSS possano scoprire automaticamente i post giusti? L’esistenza di quei <link> specifici per l’argomento, anche se non vengono utilizzati dal mio lettore, mi fa pensare di sì; forse la perdita di funzionalità è stata semplicemente trascurata quando è stato aggiunto rel=”nofollow”.

Agli sviluppatori di Discourse: grazie per averlo creato!

1 Mi Piace

Ciao Arya,

Sì, questo è effettivamente il risultato del modo in cui Discourse gestisce attualmente i feed RSS specifici degli argomenti, non un bug nel tuo lettore di feed. La causa principale è che Discourse aggiunge rel="nofollow" all’elemento <link> per i feed RSS di argomenti/categorie. Molti lettori di feed ignorano i link con nofollow, il che impedisce la scoperta automatica, anche se il feed stesso è valido e funziona se consultato direttamente.

Una soluzione pratica è utilizzare un Componente Tema per aggiungere link RSS specifici per l’argomento senza nofollow. Ecco un semplice esempio:

<!-- Aggiunge link RSS specifici per l'argomento senza 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>

Questo analizza tutti i link RSS di argomenti/categorie e inietta nuovi elementi <link> senza nofollow nell’<head>.

I lettori di feed dovrebbero ora rilevare automaticamente i feed specifici dell’argomento.

In alternativa, per un approccio più semplice, puoi semplicemente condividere l’URL del feed direttamente con gli utenti, ad esempio Cascade - NLnet Labs Community.

Questo metodo evita di modificare il nucleo di Discourse e funziona attraverso gli aggiornamenti. Spero che questo aiuti la scoperta automatica del feed a funzionare come previsto!

Saluti!

1 Mi Piace

Posso chiedere quale sia il lettore di feed RSS?

Ciao Ayke! Sto usando GitHub - spacecowboy/Feeder: Android feed reader app (disponibile su F-Droid e Play Store). Non so quali lettori di feed abbiano provato i nostri utenti.

Modifica: Ho dato un’occhiata al codice sorgente: https://github.com/spacecowboy/Feeder/blob/bd98548f7a900b92c2fab9e7d5046827e12e2dbf/app/src/main/java/com/nononsenseapps/feeder/model/FeedParser.kt#L122 sembra cercare corrispondenze esatte di rel=”alternate”, motivo per cui manca rel=”alternate nofollow”. La definirei un bug da parte loro se altri lettori di feed sono più attenti.

A quanto pare, esiste uno standard per l’autoscoperta dei feed RSS: \u003chttps://www.rssboard.org/rss-autodiscovery#element-link-rel\u003e. Vieta esplicitamente qualsiasi cosa nell’attributo rel tranne alternate. Quindi l’HTML generato da Discourse sta violando lo standard. Ciò non significa che debba assolutamente cambiare, ma è importante notarlo. Forse l’aggiunta di rel=”nofollow” ha funzionato su quei crawler di siti perché stavano aderendo allo standard di autoscoperta, in modo indistinguibile dai lettori di feed RSS degli utenti, e la modifica li ha interrotti entrambi.

1 Mi Piace

Ottima scoperta!

Allora il mio bug report potrebbe essere nullo e non valido:

Il prossimo modo corretto per usare rel="nofollow" è l’uso dell’intestazione HTTP Link: <...> ; rel="canonical" su tutti gli URL dei feed RSS.
Ciò comporterebbe la scansione di tutti gli URL RSS una sola volta da parte di Google e il loro successivo scarto.

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

Ad esempio, per le chiamate all’URL
https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890.rss
aggiungere questa intestazione HTTP:
Link: <https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890> ; rel="canonical"

Vedi anche l’implementazione della stessa idea per Joomla: Canonical HTTP Headers for RSS Feeds

Per essere chiari: pensi che ci sia un comportamento alternativo adatto a cui Discourse possa passare, che gli permetta di conformarsi alla specifica? Sarebbe fantastico. Gli utenti RSS gioiranno :slight_smile:

Modifica: inoltre, grazie per aver segnalato un bug in Feeder e per aver menzionato l’aggiornamento della specifica. È bello avere una discussione chiara e coinvolta in cui anche problemi minori come questo possano essere presi sul serio.

1 Mi Piace