В каталоге на пару тысяч товаров у большинства картинок alt-текст либо пустой, либо содержит остатки имени файла вроде IMG_20240117_final2.jpg. Руками это не чинится: даже по десять секунд на изображение — это неделя работы. Зато задача идеально ложится на модель, которая умеет смотреть на картинку: она видит товар, знает название из карточки и выдаёт короткое описание. Разберём, что вообще должно быть в alt, где WordPress его хранит, как прогнать через нейросеть весь каталог и сколько это стоит.
Зачем магазину alt-текст
Атрибут alt у тега <img> решает три задачи сразу.
Доступность. Скринридер — программа, которая читает страницу вслух незрячему пользователю, — вместо картинки произносит содержимое alt. Если атрибута нет, читалка проговорит имя файла: «и-эм-джи двадцать двадцать четыре ноль один семнадцать точка джей-пи-джи». Пользователь просто не поймёт, что перед ним. Требование зафиксировано в WCAG (критерий 1.1.1 «Non-text Content») и в России отражено в ГОСТ Р 52872 для сайтов, которые обязаны быть доступными.
Поиск. Картиночная выдача Яндекса и Google — заметный источник трафика для магазинов: человек ищет «ботинки челси коричневая замша», видит фото, переходит в карточку. Alt — один из немногих сигналов, по которым робот понимает, что изображено.
Запасной вариант. Если файл не загрузился или у посетителя отключены изображения, браузер покажет текст из alt.
Отдельно про WooCommerce: движок берёт alt из вложения (attachment) и подставляет его и в галерею товара, и в миниатюры каталога, и в блоки «похожие товары». То есть заполнили один раз у изображения — получили корректный alt везде, где эта картинка используется.
Что должно быть в alt, а что нет
W3C предлагает простое дерево решений. Изображение информативное (фото товара) — короткое описание сути. Декоративное (разделитель, фоновый узор, иконка рядом с уже написанным текстом) — пустой атрибут alt="", чтобы скринридер его пропустил; удалять атрибут целиком нельзя, это не то же самое. Функциональное (картинка-ссылка, кнопка) — описываем действие, а не картинку: «Перейти в корзину», а не «иконка тележки».
Практические рамки для магазина:
- До ~125 символов. Формального лимита в стандарте нет, но многие скринридеры и SEO-аудиты ориентируются на эту величину.
- Описываем то, что видно: тип товара, цвет, материал, ракурс, фон. «Коричневые замшевые ботинки челси, вид сбоку на белом фоне» — хорошо.
- Без «фото», «изображение», «картинка» в начале — скринридер и так объявляет, что это графика.
- Без набивки ключевыми словами. Перечисление «ботинки купить недорого Москва доставка» поисковик засчитает как спам, а пользователю читалка это озвучит целиком.
- Не дублируем заголовок карточки. Если alt слово в слово повторяет
<h1>, пользы ноль. - Разные ракурсы — разный текст. У пяти фото одного товара не должно быть пяти одинаковых alt.
Где WordPress хранит alt
Alt-текст живёт не в самом файле и не в таблице wp_posts, а в метаполе вложения с ключом _wp_attachment_image_alt. Функция wp_get_attachment_image() достаёт его через get_post_meta(), чистит от тегов и подставляет в разметку. Значит, записать сгенерированный текст можно одной строкой:
update_post_meta( $attachment_id, '_wp_attachment_image_alt', $alt );
Никаких плагинов для самой записи не нужно — это ядро WordPress. Найти изображения без alt тоже несложно:
$ids = get_posts( [
'post_type' => 'attachment',
'post_mime_type' => 'image',
'posts_per_page' => 50,
'fields' => 'ids',
'meta_query' => [
'relation' => 'OR',
[ 'key' => '_wp_attachment_image_alt', 'compare' => 'NOT EXISTS' ],
[ 'key' => '_wp_attachment_image_alt', 'value' => '', 'compare' => '=' ],
],
] );
Путь первый: готовый плагин
Если задача разовая и лезть в код не хочется, в репозитории WordPress есть плагины, которые делают ровно это: перехватывают загрузку нового изображения, отправляют его в облачную модель и записывают ответ в то же метаполе. Из заметных — Alt Text AI: он умеет массовую обработку существующей библиотеки, поддерживает больше сотни языков, дружит с WPML и Polylang и отдельно учитывает название товара WooCommerce при генерации.
Плюсы очевидны: пять минут на установку, кнопка «сгенерировать всё». Минусы тоже: почти все такие плагины работают по кредитам — вы платите не провайдеру модели, а посреднику, и цена за изображение выходит заметно выше себестоимости. Плюс промпт вы не контролируете: если нужен свой тон или строгий шаблон вида «товар + цвет + материал», подстроиться получится не всегда.
Хороший критерий: до пары тысяч картинок и без особых требований к формулировкам — берите плагин. Каталог больше, регулярный поток новых товаров или нужен свой формат — пишите свой скрипт.
Путь второй: свой скрипт на API
Схема простая. Берём ID вложения → отдаём файл в мультимодальную модель вместе с названием и категорией товара → получаем строку → пишем в _wp_attachment_image_alt.
Подойдёт любая модель с поддержкой картинок на входе: Gemini (Flash-Lite — самый дешёвый вариант), Claude Haiku, младшие модели OpenAI. Если ещё не получали ключ, у нас есть пошаговая инструкция — Gemini API: как получить ключ и сделать первый запрос. Запрос — обычный POST с картинкой в base64 и текстовой инструкцией.
Ключевая часть — промпт. Он должен быть жёстким, иначе модель начнёт сочинять маркетинговые описания на три предложения:
Ты пишешь alt-текст для фотографии товара интернет-магазина.
Название товара: "{product_name}". Категория: "{category}".
Правила:
- одно предложение, максимум 120 символов;
- опиши только то, что реально видно на фото: тип предмета,
цвет, материал, ракурс, фон;
- не начинай со слов "фото", "изображение", "на картинке";
- не придумывай характеристики, которых не видно;
- не перечисляй ключевые слова, пиши естественной фразой;
- язык — русский;
- верни ТОЛЬКО текст alt, без кавычек и пояснений.
Чтобы ответ гарантированно приходил в предсказуемом виде, удобно попросить JSON — про это подробнее в заметке Структурированный вывод (JSON) от модели. И обязательно обрежьте результат по длине на своей стороне: модель периодически игнорирует лимит символов.
Прогон каталога пачками
Тысячу запросов в один проход веб-страницы не сделать — упрётесь в таймаут PHP. Варианты:
- WP-CLI. Своя команда
wp alt generate --limit=200, запускаемая по SSH. Самый простой способ для разовой миграции. - Action Scheduler. Библиотека уже входит в WooCommerce: ставим по задаче на изображение, очередь разгребается фоном сама. Тот же приём мы описывали в заметке про описания товаров нейросетью.
- Хук загрузки.
add_action( 'add_attachment', ... )— чтобы новые картинки получали alt автоматически.
Три вещи, которые сэкономят нервы: перед отправкой уменьшайте изображение до ~1024 px по длинной стороне (детали для alt не нужны, а токенов уходит кратно меньше), делайте процесс идемпотентным — пропускайте вложения, у которых alt уже заполнен, и ставьте свою метку вроде _alt_generated_by, чтобы потом отличить машинный текст от ручного и при желании перегенерировать.
Сколько это стоит
Считаем по самой дешёвой связке. У Gemini 3.1 Flash-Lite вход стоит $0,25 за миллион токенов, выход — $1,50. Одна сжатая фотография плюс промпт — примерно полторы тысячи входных токенов, ответ — около 60. На тысяче изображений выходит порядка 1,5 млн входных и 60 тыс. выходных токенов, то есть меньше половины доллара за весь каталог. У Claude Haiku 4.5 ($1 и $5 за миллион) та же тысяча обойдётся примерно в полтора-два доллара.
Цифры ориентировочные: реальный расход зависит от разрешения картинок и текущих тарифов, их стоит проверить в прайсе провайдера перед запуском. Но порядок понятен — по сравнению с кредитными тарифами плагинов разница в разы. Как считать токены аккуратнее, разбирали в заметке Токены и лимиты: как считать и экономить.
Типичные ошибки
Публиковать без выборочной проверки. Модель видит картинку, но не знает вашу номенклатуру: замшу назовёт нубуком, оттенок «марсала» — красным. Прогоните глазами хотя бы полсотни случайных результатов перед тем, как отпускать скрипт на весь каталог.
Генерировать alt для декоративной графики. Иконкам, разделителям и фоновым паттернам нужен пустой alt. Ограничьте выборку изображениями, привязанными к товарам.
Заполнять заодно title и caption тем же текстом. Это разные поля с разным назначением; дубли только мешают.
Забывать про вес картинок. Идеальный alt не спасёт карточку, которая грузится восемь секунд. Сжатие, WebP/AVIF и ленивая загрузка — отдельная работа, о ней в чек-листе Как ускорить WordPress в 2026.
Коротко
Alt-текст — та редкая рутина, где нейросеть закрывает задачу почти полностью: она реально видит картинку и описывает её лучше, чем менеджер, копирующий название товара во все пять фото. WordPress хранит alt в метаполе _wp_attachment_image_alt, так что техническая часть сводится к одному update_post_meta(). Небольшому магазину хватит плагина, большому дешевле собрать свой скрипт на API с жёстким промптом и фоновой очередью. Главное — оставить человека на выборочной проверке: alt читают живые люди, и ошибка в описании товара стоит дороже сэкономленных минут. Как встроить это в общий контур работы с контентом, смотрите в заметке Автоматизация контента нейросетями.
Частые вопросы
Нет. Информативным картинкам — фото товаров, схемам, скриншотам — alt нужен обязательно. Декоративной графике (разделители, фоновые узоры, иконки рядом с уже написанным текстом) нужен пустой атрибут alt="": так скринридер её пропустит. Полностью удалять атрибут нельзя — это не то же самое, что пустой.
Формального лимита в WCAG нет, но на практике ориентируются на 125 символов: более длинные строки некоторые скринридеры обрезают, да и SEO-аудиты помечают их как проблему. Для фото товара обычно хватает одного предложения: тип предмета, цвет, материал, ракурс, фон.
На самых дешёвых мультимодальных моделях — меньше доллара. Например, у Gemini 3.1 Flash-Lite вход стоит $0,25 за миллион токенов; сжатая фотография с промптом — около полутора тысяч токенов, то есть тысяча картинок укладывается примерно в 1,5 млн входных токенов. У Claude Haiku 4.5 та же тысяча выйдет в полтора-два доллара. Цифры ориентировочные — сверяйтесь с актуальным прайсом.
До пары тысяч изображений и без особых требований к формулировкам проще поставить плагин вроде Alt Text AI: пять минут на настройку и кнопка массовой генерации. Если каталог больше, товары добавляются потоком или нужен свой строгий шаблон текста, дешевле и гибче написать свой скрипт на API с очередью на Action Scheduler.
Источники
- 1.W3C WAI — An alt Decision Treehttps://www.w3.org/WAI/tutorials/images/decision-tree/
- 2.WordPress Developer Resources — wp_get_attachment_image()https://developer.wordpress.org/reference/functions/wp_get_attachment_image/
- 3.Gemini Developer API pricinghttps://ai.google.dev/gemini-api/docs/pricing
- 4.Claude API — Pricinghttps://platform.claude.com/docs/en/about-claude/pricing
- 5.Alt Text AI — WordPress pluginhttps://wordpress.org/plugins/alttext-ai/



