CLS
CLS (Cumulative Layout Shift) — метрика Core Web Vitals: сдвиг layout-а страницы. Бенчмарк ≤0.1. Причины и способы оптимизации.
CLS (Cumulative Layout Shift) — безразмерная метрика из набора Core Web Vitals, которую Google измеряет для оценки визуальной стабильности страницы. Она фиксирует суммарный сдвиг всех видимых элементов во время загрузки и в течение всей жизни страницы. Чем неожиданнее смещается контент прямо под пальцами или курсором пользователя — тем выше CLS и тем хуже оценка в Search Console и PageSpeed Insights.
Определение и бенчмарк
CLS вычисляется как сумма произведений impact fraction (доля экрана, задетая сдвигом) на distance fraction (расстояние перемещения относительно высоты viewport) по всем сессиям нестабильности. Результат — безразмерное число от 0 и выше.
Пороговые значения Google:
- ≤ 0.1 — Good. Страница визуально стабильна, пользователь не теряет место в тексте и не промахивается по кнопкам.
- 0.1–0.25 — Needs Improvement. Сдвиги есть, но не критичные. Google учитывает это при ранжировании.
- > 0.25 — Poor. Заметные прыжки контента, негативный сигнал для поиска и конверсии.
В отличие от LCP и INP, у CLS нет единицы измерения — это не секунды и не миллисекунды, а коэффициент нестабильности layout-а.
Причины сдвига layout
Большинство проблем с CLS возникают по четырём типовым причинам:
- Изображения без явных размеров. Если тег
<img>не имеет атрибутовwidthиheight, браузер не знает, сколько места зарезервировать до загрузки файла. Когда картинка наконец приходит, она «раздвигает» весь нижележащий контент. На страницах QRkoder это особенно критично для обложек статей и превью QR-кодов в галерее. - Динамически вставляемые баннеры и реклама. Блоки, добавляемые в DOM после первоначальной отрисовки без зарезервированного места, сдвигают соседние элементы. Это главный источник высокого CLS на контентных сайтах с монетизацией.
- Веб-шрифты: FOUT и FOIT. Пока кастомный шрифт загружается, браузер показывает системный. Когда шрифт прибывает (FOUT — flash of unstyled text) или появляется из невидимости (FOIT), высота строк и межбуквенные расстояния меняются, из-за чего текстовые блоки смещаются.
- Поздняя вставка элементов в DOM. Виджеты чата, всплывающие уведомления о cookie, карусели, которые инициализируются по JS после hydration — все они могут резко «вдвинуть» блок в поток, не давая браузеру зарезервировать место заранее.
Оптимизация CLS
Снижение CLS до уровня Good (≤ 0.1) достигается предсказуемым резервированием пространства:
- Явные
widthиheightна всехimgиiframe. Это позволяет браузеру вычислить аспектное соотношение ещё до загрузки файла. Современная альтернатива — CSS-свойствоaspect-ratio:aspect-ratio: 16 / 9на контейнере изображения. Работает даже для отзывчивых картинок сwidth: 100%. font-display: optionalилиfont-display: swap. Значениеoptionalпозволяет браузеру не применять кастомный шрифт, если он не загрузился достаточно быстро — пользователь видит стабильный системный шрифт без прыжка. Значениеswapдопускает замену, но оформляет её плавно. Оба варианта лучше поведения по умолчанию, при котором браузер ждёт шрифт без тайм-аута.- Резервирование пространства для динамических блоков. Если баннер, реклама или виджет появится позже — заранее задайте
min-heightна контейнер-заглушку. Когда содержимое подгрузится, контейнер уже занимал нужное место и сдвига не произойдёт. - Вставка динамических элементов вне потока документа. Всплывающие уведомления, тосты, чат-пузыри лучше позиционировать через
position: fixedилиposition: absolute— они не участвуют в обычном flow и не сдвигают соседний контент.
Частые вопросы
Почему CLS важен именно для QR-страниц и лендингов?
Пользователь переходит по QR-коду с мобильного, ожидая быстрого действия: купить, записаться, получить контакт. Если после клика страница «прыгает» и кнопка уходит вниз прямо перед нажатием, пользователь либо попадает не туда, либо уходит. Высокий CLS прямо конвертируется в потерянные конверсии, поэтому для лендингов под QR-трафик значение ≤ 0.1 особенно критично.
Как измерить CLS своей страницы?
Три основных инструмента: Google PageSpeed Insights — вставьте URL и получите реальный CLS из данных Chrome UX Report плюс лабораторное значение Lighthouse; Google Search Console → раздел «Основные интернет-показатели» — там агрегированный CLS по всем страницам сайта из полевых данных реальных пользователей; расширение Web Vitals для Chrome — показывает CLS в реальном времени при прокрутке страницы. Лабораторные значения (PageSpeed, Lighthouse) могут отличаться от полевых: браузер в лаборатории не кэширует шрифты и ресурсы.
Чем CLS отличается от LCP и INP?
LCP (Largest Contentful Paint) измеряет скорость загрузки главного элемента страницы в секундах. INP (Interaction to Next Paint) фиксирует задержку отклика на взаимодействия пользователя в миллисекундах. CLS не связан со временем — это коэффициент геометрического смещения контента. Все три метрики входят в Core Web Vitals и совместно формируют сигнал качества страницы для ранжирования Google. Улучшение одной из них не компенсирует провал в другой.
Влияет ли CLS на SEO напрямую?
Да, с 2021 года Core Web Vitals (включая CLS) являются официальным фактором ранжирования Google в рамках Page Experience Update. Страницы со статусом Good по всем трём метрикам получают небольшой бонус к позициям при прочих равных. Яндекс также учитывает скорость и стабильность страницы в своих алгоритмах, хотя публично не раскрывает точный вес CLS. Кроме SEO, низкий CLS напрямую улучшает конверсию: пользователи реже промахиваются по интерактивным элементам.
Что считается «хорошим» CLS для мобильных страниц?
Google применяет единый порог ≤ 0.1 для десктопа и мобильных. На мобильных устройствах CLS обычно выше из-за медленного соединения (ресурсы приходят с задержкой, вызывая больше последовательных сдвигов) и меньшего viewport (тот же пиксельный сдвиг составляет большую долю экрана). Поэтому оптимизацию следует начинать с мобильного профиля в PageSpeed Insights — если там Good, десктоп почти наверняка тоже пройдёт порог.