БесплатноБесплатный аудит сайта и кода на 1С-Битрикс при заказе доработки или поддержки

Изображения товаров в 1С-Битрикс: загрузка, обмен и оптимизация

Изображения товаров в 1С-Битрикс: загрузка, обмен и оптимизация картинок каталога

Фотография — это то, по чему покупатель решает, стоит ли вообще открывать карточку. В интернет-магазине товар нельзя потрогать, поэтому картинка берёт на себя работу и продавца, и витрины: показывает, что это, в каком виде, с какими деталями. И одновременно фото — это самая тяжёлая часть страницы: именно изображения чаще всего раздувают вес каталога, роняют скорость и портят показатели Core Web Vitals. Получается вилка: картинки должны быть крупными и качественными, чтобы продавать, и лёгкими, чтобы быстро грузиться. Разрешается эта вилка не «на глаз», а настройками: ресайзом, форматами, ленивой загрузкой и грамотным обменом с 1С.

В этой статье разберём изображения товаров в 1С-Битрикс без общих слов: как система хранит картинки каталога, чем детальная картинка отличается от превью, как собрать галерею на свойстве «Больше фотографий» (MORE_PHOTO), как работает ресайз в Битрикс через CFile::ResizeImageGet и параметры компонентов, какие ставить размеры и качество, как отдавать WebP-товары и не проваливать LCP главного фото, как включить lazy-load и адаптивные srcset, как наложить водяной знак, как назвать файлы и прописать alt под SEO, как связать цвет торгового предложения с его фотографией, как массово загрузить фото из папки и по URL, и, главное, как настроить обмен картинок с 1С так, чтобы переносить только изменённые снимки и не затирать загруженные вручную. Материал — выжимка из наших внедрений по разработке каталога товаров на 1С-Битрикс, где работа с фото закладывается в основу витрины.

Коротко

  • У товара есть детальная картинка и превью; галерею собирают из множественного свойства «Больше фотографий» (MORE_PHOTO).
  • На витрину выводят не оригинал, а ресайзнутую копию нужного размера — за это отвечает CFile::ResizeImageGet и параметры компонентов.
  • Скорость дают три веща: разумное качество JPEG, WebP вместо тяжёлого JPEG и lazy-load + srcset для адаптивных картинок.
  • Главное фото карточки — обычно элемент LCP: его не откладывают в lazy, а грузят приоритетно.
  • Водяной знак накладывают на ресайзнутые копии, а не на оригиналы; alt и осмысленные имена файлов работают на SEO картинок.
  • Обмен с 1С должен переносить только изменённые фото и не затирать загруженные вручную — это решают источником правды и настройкой обработчика.

Почему фото товара — это деньги

Начнём с того, почему изображениям вообще стоит уделять отдельную статью. В офлайне товар выбирают руками и глазами; в онлайне остаётся только глаз, и работает он по картинке. Хорошее фото снимает сомнения («да, это оно, в нужном цвете, с той самой деталью»), плохое или отсутствующее — рождает их. На карточке без нормальных снимков конверсия падает, а количество возвратов растёт: человек получает не то, что представлял.

Но у той же картинки есть обратная сторона — вес. На типичной странице каталога изображения занимают львиную долю всех байтов, которые грузит браузер. Если выводить тяжёлые оригиналы, страница будет открываться секундами, а поисковик зафиксирует плохие Core Web Vitals — в первую очередь LCP (время отрисовки самого крупного элемента, которым как раз обычно и является главное фото товара). Медленный каталог хуже ранжируется и хуже конвертирует одновременно.

Отсюда весь смысл работы с изображениями в Битриксе: сделать так, чтобы картинки продавали (крупные, качественные, с галереей и зумом) и при этом не тормозили (лёгкие, в современных форматах, с ленивой загрузкой). Это не выбор «или-или», а набор инженерных настроек, которые дают и то, и другое. Дальше — по порядку, от того, как система вообще хранит файлы, до тонкостей обмена с 1С.

Терминология: «детальная картинка» (DETAIL_PICTURE) — главное фото на карточке; «превью» (PREVIEW_PICTURE) — фото для списков и плиток; «галерея» — набор дополнительных снимков (обычно свойство MORE_PHOTO); «ресайз» — создание уменьшенной копии из оригинала; «LCP» — метрика отрисовки самого крупного элемента экрана. Дальше эти слова используются строго в этих значениях.

Как Битрикс хранит изображения

Чтобы уверенно работать с картинками, важно понимать модель хранения. В 1С-Битрикс любой загруженный файл — не важно, фото товара, иконка раздела или картинка новости — регистрируется в единой таблице файлов (модуль «Главный», API — класс CFile). У файла есть числовой идентификатор, имя, размеры, физический путь на диске и служебные поля. Поля картинок элемента инфоблока (детальная и превью) хранят как раз такой идентификатор файла, а не «путь к картинке» напрямую.

Практических следствий из этого несколько:

