Les métadonnées canoniques ne changent pas correctement dans l'application Discourse lorsqu'elles ne sont pas chargées par un robot d'exploration web

Il y a un bogue dans l’application Discourse lié à la mise à jour de l’élément de métadonnées <link rel="canonical"> dans la section <head> du DOM de Discourse.

En gros, lorsqu’un client navigateur accède à l’application et que celle-ci est chargée pour la première fois, l’élément <link rel="canonical" href=""> est défini selon ce chargement initial de la page ; mais ensuite, lorsqu’un utilisateur clique dans l’application (comportement normal de l’utilisateur), sans recharger manuellement la page, le lien <link rel="canonical"> ne se met pas à jour.

J’ai testé ce bogue et je l’ai reproduit sur le site meta :

Fig 1. Entrer sur meta depuis la page d’accueil, le lien canonique est correct, tout comme l’élément title.

Fig 2. Visiter un sujet. L’élément title change correctement, mais le lien canonique n’est pas correct (ne se met pas à jour comme il le devrait).

Fig 3. Visiter un autre sujet. L’élément title change correctement, mais le lien canonique n’est pas correct (ne se met pas à jour comme il le devrait).

Implications pour le référencement (SEO)

Ce bogue pourrait nuire au référencement, car lorsque Google indexe la page, si Googlebot ne fait pas un « rechargement complet » de chaque page, les informations canoniques seront incorrectes pour chaque page (comme dans les séquences d’images ci-dessus).

Reproductibilité

J’ai reproduit ce bogue de manière cohérente à la fois sur le site meta et sur notre site.

Notes

J’ai déjà rencontré ce type de problèmes de cycle de vie avec node.js (SPA) dans d’autres frameworks web (pas seulement Ember), où les éléments du DOM ne sont pas mis à jour, en raison des hooks de cycle de vie (Ember et autres frameworks SPA) au sein du framework d’application web.

1 « J'aime »

Cela ne se produira jamais, car nous ne servons pas la SPA à Googlebot. Vous pouvez également définir votre User Agent sur celui de GoogleBot pour voir comment cela fonctionne.

4 « J'aime »

Bonjour @Falco,

Merci pour votre réponse.

Oui, ce n’est pas un problème lorsque le UA est défini sur GoogleBot (je viens de le confirmer).

Je suis d’accord pour dire que cela ne pose probablement pas de problème pour le référencement, puisque vous ne servez pas l’application monopage (SPA) à GoogleBot. Cependant, cela reste un bug dans la SPA.

De plus, je dois réfléchir aux implications du fait de ne pas servir la SPA à GoogleBot.

Merci de m’avoir fait part de ce « petit détail »… :slight_smile:

(Note : je ne savais pas que les « sujets suggérés » n’étaient pas servis à GoogleBot, mais maintenant je le sais… merci de l’information).

1 « J'aime »

Nous servons un document complètement différent aux robots d’exploration, car tous ne peuvent pas exécuter JavaScript et nous souhaitons que Discourse soit accessible à ces clients également. Même s’ils bénéficient d’une fonctionnalité réduite, ils peuvent consommer tout le contenu.

5 « J'aime »

Merci beaucoup de me l’avoir fait savoir.

Je réalise maintenant que certaines discussions antérieures sur les SPA, le « défilement infini » et d’autres problèmes liés au SEO étaient totalement erronées, car le SPA n’est pas servi à GoogleBot.

Cela modifie mon approche concernant certains codes personnalisés que j’ai récemment écrits ; je sais désormais vérifier en utilisant l’agent utilisateur (UA) de GoogleBot dans la console.

Un grand merci pour cela, @Falco ! C’est très apprécié.

Question :

Quelle est la meilleure façon d’ajouter un seul fichier JavaScript personnalisé au HTML rendu à GoogleBot ?

Existe-t-il une « méthode standard » pour modifier le HTML servi aux robots ?

La raison pour laquelle je pose cette question est que nous disposons d’un code personnalisé créé dans un plugin que j’ai écrit (destiné aux robots) ; mais j’ai vérifié en utilisant l’agent utilisateur de GoogleBot dans la console (merci encore de m’avoir indiqué que je devais le faire), et aucun de ce code personnalisé du plugin n’est consommé par GoogleBot.

1 « J'aime »

En attendant, puisque je ne peux pas réaliser ce que je souhaite dans un plugin (basé sur Handlebars) pour le HTML servi aux robots d’indexation, nous avons décidé de simplement supprimer les balises canoniques de Discourse. C’est une solution partielle pour le moment, en attendant que je trouve comment modifier la balise canonique avec du JavaScript pour les robots d’indexation.

Discourse propose un mécanisme pratique pour ce type de modifications dans les fichiers yml du conteneur, c’est donc ce que j’ai fait aujourd’hui.

Je suis très reconnaissant envers la communauté Discourse Meta d’avoir souligné que l’application Discourse servie aux robots d’indexation (identifiés) n’est pas la même que les pages servies aux utilisateurs.

Veuillez noter que je ne recommande pas cette « solution provisoire » à d’autres administrateurs système de Discourse. Je partage simplement ce que j’ai décidé de faire pour le moment, ainsi que la méthode utilisée (jusqu’à ce que nous trouvions une solution plus intéressante).

2 « J'aime »