Оптимизация изображений на сайте: автосжатие, WebP/AVIF, ленивая загрузка и CDN

Выгода от оптимизации изображений на сайте — не расплывчатое «сайт станет быстрее», а LCP (Largest Contentful Paint) с 6 секунд до 2,5 секунды, что напрямую удерживает порог Core Web Vitals. Главное...

图片优化流水线:从原图到WebP/AVIF的五级压缩链Image pipeline: five-stage compression from raw upload to WebP/AVIF 首页图超过200KB,再怎么调CSS都救不回LCPIf the hero image is over 200KB, no CSS tweak will rescue LCP 阶段Stage 动作Action 目标体积Target size 1 裁剪1. Resize 按显示宽度2倍出图2x display width banner≤1920宽banner ≤1920w 2 压缩2. Compress JPEG质量75至82JPEG q75-82 缩略图≤100KBthumb ≤100KB 3 格式3. Modern format WebP+AVIF双格式WebP + AVIF fallback 再减25%至50%体积-25% to 50% vs JPEG 4 懒加载4. Lazy load 首屏外全部loading=lazybelow-the-fold lazy 首屏图必须eagerabove-fold eager 核心指标:LCP图≤200KB · 首屏图预加载 · 总图片字节≤1MBCore: LCP image ≤200KB · hero preload · total images ≤1MB CDN自动格式协商按Accept头回WebP/AVIF,源站只存原图和JPEGCDN negotiates by Accept header; origin keeps originals + JPEG 红线:把首屏banner也设lazy —— LCP直接崩到6秒以上Red line: lazy-loading the hero — LCP breaks past 6s 不要为了体积把图片质量压到肉眼可见模糊,转化率会跟着掉Don’t crush quality below visible blur — CVR drops with image
Пять этапов оптимизации изображений: обрезка, сжатие, современные форматы, ленивая загрузка, раздача через CDN

Оптимизация изображений на сайте: автосжатие, WebP/AVIF, ленивая загрузка и CDN

Сначала вывод: Выгода от оптимизации изображений на сайте — не расплывчатое «сайт станет быстрее», а LCP (Largest Contentful Paint) с 6 секунд до 2,5 секунды, что напрямую удерживает порог Core Web Vitals. Четыре главных правила: баннер первого экрана — до 200 КБ, все изображения на сайте в WebP/AVIF с фолбэком, всё ниже первого экрана — на ленивой загрузке, на сервере хранятся только оригиналы и JPEG, а согласование форматов берёт на себя CDN. Контринтуитивный вывод: ставить ленивую загрузку на баннер первого экрана — самая частая ошибка, которая бьёт по себе: LCP сразу падает до 6 секунд и больше.

1. Почему изображения — главный убийца производительности сайта

По данным HTTP Archive, изображения занимают более 50% общего объёма передачи средней веб-страницы, а на B2B-сайтах из-за плотности продуктовых фото, кейсов и фото с производства эта доля часто доходит до 60–70%. Текст и CSS вместе могут весить всего 100 КБ, но один несжатый баннер продукта — уже 2–3 МБ.

Самая частая ошибка команд сайтов: дизайнер выгружает оригинал из PSD и заливает его прямо в WordPress без уменьшения размера, а тема не генерирует WebP. В итоге на странице товара висят 8 изображений по 2 МБ. На мобильном 3G только изображения грузятся 30 секунд, и посетитель закрывает страницу ещё до того, как они появятся. Как управлять медиаактивами — см.Управление медиаактивами. Как определить порог Core Web Vitals — см.Оптимизация Core Web Vitals.

Частая проблема с изображениями Влияние на производительность Приоритет исправления
Загрузка оригинала без уменьшения размера Одно изображение 2–3 МБ, LCP сразу превышает норму Наивысший, заняться на этой неделе
Только JPEG без WebP При том же качестве объём больше на 30–50% Высокий, в течение двух недель
Ленивая загрузка на баннере первого экрана Задержка LCP на 1–2 секунды Наивысший, исправить немедленно
Нет атрибутов width/height CLS (совокупное смещение макета) Средний, вместе с обновлением темы
Изображения идут мимо CDN Обращение к серверу через океан медленнее на 1–3 секунды Высокий, вместе с настройкой CDN

2. Автосжатие: четыре линии, которые работают при загрузке

