Що таке 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
- Ти відкриваєш сайт.
- Браузер посилає запит на сервер.
- Сервер збирає повну HTML-сторінку з контентом.
- Відправляє її тобі.
- Ти бачиш текст і картинки миттєво.
- Потім JavaScript «гідратує» (hydration) — додає інтерактивність: кліки, форми, анімації.
Браузер → запит → Сервер → генерує HTML → Браузер показує → JavaScript додає інтерактивність
Приклад того, що приходить з сервера:
<html>
<body>
<h1>Привіт, ITAcademy!</h1>
<p>Це сервер згенерував цей текст.</p>
</body>
</html>
CSR — браузер збирає HTML
- Ти відкриваєш сайт.
- Браузер завантажує порожній HTML і великий JS-файл.
- JavaScript виконується в браузері.
- JavaScript будує HTML-структуру.
- Нарешті ти бачиш контент.
Браузер → запит → Сервер відправляє HTML-шаблон + JS-файл →
JavaScript завантажується → виконується → будує DOM → користувач бачить контент
Приклад того, що приходить з сервера:
<html>
<body>
<div id="root"></div>
<script src="/bundle.js"></script> <!-- тут живий весь сайт -->
</body>
</html>
SSG — сторінки збираються заздалегідь
Є ще третій підхід — Static Site Generation: сторінки збираються один раз під час білду і зберігаються як звичайні HTML-файли. Коли хтось запитує сторінку, сервер просто віддає готовий файл. Це найшвидший варіант, але підходить не для всього (наприклад, для персональних кабінетів не підійде).
Порівняння: коли що обирати
| SSR | CSR (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 — це не магія і не обов’язок. Це інструмент, який робить сайт швидшим і доступнішим для тих, кому це важливо.
Що зробити найближчим часом:
- Подивись на свій сайт: чи є у тебе SSR, чи тільки CSR, чи SSG?
- Перевір швидкість через PageSpeed — зверни увагу на LCP (коли з’являється головний контент).
- Якщо сайт потребує кращого SEO або швидшого першого рендеру — спробуй Next.js (для React) або Nuxt (для Vue).
- Для контентних сторінок (блог, документація, пости) розгляни SSG — це ще швидше за SSR.
- Не перебудовуй все одразу почни з однієї сторінки і порівняй метрики.
Не кожному сайту потрібен SSR. Але якщо контент важливий і має бути знайдений через пошук — SSR може бути найпростішим способом зробити сайт кращим без повного переписування.