How to Make an EPUB Accessible
Accessibility in EPUB used to be a nice-to-have. It isn't anymore. The EU's Accessibility Act (EN 301 549 / WCAG 2.1 AA) became enforceable for commercial ebooks in June 2025, and major retailers are quietly starting to reject books that fail basic a11y checks. Here's what "accessible EPUB" actually means and how to ship one without spending a week on it.
What "accessible EPUB" means in practice
Two specs are relevant:
- EPUB Accessibility 1.1 — the EPUB-specific spec. Requires structured navigation, a declared reading order, accessibility metadata in the package document, and certain semantic markup.
- WCAG 2.1 Level AA — the web content spec, referenced by EPUB Accessibility 1.1. Covers text alternatives, contrast, semantic structure, and similar web concepts applied to EPUB content.
An accessible EPUB satisfies both. In practice, 5 concrete things account for the vast majority of real-world failures.
The 5 that actually matter
1. Alt text on every meaningful image
Every <img> that conveys information needs an alt attribute describing what it shows. Decorative images (spacers, dividers) get alt="" — empty but present. Missing alt attributes are the single most common accessibility failure.
Cover images are special. The cover also needs alt text, but most tools leave it empty. The description should be something like "Book cover: [title] by [author], showing [brief visual description]".
2. Language attribute on the root element
The <html> element of every content document needs a lang attribute (e.g. lang="en-US"). Without it, screen readers don't know which pronunciation to use. The metadata editor sets the document-level language, but individual XHTML files need the attribute on the <html> tag too.
3. Logical heading structure
Headings should step from h1 to h2 to h3 without skipping levels. A chapter title is h1 (or h2 if the book title takes the h1); a scene or subsection is the next level down. Don't use h3 directly under h1 to make it look smaller — screen-reader users navigate by heading level, and skipped levels confuse the outline.
4. Semantic markup, not div-soup
Use <section>, <nav>, <aside>, <blockquote>, and <figure> for what they mean. Not every block needs to be a <div> with a class. EPUB 3 also has specific semantic attributes like epub:type="chapter", epub:type="footnote", and epub:type="titlepage" — use them on the corresponding elements so assistive tech knows the role.
5. Accessibility metadata in the OPF
The package document (content.opf) needs entries like:
<meta property="schema:accessMode">textual</meta>
<meta property="schema:accessMode">visual</meta>
<meta property="schema:accessibilityFeature">alternativeText</meta>
<meta property="schema:accessibilityFeature">structuralNavigation</meta>
<meta property="schema:accessibilityHazard">none</meta>
<meta property="schema:accessibilitySummary">This publication conforms to WCAG 2.1 Level AA.</meta>
These tell stores and readers what accessibility features the book provides. Benetech Bookshare, educational publishers, and an increasing number of trade retailers now require them.
What EPUBCheck catches — and what it misses
Run the EPUB validator first. EPUBCheck (the engine behind every EPUB validator) catches: missing alt attributes, missing language codes, malformed markup, broken references, and missing accessibility metadata once the fields are declared.
What it does not catch: whether your alt text is actually descriptive, whether your heading structure is logical, whether the reading order matches the visual order, or whether color contrast meets WCAG. Those require human review. A clean validator pass is necessary, not sufficient.
Test with a real screen reader
Five minutes of screen-reader testing catches issues no automatic tool will:
- macOS: open the EPUB in Apple Books → Cmd+F5 to enable VoiceOver. Read the first chapter.
- Windows: download NVDA (free) from nvaccess.org. Open the EPUB in an EPUB-supporting reader like Thorium. Insert+Down Arrow to start reading.
- iOS: Settings → Accessibility → VoiceOver. Open the book in Apple Books. Swipe right to advance.
Listen for: does each heading announce as a heading? Does each image's alt text make sense out of context? Is the reading order natural? This takes minutes and catches issues that would cost you a store rejection.
When the author isn't a developer
If you write in Word, Scrivener, or Pages and compile to EPUB, most of this happens automatically if you use heading styles, add alt text in the image dialog, and set the document language. Failures almost always come from skipping one of those in the source document. Fix it there, not in the exported EPUB — trying to edit XHTML in a compiled EPUB is a fast way to break the file.
Related
- EPUB Validator — run with deep scan
- Fix EPUB errors — structural issues
- Self-publishing guide
- Edit EPUB metadata — set language and publisher
- What is an EPUB file?
Try it now — free
Check your EPUB for errors, compatibility issues, and compliance. Free EPUB validator supporting EPUB 2 and EPUB 3 standards.
Validate EPUB Files →