Що таке SSR: навіщо сервер рендерить сторінки замість браузера

BasicsFrontendWebPerformance

Що таке SSR і чому не всі сторінки завантажуються однаково

Відкрий будь-який сучасний сайт — і ти побачиш текст, картинки, кнопки. Все на екрані. Але якщо заглянути під капот, виявляється, що одні сайти приходять до тебе вже готовими — з текстом і структурою. А інші приходять як порожня сторінка з набором інструкцій: «а тепер, браузер, зроби те, зроби це, і користувач щось побачить».

SSR (Server-Side Rendering) — це коли сервер збирає HTML-сторінку до того, як відправити її тобі. Ти отримуєш готовий контент одразу — браузеру не треба нічого будувати з нуля.

Протилежність — CSR (Client-Side Rendering), коли браузер отримує порожню HTML-сторінку і JavaScript-код, який потім будує весь інтерфейс сам.

Проблема / контекст: чому SPA не завжди добре

Останні 10-15 років модно було робити SPA (Single Page Application). Ідея красива: один раз завантажуєш застосунок, а потім все працює швидко, без перезавантажень сторінки. React, Vue, Angular — всі вони про це.

Але є три проблеми, які SPA не вирішує:

1. Повільне перше завантаження. Коли користувач заходить на SPA-сайт, спочатку він бачить порожній екран або лоадер. Браузер завантажує JavaScript-бандл (іноді кілька мегабайт), потім виконує його, тільки потім будує DOM, і тільки тоді з’являється контент. На швидкому інтернеті це секунда. На мобільному 3G — 5-10 секунд.

2. SEO. Пошукові боти не завжди добре розуміють JavaScript. Google стає кращим, але Bing, Yahoo, поширення в соцмережах — не завжди. Якщо контент генерується на клієнті, пошуковий бот може буквально нічого не побачити.

3. Доступність. Люди з повільними пристроями, старими телефонами, або ті, хто вимкнув JavaScript з міркувань безпеки/батареї — отримують порожню сторінку.

SSR вирішує всі три: сервер відправляє готовий HTML, контент видно одразу, SEO працює з коробки, навіть найслабший телефон показує текст.

Як це працює простими словами

SSR — сервер збирає HTML

  1. Ти відкриваєш сайт.
  2. Браузер посилає запит на сервер.
  3. Сервер збирає повну HTML-сторінку з контентом.
  4. Відправляє її тобі.
  5. Ти бачиш текст і картинки миттєво.
  6. Потім JavaScript «гідратує» (hydration) — додає інтерактивність: кліки, форми, анімації.
Браузер → запит → Сервер → генерує HTML → Браузер показує → JavaScript додає інтерактивність

Приклад того, що приходить з сервера:

<html>
  <body>
    <h1>Привіт, ITAcademy!</h1>
    <p>Це сервер згенерував цей текст.</p>
  </body>
</html>

CSR — браузер збирає HTML

  1. Ти відкриваєш сайт.
  2. Браузер завантажує порожній HTML і великий JS-файл.
  3. JavaScript виконується в браузері.
  4. JavaScript будує HTML-структуру.
  5. Нарешті ти бачиш контент.
Браузер → запит → Сервер відправляє HTML-шаблон + JS-файл →
JavaScript завантажується → виконується → будує DOM → користувач бачить контент

Приклад того, що приходить з сервера:

<html>
  <body>
    <div id="root"></div>
    <script src="/bundle.js"></script>  <!-- тут живий весь сайт -->
  </body>
</html>

SSG — сторінки збираються заздалегідь

Є ще третій підхід — Static Site Generation: сторінки збираються один раз під час білду і зберігаються як звичайні HTML-файли. Коли хтось запитує сторінку, сервер просто віддає готовий файл. Це найшвидший варіант, але підходить не для всього (наприклад, для персональних кабінетів не підійде).

Порівняння: коли що обирати

SSRCSR (SPA)SSG
Перший рендерШвидкий (готовий HTML)Повільний (чекає JS)Миттєвий (готовий файл)
SEO✅ відмінний⚠️ залежить від бота✅ відмінний
Інтерактивність✅ після гідратації✅ зразу✅ після гідратації
Навантаження на серверВище (генерує кожний запит)Нижче (тільки віддача JS)Мінімальне (віддає файли)
Персоналізація✅ (кожен користувач — своя сторінка)❌ (сторінка одна для всіх)
Особисті кабінети
Блоги / документація✅ (найкращий варіант)

