# Email Accessibility
Emails must be readable by screen readers, dark-mode clients, translation tools, and AI agents — not just sighted readers on a default inbox. The rules below are mechanical. Apply them every time.
## Rules
### Set `lang` and `dir` on `` and on `
`'s direct children (Serious)
Both attributes are needed in **two places**: on `` *and* on the direct children of ``. Several email clients strip the attributes from ``, which is why duplicating them on the body's children is the single most common accessibility failure in production email.
```html
Your weekly product updates
```
- `lang`: a [BCP 47 language tag](https://developer.mozilla.org/en-US/docs/Glossary/BCP_47_language_tag) (`en`, `pt-BR`, `ja`, `ar`)
- `dir`: `ltr`, `rtl`, or `auto`
**Fallbacks when the correct values aren't available** (use only when you genuinely don't know):
- `dir="auto"` — lets the user agent infer direction from content
- `lang="und"` — marks the language as undetermined
Both fallbacks are worse than the correct value but much better than nothing. For multi-locale templates, pass the locale through; do not hardcode `en`.
### Mark layout tables as presentational (Serious)
Any `` used for layout must have `role="presentation"` (or the equivalent `role="none"`). Otherwise screen readers announce "table, row 1 of N" for every layout row and the email becomes unusable. Prefer avoiding layout tables entirely; when you can't, mark them.
```html
```
Leave a `` without `role="presentation"` only when the data is genuinely tabular (line items, comparison rows). Tabular data should also use `` for column headers.
### Use a single `` and nest headings in order (Mild)
Most emails should have one `` that names the email, with subheadings nested in order:`` → `` → ``. Never skip levels. Never fake a heading with bold ``.
```html
Order confirmation
Items
Shipping
Address
Tracking
```
Headings are how assistive tech and AI clients navigate and summarize the email.
**Exception:** very short messages (SMS-style notifications, single-sentence alerts) may not need a heading at all. If the email body is one or two sentences, skip the ` |