Is each image caption, where necessary, correctly associated with the corresponding image?
A screen reader navigates the page in DOM order. If it encounters an image followed by photo credit text, it reads both — but with nothing indicating their relationship. The user hears "Photo: demonstration outside the National Assembly" then "© Jean Dupont, 2024" as two separate elements. The semantic link between the image and its caption remains invisible to assistive technologies.
RGAA requires a precise structure: the image and its caption grouped in a <figure> with role="figure" or role="group", and an aria-label on that <figure> whose content is identical to the text of the <figcaption>. This combination allows the screen reader to announce the image-caption pair as a coherent unit.
This criterion covers five types of images: bitmap images (<img>, <canvas>), object and embedded images (<object>, <embed> of image type), vector images (<svg>), and form images (<input type="image">). The required structure is identical for all.
A captioned image is never decorative. If it has a caption, it carries information. The alt attribute must therefore be filled in — the technical note for criterion 1.9 explicitly recalls this: these images must comply with criteria 1.1 and 1.3.
5 tests to ensure that each image caption is relevant
Image caption <img> and role="img"
Target: all <img>, <input type="image"> images and elements with role="img" that have a visible caption in the page.
- Identify each image of this type accompanied by caption text (credit, date, contextual description, copyright).
- Verify that both the image and its caption are inside a
<figure>element. - Verify that this
<figure>hasrole="figure"orrole="group". - Verify that this
<figure>has anaria-labelattribute whose value is exactly identical to the text of the<figcaption>(not a summary, not a rephrasing). - Verify that the caption is in a
<figcaption>element.
Test validated if all five conditions are met for each relevant image. Failure if even one is missing.
Image caption <object>
Target: images inserted via <object type="image/png">, <object type="image/jpeg"> or any other image/* subtype.
- Identify each
<object>whosetypestarts withimage/and which is accompanied by a caption. - Verify that the
<object>element and its caption are grouped within a<figure>. - Verify that this
<figure>hasrole="figure"orrole="group". - Verify that the
aria-labelof the<figure>is identical to the text of the<figcaption>. - Verify that the caption is in a
<figcaption>.
Test validated if all five conditions are met for each relevant image.
Image caption <embed>
Target: images inserted via <embed type="image/png">, <embed type="image/svg+xml"> or any other image/* subtype.
- Identify each
<embed>whosetypestarts withimage/and which is accompanied by a caption. - Verify that the
<embed>element and its caption are grouped within a<figure>. - Verify that this
<figure>hasrole="figure"orrole="group". - Verify that the
aria-labelof the<figure>is identical to the text of the<figcaption>. - Verify that the caption is in a
<figcaption>.
Test validated if all five conditions are met for each relevant image.
Image caption <svg>
Target: vector images <svg> inline accompanied by a visible caption.
- Identify each
<svg>that has a caption (credit, description, source). - Verify that the
<svg>and its caption are grouped within a<figure>. - Verify that this
<figure>hasrole="figure"orrole="group". - Verify that the
aria-labelof the<figure>is identical to the text of the<figcaption>. - Verify that the caption is in a
<figcaption>.
Test validated if all five conditions are met for each relevant image. Note: the internal <title> in the SVG covers criterion 1.1, not this one.
Image caption <canvas>
Target: images drawn via <canvas> accompanied by a visible caption in the page.
- Identify each
<canvas>that has a caption (data source, credit, date). - Verify that the
<canvas>and its caption are grouped within a<figure>. - Verify that this
<figure>hasrole="figure"orrole="group". - Verify that the
aria-labelof the<figure>is identical to the text of the<figcaption>. - Verify that the caption is in a
<figcaption>.
Test validated if all five conditions are met for each relevant image.
Examples
❌ Non-compliant : figure + figcaption without role or aria-label
<figure>
<img src="assemblee-nationale.jpg" alt="Demonstration outside the National Assembly, Paris">
<figcaption>Paris, March 15, 2024, © Jean Dupont</figcaption>
</figure>The <figure> + <figcaption> structure is in place, but the <figure> has neither role nor aria-label. NVDA and JAWS read the image and caption as two independent elements. The user hears the credit without knowing which image it belongs to. This error is the most common in audits: the developer believes they are compliant because they use the right HTML tags.
✅ Compliant : Image correctly linked to its caption
<figure role="group" aria-label="Paris, March 15, 2024, © Jean Dupont">
<img src="assemblee-nationale.jpg" alt="Demonstration outside the National Assembly, Paris">
<figcaption>Paris, March 15, 2024, © Jean Dupont</figcaption>
</figure>The <figure> exposes role="group" and an aria-label identical to the <figcaption> content. The screen reader announces the group, then delivers the image and its caption as a unit. The user immediately understands that the credit belongs to this image. Note that the alt describes the image content; it is not empty.
✅ Compliant : Photo gallery with credits
<div class="galerie">
<figure role="figure" aria-label="Swiss Alps, January 2024, © Marc Dubois">
<img src="alpes.jpg" alt="Snow-covered mountain at sunrise, Swiss Alps">
<figcaption>Swiss Alps, January 2024, © Marc Dubois</figcaption>
</figure>
<figure role="figure" aria-label="Guadeloupe, February 2024, © Laura Chen">
<img src="guadeloupe.jpg" alt="Fine sand beach with palm trees, Guadeloupe">
<figcaption>Guadeloupe, February 2024, © Laura Chen</figcaption>
</figure>
</div>Each <figure> is self-contained: it carries its own role and aria-label. In a gallery, this structure prevents any ambiguity about which credit corresponds to which image. The screen reader user navigates from figure to figure as distinct and fully labeled blocks.
Tips and pitfalls
⚠️ figure + figcaption without role or aria-label: the number one audit error
The majority of sites use <figure> and <figcaption> correctly from an HTML perspective, and thus believe they are compliant with criterion 1.9. This is not sufficient. Without role="figure" (or role="group") and without aria-label identical to the caption, the image-caption relationship is not reliably exposed to assistive technologies. The native semantics of <figure> is not sufficiently well delivered by all screen readers.
⚠️ Empty alt on a captioned image: non-compliant
The technical note for criterion 1.9 is unambiguous: captioned images must comply with criteria 1.1 and 1.3. A captioned image automatically carries information. Using alt="" on an <img> in a <figure>, even with a <figcaption> present, is non-compliant. The alt attribute must describe the visual content of the image.
💡 The aria-label must be an exact copy of the figcaption
RGAA requires that the content of the aria-label be "identical" to the content of the <figcaption>. Not a summary, not a rephrasing. If your <figcaption> contains HTML (a link, emphasis), the aria-label repeats the plain text without markup: <figcaption>© <a href="/bio">Marc Dubois</a></figcaption> gives aria-label="© Marc Dubois". Any divergence creates non-compliance.
⚠️ role="figure" or role="group": both are valid, one works better
RGAA accepts role="figure"androle="group". In practice, role="group"enjoys better support on certain NVDA with Firefox combinations. If your regression tests show unexpected behavior withrole="figure", switch to role="group". Both satisfy criterion 1.9.
⚠️ Discreet copyright in an article: as soon as it is visible, it is a caption
A photo credit placed just below an image, even if small and grayed out, is a caption in the RGAA sense. The image ceases to be decorative and falls under criterion 1.9. If this copyright is hidden via aria-hidden="true", screen reader users are deprived of information visible to everyone else. This practice is not recommended.
Frequently asked questions
Why is figure + figcaption not enough to satisfy RGAA criterion 1.9?
The native semantics of <figure> is not reliably delivered by current screen readers. NVDA, JAWS and VoiceOver do not systematically signal that the image and caption form a group. RGAA therefore mandates ARIA attributes to guarantee delivery regardless of assistive technology. The HTML tag sets the structure; ARIA exposes the semantics.
How do you choose between aria-labelledby and aria-label to name a figure according to RGAA 1.9?
The official methodology of tests 1.9.1 through 1.9.5 explicitly mentions aria-label whose content is identical to the <figcaption>. aria-labelledby pointing to the <figcaption> is not described in this methodology. To be certain of satisfying the criterion without ambiguity, use aria-label with the caption text reproduced exactly.
How do you quickly audit RGAA criterion 1.9 on a web page?
In the DevTools console, run document.querySelectorAll('figure') to list all <figure> elements. For each, verify: presence of a <figcaption>, presence of role on the <figure>, and exact match between aria-label and <figcaption> text. Includdy also flags missing or inconsistent ARIA structures. Real screen reader testing remains essential to validate delivery.
When does an inline SVG with <title> require a figure to comply with RGAA 1.9?
Yes, these are two distinct requirements. The internal <title> in the <svg> serves as a text alternative to the image (criterion 1.1). The structure <figure role="group" aria-label="..."> + <figcaption> serves to link the image to its caption (criterion 1.9). If your SVG has an external caption, both mechanisms are necessary in parallel.
How do you determine if an illustrative image without credit is covered by RGAA 1.9?
No. Criterion 1.9 applies only "if necessary", meaning when a caption is actually present. A purely illustrative image without credit or associated text falls under criterion 1.2 (decorative images). As soon as visible text is associated with the image (copyright, date, source), criterion 1.9 applies.