Иными словами, картинка товара в Битриксе — это не просто «загруженный jpg», а запись в таблице файлов плюс набор порождённых из неё уменьшенных копий. Понимание этой связки объясняет почти всё дальнейшее: и как работает ресайз, и почему WebP отдаётся отдельным файлом, и откуда берётся вес папки /upload/.

Детальная картинка и превью

У каждого товара (элемента инфоблока) есть два штатных поля под изображения, и их постоянно путают. Разберём чётко.

Превью (PREVIEW_PICTURE)

В интерфейсе это поле называется «Картинка для анонса». Оно показывается там, где товар выводится списком: плитка в каталоге и в разделе, блоки «Хиты продаж» и «Новинки», результаты поиска, строка в корзине, похожие товары. То есть превью — это лицо товара в перечислениях. Обычно оно небольшое (квадрат или прямоугольник в пару сотен пикселей на витрине).

Детальная картинка (DETAIL_PICTURE)

В интерфейсе — «Детальная картинка». Это главное большое фото на самой карточке товара, вокруг которого строится галерея и зум. Оно крупнее превью и должно быть качественным, потому что именно его рассматривают вблизи.

Как их обычно заполняют

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

Практика: если в списках товары «прыгают» или превью выглядят по-разному обрезанными — почти всегда причина в том, что исходники разного соотношения сторон, а компонент выводит их без единого режима ресайза. Договоритесь о едином формате исходников (например, квадрат на белом фоне) и задайте один режим вписывания — витрина сразу станет опрятной.
Оригинал → ресайз → лёгкие копии на витрину Оригинал 2000×2000 тяжёлый JPEG CFile:: ResizeImageGet Превью 300×300 плитки, поиск, корзина Детальная 800×800 главное фото карточки WebP-копия легче при том же качестве оригинал не отдают браузеру — только уменьшенные копии из кэша ресайза
Схема: тяжёлый оригинал проходит через ресайз и превращается в лёгкие превью, детальную и WebP-копии, которые и отдаются на витрину.

Галерея: свойство «Больше фотографий» (MORE_PHOTO)

Двух полей — превью и детальной — хватает на одно главное фото. Но покупателю нужны разные ракурсы: спереди, сзади, в упаковке, деталь крупным планом, товар в использовании. За это отвечает галерея, а собирают её из отдельного множественного свойства.

Классический приём — завести у инфоблока товаров множественное свойство типа «Файл» и назвать его «Больше фотографий» с символьным кодом MORE_PHOTO. Именно такой код по традиции понимают штатные шаблоны и обмен, поэтому его берут как стандарт. В это свойство загружают все дополнительные снимки товара, и их может быть сколько угодно.

Как галерея собирается в карточке:

Штатный компонент детального просмотра bitrix:catalog.element умеет всё это «из коробки»: в его параметрах указывают, какое свойство считать галереей (по умолчанию как раз MORE_PHOTO), и он выводит связку «большое фото + миниатюры» со сменой кадра. Разработчику остаётся оформить это по дизайну и, при необходимости, подключить библиотеку зума/слайдера.

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

Ресайз: CFile::ResizeImageGet и компоненты

Мы уже несколько раз сказали «ресайз» — разберём, что это технически. Ресайз — это создание из оригинала уменьшенной (или вписанной в заданные габариты) копии нужного размера. В Битриксе за это отвечает метод ядра CFile::ResizeImageGet. Он берёт файл по идентификатору, создаёт копию под заданные ширину и высоту, кэширует её на диске и возвращает путь к готовой уменьшенной картинке.

У метода есть режимы вписывания, и выбор режима — важное решение для аккуратной витрины:

РежимЧто делаетКогда применять
Пропорциональное вписываниеУменьшает так, чтобы картинка целиком поместилась в габариты, сохраняя пропорции; могут остаться поляКогда важно показать товар целиком, не обрезая
Обрезка по краям (кроп)Заполняет весь прямоугольник, лишнее по краям обрезаетДля ровной сетки плиток одинакового размера
Точное совпадениеПриводит к точным размерам (может исказить пропорции)Редко; только для подготовленных под размер исходников

Самое важное на практике: вручную ResizeImageGet вызывать приходится редко. В подавляющем большинстве случаев ресайзом управляют параметры компонентов каталога. Когда вы в настройках bitrix:catalog.section (список товаров) или bitrix:catalog.element (карточка) задаёте ширину и высоту изображений превью и детальной, компонент под капотом сам вызывает ResizeImageGet с этими габаритами и выбранным режимом. То есть «настроить ресайз» для контент-менеджера и интегратора — это чаще всего «задать размеры картинок в параметрах компонента», а не писать код.

Прямой вызов метода нужен, когда картинку выводят в нестандартном месте (кастомный блок, письмо, выгрузка), где нет готового компонента. Тогда в шаблоне вызывают CFile::ResizeImageGet с нужными размерами, режимом и, при необходимости, водяным знаком, и подставляют полученный путь в тег изображения.

Какие размеры превью и детальных задавать

Частый вопрос — «какие пиксели ставить». Универсального числа нет, но есть рабочая логика: размер уменьшенной копии задают под реальный размер места на странице, где картинка показывается, с запасом на дисплеи высокой плотности (Retina).