Сжатие изображений не должно ложиться на ручную работу оператора — оно должно происходить автоматически при загрузке. В экосистеме WordPress есть три готовых пути: Smush, ShortPixel, Imagify — все сжимают автоматически при загрузке и генерируют WebP, годовая подписка от 50 до 100 долларов. Если на сайте меньше 500 изображений в год, хватит самого дешёвого тарифа.

Опытные значения качества сжатия: JPEG с качеством 75–82 — это баланс между видимым качеством и весом файла. Ниже 70 появляются артефакты и зубцы, выше 85 выигрыш в весе становится минимальным. PNG с прозрачностью сжимайте квантованием до палитры 16–32 цветов — вес падает более чем на 60%. Конкретный пример: фото цеха в JPEG с качеством 78 и шириной 1920 после экспорта обычно весит 150–220 КБ; если больше 300 КБ — значит, проблема в кадрировании или в выбранном уровне качества. Как выбрать CDN — см.Сравнение вариантов CDN.

Тип изображения Рекомендуемый формат Целевой вес Макс. ширина
Баннер/hero на первом экране WebP + JPEG для отката 150–200 КБ 1920px
Главное фото товара WebP + JPEG для отката 80–120 КБ 1200px
Миниатюра товара WebP 15–30 КБ 300px
Иллюстрация к кейсу/статье WebP 80–150 КБ 1200px
Иконка/логотип SVG или маленький PNG до 5 КБ 2× от размера отображения
Скриншот/изображение с текстом PNG без сжатия качества можно до 200 КБ 2× от ширины отображения

III. Как настроить WebP/AVIF: тег picture и автосогласование на CDN

WebP поддерживают Chrome/Edge/Firefox/Safari 14 и выше — покрытие уже более 95%. AVIF сжимает ещё на 20–30% сильнее WebP, но поддержка в Safari появилась только с 16.4, а кодирование медленное — подходит для пакетной предварительной генерации статичных изображений. Независимому сайту не нужно писать AVIF вручную: пусть CDN при обращении к источнику автоматически перекодирует по заголовку Accept — так проще.

Два пути реализации. Первый — автосогласование на уровне CDN: Cloudflare, Cloudinary и Fastly умеют по заголовку Accept автоматически отдавать WebP или AVIF, а на источнике хранятся только JPEG/PNG — от оператора ничего не требуется. Второй — явное объявление через тег picture во фронтенде, подходит для небольших сайтов без CDN. Контринтуитивный вывод:не перекодируйте все изображения ради погони за AVIF. Кодирование AVIF занимает в 5–10 раз больше времени, чем WebP, и если у вас меньше 500 изображений, затраты не оправданы. Как настроить глобальное ускорение — см.Глобальное ускорение CDN.

Подход Как реализуется Поддержка в браузерах Годовая стоимость Когда подходит
Автоконвертация на CDN Cloudflare/Cloudinary отдают формат по заголовку Accept 95%+ с автооткатом входит в стоимость CDN Выбор большинства независимых сайтов
Два формата через тег picture Вручную <picture> + WebP/JPEG ручное управление 0 долларов Небольшие сайты без CDN
Автогенерация плагином WordPress ShortPixel/Smush создают WebP-копии 95%+ 50–100 долларов в год Сайты на WordPress
Предварительная генерация AVIF для всего сайта Пакетная конвертация в AVIF при сборке около 85% высокая стоимость кодирования Брендовые сайты с числом изображений <500
Только JPEG без современных форматов 100 % 0 долларов по-прежнему не рекомендуется — проигрыш в весе

IV. srcset и адаптивные изображения: не заставляйте телефон скачивать десктопную картинку

Одного сжатия мало — нужно ещё, чтобы браузер выбирал изображение под размер экрана. Баннер шириной 1920px на телефоне отображается всего на 375px, но всё равно скачивается на 200 КБ — это потеря 70% трафика. Правильный подход — объявить несколько размеров через srcset+sizes, и браузер сам выберет подходящий по плотности пикселей и ширине вьюпорта.

WordPress при загрузке автоматически создаёт несколько промежуточных размеров (thumbnail, medium, large), но тема не обязательно выводит их через srcset в шаблоне. Конкретный способ проверки: откройте Chrome DevTools Network и посмотрите, какой URL картинки баннера на главной реально скачивается. Если всегда 1920px — значит srcset не работает. Самое дешёвое исправление — включить add_image_size в functions.php темы и заставить the_post_thumbnail выводить srcset, вручную прописывать теги не нужно.

