Реалізація alt-текстів для зображень за WCAG

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація alt-текстів для зображень за WCAG
Проста
~1 робочий день
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація alt-текстів для зображень (WCAG)

Alt-текст (атрибут alt) — текстова альтернатива зображенню. Екранна читалка озвучує його замість картинки. Пошукові системи використовують його для індексації. WCAG SC 1.1.1 вимагає alt для всіх нетекстових елементів.

Правила написання alt-текстів

Інформаційні зображення — описати вміст та функцію:

<!-- Погано -->
<img src="photo.jpg" alt="фото">
<img src="chart.png" alt="чарт">

<!-- Добре -->
<img src="ceo-photo.jpg" alt="Іван Петров, генеральний директор компанії">
<img src="revenue-q3.png" alt="Діаграма виручки Q3 2024: ріст на 35% порівняно з Q2">

Декоративні зображення — порожній alt, не відсутній:

<!-- Правильно — порожній alt, екранна читалка пропустить -->
<img src="bg-pattern.svg" alt="">

<!-- Неправильно — без alt екранна читалка озвучує ім'я файлу -->
<img src="bg-pattern.svg">

Функціональні зображення (кнопки, посилання) — описати дію:

<a href="/home">
    <img src="logo.svg" alt="На домашню сторінку">
</a>

<button>
    <img src="search-icon.svg" alt="Пошук">
</button>

Зображення з текстом — alt повинен містити цей текст:

<img src="sale-banner.jpg" alt="Знижки до 50% на всі товари до 31 грудня">

Реалізація в CMS

// Вимагати alt при завантаженні зображень
class ImageUploadRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'image'   => 'required|image|max:5120',
            'alt_text' => 'required|string|max:255|min:5',
        ];
    }

    public function messages(): array
    {
        return [
            'alt_text.required' => 'Укажіть описання зображення для доступності',
        ];
    }
}
{{-- Показувати попередження про відсутність alt у редакторі WYSIWYG --}}
@if (!$image->alt_text)
    <div class="alert alert-warning" role="alert">
        Зображення без alt-тексту — додайте описання для доступності
    </div>
@endif

Компонент зображення в React

interface ImageProps {
    src: string;
    alt: string;        // обов'язковий prop
    decorative?: boolean;
}

function Image({ src, alt, decorative = false }: ImageProps) {
    // Якщо декоративне — примусово порожній alt та role="presentation"
    if (decorative) {
        return <img src={src} alt="" role="presentation" />;
    }

    return <img src={src} alt={alt} />;
}

// TypeScript не дасть забути alt
// <Image src="photo.jpg" /> — помилка компілятора
// <Image src="photo.jpg" alt="Описання" /> — ok

Аудит зображень без alt

# Пошук зображень без alt у шаблонах
grep -rn '<img' resources/views/ | grep -v 'alt='

# axe-core у Playwright
test('all images have alt text', async ({ page }) => {
    await page.goto('/');
    const violations = await checkA11y(page, null, {
        runOnly: ['image-alt'],
    });
    expect(violations).toHaveLength(0);
});

Часові рамки

Аудит та додавання alt-текстів на існуючий проект: 1–3 дні залежно від кількості зображень. Налаштування обов'язкового alt у CMS — напівдня.