Ленивая загрузка картинок съедает ваш трафик из поиска по изображениям

Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога hozyindachi.ru о продвижении и доработке сайтов.

«Ленивая загрузка картинок съедает ваш трафик из поиска по изображениям»

За 20 лет практики я привык к одному парадоксу: чем сильнее сеошник или разработчик ускоряет сайт, тем чаще он собственными руками отрезает себе целый канал трафика. Речь про ленивую загрузку картинок. Её ставят ради красивых цифр в PageSpeed, ради зелёной зоны в Core Web Vitals, ради того самого «сайт летает». А через два месяца человек открывает Яндекс.Вебмастер и не понимает, почему из поиска по картинкам, который раньше приносил 15–20% визитов, осталась одна десятая. Изображения на сайте есть, глазами всё видно, а робот их будто не замечает.

И знаете, что самое обидное? В большинстве случаев ленивая загрузка тут вообще не виновата. Виновата кривая реализация. Правильный lazy loading и скорость поднимает, и индексацию картинок сохраняет — эти две вещи не враги. Врагом их делает разработчик, который воткнул модный JS-плагин, не понимая, что видит поисковый робот на входе. В этой статье я разберу на пальцах: как устроена ленивая загрузка, почему робот теряет изображения, чем нативный loading=lazy отличается от самописных скриптов и что конкретно проверить, чтобы одновременно и ускориться, и не слить трафик из продвижения сайта картинками.

Сразу оговорюсь: тема технически плотная, но я держу её на языке практика. Никаких «важно оптимизировать изображения». Только то, что я реально вижу на замерах и в логах, когда захожу на очередной проект с просевшими картинками.

Что такое ленивая загрузка и зачем её вообще придумали

Ленивая загрузка (lazy loading) — это приём, при котором браузер не тянет все картинки страницы сразу, а подгружает их по мере того, как пользователь прокручивает страницу вниз. Логика железная: зачем грузить двадцать фотографий из подвала, если человек, может, и не долистает до них. Пока изображение за пределами экрана — оно не качается. Появилось в зоне видимости — тогда и загрузилось.

Выгода очевидна. Первый экран открывается быстрее, потому что браузер не давится десятком тяжёлых JPEG. Экономится трафик мобильного пользователя. Улучшается показатель LCP — время отрисовки самого крупного элемента. Всё это напрямую бьёт в скорость загрузки сайта, а скорость — это и поведенческие, и прямой фактор ранжирования, и банально меньше отказов. Я сам всегда за то, чтобы сайт открывался мгновенно, и на любом проекте начинаю технику именно с веса страницы.

Проблема одна: поисковый робот — это не человек. Он не «прокручивает страницу вниз» в привычном нам смысле. И вот тут начинается вся драма. Механизм, который придумали для удобства живого посетителя, при неаккуратной реализации превращается в стену между вашими картинками и индексом Яндекса.

Почему робот перестаёт видеть ваши изображения

Чтобы понять корень проблемы, надо посмотреть на HTML-код глазами робота. Нормальная картинка выглядит так: <img src=»/foto.jpg» alt=»описание»>. Робот заходит, видит атрибут src, идёт по этому адресу, скачивает файл, читает alt — картинка в индексе. Всё честно.

А теперь смотрим, что делают многие JS-плагины ленивой загрузки. Они превращают код в такое: <img data-src=»/foto.jpg» src=»pixel.gif»>. То есть реальный адрес фотографии прячется в атрибут data-src, а в стандартный src подставляется прозрачный пиксель или заглушка. Настоящую картинку подставляет обратно в src уже JavaScript — в тот момент, когда пользователь долистал до неё. Пока скрипт не отработал, в src болтается пустышка.

И вот вопрос на миллион: а что видит робот, который зашёл на страницу и не выполняет весь JavaScript так же охотно, как браузер живого человека? Правильно — он видит в src прозрачный пиксель. А ваша фотография спрятана в непонятном ему атрибуте data-src, который для индексации картинок официально ничего не значит. Итог: двадцать красивых изображений на странице, а в индекс уходит двадцать одинаковых прозрачных пикселей. Или ничего. Это та же логика, что с любым тяжёлым фронтендом — про неё я подробно писал в материале о влиянии JavaScript на продвижение сайта.

Да, Яндекс и Google научились рендерить JS. Но, во-первых, рендеринг — это отдельная, дорогая и отложенная во времени очередь. Во-вторых, робот не будет эмулировать бесконечный скролл, чтобы «долистать» до вашего подвала и дождаться, пока скрипт подставит картинки. Он видит то, что есть в исходном HTML на момент захода. Нет реального src — считай, нет картинки.

Нативный loading=lazy — то, ради чего можно выкинуть половину плагинов