Точка перелома Рекомендуемая ширина вывода Зачем нужен
Мобильный портрет 640px Списки и статьи на мобильных
Планшет портрет 1024px Планшеты и небольшие десктопы
Десктоп 1920px Баннеры и широкие изображения
Retina 2x Ширина отображения ×2 Без размытия на HiDPI

Пять. Ленивая загрузка: всё за пределами первого экрана — lazy, изображения первого экрана — обязательно eager

Нативная ленивая загрузка уже зрелая, её поддерживают Chrome, Firefox и Safari 15.4+. Правило простое: изображения в первом экране (обычно баннер и первая картинка товара) должны иметь loading=”eager”, все остальные — loading=”lazy”. WordPress с версии 5.5 по умолчанию ставит lazy картинкам в контенте, но баннер первого экрана, прописанный в теме жёстко, нужно вручную переключить на eager.

Самая частая ошибка — ради «оптимизации производительности» поставить lazy и на баннер первого экрана. В итоге браузер ждёт, пока HTML дойдёт до тега картинки, и только тогда начинает запрос, а LCP-элемент откладывается на 1–2 секунды. Правильно — предзагрузить баннер первого экрана через <link rel=”preload” as=”image”> и оставить атрибуты width/height, чтобы не было CLS. Конкретная настройка: для hero-картинки главной добавить в head <link rel=”preload” as=”image” href=”hero.webp” fetchpriority=”high”> — это сожмёт LCP ещё на 0,5 секунды. Про кэширование на сайте читайте в разделе Стратегия кэширования сайта.

Расположение изображения Атрибут loading fetchpriority preload
Hero/баннер первого экрана eager (без lazy) high Обязательно rel=preload
Главное фото товара в первом экране eager high или auto preload по ситуации
Картинки в статьях ниже первого экрана lazy low или не указывать Не добавлять
Миниатюры в списках lazy Не указывается Не добавлять
Футер/логотип/декоративные картинки lazy low Не добавлять

Шесть. Приёмка: смотрим через Lighthouse и RUM

Закончив оптимизацию изображений, нельзя смотреть только на оценку Lighthouse: лабораторные данные расходятся с данными реальных пользователей. Lighthouse проверяет три вещи: все ли зелёные аудиты «неоптимизированные изображения», «изображения правильного размера» и «современные форматы». Реальные данные смотрите в CrUX (Chrome User Experience Report) или Cloudflare RUM — по 75-му процентилю LCP, а не по среднему. Среднее занижают несколько быстрых пользователей, а 75-й процентиль отражает реальные ощущения большинства посетителей.

Рабочий чек-лист приёмки: LCP-картинка главной ≤200KB, 100% изображений за пределами первого экрана — lazy, у всех картинок есть width/height, покрытие WebP/AVIF ≥90%, общий вес картинок на странице ≤1MB. Не проходит — возвращайтесь к нужному разделу и правьте. Оптимизация PHP и базы данных — отдельная тема, смотрите Обновление версии PHP и Оптимизация медленных запросов к базе данных.

Критерий приёмки Критерий Инструмент измерения Что делать, если не проходит
Размер LCP-изображения ≤200 КБ Lighthouse/DevTools Сжать или обрезать
Покрытие WebP/AVIF ≥90% Проверить заголовки ответа в DevTools Network Включить автотранскодинг в CDN
Покрытие ленивой загрузкой 100% за пределами первого экрана Проверить атрибут loading в коде Заменить в шаблоне массово
Указание размеров изображений 100% с width/height Аудит CLS в Lighthouse Добавить атрибуты в тему массово
Общий вес изображений на странице ≤1 МБ DevTools Network Удалить лишние изображения или объединить в спрайт
75-й процентиль LCP ≤2,5 секунды CrUX/Cloudflare RUM Понять, проблема в изображениях или в шрифтах

FAQ: частые вопросы

WebP или AVIF — что выбрать?
Начните с WebP: его поддерживают более 95% браузеров, кодируется быстро, экосистема зрелая. AVIF даёт ещё на 20–30% меньше, но Safari поддерживает его только с версии 16.4, а кодирование занимает в 5–10 раз дольше, чем WebP. Брендовый сайт с менее чем 500 изображений может полностью перейти на AVIF, а сайтам с большим объёмом изображений стоит настроить автоматическое согласование на CDN по заголовку Accept и хранить на сервере только JPEG — не кодируйте AVIF вручную.
Можно ли ставить ленивую загрузку на баннер первого экрана?
Ни в коем случае. Баннер первого экрана обычно и есть LCP-элемент: если поставить lazy, браузер начнёт запрашивать изображение только после того, как дойдёт до тега в HTML, и LCP сдвинется на 1–2 секунды, превратив Core Web Vitals из «зачёт» в «незачёт». Правильно: для изображений первого экрана ставить loading=eager, добавить rel=preload и fetchpriority=high, а всё ниже первого экрана — lazy.
До какого уровня можно сжимать изображения, чтобы разница была незаметна?
Качество JPEG 75–82 — точка баланса. Ниже 70 появляются цветовые блоки, зубцы и размытый текст; выше 85 выигрыш в размере падает, каждые 5 пунктов качества добавляют 15% веса, а глаз почти не видит разницы. Для товарных фото, где покупатель рассматривает детали, берите 80–85; для иллюстраций в статьях хватит 75. PNG с прозрачностью сжимайте квантованием до 16–32 цветов — вес уменьшится более чем на 60%.
Какой плагин автоматического сжатия выбрать для WordPress?
Если в год меньше 500 изображений, берите самый дешёвый тариф ShortPixel или Imagify — около 50 долларов в год, автоматическое сжатие плюс генерация WebP. Бесплатной версии Smush хватит, но массовая обработка идёт медленно. Все три плагина обрабатывают изображения при загрузке, без ручной работы. Главное — включить генерацию WebP, сохранять резервные копии оригиналов и задать максимальную ширину 1920px в настройках по умолчанию.
Насколько отличается загрузка изображений через CDN и без него?
Для зарубежных пользователей — на 1–3 секунды. Если сервер находится в Китае или Азии, пользователю из Европы или США один запрос к серверу обходится в 300–800 мс, а через пограничные узлы CDN — в 50–100 мс. Вместе с автоматическим транскодингом в WebP каждое изображение экономит ещё 30% веса. На бесплатном тарифе Cloudflare можно включить Image Resizing и Polish — для небольшого B2B-сайта этого достаточно.
Как проверить, что оптимизация изображений прошла успешно?
Пять жёстких критериев: LCP-изображение первого экрана ≤200 КБ, покрытие WebP/AVIF ≥90%, 100% изображений за пределами первого экрана с lazy, у всех картинок заданы width/height, общий вес изображений на странице ≤1 МБ. Прогоните один раз Lighthouse и проверьте, все ли аудиты по неоптимизированным изображениям зелёные, затем через CrUX или Cloudflare RUM посмотрите, укладывается ли 75-й процентиль LCP реальных пользователей в 2,5 секунды. Если лабораторные данные зелёные, а реальные красные, скорее всего дело в слабой сети на мобильных.

В заключение

Оптимизация изображений — это не разовая акция, а конвейер, который обрабатывает картинку прямо при загрузке. По-настоящему удобный подход — зашить правила в саму загрузку: максимальная ширина 1920, качество JPEG 80, автоматическая генерация WebP, автоматический lazy для всего за пределами первого экрана, автоматическое согласование форматов на CDN. Дальше контент-менеджеру достаточно перетащить картинку — никакие правила держать в голове не нужно. Как только этот конвейер заработает, все новые изображения будут соответствовать требованиям автоматически, без ручных проверок каждый раз.

Три шага к внедрению: первый — на этой неделе прогнать Lighthouse по главной странице и посмотреть два аудита: неоптимизированные изображения и современные форматы; второй — поставить плагин автоматического сжатия ShortPixel или Smush и включить генерацию WebP; третий — добавить preload для баннера первого экрана, а остальным картинкам массово проставить lazy и width/height. Через две недели перемерьте 75-й процентиль LCP.

Фраза, которую стоит запомнить: цель оптимизации изображений — не «маленький размер», а чтобы ключевая картинка LCP показалась за 2,5 секунды. Остальные могут и подождать, даже если они тяжёлые.

crater
crater Эксперт Crater

Официальный аккаунт организации · crater Crater

环形山 (Crater) — компания, которая помогает выходить на зарубежные рынки: разработка сайтов на WordPress, Google SEO и комплексный рост в GEO. Мы работаем с умными устройствами, промышленным оборудованием, SaaS и новой энергетикой.

Возможности продуктаБелая книга по методологииОтраслевые отчёты
965篇分享
78статей в базе знаний