SSR, SSG и гидратация

Решения проблемы CSR: отдаём боту готовый HTML через серверный рендеринг или предгенерацию.

SSR (Server-Side Rendering) — сервер рендерит страницу в готовый HTML на каждый запрос. SSG (Static Site Generation) — HTML генерируется заранее, на этапе сборки. И там, и там бот получает контент сразу.

SSR: рендер на сервере

При SSR сервер выполняет JS-приложение и отдаёт уже готовый HTML с контентом и мета-тегами. Бот в первой же волне получает всё, что нужно для индексации. Цена — нагрузка на сервер: рендер делается на каждый запрос.

Подходит для динамических страниц, которые часто меняются (лента, каталог с ценами, персонализация).

SSG: предгенерация при сборке

При SSG страницы рендерятся один раз во время билда и кладутся как статические HTML-файлы. Это быстро (отдаётся готовый файл с CDN) и идеально для SEO. Минус — контент «застывает» до следующей сборки.

Подходит для редко меняющегося контента: блог, документация, лендинги. Учебники codechick.io по сути такого класса — стабильный контент, который выгодно отдавать готовым HTML.

СтратегияКогда рендеритсяХорошо для
CSRв браузере, после JSприватные дашборды (SEO не нужен)
SSRна сервере, на каждый запросдинамика, персонализация
SSGзаранее, при сборкеблог, доки, лендинги

Гидратация

Гидратация (hydration) — процесс, когда отрендеренный сервером статический HTML «оживляется» в браузере: JS навешивает обработчики и делает страницу интерактивной. Так совмещаются плюсы обоих миров: бот и пользователь сразу видят контент (из SSR/SSG), а затем страница становится полноценным SPA.

SSR/SSG отдал HTML  -->  пользователь/бот видят контент сразу
        |
   браузер качает JS
        |
   гидратация: JS навешивает обработчики --> страница интерактивна

Почему Nuxt и Next хороши для SEO

Фреймворки Nuxt (Vue) и Next (React) из коробки дают выбор режима для каждой страницы: SSR, SSG или CSR. Они умеют рендерить мета-теги (title, OG, canonical) на сервере, генерировать статические страницы и автоматически гидратировать. Разработчику не нужно вручную городить серверный рендер — фреймворк решает главную SEO-проблему SPA.

Динамический рендеринг (legacy-обходной путь)

Исторический приём: отдавать ботам заранее отрендеренный HTML (через сервис вроде prerender), а людям — обычный SPA. Сейчас Google считает это временным костылём и рекомендует SSR/SSG. Знать стоит, но как первый выбор — не использовать.

Как работает под капотом: выбор стратегии

def choose_strategy(needs_seo, changes_often, personalized):
    if not needs_seo:
        return "CSR — SEO не важен (приватный дашборд)"
    if personalized or changes_often:
        return "SSR — нужен свежий HTML на каждый запрос"
    return "SSG — статика, лучший вариант для SEO и скорости"

print(choose_strategy(True,  False, False))  # блог
print(choose_strategy(True,  True,  True))   # каталог с ценами
print(choose_strategy(False, True,  True))   # личный кабинет

Вывод:

SSG — статика, лучший вариант для SEO и скорости
SSR — нужен свежий HTML на каждый запрос
CSR — SEO не важен (приватный дашборд)

Частые ошибки

  • SSR, но мета-теги всё равно на клиенте — половина проблемы остаётся; рендерите теги на сервере.
  • Расхождение серверного и клиентского рендера — ошибки гидратации, контент «мигает» или ломается.
  • SSG для часто меняющихся данных — пользователи видят устаревший контент до пересборки.
  • Динамический рендеринг как постоянное решение — лучше перейти на SSR/SSG.

Итог

  • SSR рендерит HTML на сервере на каждый запрос, SSG — заранее при сборке; оба отдают боту готовый контент.
  • Гидратация оживляет серверный HTML в браузере — контент виден сразу, потом появляется интерактив.
  • Nuxt и Next дают SSR/SSG/CSR из коробки и решают главную SEO-проблему SPA.
Проверьте себя
1. Чем SSG отличается от SSR?
ASSG рендерит на каждый запрос, SSR — заранее при сборке
BSSG генерирует HTML заранее при сборке, SSR — на сервере на каждый запрос
CSSG работает только в браузере
DМежду ними нет разницы
2. Что такое гидратация (hydration)?
AСжатие HTML перед отправкой
BОживление серверного HTML в браузере: JS навешивает обработчики и делает страницу интерактивной
CКеширование страницы на CDN
DГенерация sitemap.xml
3. Почему Nuxt и Next считаются дружелюбными к SEO?
AОни автоматически закупают ссылки
BОни из коробки дают SSR/SSG и рендерят мета-теги на сервере, решая проблему пустого HTML у SPA
CОни запрещают использовать JavaScript
DОни работают только со статическими сайтами