Несколько лет назад браузеры получили встроенную ленивую загрузку. Выглядит она предельно просто: <img src=»/foto.jpg» alt=»описание» loading=»lazy»>. Обратите внимание — реальный адрес остаётся в атрибуте src. Никаких прозрачных пикселей, никаких data-src, никакого обязательного JavaScript. Браузер сам решает, когда подгрузить картинку, ориентируясь на положение прокрутки. А атрибут loading=»lazy» — это просто инструкция «не спеши с этим файлом».

Разница для индексации — колоссальная. Робот заходит, видит честный src с реальным адресом, видит alt — картинка индексируется как обычная. Ленивость тут заложена на уровне браузера и вообще не мешает поисковику. Вы получаете и скорость, и сохранённый трафик из Яндекс.Картинок. Это тот редкий случай, когда «правильно» ещё и «проще».

Мой практический вывод за последние годы жёсткий: если у вас на сайте стоит тяжёлый JS-плагин ленивой загрузки с подменой src, в 9 из 10 случаев его можно снести и заменить нативным атрибутом loading=»lazy». Скорость не просядет, а часто даже вырастет — вы же выкидываете лишний скрипт, который сам по себе тормозит рендер. А индексация картинок разом чинится. Я так делал на десятках проектов, где вопросы увеличения скорости загрузки сайта на WordPress и потеря картинок шли в одном флаконе.

Сравнение: нативный способ против JS-плагинов

Чтобы не быть голословным, сведу разницу в таблицу. Это то, на что я смотрю в первую очередь, когда захожу на новый сайт с жалобой «картинки выпали из поиска».

Критерий Нативный loading=lazy JS-плагин с data-src
Реальный адрес в src Есть сразу Спрятан в data-src
Виден роботу без JS Да Нет
Риск для индексации картинок Минимальный Высокий
Нужен лишний скрипт Нет Да, тормозит рендер
Влияние на скорость Плюс Спорное

Оговорюсь честно: не все JS-решения одинаково плохи. Есть грамотные плагины, которые оставляют реальный src и добавляют ленивость поверх, а не через подмену. И есть кейсы, где без скрипта не обойтись — например, фоновые изображения в CSS или сложные галереи. Но базовое правило простое: если можно обойтись нативным атрибутом — обходитесь. Каждый лишний скрипт на странице — это ещё и потенциальная точка отказа, и лишняя нагрузка, о чём я говорю в разборе внутренней оптимизации сайта по шагам.

Роль атрибута alt: без него даже идеальный lazy бесполезен

Отдельно хочу вбить гвоздь про alt, потому что тут ошибаются даже те, кто с ленивой загрузкой всё сделал правильно. Атрибут alt — это текстовое описание картинки. Именно по нему поисковик понимает, ЧТО изображено на фото и по каким запросам показывать вашу картинку в поиске по изображениям. Нет alt — робот видит файл, но не понимает его смысл. Значит, шансов ранжироваться в Яндекс.Картинках почти нет.

На замерах я постоянно вижу одну и ту же картину: сайт с сотнями изображений, у которых alt либо пустой, либо забит мусором вроде «IMG_20240517». Это выброшенный трафик. Причём бесплатный — картиночный поиск даёт целевых посетителей, которые ищут визуал: товар, схему, пример работы. Особенно это критично для интернет-магазинов, где описание товаров для интернет-магазина и alt к фото товара работают в связке.

Правило простое: alt должен по-человечески описывать, что на картинке, с вплетённым ключом там, где это уместно и не выглядит спамом. Не «купить диван москва недорого скидка», а «угловой диван Милан в серой рогожке». Читаемо, по делу, с ключевым словом. И да — alt пишется руками, а не проставляется автоматом одним и тем же значением на все картинки сайта. Автоподстановка одинакового alt — это дублирование контента на сайте в миниатюре, и роботу оно не нравится.

Как проверить, видит ли робот ваши картинки на самом деле

Теория теорией, но проверять надо руками. Вот мой рабочий чек-лист диагностики — прохожу его на каждом проекте с просевшими картинками.

  • Смотрим исходный код без выполнения JS. В браузере это «Просмотр исходного кода страницы» (Ctrl+U), а не «Инспектор». В инспекторе вы видите уже отрендеренный DOM, где скрипт подставил картинки. А Ctrl+U показывает именно то, что пришло роботу. Ищем свои картинки: если в src болтается pixel.gif или base64-заглушка, а реальный адрес в data-src — вот он, ваш диагноз.

  • Отключаем JavaScript в браузере и обновляем страницу. Если картинки пропали — робот их тоже, скорее всего, не увидит на входе. Если остались — уже хорошо.

  • Проверка URL в Яндекс.Вебмастере. Инструмент показывает, как робот видит страницу и какие ресурсы он с неё забрал. Здесь же смотрим, попали ли изображения в загруженные. Про то, как вообще устроена индексация сайта в поисковых системах, я отдельно расписывал — рекомендую освежить.

  • Смотрим динамику в разделе поиска по картинкам. В Метрике и Вебмастере видно долю визитов из поиска по изображениям. Резкий провал после внедрения нового плагина или редизайна — прямая улика.

