Ho notato un comportamento strano con i vecchi argomenti pubblicati automaticamente da WordPress a Discourse (da utilizzare come sezione commenti).
Normalmente, quando un post viene pubblicato in questo modo, Discourse aggiunge correttamente l’intestazione HTTP X-Robots-Tag: noindex e imposta l’URL canonical che punta al post del blog WordPress.
Tuttavia, ho scoperto che gli argomenti più vecchi stanno perdendo questi tag. L’intestazione noindex scompare e il tag canonical non è più presente. Ecco alcuni esempi di argomenti in cui ciò sta accadendo:
Tieni presente che non ho modo di sapere esattamente quanti argomenti siano stati interessati finora, ma sembra che siano parecchi.
Sarebbe fantastico se ci fosse una casella di controllo nelle impostazioni della categoria (o del tag?) che, quando abilitata, aggiungesse automaticamente noindex a tutti gli argomenti pubblicati in quella categoria. Qualcosa del genere:
[ ] Nascondi gli argomenti di questa categoria dai risultati di ricerca.
Per essere sicuro di aver capito, stai dicendo quanto segue:
Hai attivato l’impostazione del sito “Embed set canonical URL” e l’hai sempre avuta attivata.
Hai pubblicato diversi argomenti da WordPress a Discourse tramite il plugin WordPress Discourse Plugin nel corso di un certo periodo di tempo.
Fino a poco tempo fa, tutti gli argomenti di Discourse pubblicati come descritto in 2 avevano un link rel="canonical" con l’attributo href impostato sull’URL di WordPress nell’head.
In un momento recente, pensi che un sottoinsieme di quegli argomenti che in precedenza rispettavano il punto 3 abbia ora un link rel="canonical" con l’attributo href impostato sull’URL di Discourse.
Puoi vedere qui che i nuovi argomenti vengono pubblicati con i tag noindex e canonical. Tuttavia, sto notando che gli argomenti vecchi non hanno questi tag.
Thiago, se hai accesso al server, potresti per favore recuperare l’ID di un argomento in cui l’URL canonico non funziona, eseguire quanto segue nella console di Rails e condividere il risultato.
./launcher enter app
rails c
TopicEmbed.with_deleted.find_by(topic_id: inserisci qui l'ID dell'argomento)
Questo è il problema. Affinché la funzionalità dell’URL canonico per gli embed funzioni, l’argomento deve avere un record topic_embed. Riesci a pensare a qualche motivo per cui quegli argomenti potrebbero non avere record di embed?
Onestamente non so cosa possa aver causato la mancanza dei record topic_embed per quegli argomenti.
Ma guardando il quadro generale, non avrebbe più senso adottare la configurazione che ho suggerito in precedenza? Se aggiungessimo una casella di controllo direttamente nelle impostazioni della categoria per applicare noindex a tutti gli argomenti al suo interno, non dovremmo più fare affidamento sulla funzione di embedding o preoccuparci dell’esistenza di quei record.
Sebbene ciò possa avere senso per il tuo sito, si tratterebbe di una funzionalità diversa rispetto al modo in cui funzionano gli URL canonici per gli incorporamenti di discussioni. Potresti realizzarla, ma dovresti farlo come plugin personalizzato.
Gli URL canonici per gli incorporamenti funzionano come previsto; tuttavia, sembra che in un certo momento i record degli incorporamenti siano stati eliminati o che sia stata eseguita un’altra operazione sul tuo sito. Discourse non elimina definitivamente i record degli incorporamenti delle discussioni, quindi deve essersi verificato qualcos’altro. A meno che tu non svolga un lavoro personalizzato, dovrai ripubblicare quelle discussioni per ricreare i record degli incorporamenti.
Sebbene questo si comporti diversamente dagli embed dei topic, il controllo dell’indicizzazione a livello di categoria è un requisito SEO di base per qualsiasi CMS moderno. Ci sono diversi altri argomenti Meta su questo tema, e renderlo nativo risolverebbe più casi d’uso in una volta sola.
Potrei provare a creare un plugin utilizzando l’IA, dato che Ruby non è il mio stack tecnologico, ma questa dovrebbe davvero essere una funzionalità nativa.
Per quanto riguarda i record mancanti: non abbiamo eseguito comandi o operazioni sul database che potrebbero aver causato questo problema. Inoltre, la ripubblicazione non è praticabile. Abbiamo quasi 50.000 post e non sappiamo nemmeno quali siano quelli interessati. Risolvere il problema richiederebbe script API complessi per individuare, eliminare e ripubblicare tutto…