Ход рассуждения такой:

  1. Померить место вывода. Посмотреть в макете, какого размера плитка товара, миниатюра галереи, главное фото карточки в пикселях на десктопе и на мобильном.
  2. Заложить плотность экрана. Для чёткости на Retina-экранах уменьшенную копию делают крупнее места вывода (ориентировочно в полтора-два раза), чтобы картинка не была мыльной.
  3. Не переусердствовать. Отдавать фото 2000×2000 в плитку 300×300 бессмысленно — это тот самый тяжёлый оригинал на витрине, который убивает скорость.
  4. Согласовать с адаптивом. Для мобильного и десктопа готовят разные размеры и отдают их через srcset (об этом ниже), а не грузят один большой файл на всех.

Ориентировочная раскладка, от которой удобно отталкиваться (точные числа подгоняют под макет):

Место выводаРольЛогика размера
Плитка в каталогеПревьюПод размер карточки в сетке с запасом на Retina
Миниатюра галереиMORE_PHOTOМаленький квадрат, самый лёгкий размер
Главное фото карточкиДетальнаяПод ширину блока фото на карточке (это ваш LCP)
Просмотр по клику / зумОригинал или крупная копияКрупный размер, но грузится по действию пользователя

Главный принцип держите в голове всегда: размер отдаваемой копии ≈ размер места вывода (с поправкой на плотность экрана). Всё, что больше, — это лишние килобайты, которые ничего не добавляют глазу, но замедляют страницу.

Качество и вес: настройка JPEG

Размер в пикселях — не единственный рычаг веса. Второй — качество сжатия. Для JPEG качество задаётся числом (условно от 0 до 100 процентов): чем выше, тем меньше артефактов сжатия, но тем тяжелее файл. В Битриксе качество ресайза настраивается глобально (в настройках модуля «Загрузка файлов») и может переопределяться в параметрах ресайза.

Практические ориентиры:

Важно понимать взаимосвязь: итоговый вес картинки складывается из размера в пикселях и качества сжатия и формата. Нельзя вытянуть скорость только качеством, если при этом в плитку 300×300 отдаётся копия 1500×1500. Сначала правильный размер под место, потом разумное качество, потом современный формат — в такой последовательности рычаги дают максимум эффекта.

Важно: не путайте качество исходника и качество ресайза. Оригиналы для каталога держите максимально качественными (из них потом делаются все копии и зум), а сжатие применяйте на уменьшенных копиях, которые отдаются на витрину. Пережатый оригинал испортит все производные картинки, и восстановить их будет уже не из чего.

WebP и скорость: LCP главного фото

Третий рычаг веса — формат. Классический JPEG хорош, но существуют современные форматы, которые при том же визуальном качестве весят заметно меньше. Главный из них для интернет-магазина — WebP. Перевод картинок каталога в WebP — одна из самых результативных мер по скорости, потому что изображения — основная масса байтов страницы.

Как это устроено на практике:

Отдельно про LCP главного фото

LCP (Largest Contentful Paint) — метрика Core Web Vitals, измеряющая, когда отрисовывается самый крупный элемент экрана. На карточке товара это почти всегда главное детальное фото. Значит, именно от его веса и способа загрузки напрямую зависит, «зелёный» у вас LCP или нет. Отсюда практические правила по главному фото:

Связь фото и Core Web Vitals мы подробно разбираем в отдельном материале про Core Web Vitals интернет-магазина, а общий подход к разгону витрины — в услуге по ускорению сайта на 1С-Битрикс.

Первый экран грузим сразу, остальное — лениво Первый экран Главное фото = LCP fetchpriority = high Ниже экрана lazy lazy lazy Правила загрузки: • главное фото — без lazy, приоритет high • остальные — loading="lazy" • отдаём WebP + запасной JPEG • размер копии ≈ размер места • width/height заданы — нет скачка (CLS) • srcset под мобильный и десктоп Итог: быстрый LCP и лёгкая страница
Схема: главное фото первого экрана грузится приоритетно и формирует LCP, а картинки ниже экрана подгружаются лениво.

Lazy-load и адаптивные картинки (srcset)

Две браузерные техники дают львиную долю ускорения каталога почти бесплатно: ленивая загрузка и адаптивные изображения.

Lazy-load (ленивая загрузка)

Идея простая: не грузить картинки, которых пользователь пока не видит. На странице каталога с десятками товаров браузер по умолчанию тянет все изображения сразу, хотя ниже первого экрана их ещё не видно. Атрибут loading="lazy" на теге изображения говорит браузеру подгружать картинку только по мере прокрутки к ней. Это резко снижает объём загрузки при открытии страницы и ускоряет первый экран. Единственное исключение — картинки первого экрана и, в частности, LCP-фото карточки: их в lazy не отправляют.

Адаптивные картинки (srcset)

