The accessibility problem with screenshots
Screenshots are images. Screen readers can't read images. If your documentation, bug reports, or tutorials rely on screenshots without alt text, a significant portion of your audience gets nothing — just "image" or silence where your content should be.
This isn't a niche concern. The WebAIM Million report consistently finds that missing alt text is the most common accessibility error on the web. And developer documentation is one of the worst offenders because it's screenshot-heavy and often written quickly.
The good news: making screenshots accessible isn't hard. It takes about 15 seconds per image once you know the pattern.
How to write alt text for screenshots
Alt text for screenshots follows different rules than alt text for photos or icons. A photo of a sunset might get "orange sunset over the ocean." A screenshot needs to describe what the user would learn by looking at it.
The formula: describe the purpose of the screenshot, not every pixel in it. Ask yourself: "If someone can't see this image, what do they need to know?"
| Screenshot type | Bad alt text | Good alt text |
|---|---|---|
| UI showing a settings panel | "Screenshot of settings" | "macOS Privacy settings panel with Screen Recording permission enabled for Terminal" |
| Error message | "Error screenshot" | "TypeError: Cannot read properties of undefined, shown in Chrome DevTools console" |
| Terminal output | "Terminal window" | "Terminal output showing sips command resizing screenshot.png from 2880 to 1440 pixels wide" |
| Code editor | "Code" | "VS Code editor showing the handleSubmit function with a highlighted syntax error on line 42" |
| Menu or dialog | "Menu screenshot" | "macOS screenshot toolbar showing Capture Selected Window option highlighted" |
When to use alt text vs. a text alternative
Alt text works for screenshots that illustrate a concept or show a UI state. But some screenshots contain critical information that needs to be fully available in text — not summarized in an alt attribute.
If your screenshot contains readable text that is the content (an error message, a code snippet, a terminal command, configuration values), provide that text in the document itself, not just in the image. The screenshot becomes supplementary — it confirms the text, but the text stands alone.
For example, if you're documenting a Terminal command:
<!-- Accessible approach -->
<p>Run this command to resize the image:</p>
<pre><code>sips --resampleWidth 1440 screenshot.png</code></pre>
<img src="terminal-output.png"
alt="Terminal showing successful resize of screenshot.png to 1440px wide">
<!-- Inaccessible approach -->
<img src="terminal-output.png" alt="Terminal command">
The first approach gives screen reader users the actual command. The second approach tells them there's a terminal command but not what it says.
Annotated screenshots and accessibility
Annotations — arrows, circles, numbered callouts — are invisible to screen readers. If your screenshot has a red arrow pointing to a specific button, the alt text needs to describe what the arrow points to, not just that an arrow exists.
For numbered callout screenshots (common in step-by-step tutorials), describe the sequence in the alt text or in surrounding text:
<img src="steps-annotated.png"
alt="Three-step workflow: (1) click File menu, (2) select Export,
(3) choose PNG format from the dropdown">
Even better: describe the steps in the body text and use the screenshot as a visual confirmation. This way the content is accessible regardless of whether the image loads.
Screenshots in Markdown documentation
Most developer docs are written in Markdown, where images look like this:

The problem: developers frequently leave the alt text empty or write placeholder text like "screenshot" or "image." Every screenshot in your docs should have meaningful alt text. Here's a Markdown-specific checklist:
- Never use empty alt text —
makes the image invisible to screen readers - Never use the filename —
is meaningless - Keep it under 125 characters — screen readers handle long alt text poorly; if you need more, use surrounding text
- Don't start with "Screenshot of" — screen readers already announce "image," so this is redundant
- Include the key information — what app, what state, what's important about what's shown
Screenshots in GitHub issues and PRs
GitHub renders Markdown images in issues and pull requests. When you paste a screenshot into a GitHub issue, it generates markup like this:

That "image" alt text is useless. Take the extra 10 seconds to replace it with something meaningful. Especially in bug reports — the screenshot is often the most important part of the issue, and it should be accessible to everyone on the team.
A good pattern for bug report screenshots:

This tells a screen reader user exactly what the bug is, even without seeing the image.
Using AI to generate alt text for screenshots
AI vision models (Claude, GPT-4o, Gemini) are remarkably good at describing screenshots. If you have a backlog of undescribed screenshots in your documentation, you can use AI to draft alt text quickly.
The workflow: paste the screenshot into Claude or ChatGPT and ask for alt text. The AI will describe what's in the image. Review and edit the result — AI-generated alt text tends to be too long and too literal. You want the purpose, not a pixel-by-pixel description.
For batch processing, you can script this with the Claude API or use a tool that supports image inputs. Feed each screenshot through the API with a prompt requesting concise alt text, and you'll get a first draft for every image in minutes.
Accessibility checklist for screenshot-heavy documentation
| Check | Why it matters |
|---|---|
| Every image has non-empty alt text | Screen readers skip images without alt text or announce "image" with no context |
| Text in screenshots is also in the document body | Screenshots of code, commands, or errors should have a text equivalent nearby |
| Annotations are described in alt text or surrounding text | Arrows, circles, and callouts are visual-only and invisible to assistive tech |
| Color is not the only way to convey information | Red arrows and green highlights are meaningless to colorblind users |
| Screenshots have sufficient contrast | Low-contrast UI captured in a screenshot stays low-contrast in docs |
| Decorative screenshots are marked as such | Use empty alt (alt="") only for truly decorative images that add no information |
Tools that help with screenshot accessibility
axe DevTools and WAVE: browser extensions that flag missing or empty alt text on any page, including documentation sites. Run them on your docs to find every image that needs alt text.
markdownlint: a Markdown linter that can be configured to flag images with empty alt text. Add it to your CI pipeline to catch missing alt text before it merges.
# .markdownlint.json
{
"MD045": true
}
Rule MD045 flags images without alt text. This catches  patterns in pull requests automatically.
macOS VoiceOver: test your documentation with the built-in screen reader. Press Cmd+F5 to toggle VoiceOver, then navigate through your doc and listen to how screenshots are announced. You'll immediately hear which images need better alt text.
Why this matters for developer teams
Accessible documentation isn't just about compliance. When your screenshots have good alt text, your docs are searchable (alt text is indexed by search engines and in-page search), they work in low-bandwidth environments (alt text displays when images fail to load), and they're usable by every member of your team regardless of ability.
The pattern is simple: every time you add a screenshot, spend 15 seconds writing alt text that describes what the reader would learn by looking at it. Over time, this becomes automatic — and your documentation becomes significantly better for everyone.
LazyScreenshots captures, annotates, and auto-pastes into Claude, Cursor, and ChatGPT in one keystroke. Make your screenshot workflow as fast as your coding workflow. $29 one-time.
Try LazyScreenshots — $29 one-time