Skip to content
EN
← Все статьи

Проверка скорости сайта: инструменты, метрики и как мерить правильно

Коротко. Проверка скорости сайта делится на два класса. Лабораторные прогоны (Lighthouse, PageSpeed Insights, GTmetrix, WebPageTest) гоняют страницу на синтетическом устройстве с искусственным каналом. Полевые данные (CrUX, Search Console, свой RUM) собираются у живых посетителей. Расхождение «в PSI 95, а люди жалуются» — это именно разница между лабораторией и полем, а не ошибка инструмента.

Эта статья — не список ссылок «топ-10 сервисов». Это разбор того, что каждый класс инструментов действительно измеряет, почему два прогона подряд дают разные цифры, какие метрики смотреть в 2026 году и как построить замер, которому можно верить. Оптимизация вынесена в отдельные материалы — здесь только измерение и его интерпретация.

Что измеряют инструменты проверки скорости сайта

«Скорость сайта» — не одно число. Любой современный инструмент раскладывает загрузку на три независимые группы характеристик, и они ломаются по разным причинам.

  • Доставка байтов. Сколько времени сервер думает над ответом и сколько данных прилетает в браузер: TTFB, объём страницы, число запросов, наличие сжатия. Отвечает бэкенд, хостинг, CDN.
  • Отрисовка. Когда пользователь видит хоть что-то (FCP) и когда видит главное (LCP), насколько плавно страница наполняется (Speed Index). Отвечает критический путь рендеринга: CSS, шрифты, изображения.
  • Интерактивность и стабильность. Отвечает ли страница на клики (TBT в лаборатории, INP в поле) и не прыгает ли вёрстка под пальцем (CLS). Отвечает JavaScript и разметка.

Сайт может отдавать HTML за 80 мс и при этом быть невыносимо медленным, потому что три мегабайта JS блокируют главный поток на две секунды. И наоборот: тяжёлый TTFB на сервере в другой стране губит даже идеально свёрстанную страницу. Поэтому один агрегированный балл почти бесполезен без разбивки по метрикам — с этого и начинается чтение любого отчёта.

Правило. Никогда не сравнивайте «баллы» между разными инструментами. Lighthouse, GTmetrix и любой самописный чекер считают итоговую оценку по своим формулам и своим весам. Сравнивать можно только одинаковые метрики, снятые одинаковым способом.

Лабораторные и полевые данные: главное различие

Это то место, где у большинства ломается картина мира. Разберём по частям.

Что такое лабораторный прогон

Лаборатория (lab data, синтетика) — это один прогон страницы в контролируемых условиях: конкретный браузер, заданный профиль сети, заданная мощность процессора, холодный кэш, отсутствие расширений и отсутствие живого пользователя. Инструмент открывает страницу, ждёт затухания активности и выдаёт метрики. Так работают Lighthouse, лабораторная часть PageSpeed Insights, GTmetrix, WebPageTest и любой синтетический мониторинг.

Сильная сторона: воспроизводимость и диагностика. Вы получаете трассировку, водопад запросов, список конкретных ресурсов и можете проверить эффект правки за минуту. Слабая сторона: это не ваши пользователи. Это гипотетический пользователь на устройстве, которого вы выбрали.

Что такое полевые данные

Поле (field data, RUM — real user monitoring) — это метрики, снятые в браузерах реальных посетителей и агрегированные. Основной публичный источник для Chrome — набор данных CrUX, из которого поле берут и PageSpeed Insights, и отчёт Core Web Vitals в Search Console. Важные свойства этих данных:

  • Агрегация идёт по скользящему окну примерно в 28 дней — то есть данные всегда «запаздывают» и не покажут вчерашний релиз.
  • Метрика оценивается по 75-му перцентилю: «хорошо» означает, что три четверти загрузок уложились в порог, а не среднее значение.
  • В выборку попадают только пользователи Chrome, согласившиеся на отправку статистики. Safari, Firefox и корпоративные сборки с отключённой телеметрией в CrUX не видны.
  • Если у конкретного URL мало трафика, данных по нему не будет — инструмент подставит агрегат по всему домену (origin) или скажет, что данных недостаточно.

Почему «в PSI 95, а пользователи жалуются»

