Изображения — это обычно девять десятых веса страницы. Текст всего сайта весит меньше одной неподготовленной фотографии с телефона. Поэтому работа с картинками — самый быстрый способ сделать сайт быстрым.
Зачем это знать
Нейросеть напишет разметку картинки правильно, но файлы готовите вы. Снимок с телефона весит четыре мегабайта и имеет ширину 4000 пикселей — на странице он показывается шириной 800, а грузится целиком. Три правила ниже убирают эту беду за десять минут.
Какой формат брать
| Формат | Когда брать | Особенность |
|---|---|---|
| WebP | Все фотографии и почти всё остальное | Тот же вид, что JPEG, но на четверть-треть легче |
| SVG | Иконки, логотипы, схемы | Не размывается при увеличении, весит килобайты |
| JPEG | Запасной вариант для очень старых браузеров | Понимают все, весит больше |
| PNG | Только если нужна прозрачность и нельзя WebP | Фотографии в нём весят в разы больше |
Практическое правило: фотографии — WebP, всё нарисованное — SVG. GIF не нужен нигде: короткое видео в современном формате весит в десять раз меньше. Перегнать снимок в WebP можно прямо в браузере — например в Squoosh, ставить программы не нужно.
Размер файла и размер на экране
Это разные вещи, и путать их дорого. Если картинка показывается шириной 800 пикселей, файл шириной 4000 не даст ничего, кроме веса. Готовьте файл по месту показа с запасом вдвое — для экранов с высокой плотностью точек.
Ориентиры по весу
Большая картинка первого экрана — до 200 КБ. Обычная картинка в статье — до 100 КБ. Превью в сетке — до 60 КБ. Если получается больше, уменьшайте размер в пикселях, а уже потом качество.
Разметка: четыре обязательных атрибута
<img src="/assets/img/open-server.webp"
width="1200" height="750"
loading="lazy"
alt="Окно Open Server: выбор версии PHP в настройках">
-
widthиheight. По ним браузер заранее оставляет место, и текст не прыгает, когда картинка догрузилась. Ставятся даже тогда, когда размер задан в CSS: это пропорции, а не жёсткий размер. -
loading="lazy". Откладывает загрузку картинок, до которых читатель ещё не долистал. Не ставится картинке первого экрана — её нужно грузить сразу. -
alt. Текст вместо картинки. Его читают программы чтения экрана и показывает браузер, если файл не загрузился.
Как написать alt
Описывайте не файл, а то, что на картинке важно в этом месте страницы. «Скриншот» и «фото» писать не нужно — и так понятно, что это изображение.
| Плохо | Хорошо |
|---|---|
alt="image1" |
alt="Окно Open Server: выбор версии PHP" |
alt="фото" |
alt="Дерево ресурсов с папкой «Новости»" |
| Атрибута нет вовсе | alt="", если картинка чисто украшение |
Пустой alt="" — это не небрежность, а
осмысленное «читать нечего, пропусти». Отсутствие атрибута
означает другое: диктор прочитает имя файла вслух.
Один снимок для телефона и для монитора
Картинка первого экрана на мониторе показывается шириной 1200 пикселей, а на телефоне — 360. Грузить телефону большой файл расточительно: это чужой трафик и лишние секунды ожидания. Решение — подготовить два-три файла и дать браузеру выбрать самому.
<img src="/assets/img/hero-800.webp"
srcset="/assets/img/hero-400.webp 400w,
/assets/img/hero-800.webp 800w,
/assets/img/hero-1600.webp 1600w"
sizes="(min-width: 1024px) 800px, 100vw"
width="800" height="500"
alt="Первый экран сайта: заголовок и блок кода рядом">
В srcset перечислены файлы с их настоящей
шириной в пикселях, в sizes — какой ширины
картинка будет на странице. Браузер сам сопоставит одно
с другим и учтёт плотность точек экрана. Атрибут
src остаётся запасным вариантом для тех, кто
этого не понимает.
Текст картинкой не делают
Заголовок, нарисованный в графическом редакторе и вставленный снимком, нельзя ни выделить, ни найти поиском, ни прочитать программе чтения экрана, ни перевести. На телефоне он вдобавок размывается. Любой текст пишется текстом, а нужный шрифт подключается файлом.
Что просить у нейросети
Сами файлы нейросеть не уменьшит, а вот разобрать разметку и написать описания она поможет.
Вот кусок разметки моей страницы с шестью картинками
(прилагаю). Проверь каждую: есть ли width
и height, правильно ли расставлен
loading="lazy", осмысленны ли описания
в alt.
Картинка первого экрана — первая в списке, ей отложенная загрузка не нужна. Опиши, что не так, и дай исправленный код.
Отдельно посоветуй, какой ширины готовить файлы, если в сетке картинка показывается шириной 380 пикселей на телефоне и 400 на компьютере.
Как проверить, что получилось
- Открыть вкладку «Сеть» в инструментах разработчика и посмотреть вес каждой картинки.
- Прокрутить страницу сверху донизу: текст не должен прыгать при появлении картинок.
- Отключить картинки в браузере: вместо каждой должно быть понятное описание.
- Сложить вес всей страницы: для статьи с картинками разумный предел — около мегабайта.
Что стоит запомнить
- Фотографии — WebP, всё нарисованное — SVG
- Файл готовится по размеру показа, а не грузится в исходном виде
-
widthиheightв разметке не дают странице прыгать -
loading="lazy"ставится всем, кроме картинок первого экрана -
altописывает смысл картинки, а пустойalt=""— осознанный выбор