Ещё один момент, который часто упускают: файл robots.txt. Бывает, что папку с изображениями или папку загрузок случайно закрыли от индексации. Тогда никакой lazy loading не поможет — робот просто не имеет права зайти за картинкой. Проверьте свой файл robots.txt для сайта на предмет запретов на директории с медиа.

Пошагово: как совместить скорость и индексацию картинок

Собираю всё в конкретный порядок действий. Именно так я привожу в порядок сайты, где ленивая загрузка съела картиночный трафик.

  1. Проведите аудит текущей реализации. Через Ctrl+U и отключение JS определите, есть ли подмена src. Если реальные адреса на месте — вам повезло, идите сразу к пункту про alt.

  2. Уберите подмену src. Если стоит тяжёлый плагин с data-src — либо смените его на решение с честным src, либо перейдите на нативный loading=»lazy». В большинстве CMS это делается настройкой или заменой плагина.

  3. Первый экран — без ленивости. Картинки, которые видны сразу при открытии (логотип, главный баннер, первое фото), НЕ вешайте на lazy. Иначе вы, наоборот, замедлите LCP. Ленивость — только для того, что ниже первого экрана.

  4. Пропишите человеческие alt. Каждой значимой картинке — своё описание с ключом там, где уместно. Это часть общей работы над тем, как контент влияет на продвижение.

  5. Сожмите и переведите изображения в современные форматы. WebP вместо тяжёлых JPEG даёт огромную экономию веса без потери качества. Это ускоряет сайт сильнее, чем любая ленивость.

  6. Добавьте sitemap для изображений. Отдельная карта картинок или их включение в основную XML-карту помогает роботу найти и проиндексировать медиа быстрее.

  7. Проверьте результат через 2–4 недели. Индексация картинок не мгновенная. Следите за динамикой картиночного трафика в Метрике — если сделали всё правильно, он поползёт вверх.

И держите в голове главное: скорость и индексация — не выбор «или-или». Правильно сделанный сайт быстрый И полностью видимый роботу. Если вам предлагают «ускориться» ценой выпавших из поиска картинок — это не оптимизация, это ампутация канала трафика. Такие вещи всплывают на любом нормальном аудите контента сайта.

Короткие выводы, которые стоит забрать с собой

Ленивая загрузка — отличная штука, пока она не начинает прятать от робота реальные адреса изображений. Как только в src появляется прозрачный пиксель вместо картинки, вы теряете трафик из поиска по изображениям, даже не замечая этого — глазами-то на сайте всё в порядке.

  • Нативный loading=»lazy» почти всегда лучше JS-плагина — он оставляет честный src и не требует скриптов.

  • Подмена src на data-src — главный убийца индексации картинок. Проверяется за минуту через Ctrl+U.

  • Без alt даже идеально настроенный lazy не даст трафика — робот не поймёт, что на фото.

  • Первый экран не грузите лениво — иначе испортите LCP вместо того, чтобы улучшить.

  • Скорость и индексация совмещаются — это вопрос грамотной реализации, а не компромисса.

Картиночный поиск — недооценённый канал. Для многих ниш он даёт 10–25% бесплатного целевого трафика, и терять его из-за модного плагина — расточительство. Тем более что чинится это, как правило, за один вечер работы разработчика. Кстати, будущее только усиливает роль правильной разметки картинок: та же продвижение в нейросетях и AI-поиске всё активнее опирается на то, что машина реально «видит» на странице, а не на то, что дорисовал скрипт постфактум.


Хотите, чтобы ваш сайт и летал по скорости, и не терял ни одной картинки из поиска — а не сливал трафик на ровном месте из-за кривого плагина? Я занимаюсь продвижением сайтов в Яндексе уже больше 20 лет и готовлю сайты в том числе под выдачу нейросетей и AI-поиск. Разберу вашу техничку, покажу, где вы теряете позиции и заявки, и как это починить без потери скорости.

Увеличьте позиции и продажи вашего сайта

Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:

Анатолий Кузнецов — SEO-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.

Связаться со мной →

