Требуется внедрение "window.prerenderReady" на моем инстансе [ОПЛАЧЕННЫЙ ЗАКАЗ]

Я использую prerender.io для предоставления поисковым роботам версии сайта с «приложением/JS» (мой экземпляр обслуживает роботов JS-версию через скрытую настройку).

Это работает хорошо, но, похоже, Discourse может подпадать под эту категорию

Однако некоторые веб-страницы используют собственные сценарии загрузки или постоянную опросную проверку, которые могут запутать логику Prerender; в результате он не может принять решение о готовности страницы.

При первом обращении Prerender к любому URL-адресу Discourse происходит тайм-аут (20 секунд, установленные Prerender).

Страница отображается корректно, но Prerender.io не понимает, что страница полностью загружена, поэтому он «зависает» в ожидании рендеринга страницы до истечения 20 секунд, после чего обслуживает HTML-версию.

Если робот запрашивает страницу повторно, она будет предоставлена за 1 секунду (плюс-минус), так как в кэше уже есть HTML-версия этого URL.

…но это непрактично, поскольку существует тысячи URL-адресов, и ожидание по 20 секунд для каждого из них (при первом обращении) не сработает.

Поэтому мне нужно добавить следующее сразу после тега \u003chead\u003e (и установить переменную в true, когда страница полностью загрузится):

\u003cscript\u003e window.prerenderReady = false; \u003c/script\u003e

Я бы хотел, чтобы это работало на всем сайте — надеюсь, это упростит задачу.

Не совсем уверен, что именно это потребует, но если я ошибаюсь, пожалуйста, дайте знать — $300? $400?

У кого-нибудь есть отзывы по этому поводу?

Возможно, есть какой-то основной файл, который я могу отредактировать на время.

Есть ли у вас где-нибудь код, который вы используете для этого?

1 лайк

Код для обслуживания JS-версии?

Это скрытая настройка сайта «crawler_user_agents», которую вы (@pfaffman) помогли мне включить/настроить.

Редактирование Я удалил «bots», «crawlers» и «spiders» из списка выше.

Как здесь участвует prerender.io? Как Discourse узнает, когда нужно добавить тег ?

О, я думаю, что prerender ссылается на существующий тег , верно?

Нам нужно добавить сразу после существующего тега

Редактирование: Также я не уверен, нужно ли размещать этот код внутри тегов head или после закрывающего тега head

Как вы установили Prerender, чтобы он обслуживал предварительно сгенерированные страницы? На странице How to Install Prerender in 3 Easy Steps перечислены три метода. Использовали ли вы один из них?

1 лайк

Да, я использовал middleware Cloudflare.

Таким образом, Cloudflare перехватывает все запросы от ботов и перенаправляет их на Prerender:

Так что вы можете предоставить API-вызов для предварительного рендеринга, который будет возвращать значение true/false, которое вы хотите в

 <script> window.prerenderReady = false; </script>
1 лайк

Ага, понятно — я поизучал документацию по API, и это может быть немного выше моей головы (но, надеюсь, это упростит задачу)

Бюджет для такого рода задач в целом немного мал. Изменение того, что отображается для краулеров, может оказаться сложнее, чем кажется. Могут возникнуть различные проблемы.

Лично я немного скептически отношусь к целесообразности этого в принципе, но, уверен, у вас есть свои причины.

Думаю, Джей имеет в виду клиентский API Discourse. Вы можете использовать его через компонент темы, чтобы определить момент, когда Discourse полностью отрендерен.

Похоже, вы немного знакомы с разработкой программного обеспечения. В прошлом году я создал небольшой вводный курс по разработке тем для Discourse, который включает обсуждение того, как использовать API в теме. Он бесплатный и с открытым исходным кодом. Вы можете начать изучать его здесь:

Вам, скорее всего, потребуется использовать событие на стороне клиента, которое срабатывает при отрисовке страницы. Примеры такого подхода можно найти, когда вы дойдете до первого модуля JavaScript в курсе:

2 лайка

Спасибо за ответ, Ангус.

Я не уверен, что это именно то, что нужно сделать. Поисковые роботы уже получают HTML-версию моего экземпляра Discourse.

Пока рано судить, но я довольно оптимистичен. Это просто большая работа по очистке SEO — Google полностью заново сканирует новый сайт. Я просто не могу представить, что Google будет ранжировать версию сайта для роботов без JavaScript и присваивать ей тот же рейтинг, что и реальному пользовательскому опыту.

Первое, что нужно сделать, — просто разместить этот код в теге <head>.

Затем нужно реализовать этот раздел согласно документации prerender.io.

убедитесь, что вы устанавливаете эту переменную в true только тогда, когда страница полностью отрендерена и Prerender может безопасно захватить содержимое. Это можно сделать в асинхронном вызове, который выполняется на странице в самом конце. Prerender.io затем подождет немного, чтобы убедиться, что все вызовы завершены, и сохранит вашу страницу.

Буду изучать предоставленную вами документацию — спасибо за неё.

1 лайк

Не уверен, что именно вы наблюдаете, но по нашему опыту вид для роботов позволяет сайтам занимать довольно высокие позиции. Наши клиенты сообщали, что их сообщество обгоняло в рейтинге их основной сайт.

2 лайка

Возможно, дело просто в том, что на сайте очень ценный контент, и алгоритм игнорирует «слабые места». Каждый случай уникален.

В общем смысле было бы нелогично, если бы Google ранжировал версию для краулера так же, как версию на JavaScript.

Здесь нет меню, нет рекомендуемых тем, нет ссылок в боковой панели, страницы профилей пользователей и наград помечены как noindex, и множество других функций просто недоступны в версии для краулера.

Я обновлю информацию в новой теме, как только будут получены результаты. Пока что позиции в выдаче (SERP) очень нестабильны.

редактирование: страницы профилей пользователей и наград помечены как noindex через заголовки.