SSR (Server-Side Rendering) — HTML собирается на сервере и приходит браузеру готовым. CSR (Client-Side Rendering) — браузер получает почти пустой HTML, и весь контент рисует JavaScript уже на клиенте.
Для SEO SSR безопаснее: поисковик сразу видит весь контент. CSR требует, чтобы поисковик исполнил JavaScript — Google это умеет, но с задержкой, а Яндекс и Bing хуже. Современный подход — гибрид (SSR + гидратация), как в Next.js и Nuxt.
HTML собирается на сервере, отдаётся готовым. Поисковик сразу видит контент. Быстрый FCP, дороже сервер
Сервер отдаёт пустой HTML + JS. JS строит DOM в браузере. Старые роботы не видят контент. Дешёвый сервер, медленный FCP
Заранее сгенерированный HTML + JS-гидрация. Лучшее из двух миров: SEO + интерактивность. Next.js, Nuxt, Astro
Lastminute.com — SSR через Next.js: поисковик сразу видит весь контент 7 млн страниц. Если бы был чистый CSR — пришлось бы ждать рендеринга, и часть страниц не доходила бы до индекса.
Проверить, что реально видит поиск, проще всего так: откройте страницу с выключенным JavaScript или гляньте «сохранённую копию» в выдаче — если на чистом CSR вы увидите пустой каркас без текста, значит роботу контент тоже не достаётся сразу. В Google Search Console есть «Проверка URL» с просмотром отрендеренного HTML, у Яндекса аналога нет, поэтому для Яндекса CSR опаснее вдвойне: его рендерер слабее, и важные блоки (цены, описания, ссылки на обход) могут не попасть в индекс неделями.
Гибрид решает не всё: даже при SSR тяжёлый JS-бандл тормозит интерактивность и бьёт по LCP, если первый экран ждёт гидратации. Частая ошибка — отдавать роботу один HTML, а пользователю подменять контент скриптом; для поиска это выглядит как клоакинг и грозит санкциями. Если переписать фронтенд на SSR нельзя, ставьте предрендеринг (prerender.io, Rendertron) для ботов или статическую генерацию ключевых разделов — подробнее в JavaScript SEO.
Что видит поисковик, проверяют без догадок. Быстрый способ — запросить страницу без исполнения скриптов: curl -s https://example.com/ | grep -c "нужный текст". Если счётчик нулевой, контента в исходном HTML нет. Дальше — «Проверка URL» в Search Console с просмотром отрисованной версии: там видно, добрался ли робот до текста после JavaScript. Третий способ — отключить JS в браузере и открыть страницу глазами.
Между двумя крайностями живёт несколько рабочих вариантов. SSG собирает HTML заранее на сборке и отдаёт статику — идеально для страниц, которые меняются редко. Инкрементальная регенерация обновляет их по расписанию, не пересобирая весь сайт. Гидрация докидывает интерактив поверх готового HTML. Динамический рендеринг, когда роботу отдают одну версию, а человеку другую, Google из рекомендаций убрал: это костыль, который приходится поддерживать отдельно и который легко превращается в расхождение контента.
Для рунета выбор смещён сильнее, чем принято думать. Google научился исполнять JavaScript, но делает это второй волной и с задержкой, а Яндекс исторически работает с клиентским рендерингом хуже: часть контента до индекса не доезжает вовсе. Когда основной трафик идёт из Яндекса, серверный рендеринг ключевых страниц становится условием попадания в индекс.