Типовые причины расхождения, от самой частой к редкой:

  • INP в лаборатории не измеряется вообще. Это метрика взаимодействия: чтобы её получить, нужен человек, который кликает. Лабораторный прогон использует суррогат — TBT. Страница с зелёным лабораторным баллом может иметь ужасный INP в поле.
  • Аудитория тяжелее синтетического профиля. Лабораторный «средний мобильник» может оказаться быстрее реальных устройств вашей аудитории, а канал в дата-центре — быстрее мобильного интернета в пригороде.
  • Лаборатория не видит вашего кода после согласия на куки. Баннеры согласия, чаты поддержки, пиксели рекламных сетей и A/B-скрипты часто грузятся только после действия пользователя или только для части трафика.
  • Разные страницы. Вы гоняете главную, а жалуются на карточку товара с двадцатью изображениями и фильтром.
  • Залогиненные пользователи. Личный кабинет обычно тяжелее публичной части, а в лабораторию он не попадает.

Обратный случай: «в PSI 40, а в поле зелено»

Тоже нормальная ситуация. Мобильный лабораторный прогон намеренно жестокий: слабый процессор и медленный канал. Если ваша реальная аудитория — офисные десктопы на проводном интернете, поле будет зелёным при низком лабораторном балле. Вывод: низкий балл — повод посмотреть, что именно тормозит, а не повод паниковать. Решение о приоритете принимается по полю.

Практическое правило. Поле отвечает на вопрос «есть ли проблема и у кого». Лаборатория отвечает на вопрос «почему и что чинить». Использовать нужно оба: только поле — вы знаете о боли, но не знаете причину; только лаборатория — вы чините то, что никого не беспокоит.
Схема: лабораторный прогон на синтетическом устройстве против полевых данных от реальных посетителей
Лаборатория даёт воспроизводимую диагностику, поле — правду о реальных пользователях. Смотреть нужно оба источника.

Метрики скорости: LCP, INP, CLS, TTFB, FCP, TBT

Актуальный набор Core Web Vitals состоит из трёх метрик: LCP, INP и CLS. Метрика FID (First Input Delay) выведена из состава Core Web Vitals весной 2024 года — её заменил INP. Если инструмент или чек-лист до сих пор предлагает «улучшить FID», он устарел; ориентироваться нужно на INP. Подробный разбор новой метрики — в материале про INP в Core Web Vitals, а общий свод показателей — в гайде по Web Vitals.

МетрикаЧто измеряетТипичная причина ухудшенияКуда смотреть
LCP (Largest Contentful Paint)Момент отрисовки самого крупного видимого элемента: героического изображения, баннера или блока текстаТяжёлая картинка без современного формата, ленивая загрузка на LCP-элементе, шрифт, блокирующий текст, медленный TTFBВодопад: какой ресурс является LCP-элементом и когда он начал грузиться. Проверить preload и приоритет
INP (Interaction to Next Paint)Задержку между действием пользователя и следующей отрисовкой; берётся худшее взаимодействие за визитДлинные задачи JavaScript, тяжёлые обработчики событий, синхронный рендер больших списков, сторонние виджетыТолько поле или ручной тест в DevTools. В лаборатории косвенно — по TBT и long tasks
CLS (Cumulative Layout Shift)Суммарный сдвиг вёрстки за время жизни страницыИзображения и iframe без указанных размеров, поздние баннеры и куки-панели, подмена шрифта, вставки рекламыPerformance в DevTools, слой Layout Shift Regions; в отчёте инструмента — список сдвинувшихся элементов
TTFB (Time to First Byte)Время до первого байта ответа: DNS, TCP, TLS, обработка на сервере, сетьМедленный бэкенд или база, отсутствие кэша, промах CDN, редиректы, географическая удалённостьТерминал: curl -w с полным таймингом. Дальше — логи и профилирование приложения
FCP (First Contentful Paint)Момент, когда пользователь видит первый фрагмент контентаБлокирующий CSS и JS в head, тяжёлый шрифт, высокий TTFBВодопад: что стоит между HTML и первой отрисовкой
TBT (Total Blocking Time)Суммарное время, на которое главный поток был заблокирован задачами дольше 50 мсКрупные бандлы, гидратация SPA, аналитика и теги в менеджере тегов, полифилыВкладка Performance, раздел Long Tasks; в Lighthouse — «Reduce JavaScript execution time»
Speed IndexНасколько быстро визуально заполняется первый экранПоздние изображения, анимация появления, отложенный рендер контентаВидеозапись загрузки и филмстрип в WebPageTest или GTmetrix

Какие значения считаются нормальными

