Besoin de "window.prerenderReady" implémenté sur mon instance [MISSION PAYANTE]

J’utilise prerender.io pour servir la version « application/JS » du site aux robots d’exploration (mon instance sert aux robots la version JS via un paramètre caché).

Cela fonctionne bien, mais il semble que Discourse puisse entrer dans cette catégorie

mais certaines pages Web utilisent des flux de chargement personnalisés ou des requêtes constantes qui peuvent tromper la logique de Prerender ; ainsi, il ne parvient pas à prendre une décision sur la préparation de la page.

La première fois que prerender accède à une URL de Discourse, il expire (20 secondes définies par prerender).

La page se rend bien, c’est juste que prerender.io ne sait pas que la page est entièrement chargée, donc il « reste » à essayer de rendre la page, jusqu’à ce que les 20 secondes soient écoulées, puis il sert la version HTML.

Si le robot demande à nouveau la page, il la servira en 1 seconde (environ), car il existe une version HTML de l’URL dans le cache.

… mais ce n’est pas pratique car il y a des milliers d’URL et 20 secondes pour chaque URL (lorsqu’elle est accédée pour la première fois) ne fonctionneront pas.

J’aimerais donc que ce qui suit soit ajouté juste après la balise <head> (et lorsque la page est terminée, que la variable soit définie sur true).

<script> window.prerenderReady = false; </script>

J’aimerais que cela fonctionne sur l’ensemble du site, j’espère que cela facilitera le travail.

Je ne suis pas sûr de ce que cela implique, mais si je me trompe, faites-le moi savoir - 300 ? 400 ?

Quelqu’un a-t-il des commentaires à ce sujet ?

Peut-être y a-t-il un fichier principal que je peux modifier en attendant

Avez-vous le code que vous utilisez pour faire cela quelque part ?

1 « J'aime »

Le code pour servir la version JS ?

C’était le paramètre de site caché « crawler_user_agents » que vous (@pfaffman) m’avez aidé à activer/ajuster.

Modifier J’ai supprimé « bots », « crawlers » et « spiders » de la liste ci-dessus.

Comment prerender.io intervient-il ? Comment Discourse saurait-il quand inclure la balise <head> ?

Oh, je pense que prerender fait référence à la balise existante <head>, n’est-ce pas ?

Pour que nous ajoutions <script> window.prerenderReady = false; </script> juste sous la balise <head> existante.

Edit Je ne suis pas non plus sûr s’ils ont besoin que le code soit défini dans les balises head ou après la balise head fermante.

Comment avez-vous installé prerender pour qu’il serve les pages prérendues ? Trois méthodes sont répertoriées sur How to Install Prerender in 3 Easy Steps. Avez-vous utilisé l’une d’entre elles ?

1 « J'aime »

Oui, j’ai utilisé le middleware Cloudflare.

Donc, Cloudflare reçoit toutes les requêtes des bots et les envoie à Prerender.

Alors, pouvez-vous fournir un appel API à prerender qui renverra la valeur true/false que vous souhaitez dans

1 « J'aime »

Ah, je vois, - j’ai fait quelques lectures sur l’API et cela pourrait être un peu au-delà de mes capacités (mais j’espère que cela facilitera la tâche)

Le budget est un peu bas pour ce genre de chose, en gros. Modifier ce qui est servi aux robots d’exploration peut être plus délicat qu’il n’y paraît. Divers problèmes peuvent survenir.

Personnellement, je suis un peu sceptique quant à la sagesse de faire cela en premier lieu, mais je suis sûr que vous avez vos raisons.

Je pense que Jay fait référence à l’API client de Discourse. Vous pourriez l’utiliser via un composant de thème pour savoir quand Discourse est entièrement rendu.

Vous semblez quelque peu familier avec le développement logiciel. J’ai créé un petit cours d’introduction au développement de thèmes Discourse l’année dernière, qui comprend une discussion sur la façon d’utiliser l’API dans un thème. C’est gratuit et open source. Vous pouvez le parcourir en commençant ici :

Vous devrez probablement utiliser un événement frontend qui est déclenché lorsque la page est rendue. Il y a quelques exemples de cela une fois que vous arrivez à la première unité JavaScript du cours.

2 « J'aime »

Merci pour votre réponse Angus

Je ne suis pas sûr que ce soit ce qui doive être fait. Les robots d’exploration obtiennent déjà une version HTML de mon instance de discourse.

Il est trop tôt pour le dire, mais je suis assez optimiste. C’est juste beaucoup de nettoyage SEO - Google explore un tout nouveau site. Je ne peux tout simplement pas imaginer que Google classe la version du site pour robots d’exploration sans JS et lui donne le même classement que l’expérience utilisateur réelle.

La première chose que je dois faire est de simplement mettre ce code dans le <head>

Ensuite, il s’agit d’implémenter cette partie selon prerender.io

puis assurez-vous de ne définir cette variable sur true que lorsque votre page a fini de se rendre, et qu’il est sûr pour Prerender de récupérer le contenu. Ceci est possible dans un appel asynchrone qui s’exécute très tard dans votre page. Prerender.io attendra alors un court instant pour s’assurer que tous les appels sont terminés et enregistrera votre page.

Je vais parcourir la documentation que vous avez fournie - merci pour cela.

1 « J'aime »

Je ne suis pas sûr de ce que vous voyez, mais d’après notre expérience, la vue du crawler a très bien classé les sites. Nous avons eu des clients qui ont signalé que leur communauté surpassait leur site principal.

2 « J'aime »

Il se pourrait simplement que le site ait un contenu très précieux et que l’algorithme ignore les « mauvaises parties ». Chaque cas est différent.

Il n’aurait tout simplement pas de sens pour Google de classer la version du robot d’exploration comme s’il s’agissait de la version JS. (au sens général)

Il n’y a pas de menu, pas de sujets suggérés, pas de liens dans la marge, les pages de profil utilisateur/badges sont en noindex, et une foule d’autres fonctionnalités qui ne sont tout simplement pas disponibles dans la version du robot d’exploration.

Je mettrai à jour avec un nouveau sujet une fois les résultats obtenus. Jusqu’à présent, le positionnement dans les SERP est très erratique.

edit les pages de profil utilisateur/badges sont en noindex via les en-têtes.