Коли SSR — найкращий вибір

SSR ідеально підходить коли:

  • SEO критично: інтернет-магазин, новинний портал, блог.
  • Контент динамічний, але не персональний: сторінка товару, стаття, каталог.
  • Аудиторія використовує різні пристрої: від старих телефонів до потужних ноутбуків. SSR дає рівну базу: контент бачать всі однаково швидко.
  • Швидкість першого рендеру важлива: користувач повинен бачити щось миттєво, навіть якщо інтернет повільний.

Коли SSR — не треба

SSR не варто обирати коли:

  • Повністю внутрішній застосунок: адмінка, CRM, дашборд для команди, куди заходять лише авторизовані люди — тут SEO не грає ролі.
  • Контент сильно персоналізований для кожного: якщо на сервері доводиться робити 10 API-запитів щоб зібрати сторінку, TTFB стає великим.
  • Команда не готова до додаткової інфраструктури: SSR потребує сервера, який генерує HTML. Це складніше, ніж просто віддавати статичні файли через CDN.

Типові помилки при роботі з SSR

1. Гідратуція ламається

Якщо HTML від сервера відрізняється від того, що JavaScript будує сам, React (або інший фреймворк) скидає все і будує з нуля. Це називається hydration mismatch. Результат: контент блимає або інтерактивність не працює.

2. Занадто багато API-запитів на сервері

Сервер генерує сторінку для кожного користувача. Якщо для цього треба зробити 20 запитів до різних API — сторінка буде повільною. Вирішення — кеш, агрегування даних або SSG з перегенерацією.

3. Плутати SSR з SSG

SSG генерує сторінки наперед (під час білду). SSR генерує при кожному запиті. Якщо контент не змінюється часто SSG швидший і дешевший.

4. Ігнорувати помилки на сервері

У SPA помилка JavaScript показується користувачу. У SSR помилка сервера може повернути порожню сторінку або серверну помилку. Потрібно правильно обробляти помилки в server-коді.

Висновок / план дії

SSR — це не магія і не обов’язок. Це інструмент, який робить сайт швидшим і доступнішим для тих, кому це важливо.

Що зробити найближчим часом:

  1. Подивись на свій сайт: чи є у тебе SSR, чи тільки CSR, чи SSG?
  2. Перевір швидкість через PageSpeed — зверни увагу на LCP (коли з’являється головний контент).
  3. Якщо сайт потребує кращого SEO або швидшого першого рендеру — спробуй Next.js (для React) або Nuxt (для Vue).
  4. Для контентних сторінок (блог, документація, пости) розгляни SSG — це ще швидше за SSR.
  5. Не перебудовуй все одразу почни з однієї сторінки і порівняй метрики.

Не кожному сайту потрібен SSR. Але якщо контент важливий і має бути знайдений через пошук — SSR може бути найпростішим способом зробити сайт кращим без повного переписування.

Короткий чеклист

  • Визнач, який зараз тип рендерингу на твоєму сайті (SPA / SSR / SSG / змішаний).
  • Перевір швидкість сторінки через Lighthouse чи PageSpeed — подивися на LCP і TTFB.
  • Спробуй вимкнути JavaScript у браузері і відкрити свій сайт — чи залишається контент?
  • Для свого наступного проєкту спробуй Next.js або Nuxt і перевір, як працює SSR на практиці.
  • Порівняй час завантаження SSR-сторінки і SPA-сторінки на повільному мобільному інтернеті.

Prompt Pack: обрати стратегію рендерингу сайту

Я розробляю вебсайт і хочу зрозуміти, чи треба мені використовувати SSR для свого проєкту. Вхідні дані: - тип сайту (лендінг, електронна комерція, інтерактивний застосунок, блог); - наскільки важливе SEO; - яка аудиторія (швидкий інтернет / мобільні пристрої / регіони з повільним зв'язком); - який фреймворк використовується (React, Vue, Svelte, інший). Поверни результат у форматі: 1. що таке SSR і які є альтернативи (SPA, CSR, SSG, ISR); 2. порівняння: коли SSR кращий, коли гірший; 3. як обрати оптимальну стратегію рендерингу; 4. простий приклад SSR без фреймворку; 5. типові помилки при впровадженні SSR.