Пороги ниже — общепринятые ориентиры, которые используют публичные инструменты. Они оцениваются по 75-му перцентилю полевых данных, а не по одному прогону. Разделять мобильные и десктопные значения обязательно: одна и та же страница почти всегда попадает в разные категории.

МетрикаХорошоТребует вниманияПлохоГде доступна
LCPдо 2,5 с2,5–4,0 сбольше 4,0 слаборатория и поле
INPдо 200 мс200–500 мсбольше 500 мстолько поле
CLSдо 0,10,1–0,25больше 0,25лаборатория и поле
TTFBдо 0,8 с0,8–1,8 сбольше 1,8 слаборатория, поле, терминал
FCPдо 1,8 с1,8–3,0 сбольше 3,0 слаборатория и поле
TBTдо 200 мс200–600 мсбольше 600 мстолько лаборатория
Важно. TTFB не входит в Core Web Vitals и сам по себе не влияет на оценку страницы напрямую. Но он входит в LCP как слагаемое: пока сервер думает секунду, у вас остаётся полторы секунды на всё остальное. Именно поэтому TTFB меряют отдельно и чинят первым.

Почему балл Lighthouse — это не «скорость»

Число в цветном кружке — не время загрузки и не «процент качества». Это взвешенная композиция нескольких лабораторных метрик, переведённых в баллы по нелинейной кривой. В актуальных версиях Lighthouse вклад распределён примерно так: TBT около 30%, LCP около 25%, CLS около 25%, FCP и Speed Index — по 10%. Точные веса меняются от версии к версии, и это одна из причин, почему балл «сам собой» меняется после обновления инструмента.

Из устройства балла следуют неочевидные вещи:

  • INP в балл не входит. Совсем. Балл Lighthouse может быть зелёным на странице, которая реагирует на клик через полсекунды.
  • Одна метрика топит всё. Треть веса у TBT: один тяжёлый сторонний скрипт способен обрушить балл при отличных LCP и CLS.
  • Кривая нелинейна. Поднять балл с 30 до 55 обычно дёшево, с 90 до 95 — дорого и почти незаметно для пользователя. Гнаться за 100/100 — плохая экономика.
  • Балл — не метрика для отчёта руководству. Он не переводится в секунды. Для отчётности берите LCP и INP по полю: их можно объяснить в терминах «пользователь ждёт столько-то».
Диаграмма распределения весов метрик в итоговом балле производительности Lighthouse
Балл производительности — взвешенная сумма лабораторных метрик. INP в него не входит вовсе.

Почему два прогона подряд дают разные баллы и как мерить правильно

Откуда берётся разброс

Разброс (variance) в 5–15 баллов между двумя прогонами одной и той же неизменной страницы — норма, а не поломка. Источники:

  • Ресурсы машины. Локальный Lighthouse делит процессор с вашими вкладками, сборщиком фронтенда и антивирусом. Публичные сервисы делят инфраструктуру с другими пользователями.
  • Троттлинг симулируется. Режим по умолчанию не режет трафик физически, а пересчитывает тайминги по модели. Модель чувствительна к тому, как реально прошёл прогон.
  • Ваш сайт не детерминирован. A/B-тесты, ротация баннеров, разные рекламные креативы, случайные товары в блоке рекомендаций — всё это меняет вес страницы от прогона к прогону.
  • Кэши. Первый прогон попадает в холодный кэш CDN и холодный кэш приложения, второй — в горячий. Разница в TTFB бывает кратной.
  • Сторонние домены. Аналитика и виджеты живут своей жизнью; их задержка целиком вне вашего контроля.

Как мерить правильно

  • Делайте не меньше пяти прогонов, лучше девять или одиннадцать (нечётное число упрощает медиану).
  • Берите медиану, а не среднее: один аномальный прогон сдвигает среднее и не сдвигает медиану.
  • Фиксируйте профиль: одно и то же устройство, один и тот же режим троттлинга, один и тот же регион.
  • Гоняйте ровно один URL с одними и теми же query-параметрами. UTM-метка может отключить кэш и изменить поведение.
  • Сравнивайте «до» и «после» в одном окне времени. Замер до релиза утром и после релиза вечером сравнивать нельзя.
  • Фиксируйте версию инструмента. Обновление Lighthouse меняет веса и пересчитывает историю в вашей голове, но не в архиве.

Мобильный прогон против десктопного

Мобильный режим — это не просто узкий экран. Инструмент дополнительно замедляет процессор (обычно в четыре раза относительно машины, на которой идёт прогон) и ограничивает канал профилем медленного мобильного интернета с заметной задержкой. Смысл в том, чтобы смоделировать бюджетный Android, а не флагман.

