WCAG 3.3.2 · Level A · EN 301 549 9.3.3.2

Labels or Instructions

Requires labels or instructions wherever content asks for user input, including formats, required fields and grouped controls.

In brief

A box with no label gives no clue what to type. A date field that does not say which format it expects, or a required field that is not marked, sends people into errors that clear instructions would have prevented.

This criterion requires that labels or instructions are provided when content requires user input.

What does it cover?

  • "Requires" means accepts: The criterion covers every field that accepts input, not only required ones.
  • Labels: Each control has a label that says what to enter. Each option in a group of radio buttons or check boxes is labelled with what it selects.
  • Instructions: Say what format or rule applies, for example a date pattern, character limits or a password rule. Show long instructions on focus only if needed.
  • Required fields: Indicate them, for example with a label that includes "required" (H90). The criterion itself applies to all fields.
  • Groups: Related fields need a shared label. A phone number split into three fields can be grouped with fieldset and legend, and each field also has its own label (H71, F82).
  • Image labels: Allowed if they are widely understood by the target audience. Tooltips or extra text can help.
  • Not covered: Links and widgets not tied to data entry, such as expand and collapse controls.
  • Out of scope: Associating the label in code is 1.3.1. Accessible names are 4.1.2. Whether labels are descriptive is 2.4.6.

Who does it affect?

People with cognitive, language and learning disabilities, who benefit most from clear labels and examples. Screen reader users, who hear the label when they reach the field. People with low vision who need to see the label and the instruction. Anyone filling in a form in an unfamiliar format.

In the EAA and EN 301 549

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. Labels and instructions are part of "understandable".

The technical counterpart is the standard EN 301 549, which incorporates WCAG 3.3.2 by reference and turns it into separate clauses for each kind of ICT.

Where WCAG 3.3.2 appears in EN 301 549
ClauseType of ICTWhat it requires
9.3.3.2Web pagesWeb content must satisfy WCAG success criterion 3.3.2.
10.3.3.2Non-web documents (PDF, Office files)Documents must provide labels or instructions for form controls where the standard applies the criterion to them.
11.3.3.2Non-web software (native mobile apps)Software must provide labels or instructions when it requires user input.

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.2 is the same in WCAG 2.1 and 2.2.

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

Code examples for the web

1. A field with no label

A control must have a label. Use label to connect them (H44).

Incorrect
<input type="text" name="city">
Correct
<label for="city">City</label>
<input id="city" name="city">

2. Give the expected format (G89)

State the format, or give an example, before the user types.

Incorrect
<label for="dob">Date of birth</label>
<input id="dob">
Correct
<label for="dob">Date of birth</label>
<input id="dob" aria-describedby="dob-hint">
<p id="dob-hint">Use the format DD/MM/YYYY, for example 31/03/1990.</p>

3. Mark required fields (H90)

Say that a field is required in text, and explain any symbol you use.

Incorrect
<label for="name">Name <span style="color:red">&#9679;</span></label>
Correct
<p>Fields marked with * are required.</p>
<label for="name">Name *</label>
<input id="name" required>

4. Group related controls (H71)

Radio buttons and check boxes need a shared label as well as one for each option.

Incorrect
<p>Delivery method</p>
<input type="radio" name="d"> Courier
<input type="radio" name="d"> Pickup
Correct
<fieldset>
  <legend>Delivery method</legend>
  <label><input type="radio" name="d"> Courier</label>
  <label><input type="radio" name="d"> Pickup</label>
</fieldset>

5. A phone number in three boxes

Formatting boxes visually to look like a phone number is not a label (F82). Label the group and each box.

Incorrect
(<input size="3">) <input size="3"> - <input size="4">
Correct
<fieldset>
  <legend>Phone number</legend>
  <label>Area code <input size="3"></label>
  <label>Prefix <input size="3"></label>
  <label>Number <input size="4"></label>
</fieldset>

6. Do not rely on placeholder alone

A placeholder disappears as soon as the user types, so keep a visible label as well.

Incorrect
<input placeholder="Email address">
Correct
<label for="email">Email address</label>
<input id="email" placeholder="[email protected]">

Code examples for mobile

In native forms, give every field a visible label, and put format hints and required markers in text. A label that disappears on input should be backed by a persistent one.

iOS (SwiftUI)

import SwiftUI

struct SignUpForm: View {
    @State private var email = ""

    var body: some View {
        VStack(alignment: .leading) {
            // A visible label, plus a hint about the expected format
            Text("Email address *")
            TextField("[email protected]", text: $email)
                .textFieldStyle(.roundedBorder)
                .accessibilityLabel("Email address")
                .accessibilityHint("Required. For example [email protected]")
            Text("Fields marked * are required.").font(.footnote)
        }
    }
}

Android (Jetpack Compose)

import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.*

@Composable
fun SignUpField() {
    var email by remember { mutableStateOf("") }
    OutlinedTextField(
        value = email,
        onValueChange = { email = it },
        // The label stays visible when the field has text
        label = { Text("Email address *") },
        // A hint about the expected format
        supportingText = { Text("Required. For example [email protected]") }
    )
}

How to test

  • List every input: Find each text field, list, radio button, check box and custom control that accepts input.
  • Check each has a visible label: Does the label stay visible while typing, and say what to enter?
  • Check groups: Do radio buttons, check boxes and split fields have a group label and individual labels?
  • Check instructions: Are formats, limits and rules stated before the user needs them?
  • Check required fields: Is it indicated in text which fields are required?
  • Use a screen reader: Does it announce the label, the group and the instruction when you reach each field?
  • Use a checker as a starting point: Automated tools find controls with no label. They cannot judge whether a label or instruction is clear, so a person must read the form.

Common mistakes

  • Fields with no label: Only a placeholder or nothing at all.
  • Placeholder instead of a label: It disappears on input.
  • No format hint: The user must guess the date or phone format.
  • Required fields marked by colour only: A red asterisk with no explanation.
  • Split fields with no group label: A phone number or date in three boxes (F82).
  • Radio groups with no legend: The options are read with no question.
  • An icon as the only label: Unless it is widely understood by the target audience.
  • Instructions after the field: Placed where users do not see them before typing.

Sources

Standard version: EN 301 549 V4.1.1 (2026-09), WCAG 2.2. This page is for informational purposes only and is not legal advice. For binding requirements, refer to the official texts of the European Accessibility Act (Directive (EU) 2019/882) and EN 301 549.

Corpowid is recognized by Gartner

Corpowid has been recognized by Gartner, a leading global research and advisory firm, for our innovation and performance in digital accessibility. These badges reflect our commitment to creating inclusive, AI-powered web experiences.

Have questions about Corpowid?

Let’s connect.

We will get back to you as soon as possible.