Вторая техника — отдавать разным экранам разные размеры одной картинки. Для этого в теге изображения используют атрибут srcset (набор вариантов разного размера) и sizes (подсказка, какого размера место на текущем экране). Браузер сам выбирает подходящий файл: телефону отдаётся маленькая копия, десктопу с Retina — крупная. Без этого мобильный пользователь скачивает десктопные размеры и зря тратит трафик и время.

Что это даёт вместе:

В Битриксе всё это добавляют на уровне шаблонов компонентов каталога: в разметку вывода картинок вписывают loading="lazy" и формируют srcset из нескольких ресайзнутых копий разного размера. Это несложная, но очень окупаемая доработка шаблона.

Водяные знаки на картинках

Водяной знак — это логотип или текст поверх фотографии. Его ставят по двум причинам: защитить снимки от копирования конкурентами и заодно продвигать бренд (фото уходит в поиск и соцсети уже с вашим логотипом). Битрикс умеет накладывать водяной знак штатно — на этапе ресайза.

Как это работает: при генерации уменьшенной копии в параметры ресайза передаётся описание водяного знака. Знаком может быть:

Настраивают положение (угол или центр), прозрачность и отступы. Практические правила, которые мы соблюдаем:

Практика: водяной знак — компромисс между защитой и продажами. Слишком навязчивый логотип раздражает покупателя и снижает доверие к фото, слишком мелкий — не защищает. Оптимально — сдержанный полупрозрачный знак, который читается, но не перекрывает товар.

Alt и имена файлов для SEO

Картинки товаров — это ещё и источник трафика из поиска по картинкам, и фактор доступности. Две вещи, которые прямо влияют на SEO изображений, — атрибут alt и имя файла.

Атрибут alt

alt — это текстовое описание картинки. Его читают программы экранного доступа (доступность для незрячих) и поисковые роботы (понимание, что на фото). Хороший alt для товара — это осмысленное описание с названием товара, а не пустая строка и не «фото1». В Битриксе alt можно брать из специальных полей картинки (описание файла) или формировать в шаблоне из названия товара и характеристик. Главное — чтобы alt был осмысленным и не спамным: описывайте, что на фото, естественным языком.

Имена файлов

Имя файла картинки тоже участвует в ранжировании и в целом влияет на «чистоту» каталога. smartphone-samsung-galaxy-black.webp лучше, чем IMG_20230617_0042.jpg. Осмысленные латинские имена файлов (транслит названия товара) помогают поиску по картинкам и делают выгрузки понятнее. При массовой загрузке и обмене имена часто задаются автоматически — стоит проследить, чтобы схема именования была осмысленной, а не случайной.

Оба фактора — alt и имена — это часть более широкой темы оптимизации картинок под поиск. Полный разбор с приоритетами и нюансами мы вынесли в отдельную статью про оптимизацию изображений под SEO в 1С-Битрикс; здесь фиксируем: осмысленный alt и человеческие имена файлов — обязательный минимум для каждого фото каталога.

Зум и мобильная галерея

Галерея — это не только набор картинок, но и способ их рассматривать. Два ключевых сценария — зум на десктопе и свайп на мобильном.

Зум

Зум позволяет разглядеть детали: фактуру ткани, разъёмы, надписи. Реализуют его по-разному: увеличение области под курсором при наведении, открытие крупной версии в модальном окне по клику, отдельная «лупа». Важный момент для скорости: крупную версию под зум грузят по действию пользователя (навёл/кликнул), а не сразу при открытии карточки. Иначе тяжёлый оригинал утянет вес страницы, хотя большинство посетителей зумом не пользуются.

Мобильная галерея

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

Технически зум и слайдер обычно подключают лёгкой JS-библиотекой поверх штатной галереи catalog.element. Главное — не превращать красивую галерею в тормоз: тяжёлые версии грузить лениво и по действию, а первый кадр держать лёгким и приоритетным.

Галерея товара и фото торговых предложений Главное фото DETAIL_PICTURE 1 2 3 4 миниатюры = свойство MORE_PHOTO Выбор цвета торгового предложения: Синий Чёрный Белый Выбрали «Синий» → подставилась галерея синего SKU своё фото у каждого предложения; нет — берём фото товара каждый цвет → свой набор фото; общий запасной вариант — картинка родительского товара
Схема: главное фото и миниатюры MORE_PHOTO образуют галерею, а выбор цвета торгового предложения подставляет его собственный набор фотографий.

Видео товара

Фотографий часто мало — сложный или дорогой товар выигрывает от видео: обзор, распаковка, товар в действии. В Битриксе видео к товару добавляют несколькими способами, и выбор влияет на скорость.

Ключевое правило скорости для видео такое же, как для зума: плеер и тяжёлый ролик подгружают по клику, а не при открытии карточки. До клика показывают лёгкую превью-картинку (постер) с кнопкой воспроизведения. Иначе автозагрузка видео убьёт и скорость, и мобильный трафик. Видео — сильный инструмент для конверсии, но обращаться с ним нужно так же аккуратно по весу, как и с фото.

Картинки торговых предложений: цвет → фото

