Время до первого байта (TTFB): нормативы и серверная оптимизация — иллюстрация
+7-991-90-777-51
Инженерная энциклопедия Promo-Star • Рубрика: Техническое SEO и CWV • Автор: Алексей Смагин

Время до первого байта (TTFB): нормативы и серверная оптимизация

Время до первого байта (TTFB): нормативы и серверная оптимизация — инженерная схема и архитектура
Определение: TTFB (Time To First Byte) — задержка между запросом браузера и получением первого байта ответа сервера. Включает DNS, TCP/TLS, обработку запроса бэкендом и начало отдачи контента. Хороший TTFB для статики — до 200 мс, для динамики — до 500 мс. Высокий TTFB напрямую увеличивает LCP и раздражает пользователей.

1. Архитектура и принцип работы

Браузер отправляет HTTP-запрос. Сначала резолвится DNS, устанавливается TCP-соединение (и TLS-рукопожатие для HTTPS). Затем запрос уходит на сервер: веб-сервер (Nginx/Apache) принимает его, передаёт приложению (PHP, Python, Node.js), которое обращается к базе данных, кэшу или внешним API. После формирования ответа сервер отправляет первый байт заголовков и тела. TTFB измеряется от начала запроса до этого момента. Чем дольше бэкенд думает, чем больше сетевых прыжков и чем медленнее база — тем выше TTFB. Кэширование на уровне сервера, CDN и оптимизация запросов сокращают эту задержку.

2. Математическая механика и триггеры ранжирования

⚡ ЭКСПРЕСС-АУДИТ ВАШЕГО ПРОЕКТА ПО SLA
Проверить ваш домен на ошибки по регламенту этой статьи:

TTFB = DNS + TCP + TLS + (время очереди + время обработки + время БД + время рендеринга). На практике для динамических страниц с PHP-FPM и MySQL: 20–50 мс на соединение, 10–30 мс на TLS, 50–200 мс на выполнение SQL-запроса без индексов. Норматив: <200 мс для статики (CDN), <500 мс для динамики, >1 с — критично. Ключевые параметры: keepalive_timeout (Nginx), worker_connections, opcache.enable, pm.max_children (PHP-FPM). Формула для расчёта целевого TTFB: TTFB_target = (LCP_target * 0.2) — если LCP = 2.5 с, TTFB не должен превышать 500 мс. Используйте server-timing заголовки для разбивки этапов.

3. Специфика в Яндекс (YATI) vs Google

Яндекс учитывает TTFB как часть скорости сайта в ранжировании, особенно для мобильных. В Яндекс.Вебмастере есть отчёт «Скорость сайта» с рекомендациями по серверу. Google использует TTFB как диагностическую метрику в Lighthouse и PageSpeed Insights, но не как прямой фактор ранжирования — важнее LCP и INP. Однако высокий TTFB ухудшает LCP, что влияет на позиции в обоих поисковиках. Для Яндекса критичнее стабильность TTFB при пиковых нагрузках (он чаще сканирует сайты с плохим TTFB медленнее). Google больше смотрит на полевые данные CrUX. Оба поисковика любят CDN и кэширование.

4. Нормативы SLA и диагностическая матрица

Параметр / МетрикаЭталон по SLAКритическая ошибка
TTFB (статический контент, CDN)< 200 мс> 500 мс
TTFB (динамические страницы, бэкенд)< 500 мс> 1 с
Время ответа сервера (Server Response Time) в PageSpeed< 200 мс> 600 мс

5. Пошаговый инженерный протокол внедрения

  • Включите кэширование на уровне сервера: Nginx fastcgi_cache или proxy_cache для динамики, а также OPcache для PHP. Для WordPress — плагины кэша (WP Super Cache, W3 Total Cache) с настройкой TTL не менее 10 минут.
  • Настройте keepalive и сжатие: в Nginx добавьте keepalive_timeout 65; gzip on; gzip_types text/css application/javascript; brotli on; для уменьшения времени повторных соединений.
  • Оптимизируйте базу данных: добавьте индексы для медленных запросов (EXPLAIN ANALYZE), настройте query_cache (для MySQL 5.7) или используйте Redis/Memcached для горячих данных. Уменьшите количество запросов на страницу.
  • Подключите CDN с поддержкой HTTP/2 или HTTP/3 и кэшированием на границе. Для динамических страниц используйте stale-while-revalidate и раннее подсказывание (Early Hints).
# Nginx: включение кэширования и keepalive для снижения TTFB
http {
    fastcgi_cache_path /tmp/cache levels=1:2 keys_zone=phpcache:100m inactive=60m;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    server {
        location ~ \.php$ {
            fastcgi_cache phpcache;
            fastcgi_cache_valid 200 10m;
            fastcgi_cache_use_stale error timeout updating http_500 http_503;
            add_header X-FastCGI-Cache $upstream_cache_status;
            include fastcgi_params;
            fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        }
        keepalive_timeout 65;
        gzip on;
        gzip_types text/css application/javascript image/svg+xml;
    }
}

6. Типичные ошибки при оптимизации

  • Игнорирование TLS-рукопожатия: использование устаревших протоколов (TLS 1.0/1.1) и отсутствие OCSP stapling увеличивает TTFB на 100–200 мс. Переходите на TLS 1.3 и включайте session resumption.
  • Отсутствие мониторинга TTFB по регионам: замер только с одного сервера не отражает реальную картину. Пользователи из других стран могут получать TTFB в 2–3 раза выше. Используйте RUM (Real User Monitoring) и синтетические тесты из разных локаций.
  • Чрезмерное использование тяжёлых плагинов или middleware на каждый запрос: например, PHP-скрипты, которые подключают десятки библиотек до отдачи контента. Каждый лишний слой увеличивает TTFB. Проверяйте профилировщиком (Xdebug, Blackfire).
ПРОФИЛЬНАЯ УСЛУГА PROMO-STAR
Внедрим «Время до первого байта» на вашем сайте по SLA
Услуга: Ускорение загрузки сайта →

Частые вопросы по теме

Какой TTFB считается хорошим для Яндекса и Google?

Оба поисковика ориентируются на LCP, но TTFB влияет на него. Рекомендуется держать TTFB до 200 мс для статики и до 500 мс для динамики. В Яндекс.Вебмастере есть отчёт, где TTFB выше 1 с помечается как проблема. Google в PageSpeed Insights показывает TTFB в диагностике, но не как прямой фактор ранжирования.

Можно ли снизить TTFB без изменения кода приложения?

Да, за счёт серверной инфраструктуры: включение кэширования (Nginx fastcgi_cache, OPcache), настройка keepalive, сжатия, использование CDN с кэшированием на границе, переход на HTTP/2/3 и TLS 1.3. Также помогает вынос статики на отдельный лёгкий сервер или в объектное хранилище.

Почему TTFB высокий только для авторизованных пользователей?

Потому что для авторизованных страницы обычно не кэшируются и требуют выполнения запросов к базе данных (проверка сессии, персонализация). Решение: использовать кэш фрагментов (например, Redis для сессий), оптимизировать запросы, применять ESI (Edge Side Includes) или выносить персонализацию на клиент через API.

Профильные услуги и отраслевые решения Promo-Star:
🚀 Парсинг конкурентов и мониторинг →🚀 Сбор семантического ядра →🚀 Комплексный SEO-аудит сайта →