Ведение
Некоторые поисковики умеют индексировать SPA, но имеют ограничения. Остальные умеют индексировать только MPA. Так что для приложений, которые должны индексироваться, нужно дополнительно реализовать легковесную выдачу HTML с контентом.
Не смотря на то, что $mol приложения легко запускаются и на сервере, запуск всей клиентской логики на сервере не является оптимальным, ввиду следующих факторов:
-
Высокая нагрузка на сервер.
-
Жёсткая привязка к JS рантайму.
-
Выдача содержит сильно избыточный для индексирования код.
-
В выдачу попадает излишний контент, не относящийся к теме страницы.
-
Не любой код может адекватно отработать на сервере.
-
Нужно доп тестирование запуска приложения в серверном окружении.
meta-fragment
Ввиду этого, рекомендуется на сервере поддержать стандарт meta-fragment, позволяющий индексировать SPA как MPA. Для этого надо добавить в index.html:
<meta name="fragment" content="!" />
Увидев это, MPA поисковик будет делать запрос к серверу, заменив в урле подстроку "#!"
на "?_escaped_fragment_="
.
На сервере надо обрабатывать такого рода запросы и формировать HTML с выдачей ровно тех данных и в такой форме, которая оптимальна для индексирования.
Поведение поисковиков
Yandex
-
Умеет как SPA, так и MPA индексирование c поддержкой meta-fragment.
-
SPA не поддерживает WebSocket.
-
MPA отрабатывает хорошо.
-
Режим индексирования переключается в настройках Ya.Webmaser. SPA - "Рекомендую рендерить", MPA - "Не рендерить".
Google
DuckDuckGo
Bing
Не решённые проблемы
-
Из-за виртуализации в режиме SPA индексируется только первый экран. Нужно детектировать краулер и включать режим для печати. Приветствуются пул реквесты в $mol_print. Актуально только для Google в режиме SPA.
-
Получаемые по вебсокетам данные в режиме SPA не рендерятся. Нужно детектировать это и запрашивать данные по http либо вручную редиректить на meta-fragment (как это сделано на page.hyoo.ru). Актуально только для Google.