Если у товара есть варианты — цвета, размеры, комплектации, — их реализуют торговыми предложениями (SKU). И здесь возникает частая, но не всегда очевидная задача: при выборе варианта должна меняться и фотография. Выбрал покупатель синий — увидел фото синего, а не чёрного.

Как это устроено. Торговые предложения — это отдельный инфоблок, связанный с товаром, и у каждого предложения есть свои поля картинок: своя детальная картинка и, при необходимости, своё множественное свойство «Больше фотографий». Значит, фотографии конкретного цвета кладут не в родительский товар, а в само торговое предложение этого цвета.

Логика вывода:

  1. У каждого SKU — свои фото. В детальную картинку (и галерею) предложения «синий» загружают снимки синего варианта, в «чёрный» — чёрного.
  2. Компонент связывает выбор и галерею. В параметрах bitrix:catalog.element указывают, какие свойства предложений участвуют в выборе и что для них берутся собственные изображения.
  3. Переключение меняет кадры. Покупатель кликает по цвету — карточка подставляет галерею выбранного предложения.
  4. Запасной вариант. Если у конкретного предложения своих фото нет, показывают изображения родительского товара, чтобы место не оставалось пустым.

Здесь легко попасть в две крайности. Первая — не загрузить фото вариантам вовсе, и тогда при выборе цвета картинка не меняется (покупатель путается). Вторая — грузить полный набор фото каждому варианту, раздувая каталог и обмен. Разумный баланс: своему цвету — один-два ключевых кадра, а общие ракурсы (упаковка, детали) держать у родительского товара. Подробно про саму механику вариантов — в статье про торговые предложения (SKU) в 1С-Битрикс.

Массовая загрузка: из папки и по URL

Когда товаров сотни и тысячи, загружать фото по одному через карточку невозможно. Нужны массовые способы. Основных — три.

СпособКак работаетКогда удобен
Импорт из папки по имени файлаФото складывают в папку с именами по артикулу/коду товара; скрипт или импорт сопоставляет файл и товарЕсть архив фото от поставщика или фотографа, имена = артикулы
Загрузка по URLВ данных товара есть ссылки на картинки; система скачивает их и подставляет в поляПрайс или фид поставщика содержит ссылки на изображения
Импорт вместе с товарами (CSV/Excel)В файле импорта товаров есть колонки с путями/ссылками на фотоПервичное наполнение или разовая большая загрузка

Несколько практических моментов, которые экономят часы:

В большинстве магазинов, впрочем, основным каналом поступления фото становится не разовый импорт, а регулярный обмен с 1С — к нему и переходим.

Обмен картинок с 1С по CommerceML

Стандартный способ наполнения каталога на Битриксе — обмен с 1С по протоколу CommerceML (коммерческая информация). Через него передаются товары, цены, остатки — и изображения. Разберём, как именно фото попадают из 1С на сайт.

При выгрузке 1С формирует пакет обмена: XML-файлы с описанием товаров и папку с картинками. В XML для каждого товара указаны имена его файлов изображений, а сами файлы лежат в пакете. На стороне сайта агент обмена принимает пакет, разбирает XML и для каждого товара загружает его картинки в поля инфоблока: первое изображение обычно попадает в детальную картинку, остальные — в множественное свойство галереи (MORE_PHOTO). Товары сопоставляются с элементами по внешнему коду (XML_ID), поэтому фото «прилипают» к нужному товару даже при переносе.

Что здесь важно понимать:

Последний пункт — ключевая боль крупных каталогов, и ей посвящён отдельный раздел.

Обмен картинок с 1С: только изменённые 1С пакет CommerceML Проверка изменений Фото изменилось? хэш / дата / версия файла Да →грузим Нет →пропуск Сайт обновились только изменённые фото неизменённые снимки не гоняются каждый раз — обмен быстрый и лёгкий
Схема: обмен проверяет, изменилось ли фото, и переносит только новые снимки, а неизменённые пропускает — так выгрузка остаётся быстрой.

Только изменённые: не гонять всё каждый раз

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

Подходы, которыми этого добиваются:

Обратная сторона: перезапись ручных фото

У обмена картинок есть коварная проблема, о которую спотыкаются очень многие: обмен затирает загруженные вручную фото. Сценарий такой. Менеджер добавил красивые снимки товара прямо на сайте. В 1С этих фото нет. Приходит очередной обмен — и стандартная логика переустанавливает изображения товара из пакета 1С, где фото либо старые, либо вообще отсутствуют. Ручные снимки пропадают. Обиднее всего, что происходит это молча и обнаруживается не сразу.

Как это предотвращают:

  1. Определить единый источник правды по фото. Либо все изображения живут только в 1С (тогда и добавляют их там), либо только на сайте (тогда обмен вообще не трогает картинки). Смешанная схема без правил — источник затираний.
  2. Хранить ручные фото в отдельном свойстве. Завести свойство под «сайтовые» изображения, которое обмен не переустанавливает, и выводить галерею из обоих источников. Обмен обновляет «свои» фото, ручные остаются нетронутыми.
  3. Доработать обработчик обмена. Настроить логику так, чтобы обмен не очищал изображения товара, если в пакете для него картинок нет, и не перезаписывал те, что не менялись.
  4. Зафиксировать правило в регламенте. Договориться с контент-командой, где заводятся фото, чтобы не создавать конфликт между ручной загрузкой и обменом.

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

