Настройка альтернативных текстов для изображений 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка альтернативных текстов для изображений 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка альтернативных текстов для изображений 1С-Битрикс

Пустой alt — это не просто проблема доступности. Это SEO-потеря: Google использует alt-текст как текстовый сигнал для ранжирования изображений в поиске. Интернет-магазин с тысячей товаров, у которых alt либо пустой, либо равен «image.jpg» — это тысяча пропущенных точек входа из Google Images. В Битриксе alt-тексты не заполняются автоматически нигде в стандартных компонентах.

Где хранится alt в инфоблоке

Битрикс хранит alt-текст изображения в таблице b_file — поле DESCRIPTION. Это поле заполняется в административной части при загрузке файла. Также для свойств типа F есть поле DESCRIPTION в b_iblock_element_property — это подпись к конкретному использованию изображения в элементе, независимо от подписи в b_file.

Приоритет при выводе: если у свойства элемента есть DESCRIPTION — использовать его; если нет — взять DESCRIPTION из b_file; если и там пусто — сгенерировать из названия товара.

В шаблоне компонента:

$fileId = $arResult['DETAIL_PICTURE']['ID'];
$fileData = \CFile::GetFileArray($fileId);

$alt = '';
// Приоритет 1: описание свойства элемента
if (!empty($arResult['PROPERTIES']['DETAIL_PICTURE']['DESCRIPTION'])) {
    $alt = $arResult['PROPERTIES']['DETAIL_PICTURE']['DESCRIPTION'];
}
// Приоритет 2: описание файла
elseif (!empty($fileData['DESCRIPTION'])) {
    $alt = $fileData['DESCRIPTION'];
}
// Приоритет 3: название товара
else {
    $alt = $arResult['NAME'];
}

$alt = htmlspecialcharsEx($alt);

Массовое заполнение alt для существующих товаров

Если магазин работает несколько лет и тысячи изображений без alt — нужен скрипт массового заполнения. Логика: пройти все элементы инфоблока, для каждого взять DETAIL_PICTURE и MORE_PHOTO, проверить DESCRIPTION в b_file, при пустом — заполнить из названия элемента.

Скрипт запускается агентом Битрикса или через CLI:

$res = \CIBlockElement::GetList(
    ['ID' => 'ASC'],
    ['IBLOCK_ID' => CATALOG_IBLOCK_ID],
    false,
    ['nTopCount' => 100, 'iNumPage' => $page],
    ['ID', 'NAME', 'DETAIL_PICTURE']
);

while ($el = $res->GetNextElement()) {
    $fields = $el->GetFields();
    if (empty($fields['DETAIL_PICTURE'])) continue;

    $fileId = $fields['DETAIL_PICTURE'];
    $fileData = \CFile::GetFileArray($fileId);

    if (empty($fileData['DESCRIPTION'])) {
        $DB->Query("UPDATE b_file SET DESCRIPTION = '" .
            $DB->ForSql($fields['NAME']) .
            "' WHERE ID = " . (int)$fileId);
    }
}

Прямой UPDATE в b_file быстрее, чем CFile::Update() — тот сбрасывает кеш по каждому файлу отдельно.

Alt для изображений в инфоблоке новостей и статей

Для изображений, вставленных через TinyMCE в поле DETAIL_TEXT, alt заполняется непосредственно в редакторе. Проблема: если контент-менеджеры игнорируют поле alt в диалоге вставки изображения, картинки получают пустой alt="" или alt="image".

Решение на уровне редактора: в настройках TinyMCE (файл конфигурации в шаблоне) добавить обязательность поля alt через кастомный плагин или через валидацию формы вставки. Другой подход — постобработка HTML при сохранении через обработчик OnBeforeIBlockElementUpdate: парсить DETAIL_TEXT через DOMDocument, находить <img> без alt и подставлять заголовок статьи.

Декоративные изображения

Иконки, разделители и декоративные фоновые элементы должны иметь пустой alt="" — это намеренно пустой атрибут, сигнализирующий screen reader игнорировать изображение. Ошибка — вообще не указывать alt (нарушение WCAG 1.1.1) или указывать описательный текст для декора (лишний шум для assistive technology). В шаблонах Битрикса иконки часто выводятся через <img> — стоит заменить их на inline SVG с aria-hidden="true" или добавить явный alt="".