What 3.1.1 requires
The default human language of each page must be programmatically determinable. In HTML, that means a valid lang attribute on the <html> element, such as lang="en" or lang="fr-CA". This is a plain-language summary. The normative text, including every exception, is in the W3C Recommendation, with the W3C's explanation in Understanding 3.1.1 (opens in a new tab) [1][2].
Exceptions and scope:
- Only the default language. Passages in other languages fall under 3.1.2 Language of Parts (AA).
- A valid code is needed. An invented or misspelled code doesn't let assistive technology determine the language.
Why it matters
Screen readers choose a voice and pronunciation rules from the page language. With no lang, or the wrong one, a French page may be read with English pronunciation and become hard to understand, or the screen reader falls back to the user's default, which may not be the page's language. Braille translation and browser translation rely on it too. WebAIM's 2026 analysis found missing document language on 13.5% of home pages [4].
Common failures
No lang attribute
<!-- Fails -->
<html>
<!-- Better -->
<html lang="en">Invalid language code
<!-- Fails -->
<html lang="english">
<!-- Better -->
<html lang="en">Template copied from another locale
A German site still declares English from the starter template.
<!-- Fails -->
<html lang="en"> <!-- German content -->
<!-- Better -->
<html lang="de">lang and xml:lang disagree
In XHTML-style templates, the two attributes declare different languages.
<!-- Fails -->
<html lang="en" xml:lang="fr">
<!-- Better -->
<html lang="en" xml:lang="en">Can automated testing check 3.1.1?
Mostly yes for presence and validity; no for correctness. axe-core checks that lang exists, is valid, and agrees with xml:lang. It can't tell that the declared language matches the content.
| axe-core 4.13.0 rule | What it checks |
|---|---|
html-has-lang | the <html> element has a lang attribute |
html-lang-valid | the lang value on <html> is a valid language code |
html-xml-lang-mismatch | lang and xml:lang agree on the base language |
What automation can't decide: Whether the declared language is the one the page is actually written in. (valid-lang, which checks lang values on other elements, maps to 3.1.2, not 3.1.1.)
A clean automated result is never proof that 3.1.1 is met. See why sites pass axe-core but fail real screen reader users.
How to test it by hand
- View the page source and find the
<html>tag. Is there alangattribute with a valid code? - Does it match the language the page is written in, including on localised versions of the site?
- Listen to a paragraph with a screen reader. Does the pronunciation sound right for the language?
- Check templates and CMS settings, since one misconfigured layout file affects every page.
New to screen readers? Start with how to test a website with a screen reader and how to test keyboard-only navigation.
How Accessible helps (and where it stops)
Scanning runs all three 3.1.1 rules on every URL on a paid plan, which is useful for localised sites where one template per language can go wrong. The free page check and the assistant tools' automated WCAG check cover it for one page (free page check).
Where it stops: Accessible confirms a valid language is declared; it doesn't verify that it's the right language for the content. A person who reads the page needs to confirm that. No automated tool, ours included, can certify that a criterion is met.
Related criteria
- 2.4.2 Page Titled
- 1.3.1 Info and Relationships
- 4.1.2 Name, Role, Value
- WCAG 2.2 success criteria checklist
Sources
- Understanding Success Criterion 3.1.1: Language of Page (opens in a new tab). W3C Web Accessibility Initiative. Accessed October 18, 2026.
- Web Content Accessibility Guidelines (WCAG) 2.2, Success Criterion 3.1.1 (opens in a new tab). W3C Recommendation. Accessed October 18, 2026.
- axe-core rule descriptions (opens in a new tab). Deque Systems, axe-core 4.13.0. Accessed October 18, 2026.
- The WebAIM Million: The 2026 report on the accessibility of the top 1,000,000 home pages (opens in a new tab). WebAIM, 2026. WAVE-detected errors on home pages only. Accessed October 18, 2026.
- W3C Internationalization: Declaring language in HTML (opens in a new tab). W3C. Accessed October 18, 2026.
Meeting a success criterion is not the same as legal compliance, which depends on the rules that apply to you. No automated tool can certify conformance.