Важно: прежде чем настраивать обмен картинок, ответьте на один вопрос — где живёт «мастер» фотографий: в 1С или на сайте. От этого ответа зависит вся конфигурация: инкрементальная выгрузка, сравнение по хэшу, отдельное свойство под ручные фото, поведение при пустом наборе картинок. Без явного ответа обмен рано или поздно затрёт то, что дорого набивалось руками.

Хранение, вес и CDN

Картинки живут на диске, и в большом каталоге их вес становится отдельной инженерной темой. Разберём, что учитывать.

Где и сколько весит

Оригиналы фото лежат в папке загрузок (/upload/), уменьшенные копии — в подпапке ресайза, WebP-версии — отдельными файлами. В каталоге на десятки тысяч товаров с галереями это легко десятки гигабайт. Отсюда практические заботы:

CDN — сеть доставки контента

Для крупного каталога отдачу картинок выносят на CDN — сеть серверов, раздающих статику с узла, ближайшего к посетителю. Что это даёт:

При этом CDN — не обязательная мера для всех. Небольшому магазину достаточно грамотного ресайза, WebP, кэша и корректных заголовков кэширования на своём сервере. CDN становится оправдан, когда картинок очень много, аудитория распределена географически и отдача статики заметно нагружает сервер. Общий разгон витрины, включая работу со статикой, мы выносим в услугу по ускорению сайта на 1С-Битрикс.

Пошагово: настраиваем изображения каталога

Сведём всё в практическую последовательность — так мы настраиваем работу с фото на реальных проектах, от полей инфоблока до обмена и скорости.

  1. Проверить поля и свойства. У инфоблока товаров должны быть детальная картинка, превью и множественное свойство «Больше фотографий» (MORE_PHOTO). При наличии вариантов — поля картинок у торговых предложений.
  2. Задать правила исходников. Договориться о едином формате мастер-фото (например, квадрат на белом фоне, высокое качество) и порядке кадров в галерее.
  3. Настроить ресайз в компонентах. В параметрах catalog.section и catalog.element задать размеры превью, детальной и миниатюр под реальные места вывода с запасом на Retina; выбрать режим вписывания.
  4. Выставить качество. Задать качество ресайза около 80–85 процентов; оригиналы держать качественными.
  5. Включить WebP. Настроить отдачу WebP с запасным JPEG (через <picture> или на уровне сервера/CDN).
  6. Добавить lazy-load и srcset. В шаблонах вывода картинок проставить loading="lazy" для изображений ниже экрана и сформировать srcset под мобильный и десктоп.
  7. Приоритизировать LCP-фото. Главное фото карточки вывести без lazy, с fetchpriority="high", заданными размерами и в WebP.
  8. Настроить водяной знак. Если нужен — наложить на ресайзнутые копии, подобрать положение и прозрачность, не закрывая товар.
  9. Прописать alt и имена файлов. Настроить формирование осмысленных alt из названия товара и человеческие имена файлов.
  10. Подключить галерею, зум и видео. Оформить галерею из детальной + MORE_PHOTO, зум и мобильный свайп; тяжёлые версии и видео грузить по действию.
  11. Настроить обмен картинок. Определить источник правды по фото; включить перенос только изменённых; защитить ручные фото от затирания; сопоставление по XML_ID.
  12. Проверить вес и кэш. Убедиться, что на витрину идут копии, а не оригиналы; настроить заголовки кэширования; при большом каталоге рассмотреть CDN.

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

Реализация в компонентах и API

Соберём в одном месте, какими средствами Битрикса реализуется всё описанное, — чтобы было понятно, что где настраивается.

ЗадачаИнструмент 1С-Битрикс
Хранение файлов картинокМодуль «Главный», класс CFile, таблица файлов
Главное фото и превьюПоля элемента DETAIL_PICTURE и PREVIEW_PICTURE
Галерея дополнительных фотоМножественное свойство типа «Файл» — MORE_PHOTO
Ресайз и уменьшенные копииCFile::ResizeImageGet + размеры в параметрах компонентов
Вывод списка и карточкиbitrix:catalog.section, bitrix:catalog.element
Водяной знакПараметры водяного знака при ресайзе
Фото вариантовПоля картинок инфоблока торговых предложений
Наполнение из учётаОбмен с 1С (CommerceML), сопоставление по XML_ID
WebP, lazy-load, srcsetШаблоны компонентов, <picture>, атрибуты тега img
Отдача статикиКэш ресайза, заголовки кэширования, при необходимости CDN