Практические следствия:

  • Мобильный балл почти всегда ниже десктопного, и это ожидаемо. Сравнивать mobile с desktop бессмысленно.
  • Троттлинг процессора бьёт по JS-тяжёлым сайтам сильнее всего: TBT растёт в разы, а вместе с ним падает треть балла.
  • Google оценивает Core Web Vitals отдельно для мобильных и десктопных пользователей. Если основной трафик мобильный, десктопный прогон вас успокаивает зря.
  • Абсолютные значения троттлинга зависят от мощности машины, на которой запущен Lighthouse. Прогон на ноутбуке разработчика и на CI-раннере даст разные цифры даже при одинаковых настройках.

Как не обмануть себя при замере

Самые частые способы получить красивую, но ложную цифру:

  • Прогон с прогретым кэшем браузера. Вы уже двадцать раз открывали эту страницу — статика лежит локально. Реальный посетитель приходит с пустым кэшем. Меряйте в приватном окне или через инструмент, который гарантирует чистый профиль.
  • Расширения браузера. Блокировщик рекламы вырезает половину сторонних скриптов и рисует вам чужой сайт. Менеджер паролей и переводчики добавляют свои задержки. Локальный Lighthouse запускайте в чистом профиле.
  • Корпоративная сеть. Гигабитный офисный канал, кэширующий прокси и близкий к сайту дата-центр дают цифры, которых нет ни у одного вашего клиента.
  • Залогиненный админ. Панель администратора, отключённый кэш для авторизованных, дебаг-панель фреймворка — вы меряете совсем другую страницу.
  • Дев-сборка. Несжатые бандлы, source maps, hot reload. Меряйте только продакшен-сборку на боевом домене.
  • Свежий деплой. Первые минуты после релиза кэши холодные, а фоновые задачи прогревают приложение. Дайте системе устояться.

Инструменты проверки скорости загрузки сайта: сравнение по классам

Инструменты различаются не «качеством», а классом задачи. Ниже — что каждый действительно даёт и, что важнее, чего он принципиально не покажет.

ИнструментЛаборатория или полеСильная сторонаЧего НЕ покажетКому подходит
Lighthouse в Chrome DevToolsЛабораторияПолный аудит с трассировкой на вашей машине, работает на localhost и за авторизациейПолевые данные, INP реальных пользователей, поведение на других устройствахРазработчик, локальная отладка до деплоя
PageSpeed InsightsЛаборатория + поле (CrUX)Единственная бесплатная точка, где лабораторный прогон и полевые Core Web Vitals показаны рядомВодопад запросов, история прогонов, страницы за авторизацией и локальные сборкиВладелец сайта, SEO-специалист, быстрый первичный диагноз
WebPageTestЛаборатория (мультирегион, реальные устройства и профили сетей)Самый подробный водопад, connection view, филмстрип, сравнение двух прогонов бок о бокПолевые метрики вашей аудитории; INP как метрику реальных взаимодействийИнженер производительности, глубокая диагностика
GTmetrixЛабораторияЧитаемый отчёт с водопадом и видео загрузки, история прогонов по расписаниюПолевые данные CrUX по вашим пользователям; поведение авторизованной зоныВебмастер, регулярная проверка одной-двух ключевых страниц
Chrome DevTools, вкладки Performance и NetworkЛабораторияЧто именно занимает главный поток: long tasks, layout shifts по кадрам, стек вызововСводный балл и любые агрегаты; данные о других пользователяхРазработчик, поиск причины после того, как факт проблемы установлен
Search Console, отчёт Core Web VitalsПоле (CrUX)Группы URL, которые реально плохи у пользователей, с разбивкой mobile и desktopПричину проблемы и любую диагностику; свежие данные — окно около 28 днейSEO, приоритизация работ по разделам сайта
Яндекс.Метрика, отчёты по времени загрузкиПоле (ваши посетители)Данные по вашей реальной аудитории, включая браузеры и регионы, которых нет в CrUXCore Web Vitals в том виде, в котором их считает GoogleПроекты с преимущественно российской аудиторией
Собственный RUM на библиотеке web-vitalsПолеМетрики в разрезе шаблона страницы, устройства, региона и версии релиза; данные без задержкиПричину на уровне конкретного ресурса — нужен параллельный лабораторный прогонПродуктовая команда, которая уже прошла базовую оптимизацию
Синтетический мониторинг по расписаниюЛаборатория, регулярноТренд и алерт на регресс: видно, какой релиз ухудшил метрикуОпыт конкретного пользователя и редкие тяжёлые сценарииКоманда, которой нужен контроль после каждого релиза
curl и CLI-утилитыЛаборатория, точечноTTFB, заголовки, сжатие, редиректы — без браузера, легко встроить в CIРендер, выполнение JS, layout shifts, любые визуальные метрикиАдминистратор и DevOps, проверка серверной части
Чего не делает ни один из них. Ни один инструмент не скажет, теряете ли вы деньги из-за скорости. Связку «метрика — конверсия» строят только на своих данных: RUM плюс аналитика, сегментация по LCP и сравнение конверсии между сегментами. Все публичные цифры «ускорение на секунду даёт X процентов» — чужие кейсы, к вашему сайту неприменимые.

