Requires that when an input error is detected and a fix is known, the page tells the user how to correct it, except for security or purpose.
Being told "invalid input" is not the same as knowing how to fix it. People with learning disabilities, low vision or motor impairments can lose a lot of time, or give up, when the form only says something is wrong.
This criterion requires that if an input error is automatically detected and suggestions for correction are known, the suggestions are provided to the user, unless it would jeopardise the security or purpose of the content.
People with learning and cognitive disabilities, who complete forms successfully when told how to fix them. People who are blind or have low vision, who better understand the error and the correction. People with motor impairments, who then re-enter values fewer times.
The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. Help with correcting errors is part of "understandable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 3.3.3 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.3.3.3 | Web pages | Web content must satisfy WCAG success criterion 3.3.3. |
| 10.3.3.3 | Non-web documents (PDF, Office files) | Documents must suggest corrections for input errors where the standard applies the criterion to them. |
| 11.3.3.3 | Non-web software (native mobile apps) | Software must provide suggestions for correcting input errors when they are known. |
Whether and how the criterion applies to non-web documents is stated in clause 10 of the standard. Clause numbers follow the "9. + WCAG number" pattern of EN 301 549. In V3.2.1 the software clause is divided into further subclauses for open and closed functionality. Check the exact numbers in the standard when you cite them.
Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 3.3.3 is the same in WCAG 2.1 and 2.2. It is a Level AA criterion.
A note on EAA scope: Article 2(4) of the Directive excludes certain content from the requirements, for example office file formats published before 28 June 2025 and archives that are not updated after that date. Content you publish or change after that date is not covered by these exclusions.
Directive (EU) 2019/882, EUR-Lex, opens in a new tab
The message should not only say the value is invalid.
<p class="error">Invalid date.</p><p class="error">The date must be in the format DD/MM/YYYY, for example 31/03/2026.</p>If the intended value can be inferred, offer it.
<p class="error">Invalid email domain.</p><p class="error">Did you mean <button type="button">[email protected]</button>?</p>When the value must come from a set, name the set.
<p class="error">Value not allowed.</p><p class="error">Choose one of: small, medium, large.</p>Say which rule failed and what is needed.
<p class="error">Weak password.</p><p class="error">Your password needs at least 12 characters and one number. It has 9 characters and no number.</p>A login need not reveal which part was wrong, because doing so could help an attacker.
<p class="error">No account exists for that email.</p> <!-- helps an attacker --><p class="error">The email or password is not correct. Try again or reset your password.</p>Where possible, let the user accept the suggestion with one action.
<p class="error">Postcode not found.</p><p class="error">We could not find postcode 3400 AB. Do you mean 3400 AB (Amsterdam)?
<button type="button">Use this postcode</button></p>On mobile, typing is slower and corrections are costlier, so suggestions help even more. Offer a tap-to-accept suggestion and keep the message next to the field.
import SwiftUI
struct EmailEntry: View {
@State private var email = "[email protected]"
var body: some View {
VStack(alignment: .leading) {
TextField("Email", text: $email)
if email.hasSuffix("@gmial.com") {
// Tell the user what is wrong and offer the likely fix
Text("Did you mean gmail.com?")
Button("Use [email protected]") {
email = email.replacingOccurrences(of: "gmial.com", with: "gmail.com")
}
}
}
}
}import androidx.compose.foundation.layout.Column
import androidx.compose.material3.*
import androidx.compose.runtime.*
@Composable
fun EmailEntry() {
var email by remember { mutableStateOf("[email protected]") }
Column {
OutlinedTextField(value = email, onValueChange = { email = it }, label = { Text("Email") })
if (email.endsWith("@gmial.com")) {
// Say what is wrong and offer the likely fix
Text("Did you mean gmail.com?")
TextButton(onClick = { email = email.replace("gmial.com", "gmail.com") }) {
Text("Use [email protected]")
}
}
}
}