Почему WordPress требует alt атрибут на <img> элементах в виджетах и пишет an alt attribute must be present on img elements? Это не ошибка WordPress — это предупреждение валидации доступности (accessibility). Браузеры, редакторы кода, а также встроенный аудит WordPress (основанный на стандартах WCAG) сигнализируют, что изображение не имеет текстового описания.
Стандарт HTML требует, чтобы каждый тег <img> содержал атрибут alt:
<!-- Неправильно -->
<img src="banner.jpg">
<!-- Правильно -->
<img src="banner.jpg" alt="Описание изображения">
<!-- Декоративное изображение (намеренно пустой alt) -->
<img src="divider.jpg" alt="">
Почему это возникает именно в виджетах?
1. Виджет «Изображение» без заполненного поля Alt
Когда вы добавляете виджет изображения через Внешний вид → Виджеты или Настройка сайта, WordPress рендерит <img> тег. Если в медиабиблиотеке у файла не заполнено поле «Текст замены» (Alt Text), WordPress либо выводит пустой alt="", либо вовсе его опускает — в зависимости от версии и темы.
2. Кастомный HTML-виджет с ручным кодом
Разработчики или контент-менеджеры вставляют HTML напрямую и забывают прописать атрибут:
<!-- Вставили вручную без alt -->
<img src="/wp-content/uploads/logo.png">
3. Сторонние виджеты и плагины
Некоторые плагины генерируют HTML-код виджетов программно, и их разработчики не позаботились о добавлении alt. Это особенно часто встречается в слайдерах, галереях и виджетах социальных сетей.
4. Устаревший код темы
В файлах темы (sidebar.php, functions.php) могут быть захардкоженные изображения без alt:
// Устаревший код в теме
echo '<img src="' . get_template_directory_uri() . '/images/logo.png">';