Как читать водопад запросов

Водопад (waterfall) — временная диаграмма, где каждая строка это один сетевой запрос, а длина полосы — время его жизни. Полоса разбита на фазы: ожидание в очереди, DNS, установка TCP-соединения, TLS-рукопожатие, ожидание ответа сервера и собственно загрузка тела. Читать её нужно сверху вниз и слева направо.

Что искать, по убыванию частоты находок:

  • Длинная фаза ожидания у самого первого запроса. Это TTFB главного документа. Пока он не закончился, браузер не знает вообще ничего о странице. Диагностика — в разделе про высокую нагрузку на сервер.
  • Редиректы перед основным документом. Каждый редирект — это лишний полный цикл DNS, TCP и TLS. Цепочка «http → https → www → с завершающим слешем» стоит сотен миллисекунд на мобильном канале.
  • Блокирующие ресурсы в head. Синхронные <script> и внешние CSS откладывают первую отрисовку. В водопаде это выглядит как пустая полоса до FCP, забитая парой файлов.
  • Цепочки зависимостей. HTML грузит CSS, CSS через @import грузит второй CSS, тот подтягивает шрифт. Каждое звено — ещё один круг по сети. Ищите ступеньки в водопаде.
  • Шрифты. Веб-шрифт, найденный только после разбора CSS, задерживает текст. Признак — полоса шрифта начинается заметно позже старта страницы.
  • Отсутствие сжатия. Текстовый файл (CSS, JS, JSON, SVG, HTML) с подозрительно большим размером и без заголовка content-encoding. Разбор — в гайде по gzip и brotli.
  • Изображения впереди LCP-элемента. Если браузер сначала грузит десять карточек ниже сгиба, а героическое изображение стоит в очереди двенадцатым, LCP будет плохим при любом весе файла. Рецепты — в материале про оптимизацию изображений.
  • Сторонние домены. Каждый новый хост — это отдельные DNS, TCP и TLS. Пять аналитик означают пять таких циклов.
Водопад загрузки страницы с подсветкой TTFB, редиректов и блокирующих рендер ресурсов
В водопаде видно, что именно стоит между открытием страницы и первой отрисовкой.

Как измерить TTFB, сжатие и кэш-заголовки из терминала

Браузерные инструменты смешивают серверное время с рендером. Когда нужно понять, тормозит сервер или фронтенд, TTFB меряют отдельно. Самый прямой способ — curl с полным разложением тайминга по фазам.

# файл формата: один раз создаём рядом со скриптом
cat > curl-format.txt <<'EOF'
dns_lookup   %{time_namelookup}s
tcp_connect  %{time_connect}s
tls_done     %{time_appconnect}s
redirects    %{time_redirect}s
ttfb         %{time_starttransfer}s
total        %{time_total}s
http_code    %{http_code}
size         %{size_download} bytes
EOF

# один замер с полным таймингом
curl -s -o /dev/null -w "@curl-format.txt" https://example.com/

Как читать вывод:

  • time_namelookup — разрешение имени. Стабильно больше 50 мс означает проблему с DNS-хостингом или отсутствие кэша резолвера.
  • time_connect минус time_namelookup — установка TCP. Это чистая сетевая задержка до сервера, примерно один круг.
  • time_appconnect минус time_connect — TLS-рукопожатие. Обычно ещё один-два круга; на HTTP/2 с возобновлением сессии дешевле.
  • time_starttransfer минус time_appconnectчистое время генерации ответа приложением. Именно эту величину имеет смысл нести разработчику бэкенда.
  • time_total минус time_starttransfer — скачивание тела. Растёт вместе с весом страницы и падает при включении сжатия.

