EmailTimer.App

Menu

Email accessibility, from the WCAG 2.2 criteria that apply

By Danish Mohammed. 8 min read

Email accessibility means an email can be read and acted on by people who use a screen reader, zoom, high contrast, keyboard navigation or images switched off. In practice that comes down to a short list of WCAG 2.2 criteria: text alternatives for images, real headings, a sensible reading order, enough contrast, clear link text, tappable buttons and a declared language.

WCAG is written for web content, not for email in particular. An HTML email is a web page drawn by a mail client, though, and the criteria below are the published standard closest to the problem. Every quote is from WCAG 2.2, a W3C Recommendation dated 12 December 2024, read on 29 October 2026. Where a criterion is about something the email cannot control, such as a reader’s own settings, it is left out.

Which WCAG 2.2 criteria apply to email?

Which WCAG 2.2 criteria apply to email?
Criterion Level What it asks of an email
1.1.1 Non-text Content A Every image that carries meaning has alt text; decorative images have empty alt
1.3.1 Info and Relationships A Headings are real headings, lists are real lists, not styled paragraphs
1.3.2 Meaningful Sequence A The order in the HTML is the order the email should be read
1.4.1 Use of Color A Color is never the only way something is shown
1.4.3 Contrast (Minimum) AA Text at 4.5:1, large text at 3:1
1.4.4 Resize Text AA Text can be zoomed to 200 percent without breaking
1.4.10 Reflow AA The email reads at 320 CSS pixels wide without sideways scrolling
2.2.2 Pause, Stop, Hide A Motion over five seconds can be stopped, which a GIF cannot be
2.4.4 Link Purpose (In Context) A Each link says where it goes
2.5.8 Target Size (Minimum) AA Buttons and links at least 24 by 24 CSS pixels
3.1.1 Language of Page A The email’s language is declared

Moving images, 2.2.2 above, get a page of their own: accessible countdown timers covers motion, the five second rule, flashing and alt text for a timer, and this page does not repeat it.

Alt text for images in email

Success criterion 1.1.1 asks that “All non-text content that is presented to the user has a text alternative that serves the equivalent purpose”. In an email, that is the alt attribute on each <img>.

The test for good alt text is whether the email still makes sense read aloud with the images gone:

  • An image that carries words or an offer gets those words: alt="Everything 30% off until Sunday", not alt="banner".
  • A linked image gets alt text that says where the link goes, because for a screen reader the alt text is the link text.
  • A decorative image, such as a divider or a background flourish, gets an empty alt="". That tells a screen reader to skip it. A missing alt is not the same thing: it gives the screen reader no instruction at all.
  • A logo gets the brand name.

Alt text matters for sighted readers too. Microsoft states that “Microsoft Outlook is configured by default to block automatic picture downloads from the Internet”, and Mailchimp’s open tracking page notes that tracking fails when “recipients or their email client have chosen not to display images”. Those readers see the alt text, or nothing, in the image’s place.

Two email layouts with images blocked. With width and height set, the timer keeps a box that shows its alt text, Sale ends Friday 23:59 UTC. With no width or height, the image collapses to a small icon and the text below moves up.
What width and height on the img tag do when a reader has images switched off: the alt text gets a box to show in.

Set width and height on every image as well. With images off, a sized image keeps its box and shows its alt text in it; an unsized one can shrink to an icon and lose the words.

Headings and reading order

Criterion 1.3.1 asks that “Information, structure, and relationships conveyed through presentation can be programmatically determined”. Screen reader users often move through a page by its headings. A headline that is only large bold text in a <td> is not a heading to them. Use <h1> to <h3> for the email’s headings, styled inline, and <p> for paragraphs.

Criterion 1.3.2, Meaningful Sequence, covers the case “When the sequence in which content is presented affects its meaning”. A screen reader reads an email in the order of its HTML, not the order of its columns on screen.

Accessible email design and reading order. A two-column email shows a logo across the top, a product photo in the left column, and the heading Autumn sale, the text Everything 30% off until Sunday and a Shop the sale button in the right column. A screen reader reads it in source order: logo, product photo, heading, paragraph, link, so the photo is read before the heading.
Columns are a visual arrangement. The screen reader follows the HTML, left column first.

In this example the order is acceptable: the photo is read before the heading, and if its alt text is empty, it is skipped. It goes wrong when the HTML order stops matching the meaning, such as a price in one cell and what it is the price of in another cell three rows later. Put things in the HTML in the order they should be read, and check by reading the source top to bottom.

Why do layout tables need role=“presentation”?

Much HTML email is still laid out with tables. To a screen reader, though, a <table> is a data table, and it may announce rows and columns that mean nothing.

WAI-ARIA 1.2 defines the fix. The presentation role marks “An element whose implicit native role semantics will not be mapped to the accessibility API”, and the specification lists “A layout table and/or any of its associated rows, cells, etc.” among its intended uses:

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
  <tr>
    <td>
      <h1 style="margin:0;font-size:24px;">Autumn sale</h1>
      <p style="margin:8px 0 0;">Everything 30% off until Sunday.</p>
    </td>
  </tr>
</table>

Put role="presentation" on every table used for layout. Leave it off a table that really holds data, such as an order summary, and give that one header cells.

Color and contrast in email

