SSR и SSG рендеринг для SEO
1. Архитектура и принцип работы
Архитектура SSR/SSG восходит к классическим веб-серверам, где HTML генерировался на лету (PHP, Ruby on Rails). С появлением SPA (React, Vue) контент стал рендериться на клиенте, что вызвало проблемы с индексацией. SSR вернул генерацию HTML на сервер: при запросе сервер выполняет JS-код, формирует разметку и отдаёт её браузеру и краулеру. SSG пошёл дальше — HTML создаётся заранее на этапе сборки (например, в Next.js или Gatsby) и раздаётся как статика. Это устраняет задержки и снижает нагрузку на сервер. Исторически переход на SSR/SSG стал ответом на требования поисковиков к скорости и доступности контента, а также развитием гибридных подходов (ISR, DPR).
2. Математическая механика и триггеры ранжирования
С точки зрения SEO, SSR/SSG влияют на три ключевых фактора: скорость получения контента (TTFB, FCP), полнота индексации и краулинговый бюджет. Формула эффективности: E = (C / T) * W, где C — объём проиндексированного контента, T — время до первого байта, W — вес домена. При SSR TTFB зависит от времени выполнения JS на сервере; при SSG TTFB минимален (CDN). Поисковые роботы отдают приоритет страницам с готовым HTML: если контент появляется только после выполнения JS, краулер может его не увидеть (особенно при ограниченном краулинговом бюджете). Триггеры пессимизации: медленный TTFB (>1.5 с), несоответствие серверного и клиентского HTML (hydration mismatch), блокировка рендеринга ресурсов. Влияние на ранжирование: SSR/SSG косвенно повышают позиции за счёт улучшения Core Web Vitals (LCP, FID) и увеличения покрытия индексации.
3. Специфика в Яндекс (YATI) vs Google
Яндекс в YATI (Yandex Advanced Technology of Indexing) и ПФ (поисковые факторы) учитывает скорость ответа сервера и наличие контента в исходном HTML. Робот Яндекса исторически хуже выполняет JS, поэтому SSR/SSG дают явное преимущество. Google с Core Updates и Entity Graph оценивает не только скорость, но и качество контента, семантику и связи сущностей. Googlebot умеет рендерить JS, но откладывает это на второй этап, что увеличивает время индексации. SSR/SSG устраняют эту задержку. В Google приоритет — LCP и CLS, в Яндексе — TTFB и полнота HTML. Оба поисковика штрафуют за несоответствие серверной и клиентской версий (cloaking).
4. Нормативы SLA и диагностическая матрица
| Параметр / Метрика | Эталон по SLA | Критическая ошибка |
|---|---|---|
| TTFB (Time To First Byte) | < 200 мс (SSG) / < 500 мс (SSR) | > 1.5 с |
| LCP (Largest Contentful Paint) | < 2.5 с | > 4 с |
| Доля проиндексированных страниц | > 95% | < 70% |
5. Пошаговый инженерный протокол внедрения
- Шаг 1: Выберите фреймворк с поддержкой SSR/SSG (Next.js, Nuxt, SvelteKit) и настройте серверный рендеринг для всех SEO-страниц.
- Шаг 2: Обеспечьте генерацию уникальных title, description и микроразметки на сервере, чтобы краулер получал их сразу.
- Шаг 3: Настройте кэширование и CDN для SSG-страниц, чтобы TTFB был ниже 200 мс, а для SSR используйте кэш на стороне сервера.
- Шаг 4: Проверьте hydration: серверный и клиентский HTML должны совпадать, иначе возможны ошибки и потеря контента.
- Шаг 5: Регулярно тестируйте страницы через Google Search Console (проверка URL) и Яндекс.Вебмастер (переобход) для контроля индексации.
// next.config.js — пример настройки SSG с fallback
module.exports = {
exportPathMap: async function () {
return { '/': { page: '/' }, '/about': { page: '/about' } };
},
// Для SSR используйте getServerSideProps
// Для SSG — getStaticProps + getStaticPaths
};
6. Типичные ошибки при оптимизации
- Фатальная ошибка 1: Рендеринг критичного контента только на клиенте. Избегайте: всегда отдавайте основной текст и мета-теги в серверном HTML.
- Фатальная ошибка 2: Игнорирование hydration mismatch, когда серверный и клиентский HTML различаются. Это приводит к дублированию контента и сбоям индексации.
- Фатальная ошибка 3: Отсутствие кэширования SSR-страниц, что вызывает высокий TTFB и перегрузку сервера. Используйте CDN и stale-while-revalidate.