19 комментариев к “Ленивая загрузка картинок съедает ваш трафик из поиска по изображениям”

  1. Регина

    Забрала чеклист: нативный loading=lazy вместо JS, первый экран без lazy, реальный src в HTML, alt на месте, WebP для скорости, image sitemap как страховка. И проверить, что плагин оптимизации не перестарался. Спасибо!

  2. Геннадий

    Для магазина критично втройне: поиск по картинкам приводит горячий трафик — человек увидел товар и кликнул купить. Убил индексацию фото ленивой загрузкой — потерял этот канал целиком. Проверять карточки в первую очередь.

  3. Милана

    А для интернет-магазина фото товаров через lazy — это же прямой удар по продажам через поиск по картинкам? Люди часто ищут товар именно картинкой. Получается, тут вдвойне критично проверить?

  4. Валерий

    Добавлю про формат: WebP и нормальное сжатие дают и скорость, и качество. Так что можно и картинки в индексе держать, и страницу не утяжелять. Не обязательно выбирать между скоростью и трафиком с изображений.

  5. Спасибо, полезло проверять свой сайт. У нас как раз плагин оптимизации навесил JS-lazy на все изображения. Судя по статье, вот куда утёк трафик с картинок. Буду переводить на нативный атрибут.

  6. Семён

    Тонкий момент: некоторые оптимизаторы скорости ставят агрессивный lazy на всё подряд ради красивой цифры в тесте. А потом удивляются, куда делся трафик с картинок. Скорость важна, но не ценой индексации.

  7. Галина

    Image sitemap как страховка полезен, особенно если картинок много и они важны для трафика. С нативным lazy не обязателен, но и не мешает. Мы добавили — хуже точно не стало, часть картинок стала быстрее находиться.

  8. Антон

    А в sitemap картинки надо отдельно добавлять? Слышал про image sitemap. Помогает роботу находить изображения при ленивой загрузке или это уже избыточно с нативным loading=lazy?

    1. Антон, image sitemap полезен как страховка, особенно если картинок много и они важны для трафика. С нативным loading=lazy он не обязателен, но и не мешает — часть изображений находится быстрее. Добавить стоит, хуже не станет. Но первично — чтобы у картинок был реальный src в HTML; sitemap это дополнение, а не замена нормальной вёрстки.

  9. Марина

    Первый экран вообще не стоит грузить лениво. Картинки, видимые сразу, надо отдавать обычным способом, а lazy применять только к тому, что ниже сгиба. Иначе бьёшь и по скорости первого экрана, и по индексации главных изображений.

  10. Фёдор

    Нужно и то и другое. Робот должен и забрать картинку (нормальный src), и понять, что на ней (alt). Одно без другого не работает: видит без alt — не знает, о чём; знает alt, но не видит — нечего индексировать.

  11. Ксения

    А alt при этом всё равно нужен? Или если картинка через lazy load не видна роботу, то и alt не поможет? Хочу понять, что первично — видимость картинки или подпись.

    1. Ксения, нужно и то, и другое. Робот должен и забрать картинку (нормальный src в HTML), и понять, что на ней (alt). Одно без другого не работает: видит без alt — не знает, о чём изображение; знает alt, но не видит картинку — нечего индексировать. Сначала обеспечьте видимость src, потом проверьте alt на каждой значимой картинке.

  12. Роман

    Поиск по картинкам вообще недооценённый источник. У нас в товарке до 15% трафика шло с картинок, пока мы его не убили ленивой загрузкой. Вернули — вернулся и трафик. Мало кто про этот канал думает.

  13. Жанна

    Нативный loading=lazy — спасение. Браузер сам откладывает загрузку, а робот при этом видит нормальный src в HTML. Никаких костылей на JS. Заменили плагин на нативный атрибут, и волки сыты, и картинки в индексе.

  14. Проверяется просто: смотришь исходный HTML (не отрендеренный) — есть ли реальный src у картинок или там заглушка и data-src, который подставляет JS. Если src пустой до отработки скрипта, робот картинку может не забрать.

  15. Алина

    А как понять, что робот не видит мои картинки из-за ленивой загрузки? В Вебмастере есть где посмотреть, сколько изображений в индексе, или только по трафику из поиска по картинкам догадываться?

    1. Алина, откройте исходный HTML страницы (просмотр кода, не инспектор): если у картинок реальный src — робот их видит, если пустая заглушка и data-src, который подставляет JS, — может не забрать. Плюс в Вебмастере посмотрите, сколько изображений в индексе и есть ли трафик из поиска по картинкам. Резкое падение этого трафика — прямой симптом проблемы.

  16. Виктор

    Реальная засада, на которую напоролись. Lazy load на JS без нормального атрибута ускорил страницу, но робот перестал видеть картинки — и трафик из поиска по картинкам обнулился. Перешли на нативный loading=lazy, изображения вернулись в индекс.

Комментарии закрыты.

Прокрутить вверх