Necesito implementar "window.prerenderReady" en mi instancia [TRABAJO PAGADO]

Estoy usando prerender.io para servir la versión “application/JS” del sitio a los rastreadores (mi instancia sirve a los rastreadores la versión JS a través de una configuración oculta).

Funciona bien, pero parece que Discourse podría caer bajo esta categoría

pero algunas páginas web utilizan flujos de carga personalizados o sondeos constantes que pueden engañar a la lógica de Prerender; por lo tanto, no logra tomar una decisión sobre si la página está lista.

La primera vez que prerender accede a cualquier URL de Discourse, se agotará el tiempo de espera (20 segundos establecidos por prerender).

La página se renderiza bien, es solo que prerender.io no sabe que la página está completamente cargada, por lo que “permanece” intentando renderizar la página, hasta que se acaban los 20 segundos, y luego sirve la versión HTML.

Si el rastreador solicita la página nuevamente, servirá la página en 1 segundo (más o menos), ya que hay una versión HTML de la URL en la caché.

…pero eso no es práctico ya que hay miles de URL y 20 segundos para cada URL (la primera vez que se accede) no funcionará.

Así que necesitaré que se agregue lo siguiente justo después de la etiqueta <head> (y cuando la página esté lista, que la variable se establezca en true):

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

Me gustaría que esto funcionara en todo el sitio, ¡ojalá eso facilite el trabajo!

No estoy seguro de lo que esto implica, pero si me equivoco, por favor házmelo saber. ¿$300? ¿$400?

¿Alguien tiene alguna opinión sobre esto?

Quizás haya un archivo principal que pueda editar mientras tanto.

¿Tienes el código que estás usando para hacer eso en algún lugar?

1 me gusta

¿El código para servir la versión JS?

Fue la configuración oculta del sitio “crawler_user_agents” que tú (@pfaffman) me ayudaste a habilitar/ajustar.

Editar Eliminé “bots”, “crawlers” y “spiders” de la lista anterior.

¿Cómo participa prerender.io? ¿Cómo sabría Discourse cuándo incluir la etiqueta <head>?

Oh, ¿creo que prerender se refiere a la etiqueta \u003chead\u003e existente, no?

Para que añadamos el \u003cscript\u003e window.prerenderReady = false; \u003c/script\u003e justo debajo de la etiqueta \u003chead\u003e existente.

Editar Tampoco estoy seguro de si necesitan que el código se establezca dentro de las etiquetas head o después de la etiqueta head de cierre.

¿Cómo instalaste prerender para que sirva las páginas prerenderizadas? Se enumeran tres métodos en How to Install Prerender in 3 Easy Steps. ¿Utilizaste alguno de ellos?

1 me gusta

Sí, usé el middleware de Cloudflare.

Entonces, Cloudflare toma cualquier solicitud de bots y la envía a Prerender.

¿Puedes proporcionar una llamada a la API para prerender que devuelva el valor true/false que deseas en

1 me gusta

Ajá, ya veo. He estado leyendo sobre la API y esto podría estar un poco por encima de mis posibilidades (pero espero que esto facilite la tarea).

El presupuesto es un poco bajo para este tipo de cosas, básicamente. Modificar lo que se sirve a los rastreadores puede ser más complicado de lo que parece. Pueden surgir varios problemas.

Personalmente, soy un poco escéptico sobre la conveniencia de hacer esto en primer lugar, pero seguro que tienes tus razones.

Creo que Jay se refiere a la API del cliente de Discourse. Podrías usarla a través de un componente temático para saber cuándo se renderiza completamente Discourse.

Pareces algo familiarizado con el desarrollo de software. Hice un pequeño curso introductorio sobre el desarrollo de temas de Discourse el año pasado que incluye una discusión sobre cómo usar la API en un tema. Es gratuito y de código abierto. Puedes leerlo a partir de aquí:

Probablemente necesitarás usar un evento del lado del cliente que se active cuando se renderice la página. Hay algunos ejemplos de eso una vez que llegues a la primera unidad de JavaScript en el curso.

2 Me gusta

Gracias por la respuesta Angus

No estoy seguro de que eso sea lo que hay que hacer. Los rastreadores ya están obteniendo una versión HTML de mi instancia de discourse.

Es demasiado pronto para decirlo, pero soy bastante optimista. Es solo una gran limpieza de SEO: Google está rastreando un sitio completamente nuevo. Simplemente no puedo imaginar que Google clasifique la versión del sitio para rastreadores sin JS y le dé el mismo rango que la experiencia real del usuario.

La primera parte que necesito hacer es simplemente poner ese código en el <head>

Luego, es implementar esta parte de acuerdo con prerender.io

luego asegúrate de establecer esta variable en true solo cuando tu página haya terminado de renderizarse y sea seguro que Prerender capture el contenido. Esto es posible en una llamada asíncrona que se ejecuta muy tarde en tu página. Prerender.io esperará un corto período de tiempo para asegurarse de que todas las llamadas hayan finalizado y guardará tu página.

Revisaré la documentación que proporcionaste, gracias por eso.

1 me gusta

No estoy seguro de lo que estás viendo, pero en nuestra experiencia, la vista del rastreador ha clasificado sitios bastante bien. Hemos tenido clientes que informan que su comunidad superó a su sitio principal.

2 Me gusta

Podría ser simplemente que el sitio tiene contenido muy valioso y el algoritmo está ignorando las “partes malas”. Cada caso es diferente.

No tendría sentido que Google clasificara la versión del rastreador como si fuera la versión JS. (en el sentido general)

No hay menú, ni temas sugeridos, ni enlaces laterales, las páginas de perfil de usuario/insignias están noindex, y un montón de otras características que simplemente no están disponibles en la versión del rastreador.

Actualizaré con un nuevo tema una vez que los resultados estén disponibles. Hasta ahora, el posicionamiento en los SERP es muy errático.

editar las páginas de perfil de usuario/insignias están noindex a través de encabezados.