Requires that images, icons, charts and other non-text content have a text alternative that serves the equivalent purpose for users who cannot see or hear it.
A screen reader cannot see an image; it reads whatever text it is given. Without a text alternative, the user often hears "graphic" or a file name, and misses the information the image carries.
This criterion requires every piece of non-text content shown to the user (a photo, an icon, a chart, an audio clip, an animation) to have a text alternative that serves the same purpose. Content that is purely decorative or used only for visual formatting must be implemented so that assistive technology can ignore it, so nobody has to listen to a meaningless image.
Blind and low-vision screen reader users get the information in an image only through its text alternative. Because text can also be sent to a braille display, it is the only route for deafblind users. For audio, people who are deaf or hard of hearing read the text equivalent. People who find it hard to interpret images benefit from a short, clear description. Text alternatives also make visual content searchable and easier to repurpose.
The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. Text alternatives are a core part of "perceivable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 1.1.1 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.1.1.1 | Web pages | Web content must satisfy WCAG success criterion 1.1.1. |
| 10.1.1.1 | Non-web documents (PDF, Office files) | The same criterion applies to images in documents. |
| 11.1.1.1 | Non-web software (native mobile apps) | Software that supports screen readers must satisfy the criterion. |
| 5.1.3.6 | Closed functionality (ATMs, ticket machines, information kiosks) | The alternative for non-text content must be presented through speech output, unless it is pure decoration. |
Clause numbers follow EN 301 549 V3.2.1. In V3.2.1 the software requirement is split in two: 11.1.1.1.1 (open functionality) and 11.1.1.1.2 (closed functionality, which points to 5.1.3.6). In V4.1.1 the same topics sit under the headings 9.1.1, 10.1.1 and 11.1.1.
Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 1.1.1 is the same in WCAG 2.1 and 2.2.
A note on EAA scope: The Directive excludes pre-recorded time-based media published before 28 June 2025 and third-party content that the business neither funds, develops nor controls (Article 2(4)). Text alternatives for the images you publish and control are not affected by these exclusions.
Directive (EU) 2019/882, EUR-Lex, opens in a new tab
The alt text must carry the information that replaces the image. A file name or a generic word such as "chart" is not enough.
<img src="sales-chart.png">
<img src="IMG_2041.png" alt="IMG_2041.png"><img src="sales-chart.png"
alt="Q1 2026 sales: January 120, February 135,
March 160 thousand EUR">An image that carries no information is marked with empty alt text so screen readers skip it. Writing "decorative image" or "spacer" makes users listen to noise.
<img src="wave.svg" alt="decorative image">
<img src="spacer.gif" alt="spacer"><img src="wave.svg" alt="">
/* Or add the ornament with CSS */
.heading { background-image: url("wave.svg"); }The alternative describes what the button does, not how the icon looks.
<button type="button">
<img src="search.svg">
</button><button type="button" aria-label="Search">
<svg aria-hidden="true" focusable="false">…</svg>
</button>
<!-- An image button can use alt instead -->
<input type="image" src="submit.png" alt="Submit the form">When the image is the link's only content, its alt text must say where the link goes.
<a href="/">
<img src="logo.svg" alt="logo">
</a><a href="/">
<img src="logo.svg" alt="Example Company home">
</a>When a chart's information does not fit in a short alt text, give it a short name and provide the detail nearby, in visible form. Where possible, also provide the data in a table.
<img src="revenue.png" alt="revenue chart"><figure>
<img src="revenue.png"
alt="Monthly revenue line chart"
aria-describedby="revenue-summary">
<figcaption id="revenue-summary">
Revenue rose from 120 thousand EUR in January to
160 thousand EUR in March. Monthly values are in the
table below.
</figcaption>
</figure><svg viewBox="0 0 24 24">…</svg><!-- An informative SVG -->
<svg role="img" aria-labelledby="warning-title" viewBox="0 0 24 24">
<title id="warning-title">Warning: payment failed</title>
…
</svg>
<!-- A decorative SVG -->
<svg aria-hidden="true" focusable="false" viewBox="0 0 24 24">…</svg>The same rule applies in native mobile apps. Give an informative image a name, give a decorative image none, and give an icon-only button a label that describes its action.
import SwiftUI
struct ProductCard: View {
var addToFavorites: () -> Void
var body: some View {
VStack(alignment: .leading, spacing: 12) {
// Informative image: an equivalent description
Image("product-photo")
.resizable()
.scaledToFit()
.accessibilityLabel("Blue running shoe, side view")
// Decorative image: hidden from assistive technology
Image(decorative: "wave")
// Icon-only button
Button(action: addToFavorites) {
Image(systemName: "heart")
}
.accessibilityLabel("Add to favorites")
}
}
}import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.painterResource
@Composable
fun ProductCard(addToFavorites: () -> Unit) {
Column {
// Informative image
Image(
painter = painterResource(R.drawable.product_photo), // Your resource
contentDescription = "Blue running shoe, side view"
)
// Decorative image: contentDescription is null
Image(
painter = painterResource(R.drawable.wave), // Your resource
contentDescription = null
)
// Icon-only button
IconButton(onClick = addToFavorites) {
Icon(
imageVector = Icons.Filled.Favorite,
contentDescription = "Add to favorites"
)
}
}
}img, input type="image" and area elements have an alt attribute? Is it empty on decorative images? On mobile, are the contentDescription and accessibilityLabel values correct?