Один замер ничего не значит. Считаем медиану по серии:

# десять замеров TTFB подряд, вывод отсортирован, снизу медиана
for i in $(seq 1 10); do
  curl -s -o /dev/null -w "%{time_starttransfer}\n" https://example.com/
done | sort -n | awk '{v[NR]=$1} END {
  printf "min %.3f  median %.3f  max %.3f\n", v[1],
    (NR%2 ? v[(NR+1)/2] : (v[NR/2]+v[NR/2+1])/2), v[NR] }'

Проверка сжатия и кэш-заголовков для конкретного ресурса. Важно явно попросить сжатие заголовком Accept-Encoding — без него сервер честно отдаст несжатый файл, и вы решите, что сжатие выключено:

# смотрим только заголовки ответа для CSS-файла
curl -s -o /dev/null -D - \
  -H 'Accept-Encoding: br, gzip' \
  https://example.com/assets/app.css \
  | grep -i -E 'content-encoding|content-length|content-type|cache-control|etag|last-modified|vary|age|x-cache|cf-cache-status'

# сравнить размер со сжатием и без
curl -s -o /dev/null -w 'plain  %{size_download} bytes\n' \
  https://example.com/assets/app.css
curl -s -o /dev/null -w 'brotli %{size_download} bytes\n' \
  -H 'Accept-Encoding: br' https://example.com/assets/app.css

На что смотреть в заголовках: наличие content-encoding со значением br или gzip для всех текстовых типов; cache-control с длинным max-age и immutable для статики с хешем в имени; vary с упоминанием Accept-Encoding, иначе прокси может раздать сжатый ответ клиенту, который сжатие не понимает. Быстрая проверка всего набора сразу — инструментом проверки HTTP-заголовков.

Наконец, лабораторный прогон можно запускать не только кнопкой в браузере. Lighthouse ставится как CLI-утилита и встраивается в CI:

# установка (нужен Node.js и установленный Chrome)
npm install -g lighthouse

# мобильный прогон по умолчанию, отчёт в HTML
lighthouse https://example.com/ \
  --output html --output-path ./report-mobile.html \
  --chrome-flags="--headless --no-sandbox" --quiet

# десктопный профиль без троттлинга процессора
lighthouse https://example.com/ \
  --preset desktop \
  --output json --output-path ./report-desktop.json \
  --chrome-flags="--headless" --quiet

# пять прогонов подряд, чтобы потом взять медиану балла
for i in 1 2 3 4 5; do
  lighthouse https://example.com/ --quiet --chrome-flags="--headless" \
    --output json --output-path "./run-$i.json"
  node -e "const r=require('./run-'+process.argv[1]+'.json');
    console.log(Math.round(r.categories.performance.score*100))" "$i"
done
Ограничение. curl не выполняет JavaScript, не строит DOM и не рисует пиксели. Он честно ответит на вопрос «быстро ли сервер отдаёт байты» и ничего не скажет про LCP, CLS и INP. Не подменяйте браузерный замер терминальным — они отвечают на разные вопросы.

География проверки, CDN и почему точка замера меняет цифры

Скорость сайта не абсолютна: она измеряется из конкретной точки планеты. Между Москвой и Франкфуртом порядка 40–60 мс в одну сторону, между Москвой и Западным побережьем США — заметно больше. Каждое сетевое рукопожатие умножает эту задержку.

Что из этого следует:

  • PageSpeed Insights гоняет прогон из инфраструктуры Google, а не из вашего города. Для сайта с российской аудиторией лабораторная часть PSI даёт систематически иную сетевую картину, чем видят посетители. Полевая часть при этом корректна: она собрана там, где живут пользователи.
  • WebPageTest и GTmetrix позволяют выбрать регион прогона. Это их сильная сторона: выбирайте локацию, максимально близкую к вашей реальной аудитории, и фиксируйте её навсегда, чтобы история была сравнимой.
  • CDN превращает один сайт в много разных сайтов. Посетитель из Новосибирска и посетитель из Берлина попадают на разные узлы с разным состоянием кэша. Промах кэша на далёком узле означает поход до origin через полмира.
  • Первый прогон после деплоя почти всегда медленный: кэш CDN пуст. Не делайте выводов по нему.

Проверить конкретный узел CDN и отделить его от origin можно, подменив разрешение имени:

# замер через конкретный IP (узел CDN или сам origin)
curl -s -o /dev/null \
  -w "ttfb %{time_starttransfer}s  total %{time_total}s\n" \
  --resolve example.com:443:203.0.113.10 \
  https://example.com/

# показать, попал ли запрос в кэш узла
curl -s -o /dev/null -D - https://example.com/assets/app.js \
  | grep -i -E 'age|x-cache|cf-cache-status|x-served-by|server-timing'

Заголовок age с ненулевым значением и статус попадания в кэш означают, что ответ пришёл с узла. Нули и постоянные промахи говорят, что кэширование настроено неправильно — тогда CDN добавляет лишний хоп и делает хуже.

Регулярность: тренд и алерт на регресс вместо разового прогона

Разовая проверка скорости почти бесполезна. Разброс между прогонами часто больше, чем эффект от аккуратной правки, а деградация приходит не одним обвалом, а десятком мелких шагов: новый скрипт чата, дополнительный пиксель, «временный» баннер, картинка, залитая маркетологом без сжатия.

Рабочая схема выглядит так:

  • Синтетика по расписанию. Одна и та же страница, один и тот же профиль, несколько раз в сутки. Хранить историю. Цель — тренд, а не абсолютное число.
  • Алерт на изменение, а не на порог. Порог «LCP больше 2,5 с» будет либо всегда молчать, либо всегда орать. Полезнее алерт «медиана за сутки ухудшилась больше чем на 20% относительно прошлой недели».
  • Бюджет производительности. Заранее зафиксированные лимиты: вес страницы, число запросов, объём JS, TBT. Нарушение бюджета ломает сборку в CI — дешевле, чем чинить после релиза.
  • Лабораторный прогон на каждый pull request. Lighthouse CLI из примера выше запускается в пайплайне на превью-окружении. Сравнивать нужно с базовой веткой, а не с абсолютным порогом.
  • RUM как источник правды. Синтетика ловит регресс быстро, поле подтверждает, что регресс реален для людей. Как это устроено — в гайде по real user monitoring.
  • Привязка к релизам. Отмечайте деплои на графике метрик. Тогда вопрос «когда сломалось» превращается в вопрос «какой релиз это сделал», а он решается за минуту.
Практика. Заводите отдельный монитор на каждый тип страницы: главная, категория, карточка товара, статья, форма оформления заказа. Они деградируют независимо, и общий средний показатель по сайту скрывает падение самой денежной страницы.
График тренда LCP по датам с отметками релизов и сработавшим алертом на регресс
Ценность даёт не одна точка, а линия: видно, какой релиз ухудшил метрику.

Что делать с результатом

Отчёт инструмента — это список симптомов. Ниже — короткая маршрутизация от симптома к причине и к материалу с разбором. Порядок не случайный: он идёт от самых дешёвых правок к самым дорогим.

Как проверить скорость сайта инструментами enterno.io

  • Проверка скорости сайта — лабораторный прогон с разбивкой по метрикам и списком проблем. Точка входа: делаете три-пять прогонов, берёте медиану.
  • Проверка HTTP-заголовков — есть ли сжатие, корректен ли cache-control, нет ли лишних редиректов и не отдаёт ли сервер статику без кэша.
  • Анализ HAR-файла — выгружаете водопад из DevTools и разбираете его по запросам: кто блокирует рендер, где длинные цепочки, что весит больше всего.
  • Скриншот страницы — как страница выглядит в момент загрузки для внешнего наблюдателя; помогает поймать невидимый текст из-за шрифта и пустой первый экран.
  • Мониторинг сайта — регулярные проверки по расписанию и оповещения, когда метрика ухудшилась после релиза. Без этого шага все предыдущие превращаются в разовый ритуал.

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

Проверка скорости интернета и проверка скорости сайта — это одно и то же?

Нет, это два разных измерения, и их постоянно путают. Спидтест интернет-провайдера (в том числе фирменные проверки операторов связи) измеряет пропускную способность вашего канала до ближайшего сервера провайдера: сколько мегабит в секунду и какой пинг. Он ничего не знает про конкретный сайт. Проверка скорости сайта измеряет, как быстро отвечает сервер этого сайта и как быстро страница отрисовывается в браузере. Если у вас медленно открывается любой сайт — вам нужен спидтест канала. Если медленно открывается один конкретный сайт при нормальном интернете — нужен тест скорости сайта.

Почему PageSpeed Insights показывает 95, а сайт всё равно «тормозит»?

