object-text-alternative-quality

<object> text alternative must be appropriate (manual review)

manualWCAG 1.1.1 (A)confidence: mediumseverity: minorperceivable

Flags <object> elements with detected fallback or name for human review of equivalence and appropriateness.

Applies to. Applies to <object> elements that already carry a text alternative: fallback text content, a non-empty aria-label, an aria-labelledby that resolves to non-empty text, or a non-empty title. An <object> with none of those is object-text-alternative-present's failure, not a quality question. The element must be included in the accessibility tree, and role="presentation"/"none" takes it out of scope unless it is focusable, which restores its role. An object whose type, or failing that its data URL's extension, names an HTML page, a PDF or plain text is left out, as object-text-alternative-present leaves it out: it renders no non-text content (ACT 8fc3b6). So is a Flash object (type="application/x-shockwave-flash", or with no type a data URL ending in .swf): no current browser runs Flash (support ended in 2021), so the object draws nothing itself and the browser shows its fallback content, ordinary HTML the other rules judge. Nothing non-text is left for 1.1.1 (ACT 8fc3b6).

Expectation. Human review is required to confirm that the provided text alternative is accurate and appropriate.

What a finding reports.

  • reasonCode: TEXT_ALTERNATIVE_REVIEW.
  • fallbackText: the text content inside the <object>, trimmed, or null when there is none.
  • ariaLabel: the aria-label value, or null when there is none.
  • ariaLabelledBy: the aria-labelledby value, the ids it points to, or null when there is none.
  • ariaLabelledByText: the text of the elements aria-labelledby points to. Only looked up when there is no aria-label; null otherwise or when it resolves to nothing.
  • title: the title value, or null when there is none.

These data.details fields help to read and reproduce a finding. Apart from reasonCode and the few fields Output schema names as stable, they are not a stable contract: a field may be renamed or dropped in a minor release, so don’t build on them.

Examples

can't tell
<object data="sales-chart.png" type="image/png">Sales chart</object>

Fallback text is present — worth confirming "Sales chart" is genuinely equivalent to the image, not just a filler caption.

n/a
<object data="sales-chart.png" type="image/png"></object>

No fallback content, ARIA name, or title exists to review; that's object-text-alternative-present's failure instead.

n/a
<object data="brochure.pdf" type="application/pdf">Product brochure (PDF)</object>

A PDF renders text, not non-text content, so 1.1.1 asks nothing of it (ACT 8fc3b6), as object-text-alternative-present has it too.

How to check

When this rule can’t decide, it reports cantTell and leaves the question to a person. Each question it can ask is listed here under its reason code, with the steps to answer it. A finding carries the same steps as howToCheck, in the scan’s language. See Output schema.

TEXT_ALTERNATIVE_REVIEW

  1. Look at the object the report names and note what it shows or does (image, chart, animation, player).
  2. Read its text alternative from the report (fallback text, aria-label, aria-labelledby text or title), or in the Accessibility pane of the developer tools.
  3. If the text alternative only names the object, as is common for charts and diagrams, the details may be given elsewhere: in a caption, text or a table next to it, or a link beside it. That counts only if a screen reader user can find it from the object and it gives everything the object shows.
  4. Compare: does the text, with any such description, say what the object shows, or, for a control or player, what it is for?

Pass. The text alternative, alone or with a description a screen reader user can reach from it, describes the object's content or purpose accurately.

Fail. The text alternative is wrong or vague (such as "object" or a file name), or misses what the object conveys and no description reachable from it gives that, which fails WCAG 1.1.1.

View source