Как исправить CLS и скачки макета
Cumulative Layout Shift растёт, когда видимый контент неожиданно меняет положение без действия пользователя. Главная задача — зарезервировать место и не вставлять элементы над уже отображённым контентом.
Чеклист диагностики
Отметьте пункты, которые уже проверили.
Диагностика CLS: размеры изображений, реклама, баннеры, шрифты, анимации, late content и проверка layout shifts в DevTools и CrUX.
Найдите конкретные layout shifts
Используйте DevTools Performance и раздел Layout Shifts, чтобы увидеть время, затронутые узлы и shift score. Lighthouse даёт лабораторный сценарий, но полевой CLS может возникать после загрузки рекламы, consent-баннера или пользовательского состояния.
Проверьте несколько viewport и длинную сессию. CLS может появиться при прокрутке, открытии блока или позднем ответе API, даже если первый экран выглядит стабильным.
Резервируйте размеры медиа и виджетов
У изображений и видео задавайте width/height или aspect-ratio, чтобы браузер выделил место до загрузки. Для iframe, карты, рекламы и embed создайте контейнер с предсказуемой высотой.
Если размер рекламы динамический, зарезервируйте максимальный разумный слот или изменяйте его только вне viewport. Пустое место обычно менее вредно, чем скачок читаемого текста.
Мониторинг покажет, когда состояние изменится
Добавьте сайт или сервер один раз — perfMon будет проверять его автоматически, сохранит историю и сообщит о сбое и восстановлении.
Не вставляйте контент сверху
Cookie-баннер, акция или системное сообщение не должны внезапно сдвигать страницу. Используйте overlay, заранее выделенное место или показывайте блок до первой отрисовки, если это возможно и корректно.
Изменения после пользовательского действия могут не учитываться как неожиданный shift в ограниченном окне, но UX всё равно важен. Анимации делайте через transform и opacity, а не свойства, запускающие layout.
Стабилизируйте шрифты и компоненты
Web font может изменить размеры текста после загрузки. Подберите совместимый fallback, настройте font-display и используйте metric overrides, если различие заметно. Не preload все начертания — это создаёт конкуренцию.
Skeleton должен совпадать с итоговой геометрией карточки. Если загрузка данных меняет число строк или высоту, задайте минимальный размер или проектируйте переход без сдвига соседнего контента.
Автоматизируйте проверку, описанную в статье
Разовая диагностика помогает сейчас. Регулярный мониторинг нужен, чтобы не пропустить повторение проблемы.
Настроить бесплатноПрименить на практике
Частые вопросы
Короткие ответы на вопросы, которые обычно возникают при диагностике.
Какой CLS считается хорошим?
Хороший p75 CLS — не более 0,1; 0,1–0,25 требует улучшения, выше 0,25 считается слабым.
Почему Lighthouse показывает 0, а CrUX плохой?
Лабораторный запуск может не воспроизвести рекламу, авторизацию, consent, длинную сессию или поздние API-блоки реальных пользователей.
Можно убрать CLS с помощью min-height?
Иногда, если он резервирует корректную геометрию. Слепой большой min-height создаст пустоты и не решит источник динамического размера.
Не ждите следующего сообщения «сайт не работает»
Добавьте первый сайт или сервер: perfMon будет проверять состояние автоматически, сохранит историю и уведомит ответственных.