@LoveCodeandCoffe

Корректно ли работает SSR в этом примере?

Уже не первую неделю ломаю себе голову( я не стал использовать next js ) . Смог сделать серверный render с помощью библиотеки razzle все отлично выдает разметку, горячая перезагрузка сервера и клиента, все ок.

Но разработчики походу слукавили, и не добавили в коробку функцию по загрузке данных на сервере ( как getInitialProps в next js)

Нашел рабочий хук для клиента и сервера по загрузке данных. Но вот беда.
Посмотрите этот пример .

При 1 рендере, данные на клиенте и в разметке страницы совпадают, но дальше если обновить данные нажать на кнопку на клиенте. То данные поменяются , но в разметке будут старые данные. Как увидят эту страницу поисковые роботы? Будут ли они видеть только 1 загруженные данные?
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
AntiStream
@AntiStream
Потоковый программист
Судя по тому, что возвращает curl, данные для бота будут так-же каждый раз разные...
5f15c453e3686952298699.png

Кстати использовать SSR не обязательно, можно просто собрать SPA приложение и отдавать его через nginx, а для ботов сделать отдельное пререндер приложение на основе модуля prerender (https://www.npmjs.com/package/prerender), для которого надо в nginx прописать, чтобы боты отправлялись на пререндер приложение. Ниже описаны правила nginx, для пререндер приложения, которое работает на 3000 порту:
upstream prerender_server {
    server 127.0.0.1:3000;
    keepalive 8;
}

server {

    location / {        
        set $prerender 0;

        if ($http_user_agent ~* "googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest\/0\.|pinterestbot|slackbot|vkShare|W3C_Validator|whatsapp") {
            set $prerender 1;
        }
        if ($args ~ "_escaped_fragment_") {
            set $prerender 1;
        }
        if ($http_user_agent ~ "Prerender") {
            set $prerender 0;
        }
        if ($uri ~* "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent|ttf|woff|svg|eot)") {
            set $prerender 0;
        }
 
        if ($prerender = 1) {
            rewrite .* /render?url=$scheme://$host$request_uri break;
            proxy_pass http://prerender_server;
        }
    }

}


Тогда можно будет зайти на сайт с параметром "?_escaped_fragment_", и увидеть то, что уведет бот.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы