Животные меняются при загрузке страницы
Оптимизация изображений для SEO: WebP, AVIF, lazy loading и компрессия
Карточки, чек-листы, таблицы и примеры помогают быстро найти нужный ответ.
Изображения занимают большую часть веса страниц и напрямую влияют на Core Web Vitals. В этом руководстве рассматриваются современные форматы, lazy loading и автоматическая компрессия, а также практические шаги, которые помогут улучшить индексацию и скорость загрузки.
Оптимизация изображений начинается с выбора правильного формата, затем внедрения lazy loading и автоматической компрессии. После этого необходимо проверить влияние на Core Web Vitals и корректно настроить серверную отдачу.
1. Почему изображения критичны для SEO
Изображения – один из ключевых факторов, определяющих скорость и стабильность страницы. Большой вес медиа‑файлов напрямую повышает LCP, а неотложная загрузка блокирующего контента может вызвать CLS, если размеры изображений не заданы. Core Web Vitals – метрика, в которую Google включил пользовательский опыт; чем выше LCP и чем ниже CLS, тем выше вероятность того, что поисковый робот оценит страницу как «пользовательски‑дружелюбную».
В UX изображения создают первое впечатление, формируют визуальную иерархию, помогают пользователю быстро понять суть контента. При медленной загрузке картинки «потеряют» свой эффект: пользователь может уйти, не дочитав текста, что снижает показатель времени на странице и увеличивает показатель отказов. Эти сигналы учитываются алгоритмами ранжирования.
Google применяет «Page Experience» как фактор ранжирования. Если LCP превышает 2,5 с, CLS выше 0,1, сайт может получить «низкий» рейтинг в поиске. Кроме того, при длительной задержке загрузки изображения поисковый бот может не проиндексировать контент, расположенный ниже картинки, тем самым упустив важную информацию.
Таким образом, оптимизация изображений – не просто экономия трафика, а прямой вклад в Core Web Vitals, улучшение пользовательского опыта и защита от потенциальных штрафов за медленную загрузку.
2. Современные форматы изображений: WebP, AVIF, JPEG XL
| Параметр | WebP | AVIF | JPEG XL |
|---|---|---|---|
| Тип сжатия | Lossy / Lossless | Lossy / Lossless | Lossy / Lossless |
| Сравнительно к JPEG (lossy) | –15 % – 30 % | –30 % – 50 % | –25 % – 45 % |
| Поддержка браузеров | Chrome, Edge, Safari, Firefox (с 2019) | Chrome, Edge, Safari (с 2022), Firefox (с 2023) | Chrome, Edge, Safari (с 2023), Firefox (с 2024) |
| CMS‑поддержка | WordPress (плагин), Joomla, Drupal, Hugo | WordPress (плагин), Hugo, Jekyll | WordPress (плагин), Hugo, Jekyll, Drupal |
| Производительность в мобильных сетях | Уменьшает время загрузки на 20 %–30 % при 3G | Уменьшает время загрузки на 30 %–45 % при 3G | Уменьшает время загрузки на 25 %–40 % при 3G |
| Производительность в десктопных сетях | Сокращает трафик на 15 %–25 % | Сокращает трафик на 25 %–35 % | Сокращает трафик на 20 %–30 % |
| SEO‑влияние | Быстрее индексируется, уменьшает Core Web Vitals | Быстрее индексируется, повышает LCP/CLS | Быстрее индексируется, улучшает LCP, но требует больше CPU |
WebP – надёжный компромисс, поддержка почти всех CMS и браузеров. AVIF даёт лучшую экономию, но требует более новых браузеров и немного больше ресурсов CPU. JPEG XL сочетает в себе гибкость и растущую поддержку, но пока не так широко интегрирован в плагины. Выбирайте формат, исходя из целевой аудитории: мобильные пользователи выигрывают от AVIF, десктоп – от WebP, а для универсальности можно использовать WebP + AVIF fallback.
3. Lazy loading: как реализовать и что проверить
- Вставьте атрибут
loading="lazy"в все теги<img>и<source>. - Подключите polyfill IntersectionObserver для старых браузеров (пример:
https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver). - Добавьте скрипт‑обработчик, который наблюдает за изображениями и задаёт
srcпри пересечении видимой области. - Проверьте работу в Chrome DevTools: откройте вкладку Network, фильтруйте по типу “Img”, убедитесь, что изображения загружаются только при прокрутке.
- Проверьте индексацию: в Google Search Console откройте “URL Inspection” для страницы, посмотрите, что все
<img>присутствуют в отрендерённом HTML. Затем в “Coverage” убедитесь, что URL‑адреса изображений находятся в индексе.
document.addEventListener('DOMContentLoaded', () => {
const lazyImages = document.querySelectorAll('img[loading="lazy"], source[loading="lazy"]');
if ('IntersectionObserver' in window) {
const observer = new IntersectionObserver((entries, obs) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
if (img.dataset.src) img.src = img.dataset.src;
if (img.dataset.srcset) img.srcset = img.dataset.srcset;
obs.unobserve(img);
}
});
}, { rootMargin: '200px', threshold: 0 });
lazyImages.forEach(img => observer.observe(img));
} else {
// Fallback: load all immediately
lazyImages.forEach(img => {
if (img.dataset.src) img.src = img.dataset.src;
if (img.dataset.srcset) img.srcset = img.dataset.srcset;
});
}
});
4. Автоматическая компрессия: инструменты и настройка CI/CD
Автоматическая компрессия – это этап, где исходные изображения проходят через локальные и облачные инструменты, уменьшая размер без заметной потери качества, и интегрируются в CI/CD. Включаем imagemin для PNG/JPG, Sharp для WebP/AVIF, TinyPNG API для облачной оптимизации. Конфигурируем в Webpack/Vite через плагины, а после сборки запускаем скрипт проверки размеров.
// webpack.config.js
const ImageminPlugin = require('imagemin-webpack-plugin').default;
const imageminMozjpeg = require('imagemin-mozjpeg');
const imageminPngquant = require('imagemin-pngquant');
module.exports = {
module: {
rules: [
{
test: /\.(png|jpe?g|gif|svg)$/i,
use: [
{
loader: 'sharp-loader',
options: {
quality: 80,
webp: true,
avif: true
}
}
]
}
]
},
plugins: [
new ImageminPlugin({
test: /\.(jpe?g|png|gif|svg)$/i,
pngquant: { quality: [0.7, 0.85] },
mozjpeg: { quality: 80 },
gifsicle: { optimizationLevel: 2 }
})
]
};
// vite.config.js
import { defineConfig } from 'vite';
import viteImagemin from 'vite-plugin-imagemin';
export default defineConfig({
plugins: [
viteImagemin({
gifsicle: { optimizationLevel: 3 },
optipng: { optimizationLevel: 5 },
mozjpeg: { quality: 80 },
pngquant: { quality: [0.7, 0.85] },
svgo: {},
webp: { quality: 80 },
avif: { quality: 80 }
})
]
});
// scripts/optimize-tinypng.js
const tinify = require('tinify');
tinify.key = process.env.TINYPNG_KEY;
const fs = require('fs');
const path = require('path');
const srcDir = path.join(__dirname, '..', 'dist');
const files = fs.readdirSync(srcDir).filter(f => /\.(jpe?g|png)$/i.test(f));
files.forEach(file => {
const src = path.join(srcDir, file);
const dest = src;
tinify.fromFile(src).toFile(dest);
});
// scripts/check-sizes.js
const fs = require('fs');
const path = require('path');
const dir = path.join(__dirname, '..', 'dist');
const maxSize = 200 * 1024; // 200KB
fs.readdirSync(dir).forEach(file => {
const stats = fs.statSync(path.join(dir, file));
if (stats.size > maxSize) {
console.warn(\`\${file} is \${stats.size} bytes – exceeds \${maxSize}\`);
}
});
5. Проверка результатов: Lighthouse, PageSpeed Insights, Core Web Vitals
| Параметр | До оптимизации | После оптимизации | Цель |
|---|---|---|---|
| LCP (Largest Contentful Paint) | 3.9 с | 1.7 с | ≤ 2.5 с |
| CLS (Cumulative Layout Shift) | 0.35 | 0.07 | ≤ 0.1 |
| FID (First Input Delay) | 120 мс | 45 мс | ≤ 100 мс |
| Качество изображений в Search Console | Не индексированы 12 изображений | Индексированы 28 изображений | Все критические изображения индексированы |
- Запустить Lighthouse в DevTools, сохранить отчёт.
- Проверить Core Web Vitals в Google PageSpeed Insights (desktop и mobile).
- В Search Console перейти в Coverage → Images, убедиться, что статус «Indexed» для всех нужных файлов.
- Сравнить показатели LCP, CLS, FID до и после оптимизации, фиксировать разницу.
- Проверить, что в отчёте Lighthouse нет ошибок «Image size too big» и «Image dimensions too large».
- Убедиться, что в отчёте PageSpeed Insights метрика «Largest Contentful Paint» находится в пределах 2 с.
- Проверить, что в Search Console нет «Blocked» или «Error» статусов для изображений.
- Сохранить результаты в таблицу для дальнейшего анализа.
6. Частые ошибки и как их избежать
- Неправильный MIME‑тип
- Проблема: поисковые боты не распознают изображение, индексирует его как текст, а не медиа.
- Избегаем: в заголовке ответа сервера ставим корректный тип (image/jpeg, image/webp, image/avif). Проверяем через
curl -I URLи в DevTools Network.
- Отсутствие атрибутов width/height
- Проблема: браузер не знает размеры, создаёт «layout shift», ухудшает Core Web Vitals.
- Избегаем: добавляем
widthиheightв тег<img>либо задаём их через CSS, используяaspect-ratioдля современных браузеров.
- Неоптимизированные превью в соцсетях
- Проблема: при шаринге ссылка открывается с большим файлом, увеличивает время загрузки, снижает CTR.
- Избегаем: генерируем отдельные «thumbnail» в формате WebP/AVIF, размером не более 1200 px, и указываем их в мета‑тегах
og:imageиtwitter:image.
7. План внедрения и сроки
-
Неделя 1–2: Анализ текущего состояния
Сформируйте baseline: соберите метрики загрузки изображений, Core Web Vitals, процент использования WebP/AVIF. Проверьте, какие страницы не используют lazy loading, какие форматы загружаются в больших размерах. Запишите все найденные проблемы в таблицу. -
Неделя 3: Выбор инструментов
Оцените варианты компрессии: ImageMagick, TinyPNG API, Squoosh CLI. Выберите конвертер WebP/AVIF, который поддерживает ваш стек (Node, PHP, CMS‑плагины). Согласуйте с dev‑командой, какие скрипты будут запускаться в CI/CD и как будет происходить кэширование в Service Worker. -
Неделя 4–5: Пилотный запуск на одной категории
Выберите категорию со средним трафиком (например, «Товары для дома»). Внедрите lazy loading через атрибут loading="lazy" и замените все изображения на WebP/AVIF. Запустите автоматическую компрессию в CI, проверьте, что размер файлов сократился минимум на 30 %. Сравните метрики до и после, убедитесь, что скорость загрузки не ухудшилась. -
Неделя 6–8: Полный релиз
После успешного пилота масштабируйте изменения на все категории. Обновите шаблоны, включите кэширование изображений в Service Worker с стратегией stale‑while‑revalidate. Добавьте fallback‑изображения в формате JPEG/PNG для старых браузеров. Проведите A/B‑тестирование, чтобы убедиться, что пользовательский опыт сохранен и показатели CTR не падают. -
Неделя 9+: Мониторинг
Еженедельно проверяйте Core Web Vitals, скорость загрузки страниц, количество 404‑изображений. Используйте Search Console, Lighthouse, и внутренний Dashboard. Если показатели падают, откатитесь к предыдущей версии или скорректируйте уровень компрессии. Планируйте пересмотр стратегии каждые 3‑4 месяца.
8. Мониторинг после запуска
После запуска оптимизации изображений ключевое внимание уделяется постоянному мониторингу влияния на поисковую выдачу и пользовательский опыт. Основные источники данных – Search Console, Core Web Vitals в Google Analytics и сервисы мониторинга. Настройте регулярный экспорт отчётов, чтобы видеть тренды и отклонения.
| Месяц | FCP (с) | LCP (с) | CLS | TBT (мс) | Speed Index (с) |
|---|---|---|---|---|---|
| Январь | 1.2 | 1.8 | 0.05 | 120 | 1.5 |
| Февраль | 1.1 | 1.6 | 0.04 | 100 | 1.4 |
- Экспортировать отчёты из Search Console каждые 15 дней.
- Сравнивать Core Web Vitals за последние 3 месяца, отмечая отклонения.
- Настроить автоматические алерты в Google Data Studio при падении LCP > 2.5 с или CLS > 0.1.
- Проверять изменения в CTR и позициях для страниц с изменёнными изображениями.
- Регулярно обновлять метрики в таблицах мониторинга.
Вопросы и ответы
Какие форматы изображений лучше всего подходят для SEO?
Лучшие форматы для SEO – WebP и AVIF, которые дают 30‑50 % меньший размер без потери качества. Для прозрачности PNG остаётся актуальным, а JPEG 2000 и JPEG XL подходят для больших фотосетей. Выбирайте формат, поддерживаемый целевой аудиторией.
Как автоматически сжимать изображения при загрузке сайта?
Автоматическое сжатие можно настроить на этапе загрузки. В CMS подключите плагин (EWWW, ShortPixel) или используйте сборщик (Gulp, Webpack) с ImageMagick. Укажите порог качества (70‑80 % JPEG, lossless PNG) и включите конвертацию в WebP/AVIF.
Нужно ли использовать lazy loading для всех изображений?
Lazy loading полезен почти для всех изображений, кроме тех, что находятся в зоне видимости при открытии страницы (hero‑изображения). Для остальных используйте атрибут loading=lazy или JavaScript‑плагины. Это ускорит первый байт и снизит нагрузку на сервер.
Как выбрать оптимальный размер изображения для SEO?
Оптимальный размер определяется устройством пользователя. Используйте srcset и sizes, чтобы браузер выбирал нужный вариант. Не отдавайте изображения шириной более 1920 px, если пользователь не использует 4K‑монитор. Это экономит трафик и ускоряет загрузку.
Как проверить, что изображения оптимизированы?
Проверьте оптимизацию через Lighthouse, PageSpeed Insights или GTmetrix – они показывают размер, формат и время загрузки. Также можно использовать утилиту ImageOptim или онлайн‑сервис TinyPNG. Сравните результаты до и после изменений.
Какие плагины для WordPress помогают с оптимизацией?
Для WordPress популярны EWWW Image Optimizer, ShortPixel, Imagify и Smush. Они автоматически сжимают, конвертируют в WebP/AVIF и создают кэш‑версии. Выбирайте плагин, который поддерживает ваш тип хостинга и имеет бесплатный тариф.
Как настроить CDN для изображений?
Настройте CDN, указав ваш домен как источник изображений. Включите кэш‑контроль (max-age, immutable) и настройте правила для WebP/AVIF. Убедитесь, что заголовки Content‑Type корректны, чтобы браузер распознавал формат.
Как избежать потери качества при сжатии?
Чтобы не потерять качество, применяйте lossless‑сжатие PNG, а JPEG – 70‑80 % качества. Тестируйте визуально и сравнивайте с оригиналом. Используйте инструменты, как JPEG‑optim, для проверки метрик PSNR или SSIM.
Как измерить влияние оптимизации на ранжирование?
Влияние на ранжирование измеряется через Core Web Vitals, скорость загрузки и CTR. Сравните метрики до и после оптимизации в Search Console и аналитике. Результаты зависят от конкуренции и алгоритмов поисковика.
Можно ли использовать WebP/AVIF для всех изображений?
WebP/AVIF можно использовать для всех изображений, но только если браузер их поддерживает. В HTML применяйте <picture> с fallback‑изображением JPEG/PNG. Это гарантирует совместимость и экономию трафика.
Важно
Материал носит информационный характер. Перед внедрением рекомендаций учитывайте нишу, регион, конкурентов, текущее состояние сайта и бизнес-цели проекта.
Материал подготовлен и проверен редакцией AX.SEO
Редакция AX.SEO готовит материалы о SEO, разработке, AI, аналитике, маркетинге и росте digital-проектов.
Проверяет практическую применимость рекомендаций, корректность терминов и соответствие материала digital-тематике.