Necessario implementare "window.prerenderReady" sulla mia istanza [GIG PAGATO]

Sto usando prerender.io per servire la versione “application/JS” del sito ai crawler (la mia istanza serve ai crawler la versione JS tramite un’impostazione nascosta)

Sta funzionando bene ma sembra che discourse possa rientrare in questa categoria (fall under this category) …

ma alcune pagine web utilizzano flussi di caricamento personalizzati o polling costante che possono ingannare la logica di Prerender; pertanto, non riesce a prendere una decisione sulla prontezza della pagina.

La prima volta che prerender accede a qualsiasi URL di discourse, andrà in timeout (20 secondi impostati da prerender)

La pagina viene renderizzata correttamente, è solo che prerender.io non sa che la pagina è completamente caricata, quindi “rimane” a cercare di renderizzare la pagina, fino allo scadere dei 20 secondi, quindi serve la versione HTML

Se il crawler richiede nuovamente la pagina, servirà la pagina in 1 secondo (più o meno), poiché esiste una versione HTML dell’URL nella cache

…ma questo non è pratico poiché ci sono migliaia di URL e 20 secondi per ogni URL (la prima volta che viene richiesto) non funzioneranno

Quindi avrò bisogno che venga aggiunto quanto segue subito dopo il tag <head> (e quando la pagina è pronta, imposta la variabile su true)

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

https://docs.prerender.io/docs/25-empty-or-partially-rendered-pages

Vorrei che questo funzionasse su tutto il sito, sperando che questo renda il lavoro più facile

Non sono sicuro di cosa comporti, ma se ho torto, per favore fatemelo sapere - $300? $400?

Qualcuno ha qualche feedback in merito?

Forse c’è un file principale che posso modificare nel frattempo

Hai il codice che stai usando per fare questo da qualche parte?

1 Mi Piace

Il codice per servire la versione JS?

Era l’impostazione del sito nascosta “crawler_user_agents” che tu (@pfaffman) mi hai aiutato ad abilitare/regolare.

Modifica Ho rimosso “bots”, “crawlers” e “spiders” dall’elenco sopra.

In che modo è coinvolto prerender.io? Come farebbe Discourse a sapere quando includere il tag <head>?

Oh, penso che prerender si riferisca al tag <html> esistente, giusto?

Per aggiungere <script> window.prerenderReady = false; </script> subito sotto il tag <html> esistente

Modifica Non sono nemmeno sicuro se hanno bisogno che il codice sia all’interno dei tag head o dopo la chiusura del tag head

Come hai installato prerender per farlo servire le pagine prerenderizzate? Tre metodi sono elencati su How to Install Prerender in 3 Easy Steps. Ne hai usato uno di questi?

1 Mi Piace

Sì, ho usato il middleware Cloudflare.

Quindi Cloudflare riceve qualsiasi richiesta dai bot e la invia a Prerender.

Puoi quindi fornire una chiamata API a prerender che restituisca il valore true/false che desideri in

 <script> window.prerenderReady = false; </script>
1 Mi Piace

Ah, capisco, - ho fatto qualche lettura sull’API e questo potrebbe essere un po’ troppo per me (ma spero che questo renda il compito più facile)

Il budget è un po’ basso per questo tipo di cose, in sostanza. Modificare ciò che viene servito ai crawler può essere più complicato di quanto sembri. Possono sorgere vari problemi.

Personalmente, sono un po’ scettico sulla saggezza di farlo in primo luogo, ma sono sicuro che hai le tue ragioni.

Penso che Jay intenda l’API del client discourse. Potresti usarla tramite un componente tematico per sapere quando Discourse è completamente renderizzato.

Sembri abbastanza familiare con lo sviluppo software. Ho creato un piccolo corso introduttivo sullo sviluppo di temi discourse l’anno scorso che include una discussione su come utilizzare l’API in un tema. È gratuito e open source. Puoi leggerlo a partire da qui:

Probabilmente dovrai utilizzare un evento frontend che viene attivato quando la pagina viene renderizzata. Ci sono alcuni esempi di ciò una volta che arrivi alla prima unità javascript nel corso:

2 Mi Piace

Grazie per la risposta Angus

Non sono sicuro che sia questo ciò che deve essere fatto. I crawler stanno già ottenendo una versione HTML della mia istanza di discourse.

È troppo presto per dirlo, ma sono piuttosto ottimista. Si tratta solo di una grande pulizia SEO: Google sta indicizzando un sito completamente nuovo. Non riesco proprio a immaginare che Google classifichi la versione del sito per crawler non-JS e dia lo stesso ranking dell’esperienza utente effettiva.

La prima cosa che devo fare è semplicemente inserire quel codice nell’<head>

Poi si tratta di implementare questa parte secondo prerender.io

quindi assicurati di impostare questa variabile su true solo quando la tua pagina ha finito il rendering ed è sicuro che Prerender possa acquisire il contenuto. Questo è possibile in una chiamata asincrona che viene eseguita molto tardi nella tua pagina. Prerender.io attenderà quindi un breve periodo di tempo per assicurarsi che tutte le chiamate siano terminate e salverà la tua pagina.

Controllerò la documentazione che hai fornito, grazie per questo.

1 Mi Piace

Non sono sicuro di cosa tu stia vedendo, ma per nostra esperienza, la visualizzazione del crawler ha classificato i siti piuttosto bene. Abbiamo avuto clienti che hanno riferito che la loro community ha superato in classifica il loro sito principale.

2 Mi Piace

Potrebbe semplicemente essere che il sito abbia contenuti di grande valore e l’algoritmo stia ignorando le “parti negative”. Ogni caso è diverso.

Non avrebbe senso per Google posizionare la versione crawler come se fosse la versione JS. (in senso generale)

Non c’è menu, né argomenti suggeriti, né link laterali, le pagine del profilo utente/badge sono noindex e un sacco di altre funzionalità che semplicemente non sono disponibili nella versione crawler.

Aggiornerò con un nuovo argomento una volta che i risultati saranno disponibili. Finora il posizionamento nei SERP è molto erratico.

modifica le pagine del profilo utente/badge sono noindex tramite header