Requires fields that collect information about the user, such as name, email or address, to state their purpose in code so browsers and tools can autofill them.
Typing a name, an address and a card number again and again is hard for people with motor impairments, memory or attention difficulties, and dyslexia. Browsers and assistive tools can fill these fields in for them, but only if they know what each field is for.
This criterion requires that the purpose of an input field can be determined programmatically when the field collects information about the user and its purpose is in the list of input purposes in WCAG. On the web this means giving the field an autocomplete attribute with the matching token, such as given-name or email.
autocomplete attribute from the HTML specification, such as name, given-name, family-name, email, tel, street-address, postal-code, country, username, current-password, new-password, cc-number and cc-exp.People with motor impairments type less when fields are filled in for them. People with memory, attention or learning differences, including dyslexia, make fewer errors. People who use symbols or icons to understand a field benefit from tools that show the purpose. Anyone who fills in forms on a small screen saves time.
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. Making the purpose of a field available in code is part of "perceivable" and "understandable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 1.3.5 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.1.3.5 | Web pages | Web content must satisfy WCAG success criterion 1.3.5. |
| 11.1.3.5 | Non-web software (native mobile apps) | Software must satisfy the criterion for fields that collect information about the user. |
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 1.3.5 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
Use the token that matches the field. A single "name" field uses name.
<label for="fn">First name</label>
<input id="fn" name="fn">
<label for="ln">Last name</label>
<input id="ln" name="ln"><label for="fn">First name</label>
<input id="fn" name="fn" autocomplete="given-name">
<label for="ln">Last name</label>
<input id="ln" name="ln" autocomplete="family-name">Combine the right input type with the matching token.
<input type="text" name="mail">
<input type="text" name="phone"><label for="mail">Email</label>
<input id="mail" type="email" name="mail" autocomplete="email">
<label for="phone">Phone</label>
<input id="phone" type="tel" name="phone" autocomplete="tel">Each part of an address has its own token.
<input name="addr">
<input name="zip">
<input name="ctry"><label for="addr">Street address</label>
<input id="addr" name="addr" autocomplete="street-address">
<label for="zip">Postal code</label>
<input id="zip" name="zip" autocomplete="postal-code">
<label for="ctry">Country</label>
<input id="ctry" name="ctry" autocomplete="country-name">Use current-password on a sign-in form and new-password when the user creates a password. This also helps password managers.
<input type="text" name="u">
<input type="password" name="p"><label for="u">Username</label>
<input id="u" name="u" autocomplete="username">
<label for="p">Password</label>
<input id="p" type="password" name="p" autocomplete="current-password">Card fields have their own tokens.
<input name="card">
<input name="exp">
<input name="cvv"><label for="cc">Card number</label>
<input id="cc" name="cc" inputmode="numeric" autocomplete="cc-number">
<label for="exp">Expiry date</label>
<input id="exp" name="exp" autocomplete="cc-exp">
<label for="cvv">Security code</label>
<input id="cvv" name="cvv" inputmode="numeric" autocomplete="cc-csc">autocomplete="off" on a personal data field takes the help away. Use it only where the field is not about the user, or where there is a real security reason.
<input type="email" name="mail" autocomplete="off"><input type="email" name="mail" autocomplete="email">The same rule applies in native mobile apps. Give each field the content type that the platform uses for autofill.
import SwiftUI
struct SignUpForm: View {
@State private var firstName = ""
@State private var lastName = ""
@State private var email = ""
var body: some View {
Form {
TextField("First name", text: $firstName)
.textContentType(.givenName)
TextField("Last name", text: $lastName)
.textContentType(.familyName)
TextField("Email", text: $email)
.textContentType(.emailAddress)
.keyboardType(.emailAddress)
}
}
}import androidx.compose.foundation.layout.Column
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.autofill.ContentType
import androidx.compose.ui.semantics.contentType
import androidx.compose.ui.semantics.semantics
// Requires a recent Compose UI version (1.8 or newer)
@Composable
fun SignUpForm() {
var firstName by remember { mutableStateOf("") }
var email by remember { mutableStateOf("") }
Column {
OutlinedTextField(
value = firstName,
onValueChange = { firstName = it },
label = { Text("First name") },
modifier = Modifier.semantics {
contentType = ContentType.PersonFirstName
}
)
OutlinedTextField(
value = email,
onValueChange = { email = it },
label = { Text("Email") },
modifier = Modifier.semantics {
contentType = ContentType.EmailAddress
}
)
}
}autocomplete attribute, and is the token correct and valid? In mobile apps, is the content type set?autocomplete="off": Is it used on fields about the user? Is there a reason for it?autocomplete at all: The most common failure.autocomplete="fname" are not in the specification and are ignored.name on a last-name field.