"window.prerenderReady" auf meiner Instanz implementiert [BEZAHLTER GIG]

Ich verwende prerender.io, um die Version der Website “application/JS” für Crawler bereitzustellen (meine Instanz stellt Crawlern die JS-Version über eine versteckte Einstellung bereit).

Es funktioniert gut, aber es scheint, dass Discourse in diese Kategorie fallen könnte

aber einige Webseiten verwenden benutzerdefinierte Ladeflüsse oder ständiges Polling, die die Logik von Prerender täuschen können; daher kann es keine Entscheidung über die Bereitschaft der Seite treffen.

Wenn Prerender zum ersten Mal auf eine Discourse-URL zugreift, wird ein Timeout ausgelöst (20 Sekunden, wie von Prerender eingestellt).

Die Seite wird korrekt gerendert, aber Prerender.io weiß nicht, dass die Seite vollständig geladen ist, und versucht daher, die Seite zu rendern, bis die 20 Sekunden abgelaufen sind, und liefert dann die HTML-Version.

Wenn der Crawler die Seite erneut anfordert, wird die Seite in 1 Sekunde (mehr oder weniger) geliefert – da eine HTML-Version der URL im Cache vorhanden ist.

… aber das ist nicht praktikabel, da es Tausende von URLs gibt und 20 Sekunden für jede URL (beim ersten Zugriff) nicht funktionieren.

Daher benötige ich das Folgende, das direkt nach dem <head>-Tag hinzugefügt wird (und wenn die Seite fertig ist, wird die Variable auf true gesetzt):

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

Ich möchte, dass dies seitenweit funktioniert – hoffentlich erleichtert das die Arbeit.

Ich bin mir nicht sicher, was das bedeutet, aber wenn ich falsch liege, lassen Sie es mich bitte wissen – 300 ? 400 ?

Gibt es dazu Feedback?

Vielleicht gibt es eine Kerndatei, die ich in der Zwischenzeit bearbeiten kann.

Haben Sie den Code, den Sie dafür verwenden, irgendwo?

1 „Gefällt mir“

Der Code, um die JS-Version bereitzustellen?

Es war die versteckte Website-Einstellung „crawler_user_agents“, die Sie (@pfaffman) mir geholfen haben zu aktivieren/anzupassen.

Bearbeiten: Ich habe „bots“, „crawlers“ und „spiders“ aus der obigen Liste entfernt.

Wie ist prerender.io beteiligt? Woher weiß Discourse, wann das \u003chead\u003e-Tag aufgenommen werden soll?

Oh, ich glaube, prerender bezieht sich auf das vorhandene <head>-Tag, oder?

Damit wir das <script> window.prerenderReady = false; </script> direkt unter dem vorhandenen <head>-Tag hinzufügen können.

Bearbeiten: Ich bin mir auch nicht sicher, ob sie den Code innerhalb der Head-Tags oder nach dem schließenden Head-Tag benötigen.

Wie haben Sie Prerender installiert, damit es die vorgerenderten Seiten ausliefert? Auf How to Install Prerender in 3 Easy Steps sind drei Methoden aufgeführt. Haben Sie eine davon verwendet?

1 „Gefällt mir“

Ja, ich habe die Cloudflare-Middleware verwendet.

Cloudflare leitet also alle Anfragen von Bots an Prerender weiter.

Können Sie also einen API-Aufruf für Prerender bereitstellen, der den true/false-Wert zurückgibt, den Sie in

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

benötigen?

1 „Gefällt mir“

Aha, ich verstehe. Ich habe etwas über die API gelesen, und das ist vielleicht ein bisschen zu viel für mich (aber hoffentlich erleichtert das die Aufgabe).

Das Budget ist für so etwas im Grunde etwas niedrig. Das Ändern dessen, was für Crawler bereitgestellt wird, kann kniffliger sein, als es scheint. Es können verschiedene Probleme auftreten.

Persönlich bin ich ein wenig skeptisch, was die Weisheit betrifft, dies überhaupt zu tun, aber ich bin sicher, Sie haben Ihre Gründe.

Ich glaube, Jay meint die Discourse-Client-API. Sie könnten diese über eine Theme-Komponente verwenden, um zu erkennen, wann Discourse vollständig gerendert ist.

Sie scheinen sich einigermaßen mit Softwareentwicklung auszukennen. Ich habe letztes Jahr einen kleinen Einführungskurs zur Entwicklung von Discourse-Themes erstellt, der eine Diskussion darüber enthält, wie die API in einem Theme verwendet wird. Er ist kostenlos und Open Source. Sie können ihn hier durchlesen:

Sie müssen wahrscheinlich ein Frontend-Ereignis verwenden, das ausgelöst wird, wenn die Seite gerendert wird. Davon gibt es einige Beispiele, sobald Sie zur ersten JavaScript-Einheit im Kurs gelangen:

2 „Gefällt mir“

Danke für die Antwort, Angus

Ich bin mir nicht sicher, ob das getan werden muss. Die Crawler erhalten bereits eine HTML-Version meiner Discourse-Instanz.

Es ist noch zu früh, um das zu sagen, aber ich bin ziemlich optimistisch. Es ist nur eine Menge SEO-Bereinigung – Google crawlt eine völlig neue Website. Ich kann mir einfach nicht vorstellen, dass Google die Nicht-JS-Crawler-Version der Website rankt und den gleichen Rang wie das tatsächliche Benutzererlebnis vergibt.

Der erste Teil, den ich erledigen muss, ist, diesen Code in den <head> zu bekommen.

Dann muss ich diesen Teil gemäß prerender.io implementieren.

Stellen Sie dann sicher, dass Sie diese Variable nur auf true setzen, wenn Ihre Seite vollständig gerendert ist und Prerender den Inhalt sicher abrufen kann. Dies ist in einem asynchronen Aufruf möglich, der sehr spät auf Ihrer Seite ausgeführt wird. Prerender.io wartet dann eine kurze Zeit, um sicherzustellen, dass alle Aufrufe abgeschlossen sind, und speichert Ihre Seite.

Ich werde die von Ihnen bereitgestellte Dokumentation durchgehen – vielen Dank dafür.

1 „Gefällt mir“

Ich bin mir nicht sicher, was Sie sehen, aber unserer Erfahrung nach hat die Crawler-Ansicht Websites gut gerankt. Wir hatten Kunden, die berichteten, dass ihre Community ihre Hauptseite übertraf.

2 „Gefällt mir“

Es könnte einfach sein, dass die Website sehr wertvolle Inhalte hat und der Algorithmus die „schlechten Teile“ ignoriert. Jeder Fall ist anders.

Es würde für Google keinen Sinn ergeben, die Crawler-Version so zu ranken, als wäre sie die JS-Version. (im Allgemeinen)

Es gibt kein Menü, keine vorgeschlagenen Themen, keine Randleisten-Links, die Seiten für Benutzerprofile/Abzeichen sind noindex und eine Menge anderer Funktionen, die in der Crawler-Version einfach nicht verfügbar sind.

Ich werde mit einem neuen Thema aktualisieren, sobald die Ergebnisse vorliegen. Bisher ist die Positionierung in den SERPs sehr erratisch

Bearbeiten: Benutzerprofil-/Abzeichenseiten sind über Header noindex