Скорее всего, вы смотрите на лабораторный балл, а жалобы касаются отзывчивости. Балл Lighthouse не включает INP — метрику реакции на действия пользователя. Тяжёлые обработчики событий и длинные задачи JavaScript могут делать интерфейс липким при отличном балле. Второй вариант: вы гоняете лёгкую главную, а тормозит каталог или личный кабинет. Откройте полевую часть отчёта: если там INP красный, дело в JavaScript.

Почему два прогона подряд дают разные баллы?

Это нормальный разброс. Он складывается из загруженности машины, на которой идёт прогон, симулированного троттлинга, ротации баннеров и A/B-тестов на вашем сайте, состояния кэша CDN и поведения сторонних доменов. Разница в 5–15 баллов между прогонами неизменной страницы — ожидаемая величина. Делайте не меньше пяти прогонов и берите медиану, а не последнее значение.

FID ещё нужно улучшать?

Нет. FID выведен из состава Core Web Vitals весной 2024 года, его место занял INP. FID измерял только задержку до начала обработки первого взаимодействия и был слишком снисходительным: страница могла иметь отличный FID и при этом заметно тормозить при каждом клике. INP смотрит на всё взаимодействие целиком и берёт худший случай за визит. Если ваш чек-лист или плагин до сих пор говорит про FID, он устарел.

Какая скорость загрузки сайта считается нормальной?

Правильнее говорить не про «время загрузки», а про конкретные метрики. Ориентиры: LCP до 2,5 с, INP до 200 мс, CLS до 0,1, TTFB до 0,8 с — по 75-му перцентилю реальных загрузок, отдельно для мобильных и десктопных пользователей. Единая цифра «страница должна грузиться за 3 секунды» ничего не означает: непонятно, чем измерено, на каком устройстве и до какого события.

Нужен ли платный инструмент проверки скорости?

Для разовой диагностики — нет: бесплатных возможностей PageSpeed Insights, Lighthouse в DevTools и WebPageTest хватает с запасом. Платить обычно начинают за две вещи: регулярность (прогоны по расписанию, длинная история, алерты) и полевые данные по собственной аудитории, которых нет в публичных наборах. Если вы делаете разовую оптимизацию — бесплатных инструментов достаточно; если поддерживаете сайт постоянно — нужен мониторинг.

Можно ли ориентироваться на балл при выборе подрядчика?

Осторожно. Балл легко накрутить локально: отключить сторонние скрипты для агента проверки, отдать облегчённую версию по User-Agent, спрятать тяжёлые блоки за взаимодействием. Проверять нужно по полевым Core Web Vitals в Search Console и по своему RUM — их накрутить нельзя, потому что они снимаются у реальных пользователей. Требуйте отчёт по LCP и INP за месяц, а не скриншот кружка.

Чеклист проверки скорости сайта

  • Разделили лабораторные и полевые данные и понимаете, какой вопрос закрывает каждый источник.
  • Смотрите LCP, INP и CLS, а не только итоговый балл; знаете, что INP пришёл на смену FID.
  • Меряете не меньше пяти прогонов и берёте медиану, а не последнее значение.
  • Профиль замера зафиксирован: устройство, троттлинг, регион, один и тот же URL.
  • Мобильные и десктопные результаты не смешиваете.
  • Прогон идёт с холодным кэшем, в чистом профиле браузера, на продакшен-сборке, без залогиненного администратора.
  • TTFB измерен отдельно через curl -w, и вы отделяете сетевую задержку от времени генерации ответа.
  • Проверили, что текстовые ресурсы отдаются сжатыми, а у статики корректный cache-control.
  • Регион прогона соответствует реальной географии аудитории; для сайта за CDN проверено попадание в кэш узла.
  • Настроен регулярный мониторинг с алертом на ухудшение относительно прошлой недели, а не на абсолютный порог.
  • Мониторится не одна главная, а каждый ключевой тип страницы.
  • Результаты привязаны к релизам, чтобы искать причину регресса за минуту, а не за день.

Проверьте ваш сайт прямо сейчас

Проверить скорость сайта →
Другие статьи: Производительность
Производительность
Latency и Throughput: ключевые метрики производительности сети
16.03.2026 · 338 просм.
Производительность
Graceful Degradation и Progressive Enhancement: стратегии и практические примеры
16.03.2026 · 274 просм.
Производительность
Что такое CDN: как работает, зачем нужен и как проверить
11.03.2026 · 234 просм.
Производительность
Метрики производительности API
14.03.2026 · 214 просм.