---
title: "Make the editor help people publish · Agent Wranglers"
url: https://agentwranglers.se/playbook/accessibility/media-documents-and-email/authoring-checks
id: AXS-69
level: Recommended
updated: 2026-10-22
build: a2a6bdfed830
tokens: 1074
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Make the editor help people publish accessible content

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Media, documents and email](https://agentwranglers.se/playbook/accessibility/media-documents-and-email.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-27.

- ID: AXS-69
- Level: Recommended
- Chapter: [Media, documents and email](https://agentwranglers.se/playbook/accessibility/media-documents-and-email.md)
- Rule: If your product lets people publish pages, posts or emails, its editor offers headings, lists, alt text and table headers. It warns before publishing on a missing alt text, a skipped heading level, an empty link or a table without headers.
- Check: A test saves a draft with an image without alt text, a jump from `h2` to `h4`, an empty link and a table without headers. The editor shows 4 warnings before publishing. Once they are fixed, the published page passes the automated scan.
- How: EN 301 549 clause 11.8 asks authoring tools to enable and guide accessible content, and ATAG 2.0 gives the details. Offer heading levels in the toolbar, not font sizes alone. Run the checks on save and show each problem with a fix, as ATAG asks for repair help. An AI draft of alt text is a suggestion that the author accepts, edits or rejects, and never a file name. Uploaded images follow [Ask the uploader to describe each image](https://agentwranglers.se/playbook/files-and-media/images/uploader-alt-text.md). Keep alt text and headings when you convert the content, such as to email or PDF, as clause 11.8.3 asks.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JavaScript example

```js
export function authoringWarnings(doc) {
  const warnings = [];
  doc.querySelectorAll('img:not([alt])').forEach(() => warnings.push('image-alt'));
  let level = 1;
  for (const h of doc.querySelectorAll('h1, h2, h3, h4, h5, h6')) {
    const next = Number(h.tagName[1]);
    if (next > level + 1) warnings.push('heading-skip');
    level = next;
  }
  doc.querySelectorAll('a').forEach(a => { if (!a.textContent.trim() && !a.querySelector('img[alt]')) warnings.push('empty-link'); });
  doc.querySelectorAll('table').forEach(t => { if (!t.querySelector('th')) warnings.push('table-headers'); });
  return warnings;
}
```

### Python example

```python
def authoring_warnings(soup):
    warnings = ["image-alt" for img in soup.find_all("img") if not img.has_attr("alt")]
    level = 1
    for h in soup.find_all(["h1", "h2", "h3", "h4", "h5", "h6"]):
        nxt = int(h.name[1])
        if nxt > level + 1:
            warnings.append("heading-skip")
        level = nxt
    warnings += ["empty-link" for a in soup.find_all("a") if not a.get_text(strip=True) and not a.find("img", alt=True)]
    warnings += ["table-headers" for t in soup.find_all("table") if not t.find("th")]
    return warnings
```

## Sources

- [W3C ATAG 2.0](https://www.w3.org/TR/ATAG20/)
- [ETSI EN 301 549 V3.2.1 – clause 11.8 Authoring tools](https://www.etsi.org/deliver/etsi_en/301500_301599/301549/03.02.01_60/en_301549v030201p.pdf)

## Related rules

- MED-12 [Ask the uploader to describe each image](https://agentwranglers.se/playbook/files-and-media/images/uploader-alt-text.md) in Files and media

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/accessibility/media-documents-and-email/authoring-checks">Agent Wranglers accessibility playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Scan every email template in the build](https://agentwranglers.se/playbook/accessibility/media-documents-and-email/email-template-scan.md)
- Next: [Ship e-books with their accessibility metadata](https://agentwranglers.se/playbook/accessibility/media-documents-and-email/epub-accessibility.md)
- [Media, documents and email](https://agentwranglers.se/playbook/accessibility/media-documents-and-email.md)