Как это исправить
Способ 1 — Заполнить Alt Text в медиабиблиотеке
- Перейдите в Медиафайлы → Библиотека
- Откройте нужное изображение
- В правой панели найдите поле «Текст замены»
- Заполните осмысленным описанием
- Нажмите «Обновить»
После этого WordPress будет автоматически подставлять этот текст в alt при использовании изображения.
Способ 2 — Исправить в виджете напрямую
Если используете Блочный редактор (Gutenberg) в виджетах:
- Откройте Внешний вид → Редактор
- Найдите блок с изображением
- В правой панели блока заполните поле Alt text
Если используете Классический виджет HTML:
<!-- Было -->
<img src="/wp-content/uploads/promo.jpg">
<!-- Стало -->
<img src="/wp-content/uploads/promo.jpg" alt="Промо-баннер летней распродажи">
Способ 3 — Исправить в коде темы
Найдите все места, где выводятся изображения в сайдбаре или виджет-зонах, и добавьте alt:
// Плохо
echo '<img src="' . esc_url($image_url) . '">';
// Хорошо
echo '<img src="' . esc_url($image_url) . '" alt="' . esc_attr($alt_text) . '">';
// Если изображение декоративное — пустой alt лучше, чем отсутствие атрибута
echo '<img src="' . esc_url($decorative_img) . '" alt="">';
Способ 4 — Глобальный фикс через хук (временное решение)
Если у вас много изображений без alt и нет времени исправлять каждое вручную, можно добавить хук в functions.php:
add_filter('wp_get_attachment_image_attributes', function($attr, $attachment) {
if (empty($attr['alt'])) {
$attr['alt'] = get_the_title($attachment->ID);
}
return $attr;
}, 10, 2);
Этот код подставит название файла как alt, если поле пустое. Это временная мера — лучше заполнить описания вручную.
Почему это важно, а не просто формальность
| Причина | Пояснение |
|---|---|
| SEO | Google использует alt для индексирования изображений |
| Доступность | Скринридеры для людей с нарушением зрения читают alt вслух |
| Core Web Vitals | Аудиты Lighthouse снижают балл за отсутствие alt |
| Валидность HTML | Без alt документ не проходит W3C-валидацию |
Корневая причина почти всегда одна: изображения добавляются в виджеты без заполнения поля Alt Text — либо через медиабиблиотеку, либо через ручной HTML-код. Самое надёжное решение — выработать привычку заполнять это поле при загрузке каждого изображения в библиотеку, тогда проблема не будет возникать повторно.
Один ответ к “an alt attribute must be present on img elements: как исправить эту ошибку в виджетах WordPress?”
Дополнение: как системно убрать ошибку “an alt attribute must be present on img elements” в WordPress виджетах
Помимо разовых исправлений (заполнить alt или поправить HTML), важно понимать, что в WordPress эта проблема почти всегда повторяется из-за архитектуры вывода медиа. Поэтому эффективнее выстроить не «точечные фиксы», а устойчивую систему, которая исключает появление ошибки на уровне источника.
—
## Почему ошибка возвращается даже после исправлений
Даже если вы один раз добавили alt:
* в медиабиблиотеке
* в Gutenberg-блоке
* в HTML-виджете
она может снова появляться, потому что:
* разные виджеты по-разному рендерят `
` (не всегда берут alt из attachment meta)
* сторонние плагины генерируют изображения «на лету»
* темы переопределяют шаблоны вывода медиа
* кеш/минификация может отдавать старую версию HTML
Итог: проблема не в одном месте, а в цепочке генерации HTML.
—
## Системное решение №1: стандартизировать источник alt (правильная модель)
Самая стабильная архитектура:
**Alt хранится только в медиабиблиотеке → всё остальное его наследует**
Проверка:
* WP Media Library → “Alt Text” заполнен всегда
` без attachment ID (если есть разработка темы)
* запрет на использование `
Если сайт контентный — это единственный устойчивый подход.
—
## Системное решение №2: принудительная нормализация через WordPress фильтры
Если у вас есть плагины/виджеты, которые игнорируют alt, можно сделать глобальную нормализацию вывода изображений.
### Универсальный fallback (усиленная версия)
«`php
add_filter(‘wp_get_attachment_image_attributes’, function($attr, $attachment) {
// если alt пустой — пытаемся восстановить
if (empty($attr[‘alt’])) {
$alt = get_post_meta($attachment->ID, ‘_wp_attachment_image_alt’, true);
if (!$alt) {
$alt = get_the_title($attachment->ID);
}
$attr[‘alt’] = $alt ?: ‘image’;
}
return $attr;
}, 10, 2);
«`
### Что это даёт
* закрывает 80–90% проблем с отсутствующим alt
* работает для всех стандартных WordPress функций вывода изображений
* не требует правки темы
—
## Системное решение №3: контроль сторонних виджетов (ключевая проблема)
Большая часть ошибок возникает в:
* slider-плагинах
* page builders (Elementor, WPBakery)
* social feed widgets
* кастомных shortcode-блоках
### Что делать:
1. Проверить, используют ли они:
* attachment ID (хорошо)
* прямой URL (плохо)
2. Если URL без метаданных:
* alt нужно задавать внутри настроек плагина
* либо через override шаблонов (если плагин это позволяет)
3. Если плагин не поддерживает alt вообще:
* это технический долг → лучше заменить компонент
—
## Системное решение №4: контроль через линтер (для разработчиков)
Если сайт активно развивается, добавьте автоматическую проверку:
### Frontend audit (Lighthouse / CI)
* Google Lighthouse accessibility audit
* axe-core в CI pipeline
* ESLint HTML rules (если есть SSR/React блоки)
Цель: ловить отсутствие alt ДО деплоя.
—
## Частая ошибка: неправильное использование пустого alt
Важно различать:
### Декоративное изображение
«`html

«`
### Контентное изображение (обязательно описание)
«`html

«`
Ошибка многих сайтов: ставят `alt=»»` там, где изображение несёт смысл.
—
## Практический чек-лист (для WordPress сайта)
Если кратко стандартизировать процесс:
1. Перед загрузкой изображения — продумать смысл alt
` в виджетах
2. При загрузке в Media Library — всегда заполнять alt
3. Проверить, что тема использует `wp_get_attachment_image()`
4. Ограничить использование raw `
5. Добавить fallback-фильтр (как страховку)
6. Прогнать Lighthouse accessibility аудит
—
## Итоговая логика
Ошибка “an alt attribute must be present on img elements” в WordPress — это не баг и не «предупреждение редактора», а сигнал о разрыве в цепочке управления медиаданными.
Устойчивое решение всегда одно:
**не исправлять alt в коде постфактум, а обеспечить его обязательное наличие на уровне медиабиблиотеки и шаблонов вывода.**