Диагностика проблемы: зачем обновлять атрибуты alt и title изображений
Часто при миграции сайта, смене темы или массовой загрузке изображений в WordPress отсутствуют или некорректно заполнены атрибуты alt и title. Это негативно сказывается на SEO и доступности сайта. Проверить текущие значения можно через инструменты разработчика браузера, а также с помощью SEO-сканеров, например Screaming Frog или Ahrefs.
Как проверить наличие alt и title у изображений в WordPress
- Откройте страницу с изображениями в браузере.
- Правой кнопкой мыши выберите «Просмотр кода» или используйте DevTools (F12).
- Найдите тег
<img>и проверьте наличие атрибутовaltиtitle. - Для массовой проверки используйте SQL-запросы к базе данных или плагины SEO-аудита.
Пошаговое решение: автоматическое обновление alt и title через функции WordPress
Реализуем код, который при загрузке изображения автоматически устанавливает атрибуты alt и title, если они пустые. В качестве примера используем название файла и метаданные поста.
add_filter('wp_generate_attachment_metadata', 'auto_set_image_alt_title', 10, 2);
function auto_set_image_alt_title($metadata, $attachment_id) {
$attachment = get_post($attachment_id);
$title = sanitize_text_field($attachment->post_title);
$alt = get_post_meta($attachment_id, '_wp_attachment_image_alt', true);
if (empty($alt)) {
update_post_meta($attachment_id, '_wp_attachment_image_alt', $title);
}
if (empty($attachment->post_excerpt)) {
wp_update_post([
'ID' => $attachment_id,
'post_excerpt' => $title // Используется как описание, может быть применено как title
]);
}
return $metadata;
}Этот хук срабатывает при загрузке изображения, устанавливая alt и description (который можно использовать для title) равным названию файла или заголовку вложения.
Автоматическое обновление существующих изображений через WP-CLI
Для существующих медиафайлов оптимально использовать WP-CLI:
wp media list --field=ID | xargs -I % wp eval '
$title = get_post_field("post_title", %);
$alt = get_post_meta(%, "_wp_attachment_image_alt", true);
if(empty($alt)) {
update_post_meta(%, "_wp_attachment_image_alt", $title);
}
$post_excerpt = get_post_field("post_excerpt", %);
if(empty($post_excerpt)) {
wp_update_post(["ID" => %, "post_excerpt" => $title]);
}
'Это быстро и эффективно обновит метаданные без доступа к административной панели.
Проверка результата после внедрения
- Загрузите новое изображение и проверьте в медиа-библиотеке, что поле "Альтернативный текст" заполнено.
- Откройте страницу с изображением и убедитесь, что в HTML присутствуют атрибуты
alt. - Для существующих файлов используйте WP-CLI или запросы к базе, чтобы убедиться, что метаданные обновлены.
Частые ошибки и как их исправить
- Атрибуты не устанавливаются для новых загрузок: проверьте, что функция подключена в файле
functions.phpтемы или в плагине, и что нет конфликтующих хуков. - Проблемы с кодировкой: если в названиях файлов есть спецсимволы, используйте
sanitize_text_fieldи дополнительные фильтры для очистки текста. - Обновление старых изображений не сработало: убедитесь, что WP-CLI установлен и выполняется с нужными правами. Можно запускать команды порциями, чтобы избежать таймаутов.
Практические советы по безопасности и производительности
- Не используйте автоматическое заполнение alt и title с помощью сторонних сервисов без проверки, чтобы избежать утечки данных.
- Обрабатывайте большие объемы медиафайлов пакетно, чтобы не перегружать сервер.
- Для сайтов на WooCommerce дополнительно проверяйте, что атрибуты изображений товаров корректны, так как это влияет на конверсию.
Сравнение способов автоматизации заполнения alt и title
| Способ | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| Код в functions.php с хукем wp_generate_attachment_metadata | Быстро, без плагинов, контролируемо | Работает только для новых загрузок | Добавить WP-CLI для обновления старых файлов |
| WP-CLI скрипт для массового обновления | Эффективно для большого числа файлов | Требует доступа к серверу и навыков | Использовать вместе с кодом для новых загрузок |
| Плагины SEO с автоматическим заполнением | Минимум кода, удобный интерфейс | Могут влиять на производительность, лишние функции | Использовать легкие плагины или кастомный код |