Отдельно про типовой сценарий в коде. Когда картинку выводят стандартным компонентом, размеры и режим ресайза берутся из его параметров — писать код не нужно. Когда фото выводят в нестандартном месте (кастомный блок, письмо, выгрузка), в шаблоне напрямую вызывают CFile::ResizeImageGet с идентификатором файла, нужными габаритами, режимом вписывания и — при необходимости — описанием водяного знака, а полученный путь подставляют в тег изображения вместе с alt, loading и srcset. Таким образом, вся работа с картинками собирается из одного механизма файлов и ресайза, а задача разработчика — правильно задать размеры под места вывода, форматы и поведение загрузки.

Частые ошибки

Мини-FAQ. Сколько фото нужно товару? Столько, чтобы снять сомнения покупателя: обычно главный кадр, пара ракурсов, деталь крупным планом и товар в использовании. Больше — не всегда лучше: каждая лишняя картинка добавляет вес обмену и странице. Качество и информативность важнее количества.

Чек-лист по изображениям товаров

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

  1. Поля на месте. Есть детальная, превью и множественное свойство «Больше фотографий» (MORE_PHOTO); у вариантов — свои картинки.
  2. На витрине — копии, не оригиналы. Везде выводятся ресайзнутые изображения под размер места, а не тяжёлые исходники.
  3. Размеры под места вывода. Плитка, миниатюра, главное фото имеют разумные размеры с запасом на Retina.
  4. Качество настроено. Ресайз около 80–85 процентов; оригиналы качественные и чистые (без водяного знака).
  5. WebP включён. Картинки отдаются в WebP с запасным JPEG.
  6. Lazy-load и srcset. Изображения ниже экрана ленивые; отдаются размеры под устройство.
  7. LCP-фото приоритетно. Главное фото карточки без lazy, с высоким приоритетом, в WebP, с заданными размерами.
  8. Alt и имена файлов. У каждого фото осмысленный alt; имена файлов человеческие и латинские.
  9. Галерея, зум, видео. Галерея собирается корректно; зум и тяжёлое видео грузятся по действию; на мобильном работает свайп.
  10. Обмен под контролем. Определён источник правды по фото; переносятся только изменённые; ручные фото не затираются; сопоставление по XML_ID.
  11. Вес и кэш. Настроены заголовки кэширования; папка загрузок под контролем; при большом каталоге рассмотрен CDN.

Вывод

Изображения товаров в 1С-Битрикс — это перекрёсток двух задач, которые обычно тянут в разные стороны: продавать и не тормозить. Продают крупные качественные фото, полноценная галерея на свойстве «Больше фотографий», зум, видео и фото под каждый вариант; не тормозят — ресайз до реального размера места, разумное качество, WebP, ленивая загрузка и приоритет для LCP-фото. Обе задачи решаются не «на глаз», а настройками: полями инфоблока, параметрами компонентов, шаблонами вывода и, что критично для наполняемых из учёта магазинов, грамотным обменом с 1С.

Практических выводов три. Первый: на витрину никогда не отдают оригиналы — только ресайзнутые копии нужного размера и в современном формате. Второй: главное фото карточки — это ваш LCP, и обращаться с ним нужно как с самым важным элементом страницы: грузить сразу, приоритетно и в WebP. Третий: обмен картинок с 1С настраивают осознанно — переносить только изменённые фото и защищать загруженные вручную снимки от затирания, заранее решив, где живёт «мастер» изображений. Сделайте это аккуратно — и каталог будет и красивым, и быстрым одновременно. А если работу с фото нужно выстроить с нуля или разобрать существующий каталог, мы помогаем с этим в рамках разработки каталога товаров на 1С-Битрикс и ускорения интернет-магазина. Больше разборов по теме — в рубрике «Каталог и поиск».

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

Как в 1С-Битрикс сделать галерею фотографий товара?

Одна детальная картинка (DETAIL_PICTURE) даёт только главное фото. Для галереи заводят множественное свойство типа «Файл» — по традиции его называют «Больше фотографий» с кодом MORE_PHOTO. В него загружают дополнительные снимки товара, а карточка выводит их миниатюрами под главным фото. Штатный компонент детального просмотра catalog.element умеет собирать галерею из главного изображения плюс значений MORE_PHOTO и показывать её со сменой активного кадра и зумом. Так что рецепт простой: детальная картинка — это обложка, а множественное свойство «Больше фотографий» — это остальные ракурсы, и вместе они образуют галерею.

Чем детальная картинка отличается от превью?

Это два разных поля элемента инфоблока с разными задачами. Превью (PREVIEW_PICTURE, «Картинка для анонса») показывается в списках: в плитке каталога, в блоках «Хиты», в поиске, в корзине. Детальная (DETAIL_PICTURE, «Детальная картинка») показывается на самой карточке товара как главное большое фото. На практике в оба поля часто загружают один и тот же исходник, а нужные размеры под плитку и под карточку система получает ресайзом на лету. Важно не путать эти поля с физическими размерами: одно и то же изображение выводится в разных размерах в зависимости от места, а ресайз делает из тяжёлого оригинала лёгкие превью и детальные копии.

Как уменьшить вес картинок товаров и ускорить каталог?

