SEO html5css.dev
html5css.dev

SEO продвижение сайтов

Полный цикл: от проектирования и семантики до ссылочного, перелинковки и текстов.

0. Старт С чего начинается работа: цели, инструменты, сервисы 2 1. Проектирование сайта Структура, семантика, title и description 11 2. Прототипирование Карточка товара и страница категории на примере магазина 3 3. Контент и ключевые слова Ключи в тексте, заголовки, объём, читаемость, изображения, внутренние ссылки 20 3.1. Сайт целиком и коммерция Структура, sitemap, крошки, домен, контакты, ассортимент, доставка, поддержка 22 3.2. Поведенческие факторы Домен и бренд, релевантность title, вложенность, удовлетворённость пользователя 11 4. Техническая оптимизация Скорость, дубли, robots.txt, sitemap.xml, битые страницы 9 5. Внешние факторы Ссылочное, доноры, анкоры, линкбилдинг 13 6. Продвижение бренда Брендовый трафик и его оценка 3 7. Нестандартные методы Актуализация контента, нулевая позиция, SILO, обрезка контента 17 8. Крауд-маркетинг Форумы, отзовики, Q&A, соцсети, поиск площадок и сервисы 16 8.1. Стратегии крауда Стратегии размещения, выживаемость постов, объёмы, делегирование 11 9. Юзабилити сайта Макет, навигация, формы, корзина, контрастность 10 10. Внутренняя перелинковка Вес страниц, анкоры, схемы связывания 10 11. Работа с текстами LSI, структура текста, применение ключей 8

С чего начать

Последовательный курс: проектирование → внутренняя оптимизация → техничка → ссылочное → тексты.

15глав
166уроков

Мобильная выдача

Отдельный курс про мобильный индекс: скорость, интерфейс, голосовой поиск и регионы.

6глав
44урока

Новый курс

Поиск всё чаще отвечает текстом. Курс о том, как попадать в источники этих ответов и не потерять доверие.

5глав
15уроков
  1. html5css.dev
  2. SEO
  3. Мобильное SEO
  4. Скорость сайта
  5. Оптимизация изображений
Глава 4 · Скорость сайта Урок 4 из 7 Обновлено 26.08.2026

Оптимизация изображений

Изображения — обычно самый тяжёлый ресурс страницы и почти всегда виновник плохого LCP. Разбираем форматы, адаптивную выдачу, приоритеты загрузки и то, как перестать ронять CLS.

Что изменилось с прошлой версии урока Раньше урок сводился к «сожмите JPEG и уменьшите размер». Сейчас важнее выбор формата (AVIF/WebP), адаптивная выдача через srcset и управление приоритетами загрузки — именно это определяет метрику LCP.

Форматы: что использовать сегодня

ФорматКогда применятьВыигрыш к JPEGПоддержка
AVIFОсновной формат для фотографий и сложных изображенийпримерно 40–60 %Chrome, Firefox, Safari 16.4+
WebPЗапасной вариант, универсальная замена JPEG и PNGпримерно 25–35 %Повсеместная
SVGЛоготипы, иконки, схемы, диаграммывекторный, не зависит от размераПовсеместная
JPEGПоследний запасной вариант—Повсеместная
PNGТолько там, где нужна точная прозрачность без потерь—Повсеместная
GIFНе использовать: анимацию отдавать видео в MP4 или WebM——

Цепочка запасных вариантов строится через <picture>: браузер берёт первый формат, который умеет показать.

<picture>
  <source srcset="/img/hero.avif" type="image/avif">
  <source srcset="/img/hero.webp" type="image/webp">
  <img src="/img/hero.jpg" width="1200" height="675"
       alt="Схема работы поискового робота" fetchpriority="high">
</picture>

Адаптивные изображения: srcset и sizes

Отдавать смартфону картинку шириной 2000 px — самая частая причина плохого мобильного LCP. Браузер сам выберет подходящий файл, если дать ему выбор.

<img src="/img/photo-800.webp"
     srcset="/img/photo-400.webp   400w,
             /img/photo-800.webp   800w,
             /img/photo-1600.webp 1600w"
     sizes="(max-width: 768px) 100vw, 800px"
     width="800" height="450"
     alt="Интерфейс отчёта Core Web Vitals"
     loading="lazy" decoding="async">
  • srcset с дескриптором w — список доступных ширин файлов.
  • sizes — какую ширину займёт картинка в макете. Без него браузер считает, что она во всю ширину экрана, и берёт файл крупнее нужного.
  • width и height — всегда, это защита от CLS.
  • decoding="async" — декодирование не блокирует отрисовку.

