Lazy load изображений и видео: ускоряем сайт без потери индексации
Длинная страница с тремя десятками изображений и парой встроенных видео может весить несколько мегабайт. Если браузер честно скачает всё это сразу при загрузке, пользователь будет смотреть на спиннер, хотя реально видит только первый экран. Ленивая загрузка решает эту проблему элегантно: грузим картинки и видео только тогда, когда они вот-вот попадут в поле зрения. Звучит просто, но именно здесь кроется коварная ловушка — неправильно настроенный lazy load способен не только испортить LCP, но и спрятать контент от поискового робота, вычеркнув ваши изображения из поиска. Разберёмся, как ускорить сайт ленивой загрузкой и при этом не потерять ни индексацию, ни позиции.
Что такое ленивая загрузка и зачем она нужна
Lazy load (ленивая, или отложенная, загрузка) — это техника, при которой ресурсы (изображения, iframe, видео) не загружаются сразу при открытии страницы, а подгружаются по мере приближения к области просмотра пользователя. Пока картинка где-то внизу длинной статьи, браузер её не качает — и тратит трафик и время только на то, что реально нужно показать прямо сейчас.
Выгода тройная. Во-первых, ускоряется первоначальная загрузка: браузер не отвлекается на десятки тяжёлых файлов и быстрее отрисовывает первый экран. Во-вторых, экономится трафик — и ваш серверный, и мобильный пользователя, который, возможно, и не долистает до конца. В-третьих, снижается нагрузка на сеть и процессор при рендеринге. Для длинных лендингов, каталогов и статей блога это один из самых заметных по эффекту приёмов ускорения, особенно в связке с другими техниками из материала про то, как улучшить Core Web Vitals и скорость загрузки.
Нативный loading=lazy против JS-библиотек
Раньше ленивую загрузку реализовывали исключительно через JavaScript: скрипт отслеживал прокрутку и подставлял реальный URL в атрибут src в нужный момент. Сегодня всё проще — есть нативный атрибут браузера. Достаточно написать loading="lazy" у тега изображения, и браузер сам отложит загрузку без единой строчки скрипта.
| Критерий | Нативный loading=lazy | JS-библиотека |
|---|---|---|
| Зависимость от JS | Нет, работает без скриптов | Да, нужен JavaScript |
| Индексация поисковиком | Корректная, URL в обычном src | Риск, если нет fallback |
| Скорость внедрения | Один атрибут | Подключение и настройка |
| Гибкость и эффекты | Базовая | Высокая (плейсхолдеры, blur-up) |
| Поддержка браузеров | Все современные | Зависит от библиотеки |
Вывод для большинства сайтов однозначен: используйте нативный loading="lazy". Он не требует JS, корректно индексируется и поддерживается всеми актуальными браузерами. JS-библиотеки (например, lazysizes) имеют смысл только когда нужны продвинутые эффекты — плавное проявление, blur-up плейсхолдеры, ленивая загрузка фоновых картинок в CSS, — и при этом вы готовы аккуратно обеспечить fallback для роботов.
Как lazy load улучшает LCP и экономит трафик
Когда браузер не тратит ресурсы на загрузку картинок за пределами экрана, он раньше доходит до отрисовки основного контента — а значит, улучшается метрика LCP. Сеть не забита параллельными запросами к тяжёлым файлам, и приоритет отдаётся тому, что реально видно. На мобильных, где канал уже, эффект особенно ощутим: страница становится интерактивной заметно быстрее.
Но тут важна оговорка, которая подводит нас к главной ошибке. LCP-элемент — это, как правило, самое большое изображение первого экрана (баннер, обложка статьи, главное фото товара). И вот его-то лениво грузить категорически нельзя — об этом ниже отдельно. Правильная стратегия: ленивые все картинки ниже линии сгиба, приоритетные — те, что видны сразу. Эта связка детально разобрана в статье про ускорение LCP и главного контента.
Главная ошибка: ленивая загрузка LCP-элемента
Это ошибка номер один, которую я регулярно вижу в аудитах. Разработчик подключает плагин ленивой загрузки «на всё подряд», и под раздачу попадает главное изображение первого экрана. Результат парадоксальный: вместо ускорения мы получаем замедление LCP, потому что браузер сначала рендерит страницу, потом обнаруживает, что картинка нужна, и только тогда начинает её грузить — с задержкой.
Правило простое: всё, что видно на первом экране без прокрутки, должно загружаться немедленно, а не лениво. Более того, для LCP-изображения стоит сделать обратное — повысить его приоритет атрибутом fetchpriority="high", чтобы браузер скачал его в первую очередь. Так выглядит правильная разметка главной картинки:
- Не ставьте
loading="lazy"на изображения первого экрана. - Добавьте
fetchpriority="high"к LCP-картинке. - Используйте
<link rel="preload">для предзагрузки LCP-ресурса, если он подгружается из CSS или фоном. - Лениво грузите всё остальное — то, что ниже линии сгиба.
Ленивая загрузка — это инструмент приоритизации, а не глобальный выключатель. Главное изображение первого экрана надо грузить быстрее всех, а не откладывать. Перепутаете местами приоритеты — и оптимизация превратится в замедление.
Риск скрыть контент от робота и как его избежать
Вторая серьёзная опасность — выпадение изображений из поиска по картинкам и потеря визуального контента для индексации. Механика проблемы зависит от способа реализации lazy load.
Нативный loading="lazy" для поисковиков безопасен: реальный URL картинки лежит в обычном атрибуте src, и робот его прекрасно видит и индексирует. А вот кастомные JS-реализации часто прячут настоящий адрес в data-src, оставляя в src прозрачный плейсхолдер. Если робот не выполнит JavaScript (а делает он это не всегда и не сразу), он увидит лишь пустышку — и ваше изображение не попадёт в индекс. То же касается отложенной подгрузки текстового контента через JS: это уже территория проблем, описанных в материале про JavaScript SEO и продвижение SPA на React.
Как застраховаться: предпочитайте нативный lazy load; если используете JS-библиотеку — обязательно предусмотрите <noscript>-фолбэк с обычным тегом изображения; убедитесь, что URL картинок присутствуют в HTML и в XML-карте изображений. Кстати, отдельную image-sitemap стоит держать в порядке — про карты сайта подробно в гайде про то, как настроить robots.txt и sitemap.xml.
Lazy load для iframe и видео: YouTube-фасады
Встроенное видео — один из самых тяжёлых элементов страницы. Обычный YouTube-iframe тянет за собой сотни килобайт скриптов и стилей плеера, даже если пользователь так и не нажмёт play. Это бьёт по скорости заметно сильнее, чем картинки.
Решений два, и их стоит комбинировать. Первое — нативная ленивая загрузка iframe атрибутом loading="lazy", которую поддерживают современные браузеры. Второе и более мощное — техника «фасада»: вместо полноценного плеера на странице рисуется лёгкое превью (картинка-постер с кнопкой play), а настоящий iframe плеера подгружается только после клика. Для WordPress есть готовые плагины такого фасада, для самописных сайтов — компонент lite-youtube-embed. Экономия — сотни килобайт и заметный прирост к скорости первого экрана.
- Нативный lazy для iframe:
loading="lazy"— простое решение для второстепенных видео. - Фасад превью: картинка-постер плюс подгрузка плеера по клику — лучший вариант для тяжёлых встраиваний.
- Самохостинг видео: используйте
preload="none"у тега video, чтобы не тянуть данные до старта воспроизведения.
Как проверить, что картинки в индексе
После внедрения ленивой загрузки обязательно проверьте, что поисковики по-прежнему видят ваши изображения. Вот рабочая методика контроля.
- Откройте инструмент проверки URL в Google Search Console и посмотрите отрендеренный HTML — в нём должны присутствовать реальные адреса картинок, а не плейсхолдеры.
- Проверьте поисковую выдачу по картинкам: запрос вида
site:вашдомен.ruв Google Images покажет, какие изображения проиндексированы. - В Яндекс Вебмастере отслеживайте раздел индексирования и наличие image-sitemap — как описано в полном руководстве по Яндекс Вебмастеру.
- Прогоните сайт через Screaming Frog с включённым рендерингом JavaScript и проверьте, извлекаются ли URL изображений.
- Сравните количество найденных картинок до и после внедрения lazy load — резкое падение сигнализирует о проблеме.
Типичные ошибки и чек-лист
Соберём в одном месте грабли, на которые чаще всего наступают, и финальный чек-лист правильного внедрения.
- Ленивая загрузка LCP-картинки — главный антипаттерн, ломающий скорость первого экрана.
- Lazy load на все изображения подряд без исключения первого экрана.
- Отсутствие width и height у изображений — провоцирует скачки вёрстки и плохой CLS.
- JS-реализация без noscript-фолбэка — риск выпадения картинок из индекса.
- Двойная ленивая загрузка — нативный атрибут плюс плагин одновременно, что вызывает конфликты.
А вот финальный чек-лист корректного внедрения:
- Используйте нативный
loading="lazy"для всех изображений ниже первого экрана. - Исключите из ленивой загрузки LCP-элемент и добавьте ему
fetchpriority="high". - Пропишите явные
widthиheight(или aspect-ratio) каждому изображению, чтобы не плыла вёрстка. - Для видео применяйте фасады и
loading="lazy"на iframe. - Если используете JS-библиотеку — добавьте noscript-фолбэк.
- Проверьте индексацию картинок в Search Console и через Screaming Frog.
Ленивая загрузка отлично работает в связке с современными форматами и сжатием картинок — рекомендую дочитать материалы про оптимизацию изображений для SEO и про современные форматы WebP и AVIF, чтобы получить максимальный эффект.
Правильно настроенный lazy load ускоряет сайт без единого минуса для SEO — но именно «правильно» здесь ключевое слово, и одна ошибка с приоритетами способна свести усилия на нет. Если не хотите рисковать индексацией и хотите выжать из скорости максимум, доверьте настройку профессионалам: закажите доработку сайта с грамотной оптимизацией медиа или комплексное продвижение сайтов, где скорость загрузки — один из ключевых факторов роста позиций.
Услуги LSI Продвижение
Наша команда предлагает полный спектр услуг по SEO-продвижению и технической доработке сайтов. Мы работаем только белыми методами, ориентируемся на реальный бизнес-результат — трафик, заявки и продажи, а не только позиции в отчёте, — и выстраиваем продвижение системно, под конкретные задачи и нишу вашего проекта. Начать можно с бесплатной диагностики, чтобы понять текущее состояние сайта и точки роста, а затем перейти к комплексной работе. Выберите подходящую услугу из списка ниже:
- Бесплатный SEO аудит сайта — автоматическая проверка на 50+ параметров за 2 минуты
- Комплексный SEO аудит — глубокий ручной анализ с рекомендациями от эксперта
- Продвижение сайтов — вывод в ТОП Яндекса и Google по целевым запросам
- SEO консультация — разбор вашего сайта с конкретными рекомендациями
- LSI тексты — экспертный контент, оптимизированный для поисковых систем
- Доработка сайта — техническая оптимизация и исправление ошибок
- Создание сайта под ключ — разработка с нуля с SEO-оптимизацией
- Стоимость продвижения — прозрачные тарифы и условия
- Портфолио и кейсы — реальные результаты наших клиентов
Закажите SEO продвижение сайта
Выведем ваш сайт в ТОП Яндекса и Google. Бесплатная консультация — разберём сайт, найдём точки роста и предложим стратегию продвижения.
Comments
Поставил loading=lazy на все картинки и радовался, пока не заметил, что LCP только вырос. Оказалось, повесил ленивую загрузку и на главное изображение первого экрана. Ваша статья про эту ошибку прям в яблочко.
А нативный loading=lazy уже можно смело использовать во всех браузерах или всё-таки для надёжности брать JS-библиотеку? Не хочется тащить лишний скрипт, если браузеры и так умеют.
Больше всего боялся именно того, о чём вы пишете — что картинки выпадут из индекса. У меня фотосток, изображения из поиска дают половину трафика. Как убедиться, что они точно индексируются при lazy load?
Ольга, нативный loading=lazy уже отлично поддерживается всеми актуальными браузерами, для большинства сайтов его достаточно и лишний скрипт тащить не нужно. JS-библиотеку берите только если нужен тонкий контроль подгрузки или поддержка совсем древних браузеров. В 9 случаях из 10 хватает нативного.
Спасибо за раздел про YouTube-фасады. Встроенные видео жутко тормозили страницу, каждый ролик тянул кучу скриптов. Заменил на фасады с превью — LCP полегчал заметно.
А как понять, какой именно элемент у меня LCP, чтобы случайно не повесить на него lazy load? В PageSpeed вроде показывает, но я не до конца разобралась, где смотреть.
Марина, в PageSpeed Insights в разборе LCP прямо указывается элемент, который считается самым крупным на первом экране — обычно это главный баннер или первое фото. Именно с него нужно снять loading=lazy. В DevTools во вкладке Performance тоже видно LCP-элемент по таймлайну.
Владею блогом о рукоделии, статьи длинные, картинок по 30-40 штук. Ленивая загрузка реально спасла скорость. Но теперь переживаю за индексацию изображений, полезла проверять по вашему разделу.
Немного не соглашусь, что нативный lazy всегда лучше. У JS-библиотек больше контроля — можно задать отступ подгрузки заранее, чтобы картинки не мигали при быстрой прокрутке. Нативный так не умеет тонко.
Как проверить, что картинки попали в индекс? Вы упоминаете этот раздел, но можете подсказать конкретно — через Вебмастер смотреть или есть способ проще?
У меня на интернет-магазине карточки товаров грузятся лениво, и я переживаю, видит ли робот изображения товаров. Для магазина это критично, картинка часто решает покупку.
Екатерина, самый надёжный способ — Яндекс Вебмастер и отчёт по картинкам, плюс поиск по вашему сайту через оператор site: в разделе картинок. Если изображения там есть — робот их видит. Ещё можно проверять через инструмент проверки страницы: он показывает, какой контент реально доступен роботу.
Спасибо за чек-лист в конце. Прошлась и нашла у себя классическую ошибку — lazy на логотипе и первом баннере. Убрала, LCP сразу улучшился на несколько десятых.
А для iframe карт (Яндекс.Карты на странице контактов) ленивая загрузка тоже подойдёт? Карта тянет прилично скриптов, а находится в самом низу страницы.
Очень доступно объяснили про экономию трафика. У меня мобильная аудитория большая, и то, что картинки не грузятся все сразу, реально бережёт их мобильный интернет. Спасибо.
Поставил lazy load через плагин, а потом заметил, что часть картинок в мобильной выдаче Яндекса пропала из превью. Похоже, как раз ваш случай про скрытие контента от робота. Как чинить?
Денис, скорее всего плагин подменяет src на заглушку, а реальный адрес картинки прячет так, что робот его не считывает. Проверьте, чтобы у изображений оставался корректный src или использовалась разметка, понятная поисковику. Часто помогает смена плагина или отключение lazy для изображений в разметке. Если не разберётесь — пришлите сайт, посмотрим.
Начинающий вебмастер, для меня многое ново. А loading=lazy надо прописывать вручную к каждой картинке или движок сам может проставить? У меня WordPress.
Инна, WordPress с версии 5.5 сам проставляет loading=lazy ко всем картинкам в контенте, вручную ничего писать не надо. Но именно поэтому он по умолчанию может повесить ленивую загрузку и на первое изображение — за этим нужно следить и для LCP-картинки отключать её через тему или плагин.
Хороший баланс между ускорением и SEO. А то многие статьи про lazy load вообще не упоминают риск потери индексации, а вы прям акцент на этом сделали. Полезно.
А есть ли смысл комбинировать нативный loading=lazy для картинок и отдельный фасад для видео, или лучше выбрать один подход на весь сайт?
У меня на длинной посадочной висело два встроенных ролика, и мобильная скорость была ужасной. Сделал фасады по вашему совету — загрузка ускорилась в разы, ролик подгружается только по клику. Рекомендую всем.
Оставить комментарий
Мы используем cookies
Для улучшения работы сайта и вашего удобства. Оставаясь на сайте, вы соглашаетесь с политикой конфиденциальности.