Criterion 1.4.3, Contrast (Minimum), is Level AA. Normal text needs a contrast ratio of at least 4.5:1, and “Large-scale text and images of large-scale text have a contrast ratio of at least 3:1”. WCAG defines large-scale text as “at least 18 point or 14 point bold”.

Five email color contrast pairs measured against WCAG 2.2 level AA. Near-black text on white 17.2 to 1, passes 4.5 to 1. Mid-gray text on white 5.0 to 1, passes. Light gray text on white 2.6 to 1, fails both. White text on indigo 6.3 to 1, passes. White text on amber 2.1 to 1, fails both.
Ratios computed with WCAG 2.2's relative luminance formula, for #1B1B1F, #6E6E7A and #A1A1AA on #FFFFFF, and #FFFFFF on #4F46E5 and #F59E0B. Light gray body text and white on a bright yellow-orange are the two that fail most often in email.

The two failures in the figure are common in email design: light gray small print, and white text on a bright button color. Check the colors you actually use, including the text on buttons and the footer.

Criterion 1.4.1 adds that “Color is not used as the only visual means of conveying information”. A link shown only by color, with no underline, fails it for a reader who cannot tell the colors apart. So does a sale price shown only in red. Underline links in body text, and say “Now $40, was $60” in words.

Dark mode changes colors without asking you, and an image with a transparent background can lose its contrast against a dark inbox. Dark mode email shows what happens and the opaque background that avoids it.

Criterion 2.4.4 asks that “The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context”. Screen reader users often pull up a list of links on their own, out of context. Five links that all say “Click here” are five identical entries in that list.

  • Write link text that names the destination: “See the autumn sale prices”, “Read the full returns policy”.
  • Make the main action a coded button, a link styled with padding and a background, not a picture of a button. A coded button still works with images off and can be zoomed.

Criterion 2.5.8, Target Size (Minimum), is Level AA: “The size of the target for pointer inputs is at least 24 by 24 CSS pixels”, with some exceptions such as links inside a sentence. 24 pixels is the minimum. The stricter criterion 2.5.5, Target Size (Enhanced), is Level AAA and asks for “at least 44 by 44 CSS pixels”, a better target for the main button in an email read on a phone.

Text size, zoom and reflow

Criterion 1.4.4 asks that text can be resized “up to 200 percent without loss of content or functionality”, and 1.4.10, Reflow, asks that content works at a width equivalent to “320 CSS pixels” without scrolling in two directions. For an email, that means:

  • Body text set in a size people can read without zooming, and in real text rather than in images.
  • A layout that falls to one column on a narrow screen, so a reader who zooms does not have to scroll sideways.
  • No fixed-height boxes that clip text when it is enlarged.

Declare the language

Criterion 3.1.1, Language of Page, Level A: “The default human language of each web page can be programmatically determined.” Put lang on the <html> element, such as <html lang="en">, so a screen reader pronounces the email with the right voice. Set it on the outer wrapper table or <div> as well, so the language stays declared if a mail client shows only the message body. An email in a right-to-left language also needs dir="rtl"; right-to-left countdown timers covers that case for timers.

An email accessibility checklist

An email accessibility checklist
Check Criterion
Every meaningful image has alt text that says what it says 1.1.1
Decorative images have alt="" 1.1.1
Headings use <h1> to <h3>, paragraphs use <p> 1.3.1
Every layout table has role="presentation" 1.3.1
The HTML order is the reading order 1.3.2
Links are underlined or otherwise marked, not by color alone 1.4.1
Text contrast at least 4.5:1, large text 3:1 1.4.3
Readable at 200 percent zoom and at 320 pixels wide 1.4.4, 1.4.10
Motion lasts five seconds or less, or the reader can pause, stop or hide it 2.2.2
Link text names the destination 2.4.4
Buttons are at least 24 by 24 pixels, ideally 44 by 44 2.5.8, 2.5.5
lang is set on the email 3.1.1
The email still makes sense with images off 1.1.1

The images-off row is the quickest test of all: turn images off in your own mail client and read the email as it arrives. If a deadline, a price or a code disappears, it was only in a picture. A countdown timer from EmailTimer.App is a picture too, so its deadline belongs in the alt text and in live text beside it, which the HTML for an email countdown timer shows. The free countdown timer generator writes that alt text with the timer, with no account for 500 opens, or 1,000 when you sign in.

Questions and answers

Does WCAG apply to email?

WCAG is written for web content, and no part of it is specific to email. An HTML email is drawn the same way as a web page, so its criteria are the closest published standard, and they are the ones this guide uses.

What alt text should an email image have?

The words or the information the image carries, written as a short sentence. A linked image’s alt text should say where the link goes. A purely decorative image should have an empty alt="" so screen readers skip it.

What contrast ratio does email text need?

At WCAG 2.2 level AA, at least 4.5:1 for normal text and 3:1 for large text, which WCAG defines as at least 18 point, or 14 point bold.

Why add role=“presentation” to email tables?

Because tables used for layout are otherwise announced as data tables. WAI-ARIA 1.2 lists “A layout table” as an intended use of the presentation role, which removes the table semantics while keeping the content.

Is an animated GIF in an email accessible?

Not on the strength of the image alone, because a looping GIF cannot be paused from inside an email. Accessible countdown timers covers what WCAG 2.2 asks of moving images and what to put around one.

Sources

Related

Put a countdown in the campaign you are writing now

The free plan covers 5,000 opens a month with no card. Starter is $19 a month for 250,000.