Ключевых мер несколько. Первое — не выводить оригиналы: любое изображение показывают через ресайз (CFile::ResizeImageGet или ресайз внутри компонента) до реального размера места на странице, а не масштабируют огромный файл средствами браузера. Второе — задать разумное качество JPEG (обычно в районе 80–85 процентов): выше — почти незаметно глазу, но тяжелее. Третье — отдавать WebP там, где браузер его поддерживает: этот формат при том же качестве заметно легче JPEG. Четвёртое — включить lazy-load для картинок ниже первого экрана и адаптивные srcset, чтобы телефон не грузил десктопные размеры. Вместе это снижает вес страницы каталога в разы и напрямую улучшает скорость и Core Web Vitals.

Что такое CFile::ResizeImageGet и зачем он нужен?

CFile::ResizeImageGet — это метод ядра Битрикса, который берёт исходный файл из таблицы файлов и создаёт из него уменьшенную (или вписанную в заданные габариты) копию нужного размера, кэшируя результат. Именно он стоит за параметрами размеров превью и детальной картинки в компонентах каталога: когда вы задаёте в настройках компонента ширину и высоту изображения, компонент под капотом вызывает ResizeImageGet. Метод поддерживает разные режимы (пропорциональное вписывание, обрезка по краям, точное совпадение), позволяет наложить водяной знак и задать качество. Готовые уменьшенные копии складываются в служебную папку и при повторных обращениях берутся из кэша, а не пересоздаются.

Как настроить водяной знак на картинках каталога?

Водяной знак (логотип или текст поверх фото) накладывается на этапе ресайза. Битрикс умеет добавлять его при генерации уменьшенной копии: в параметры ресайза передаётся описание водяного знака — картинка-логотип или текст, положение (например, по центру или в углу), прозрачность и отступы. Практично накладывать знак именно на ресайзнутые копии, а не на оригиналы: тогда исходные файлы остаются чистыми, а водяной знак масштабируется под размер превью. Важные тонкости: полупрозрачный логотип по центру защищает от воровства лучше, чем маленький значок в углу, но не должен закрывать сам товар; и знак не ставят на технические изображения вроде иконок разделов.

Почему при обмене с 1С затираются загруженные вручную фото?

Это классическая проблема. При обмене по CommerceML 1С выгружает свой набор картинок товара, и стандартная логика загрузки на стороне сайта на каждой выгрузке переустанавливает изображения из файла обмена — то есть заменяет то, что лежит в детальной картинке и в галерее, на то, что пришло из 1С. Если менеджер добавил фото руками на сайте, а в 1С их нет, очередной обмен их снесёт. Решают это по-разному: договариваются, что все фото живут только в 1С и загружаются оттуда; либо хранят «ручные» фото в отдельном свойстве, которое обмен не трогает; либо дорабатывают обработчик обмена, чтобы он не перезаписывал изображения, если в выгрузке для товара картинок нет. Главное — заранее определить единый источник правды по фото.

Как связать цвет торгового предложения с его фотографией?

Торговые предложения (SKU) — это отдельный инфоблок, привязанный к товару, и у каждого предложения есть свои поля, включая изображения. Чтобы при выборе цвета менялось фото, картинку конкретного цвета кладут в детальную картинку или в множественное свойство «Больше фотографий» самого торгового предложения, а не только основного товара. Тогда компонент карточки при переключении между предложениями подставляет галерею выбранного SKU: выбрали «синий» — показались фото синего варианта. Настраивается это в свойствах предложений и в параметрах компонента детального просмотра, где указывают, какие свойства предложений участвуют в выборе и берутся ли для них собственные картинки. Если у предложения своего фото нет, обычно показывают фото родительского товара как запасной вариант.

Стоит ли раздавать картинки каталога через CDN?

Для крупного каталога — да, это одна из самых эффективных мер по скорости. CDN — это сеть серверов, которая отдаёт статику (в том числе картинки) с узла, ближайшего к посетителю, разгружает основной сервер и обычно умеет сама конвертировать изображения в WebP и сжимать их. Практически подключают CDN так, чтобы ресайзнутые копии и оригиналы отдавались с CDN-домена, а генерация уменьшенных версий по-прежнему шла средствами Битрикса или на стороне CDN. Для небольшого магазина хватает грамотного ресайза, WebP, кэша и настроенных заголовков кэширования на своём сервере; CDN становится оправдан, когда картинок много, аудитория географически распределена и нагрузка на отдачу статики заметна.

Поделиться:

Каталог красивый, но медленный — или фото после обмена с 1С «разъезжаются»?

Настроим работу с изображениями от и до: галерею и фото вариантов, ресайз и WebP, lazy-load и приоритет LCP, водяные знаки, а главное — обмен картинок с 1С так, чтобы переносились только изменённые фото и ничего не затиралось. Каталог будет и продавать, и быстро грузиться. Рассчитаем стоимость по вашему проекту.

Услуга «Каталог товаров»

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс, настраивает каталог и изображения товаров, ресайз и WebP, галереи и фото торговых предложений, обмен картинок с 1С и ускорение витрины для среднего и крупного бизнеса.

← Все статьи блога