Skip to content
artificia11y Amplifying everyone

Generated content

Generated content is any artifact a model produces and your product then renders, such as a block of text, an image, a table, a chart, or a snippet of code. Because no human wrote it and it appears at runtime, its accessibility is a property of how you generate and render it, not something you can fix once in a template.

  • Generated content is accessible only through how you generate and render it, not a fixed template you fix once.
  • Missing structure is the most common failure, so instruct the model to emit real headings, lists, and tables and enforce it in post-processing.
  • Treat model-written alt text as a draft a person reviews, because good alt text depends on context.
  • Render tables, charts, and code as real, structured elements with text equivalents and named controls.
  • Do not trust raw markup, prefer native elements, and sanitize generated HTML before rendering.

The single most common failure in generated text is missing structure. A model will happily return a wall of text, or text that only looks like headings and lists through styling. A screen reader user navigates by real headings, lists, and tables, so that styling-only output cannot be navigated.

This is measurable. A Microsoft evaluation found unguided model output passed automated accessibility checks only 12 percent of the time, rising to 86 percent when the model was told to produce accessible markup. So instruct the model to use real semantic structure, and post-process the output to enforce it rather than trusting the model to comply every time.

Decide what is protected and what can vary

Section titled “Decide what is protected and what can vary”

It helps to name, before generation, which parts of the output are non-negotiable and which the model is free to change. Anna E. Cook calls the non-negotiable parts the protected invariants of a system, such as keyboard operability, semantic hierarchy, programmatic labels, and focus order. Presentation can vary, including density, theme, and tone, but those structural guarantees cannot. As she puts it, variability with guardrails is adaptive design. Hold the model to the guarantees and let it vary the rest.

A generated image needs a text alternative, and a model-written description is only a starting point. Alt text depends on context, as Eric Bailey explains, because the same image needs different wording depending on why it is there. Equal Entry found that AI alt text tends to be generic and to miss the purpose of the image. Treat AI alt text as a draft inside a workflow where a person reviews and adjusts it. See WCAG Perceivable.

When a model returns tabular data, render it as a real table with proper header cells, so the relationships are available to assistive technology. When it returns a chart, give the equivalent information in text or in an accessible data table, because an image of a chart on its own excludes anyone who cannot see it.

Generated code should sit in a marked-up code block with its language identified, and any controls around it, such as copy or run, need accessible names. The same care applies to other formatted output such as mathematics or diagrams, which need a text equivalent.

If the output cites sources or mixes generated and retrieved material, make that visible to everyone. A citation or a “based on your document” note has to be real text in the accessibility tree, not a faint visual treatment. This connects to communicating uncertainty and confidence.

Models do not produce clean, semantic HTML by default, and pushing them to add ARIA can make things worse. Adrian Roselli warns that encouraging ARIA for machine consumption leads to misuse, and that sites leaning on ARIA tend to be less accessible. Prefer native elements, sanitize and validate generated markup before rendering it, and if you point an AI tool at the ARIA Authoring Practices Guide, note Eric Bailey’s caution that its code samples are not all reliable.

Audience: Engineer

Treat the model as an untrusted author. Instruct it to emit semantic structure, then run the output through a step that enforces and sanitizes that structure before it reaches the page, mapping it to real headings, lists, and tables. Render generated links and files as real links and files, not as text that looks the part. For images, wire alt text into a review path rather than shipping the model’s first guess.

The contrast between styled text and real structure is the whole game.

<!-- Avoid output that only looks like structure -->
<div class="heading">Results</div>
<div class="row">First result</div>
<div class="row">Second result</div>
<!-- Emit real semantics a screen reader can navigate -->
<h2>Results</h2>
<ol>
<li>First result</li>
<li>Second result</li>
</ol>
<!-- A generated image carries a reviewed, context-aware description -->
<img src="q4-sales.png"
alt="Bar chart. Quarterly sales rise from 10k in Q1 to 45k in Q4." />
<!-- A generated file is a real, focusable link, never plain text -->
<a href="/files/report.pdf" download>Download report.pdf</a>
Audience: Accessibility Specialist

Generated content is a population, so sample it. Pull a range of real outputs, including long, short, tabular, and error cases, and check each for real structure and for alt text that actually helps. Remember that automated checks confirm an alt attribute exists, not that the description is correct, so judge alt quality by hand on a sample.

Audience: Designer

Decide how generated content sits inside the surrounding layout, and design the affordances that travel with it, such as a source label, a confidence note, and the controls for copy or regenerate. If a cue like provenance is only a color or an icon, it will not reach the accessibility tree, so name it in text as part of the design.

Audience: Self-advocate

Unstructured generated text is exhausting with a screen reader, because there are no headings or lists to jump between and you have to listen to the whole thing in order. Generic alt text such as “image” is the same kind of let-down, since it passes a check but tells you nothing. Output that is properly structured and described is the difference between using a tool and fighting it.