Help us improve
Share bugs, ideas, or general feedback.
From grimoire
Guides adding text alternatives for images, icons, SVGs, and canvas elements to meet WCAG 1.1.1. Classifies images as informative, decorative, or functional.
npx claudepluginhub jeffreytse/grimoire --plugin grimoireHow this skill is triggered — by the user, by Claude, or both
Slash command
/grimoire:apply-text-alternativesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Provide a text equivalent for every non-text element so screen reader users receive the same information as sighted users.
Writes effective alt text for images and provides text alternatives for non-text content, including SVGs and complex images like charts.
Guides writing meaningful alt text for images, charts, diagrams, and visual content. Helps decide decorative/functional/informative/complex image types and craft context-appropriate descriptions.
Writes alt text for editorial images following WCAG accessibility guidelines, with a focus on screen reader users and editorial context.
Share bugs, ideas, or general feedback.
Provide a text equivalent for every non-text element so screen reader users receive the same information as sighted users.
Adopted by: WCAG 2.1 SC 1.1.1 is Level A — the lowest conformance level, meaning it is the baseline required by every accessibility standard worldwide: Section 508 (US), EN 301 549 (EU), PSBAR 2018 (UK), and the Australian DDA. Every major tech company's accessibility guidelines (Apple, Google, Microsoft) begin here. Impact: WebAIM Million 2024 found missing alternative text on images is the #2 most common WCAG failure (35.2% of homepages), making it the single most impactful quick fix. Screen readers announce image filenames or "image" when alt text is absent — producing a meaningless or disruptive experience for blind users. Why best: The alternative — relying on surrounding text to convey image meaning — is insufficient because screen readers read images in DOM order, which may not match the surrounding context. Explicit alt text guarantees the description is attached to the content, not assumed from context.
Sources: W3C WCAG 2.1 SC 1.1.1 (2018); WebAIM Million 2024; Google Lighthouse accessibility documentation
| Type | Correct treatment |
|---|---|
| Informative — conveys meaning | Descriptive alt="..." text |
| Decorative — visual only, no meaning | alt="" (empty string — screen reader skips it) |
| Functional — a link or button | alt describes the destination or action, not appearance |
| Complex — chart, graph, diagram | Short alt + longer description in aria-describedby or adjacent text |
<!-- Wrong — filename, "image of", or no context -->
<img src="hero.jpg" alt="hero.jpg">
<img src="chart.png" alt="image of a chart">
<!-- Right — describes the meaning, not the appearance -->
<img src="revenue-q3.png" alt="Q3 revenue: $4.2M, up 18% from Q2">
<img src="warning.svg" alt="Warning: this action cannot be undone">
Rules for writing good alt text:
aria-describedby for longer descriptionsalt="View order #4821"<!-- Empty alt — screen reader skips entirely -->
<img src="divider-line.svg" alt="">
<!-- CSS background images are already invisible to screen readers -->
<div style="background-image: url(decorative-bg.jpg)" aria-hidden="true"></div>
Never omit alt — a missing alt causes the screen reader to announce the filename.
Empty alt="" is the correct decoration signal.
<!-- Wrong — screen reader announces "button" with no name -->
<button><svg>...</svg></button>
<!-- Right — aria-label provides the accessible name -->
<button aria-label="Close dialog">
<svg aria-hidden="true" focusable="false">...</svg>
</button>
<!-- Right — title inside SVG (also sets tooltip) -->
<svg role="img" aria-labelledby="chart-title">
<title id="chart-title">Monthly revenue for Q3 2026</title>
...
</svg>
<figure>
<img src="org-chart.png"
alt="Company organizational chart"
aria-describedby="org-chart-desc">
<figcaption id="org-chart-desc">
CEO reports to Board. Three VPs (Engineering, Sales, Finance) report to CEO.
Each VP has 4–6 direct reports.
</figcaption>
</figure>
alt="" to avoid announcing "Submit" twice.Omitting alt entirely. A missing alt attribute causes screen readers to announce the image filename (e.g., "img_2847_final_v3.jpg"). Always include alt — empty if decorative.
Using alt to stuff keywords. Alt text is not an SEO field. Keyword-stuffed alt text ("cheap flights cheap hotels cheap car rental image") is disruptive to screen reader users.
Setting aria-hidden="true" on informative images. This hides the image from all AT, including screen readers. Only use aria-hidden on decorative content.