guides
Email Accessibility Guide for HTML Email
A practical guide to email accessibility — semantic structure, tables, alt text, dark mode contrast, descriptive links, and testing across screen readers.
For most organizations, email is the most frequent point of contact they have with customers. An order confirmation, a password reset, a monthly statement, a newsletter — these messages often arrive long before someone visits your website, and they arrive far more often. Yet email accessibility is one of the most overlooked corners of digital inclusion. Teams that invest heavily in an accessible website routinely ship campaigns built on tangled markup, image-only content, and buttons that read as “click here” to a screen reader.
The reason is partly historical and partly technical: HTML email is its own discipline, with its own constraints, its own rendering engines, and its own failure modes. Techniques that are second nature on the modern web — semantic landmarks, flexbox layouts, CSS custom properties — are unreliable or outright broken across the email client matrix. Making an email accessible is not the same job as making a web page accessible, and treating them as identical is exactly why so many emails fail.
This guide walks through what email accessibility actually requires: how to structure markup so assistive technology can parse it, how to handle the presentation tables that still underpin email layout, how to write alt text and links that make sense out of context, how to survive dark mode and zoom, and how to test the result across Outlook, Gmail, Apple Mail, and screen readers. If you would rather have specialists do this for your templates, our email remediation service covers the whole stack.
Why HTML email is its own discipline
A web page renders in a browser. There are a handful of mainstream browsers, they update on predictable schedules, and they converge on web standards. Email is the opposite. Your message can be opened in dozens of clients — Outlook on Windows, Outlook on the web, the new Outlook, Gmail in a browser, the Gmail app, Apple Mail on macOS and iOS, Yahoo, Samsung Email, and many more — each with a different rendering engine and a different, often shrinking, subset of supported HTML and CSS.
The most notorious example is desktop Outlook on Windows, which historically rendered email using Microsoft Word’s engine rather than a real browser engine. That alone forces email developers back to table-based layouts, inline styles, and defensive patterns the web abandoned years ago. Many clients also strip <style> blocks, refuse modern CSS, and rewrite attributes they consider unsafe.
For accessibility, this matters enormously. The semantic HTML you rely on for a website — <nav>, <main>, ARIA landmarks — is frequently stripped or ignored in email. You cannot lean on a single rendering target. Email accessibility is therefore about building messages that degrade gracefully: that remain readable, navigable, and meaningful even when the layout collapses, the images fail to load, or the styles are discarded. That defensive mindset is the foundation everything else in this guide builds on, and it is why email belongs in a dedicated accessibility services program rather than being folded into general web work.
Semantic structure and a logical reading order
Even with all the constraints, the single most valuable thing you can do for a screen reader user is give the email a clear, linear structure. Screen readers read content in DOM order, so the order of your markup is the order your message is heard. If your design places a promotional banner before the actual message, the banner is announced first — regardless of how the layout looks.
Use real heading elements to establish hierarchy. An email should have one logical top-level heading (typically the main subject or offer) as an <h1>, with subsequent sections marked up as <h2> and <h3>. Screen reader users navigate by heading to scan a message, so a well-structured outline turns a wall of text into something skimmable. Do not fake headings with large, bold <span> text; visually it may look like a heading, but assistive technology hears ordinary body copy. Likewise, use genuine list markup (<ul>, <ol>, <li>) for lists, and set the document language with a lang attribute on the <html> element so screen readers use the correct pronunciation and voice.
The reading order also has to make sense on its own. Read your markup top to bottom, ignoring all styling, and ask whether it still tells a coherent story. If it does, you have a solid foundation. If the meaning depends on the visual arrangement, you have work to do — and that work usually starts with the layout tables.
Presentation tables and role=“presentation”
Email layout is built with tables. That is not a stylistic choice; it is a survival requirement, because table-based layout is the only approach that renders consistently across the client matrix. The problem is that tables carry semantic meaning. By default, a screen reader announces a <table> as a data table, reads out the number of rows and columns, and tries to associate cells with headers. For a table that exists purely to position a logo next to a headline, that announcement is noise — and across a nested, multi-table email it becomes an exhausting, disorienting experience.
The fix is to tell assistive technology that these tables are layout scaffolding, not data. Add role="presentation" to every table used for layout: <table role="presentation">. This removes the table’s semantics so screen readers skip the row/column announcements and simply read the content inside in order. It is one of the most important and most frequently missed techniques in email accessibility, and it has to be applied to every layout table, including nested ones, not just the outermost wrapper.
A few related practices reinforce this. Do not add summary, <th> header cells, scope, or <caption> to presentation tables — those are meaning-bearing markup reserved for genuine data tables. If your email contains real tabular data, such as an itemized receipt, do the opposite: leave it as a data table with proper <th> headers and scope attributes so the relationships are conveyed. The principle is consistency between appearance and semantics. Getting this right across a template library is fiddly and easy to regress, which is why it is a core part of our email remediation work.
Images and alt text
Images carry a lot of weight in email, and many recipients see them with images disabled by default — some clients block remote images until the user opts in. That makes alt text doubly important: it is both an accessibility requirement and the fallback that keeps your message intelligible when images do not load.
Every <img> element needs an alt attribute. What goes inside depends on the image’s purpose. For an informative image — a product photo, an infographic, a chart — the alt text should convey the same information the image provides. “Blue running shoe, side view” is more useful than “image1.png”, and a chart’s alt text should summarize the takeaway, not just label it as a chart. For text rendered as an image, which still happens with promotional headlines, the alt text must reproduce the words exactly, because otherwise that content is invisible to screen readers and to anyone with images off.
For decorative images — spacers, background flourishes, dividers that add nothing to the meaning — use an empty alt attribute, written as alt="". This explicitly tells screen readers to skip the image rather than announcing a filename. Omitting the attribute entirely is not the same thing; a missing alt often causes screen readers to read out the image URL, which is the worst of both worlds. Be especially careful with the common pattern of using an image as a button or link: that image’s alt text must describe the action, such as “Complete your purchase”, not the picture.
One more email-specific point: never put essential information only in an image. A coupon code, a confirmation number, an unsubscribe link, the core call to action — if any of these exist only as pixels, they vanish for image-off and screen reader users. Keep the critical content as live, selectable text.
Contrast and dark mode
Text has to be readable, which means it has to meet contrast requirements. WCAG 2.2 asks for a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text against its background. Light gray text on a white background — a perennial favorite of minimalist email design — frequently fails, and so do pale buttons and low-contrast link colors. These thresholds apply to email just as they do to the web, and the same WCAG 2.2 success criteria are the benchmark; our broader WCAG compliance overview explains how those criteria fit together.
Email adds a complication the web mostly does not: dark mode. Many clients — Apple Mail, Outlook, Gmail among them — automatically transform emails when the user has dark mode enabled. Some simply swap the background; others aggressively invert or recolor your palette, sometimes partially. The result is that a button with dark text on a light brand color can end up with dark text on a dark inverted background, dropping contrast to nothing. Black text inside a colored box can become invisible. Logos with transparent backgrounds can disappear against a dark canvas.
There is no universal control over dark mode, and the techniques that exist vary by client, but the defensive principles are stable. Design with both modes in mind. Avoid pure black or pure white as base colors, since they leave no room for the client to adjust. Give logos and key graphics a contrasting outline or solid background plate so they survive inversion. Test the actual rendered result in dark mode in each major client rather than trusting your light-mode design to translate. The goal is that text and interactive elements stay above the contrast threshold no matter which way the client flips them.
Descriptive links and accessible buttons
Screen reader users often pull up a list of all the links in a message to navigate or decide where to go. In that list, the link text appears stripped of its surrounding context. A message full of “Click here”, “Read more”, and “Learn more” produces a useless inventory of identical, meaningless entries. Every link’s text should make sense on its own: “Read our spring sustainability report” or “Track your order” tells the user exactly where the link leads without any surrounding sentence.
The same applies to buttons, which in email are usually links styled to look like buttons — often built with the “bulletproof button” technique using nested tables and background colors so they render across clients. Whatever the construction, the accessible name of the button must describe its action. An empty or vague button, or one whose text lives only in a background image, is a dead end for assistive technology. If the button is image-based, the action belongs in the image’s alt text.
Make link and button targets large enough to tap comfortably — WCAG 2.2 introduced a target size minimum, and on mobile a too-small tap target frustrates everyone, not only users with motor impairments. Ensure links are distinguishable by more than color alone, since color-only links fail for users with low vision or color blindness; an underline is the safest cue. And give every link a real, working destination rather than a placeholder. Vague link text is one of the most common failures we see, and it shows up across the web too, not just in email — our roundup of common accessibility issues to avoid covers the same pattern in a wider context.
The preheader and the preview experience
The preheader — sometimes called preview text — is the snippet of text that appears next to or beneath the subject line in the inbox, before the message is opened. Many emails waste it, leaving it to default to whatever text happens to come first: an “Email not displaying correctly?” line, an “unsubscribe” link, or a string of empty alt text. For screen reader users navigating their inbox, and for everyone deciding whether to open, that wasted preheader is a missed chance to communicate.
Write a deliberate, meaningful preheader that summarizes the email’s purpose, and place it as the first text content in the body so it is what the inbox picks up. The standard technique is a hidden block of text near the top of the email, styled to be visually hidden but still available to clients and assistive technology. Be careful with how you hide it: a poorly hidden preheader can either show up as an unwanted visible line or be skipped entirely by screen readers. Pad it appropriately so trailing inbox content does not leak adjacent text into the preview.
Treat the preheader as part of the message’s information architecture. Combined with a clear subject line and a strong opening heading, it gives every recipient — sighted or not — a fast, accurate sense of what the email is and why it matters.
Responsive layout and zoom
Emails are read on phones as much as on desktops, and they are read by people who zoom in to enlarge the text. Both demand that the layout adapt. A fixed, wide layout that forces horizontal scrolling on a small screen, or that breaks when a user increases the text size, is a barrier — and WCAG 2.2 has criteria for both reflow and text spacing that apply here.
Build emails to be responsive: a single-column layout on narrow screens is almost always the most robust and accessible choice, because it preserves reading order and avoids side-by-side content that collapses unpredictably. Where you use media queries to switch layouts, remember that some clients ignore them, so the default rendering must still be usable. Set font sizes large enough to read without zooming — body text below roughly 14 to 16 pixels is hard for many people on mobile — and avoid fixing line height or letter spacing so tightly that enlarged text overlaps or gets clipped.
Test what happens when a user zooms in or increases their device’s system font size. Content should reflow and remain readable rather than overflowing its container or disappearing behind other elements. The reward is an email that works not just for users with low vision but for everyone reading on a small screen in imperfect conditions.
Testing across clients and screen readers
You cannot verify email accessibility by inspecting code alone, because the whole challenge is that clients render the same code differently. Testing has to happen across a representative matrix of clients and assistive technologies, in the conditions real recipients use.
Cover the major clients at minimum: Outlook (desktop on Windows, plus the web and new versions), Gmail (web and the mobile app), and Apple Mail (macOS and iOS). For each, check rendering in both light and dark mode, with images on and off, and at increased zoom. Then layer screen readers on top — VoiceOver with Apple Mail on macOS and iOS, NVDA or JAWS with Outlook and Gmail on Windows, and TalkBack with the Gmail app on Android. Listen to the email the way a screen reader user would: are the headings announced, is the reading order logical, are layout tables silent, do links make sense in the links list, do images announce useful alt text or stay quiet when decorative?
Automated checks have a place — they can flag missing alt attributes, low contrast, and absent language attributes quickly across many templates — but they cannot judge whether alt text is meaningful, whether the reading order tells the right story, or whether a button’s name describes its action. That judgment requires manual testing, ideally including testing by people who use assistive technology every day. Our manual accessibility audits guide explains why human testing is irreplaceable, and our audits by people with disabilities bring exactly that lived-experience perspective to email.
A word of caution: do not be tempted by accessibility “overlay” widgets that promise instant compliance. They do not work for websites, and they are irrelevant to email, where there is no page to inject a script into. Real email accessibility comes from fixing the markup, not from a bolt-on.
Remediating templates at the ESP level
Fixing one email is useful. Fixing the source that generates every email is transformative. Most organizations send through an email service provider — Mailchimp, Klaviyo, Salesforce Marketing Cloud, Braze, and the like — where campaigns are assembled from master templates, reusable modules, and drag-and-drop content blocks. If those underlying templates carry the accessibility fixes, every future send inherits them automatically, and the marketing team does not have to remember a checklist for each campaign.
This is the most cost-effective place to invest. Remediate the master template so layout tables carry role="presentation", the language attribute is set, the preheader structure is in place, and the heading scaffolding is correct. Remediate each reusable module — the hero block, the article card, the button, the footer — so whatever the team drags in is accessible by construction. Establish patterns for alt text so editors are prompted to write it, and bake contrast-safe, dark-mode-aware colors into the brand palette the templates use.
The catch is that drag-and-drop builders can also regress accessibility: a builder may strip role="presentation", mangle the markup on export, or let an editor paste in an inaccessible block. So template remediation has to be paired with governance — guidelines, review steps, and periodic re-testing as the ESP and its export behavior change. That is where building accessibility into the workflow pays off; our accessibility process improvement service helps teams make accessible email the default rather than an afterthought, and accessibility consulting aligns it with your wider compliance program. For organizations under the European Accessibility Act, accessible customer communications are part of the picture, which our EAA compliance overview lays out.
QualiBooth combines accessibility scanning software for the issues machines catch reliably with expert manual remediation for the judgment calls they cannot — across websites, documents, and email alike. If your emails are part of how you serve customers, they deserve the same rigor as the rest of your digital estate.
Conclusion
Email accessibility is not a smaller version of web accessibility — it is a related but distinct discipline, shaped by a fragmented client landscape, table-based layouts, and rendering engines that ignore much of the modern web. The good news is that the techniques are well established: semantic structure and a sound heading outline, role="presentation" on every layout table, meaningful alt text with empty alt for decoration, contrast that survives dark mode, links and buttons that describe themselves, a deliberate preheader, responsive layouts that withstand zoom, and disciplined testing across clients and screen readers. Apply them at the template level and accessibility stops being a per-campaign chore and becomes a property of your system.
The payoff is real. Accessible emails reach more people, read clearly with images off, and tend to perform better because clarity and robustness help everyone. If you want help, our email remediation service can audit your templates, fix them at the ESP level, and verify the result across the full client matrix — and you can request a demo or run a free scan of your website to see where the rest of your digital estate stands.
Frequently asked questions
Do I really need role="presentation" on every layout table?
Yes. Without it, screen readers announce each layout table as a data table, reading row and column counts and disrupting the flow. Because email layouts nest tables, the attribute has to be on every layout table, not just the outer wrapper. Genuine data tables, like receipts, keep their data semantics instead.
What should I put in alt text for a decorative image?
Use an empty alt attribute, written alt="", so screen readers skip the image. Do not omit the attribute entirely, because a missing alt often causes the image’s filename or URL to be read aloud.
How do I stop dark mode from breaking my email? You cannot fully control how each client handles dark mode, but you can design defensively: avoid pure black and white, give logos a contrasting background or outline, keep contrast above the WCAG 2.2 thresholds, and test the rendered result in dark mode in each major client rather than assuming your light-mode design will carry over.
Can an automated tool make my email accessible? Automated tools catch some issues — missing alt attributes, low contrast, absent language settings — but they cannot judge whether alt text is meaningful, whether the reading order makes sense, or whether links and buttons describe their purpose. That requires manual testing with screen readers. Accessibility overlay widgets are not a solution and are not applicable to email.
Is it better to fix individual emails or templates? Templates. Remediating master templates and reusable modules in your ESP means every future send inherits the fixes, which is far more cost-effective than fixing campaigns one at a time. Pair it with governance so drag-and-drop builders do not reintroduce problems.
Need accessible emails that work in every client?