Приоритеты загрузки и LCP

LCP чаще всего измеряется по главной картинке первого экрана. Значит, у неё задача противоположная остальным: загрузиться как можно раньше.

Изображениеloadingfetchprioritypreload
Главное, первый экран (кандидат в LCP)не ставитьhighПолезен
Прочие на первом экранене ставитьпо умолчаниюНет
Ниже первого экранаlazyпо умолчаниюНет
Декоративные фонысредствами CSS—Нет
<!-- в <head>, для картинки-героя -->
<link rel="preload" as="image"
      href="/img/hero-800.avif"
      imagesrcset="/img/hero-400.avif 400w, /img/hero-800.avif 800w"
      imagesizes="(max-width: 768px) 100vw, 800px">
Самая дорогая ошибка loading="lazy", проставленный всем изображениям разом плагином или шаблоном. Картинка первого экрана начинает грузиться позже, и LCP уезжает на секунду-полторы. Проверьте главную картинку вручную.

Изображения, которые рисует JavaScript

Самописные скрипты ленивой загрузки (подмена data-src на src по скроллу) — источник двух проблем сразу: робот может не увидеть изображение, а пользователь получает лишнюю задержку. Нативный loading="lazy" поддерживается везде и работает лучше. Свои решения оставляйте только для галерей со сложной логикой.

Атрибут alt

  • Описывайте, что изображено, обычной фразой: «Отчёт Core Web Vitals в Search Console», а не «seo продвижение сайта заказать».
  • Для декоративных изображений — пустой alt="", чтобы скринридер их пропустил.
  • Для изображений-ссылок alt описывает назначение ссылки, а не картинку.
  • Подпись <figcaption> видна пользователю и работает лучше, чем длинный alt.

Подробнее о роли картинок в ранжировании — в уроке «Изображения как фактор ранжирования».

Практический процесс

  1. Определите реальные размеры под каждый контейнер макета — обычно хватает трёх ширин.
  2. Генерируйте варианты на сборке или на лету. Хорошо работает связка «оригинал в хранилище → обработчик по URL → кеш CDN».
  3. Сжимайте с проверкой глазами. Для AVIF качество около 50–60 обычно неотличимо от оригинала; для WebP — 75–80.
  4. Не масштабируйте вверх. Файл шире оригинала — только вес.
  5. Отдавайте с длинным кешем и версией в имени файла: Cache-Control: public, max-age=31536000, immutable.
  6. Проверьте LCP после изменений — в полевых данных, а не только в Lighthouse.
# подготовка вариантов, ImageMagick + avifenc/cwebp
magick photo.jpg -resize 400x  photo-400.jpg
magick photo.jpg -resize 800x  photo-800.jpg
magick photo.jpg -resize 1600x photo-1600.jpg

for f in photo-*.jpg; do
  cwebp  -q 78 "$f" -o "${f%.jpg}.webp"
  avifenc --min 24 --max 32 "$f" "${f%.jpg}.avif"
done
Быстрая победа за один вечер Проставить width/height всем изображениям и убрать lazy с картинки первого экрана. Это чинит CLS и заметную часть LCP без изменения инфраструктуры.

Итог

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

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

Какой формат изображений выбрать в 2026 году?

AVIF как основной, WebP как запасной, JPEG или PNG в самом конце цепочки. AVIF даёт лучшее сжатие, WebP поддерживается везде, а исходный формат остаётся для совсем старых клиентов.

Нужно ли ставить loading="lazy" всем картинкам?

Нет. Изображению первого экрана ленивая загрузка вредит — она откладывает LCP. Ему нужен fetchpriority="high", а loading="lazy" ставится только тому, что ниже первого экрана.

Как изображения влияют на CLS?

Если у картинки не заданы размеры, браузер не знает, сколько места резервировать, и текст «прыгает» после загрузки. Достаточно указать width и height в разметке — CSS всё равно отмасштабирует.

Что писать в alt?

Описание того, что изображено, обычной фразой. Alt нужен для доступности и для поиска по картинкам, а не для ключевых слов: набивка ключами в alt — устаревшая и бесполезная практика.

Вся глава «Скорость сайта» — 7 уроков
  1. Производительность сайта и способы её измерения
  2. Минификация контента
  3. Сжатие: Brotli и GZIP
  4. Оптимизация изображений
  5. Протоколы HTTP/2 и HTTP/3
  6. Настройка многоуровневого кеширования
  7. Использование CDN