3.1.5 Reading Level

WCAG 2.2 · 3.1.5 AAA Understandable

What it requires

When text requires reading ability more advanced than the lower secondary education level (roughly the level expected after about seven to nine years of schooling, ages 11–14) — after removing proper names and titles — you must provide supplemental content, or an alternative version, that does not. This is a Level AAA criterion under the “Readable” guideline (3.1).

You are not required to dumb down your primary text. The criterion is met by offering a path to understanding: a simplified summary, a version written in plain language, an illustration or diagram, a spoken-word audio recording, or definitions of jargon and unusual terms. The simpler content must convey the same essential information.

  • People with reading and learning disabilities such as dyslexia, where dense, complex prose is slow or impossible to decode.
  • People with cognitive disabilities who struggle with abstract language, long sentences, and unexplained jargon.
  • People reading in a second (or non-native) language, who follow plain wording far more reliably.
  • People with low literacy, who may abandon content pitched above an upper-secondary or university reading level.

How to detect it

Manual, tool-based, and outcome checks
Check What to look for
Readability estimate Run a readability formula (e.g. Flesch–Kincaid) on a passage, ignoring proper names. A grade above lower secondary signals a possible issue.
Alternative present If the text is complex, confirm a simpler alternative exists: a summary, plain- language version, audio, or visuals carrying the same meaning.
Jargon & idioms Unusual words, acronyms, and idioms should be defined or have a glossary (supports the related 3.1.3 / 3.1.4 criteria).
Automated tools Automated checkers like axe cannot judge reading level or whether an alternative conveys the same meaning. This requires human evaluation.

How to fix it

  1. Identify passages that exceed the lower secondary reading level (after removing proper names and titles).
  2. Rewrite where you can: short sentences, common words, active voice, one idea per sentence.
  3. Where the complex text must remain, add a supplemental alternative — a plain-language summary, an audio reading, or an explanatory diagram.
  4. Define jargon, abbreviations, and unusual terms inline or in a linked glossary.
  5. Link the simpler content clearly so readers can find it before the dense text.

Offer a clearly labelled plain-language summary alongside complex content:

<section aria-labelledby="summary-heading">
  <h2 id="summary-heading">In plain language</h2>
  <p>This page explains how we use your data. You can ask us
     to delete it at any time, and we will within 30 days.</p>
</section>

<article>
  <h2>Data processing policy</h2>
  <!-- full, formal text -->
</article>

Copy-paste tests

Automated coverage

There is no fully automated axe-core rule for 3.1.5 — no tool can judge a passage's reading level or whether an alternative conveys the same meaning. This criterion needs manual review, helped by the console check and steps below.

Run this in the browser console

console — surface long, complex passages
// Read-only: flags paragraphs with long sentences (a reading-level hint).
const rows = [];
document.querySelectorAll('p, li').forEach(el => {
  const text = el.textContent.trim();
  if (!text) return;
  const words = text.split(/\s+/).length;
  const sentences = (text.match(/[.!?]+/g) || []).length || 1;
  const avg = Math.round(words / sentences);
  if (avg >= 22 || words >= 60) {
    el.style.outline = '2px solid orange';
    rows.push({ avgWordsPerSentence: avg, words, text: text.slice(0, 80) });
  }
});
console.table(rows);
console.log('Suspect passages:', rows.length, '— review each manually.');

What to check manually: for each flagged passage, judge whether it truly exceeds the lower secondary reading level after ignoring proper names — and confirm a same-meaning simpler alternative (summary, plain-language version, audio, or diagram) is present and linked. No script can verify either.