Missing form labels
forms/instructions-missing
- WCAG success criterion
- 3.3.2 (level A)
- Outcome class
- Hint only. An automated check that by design reports review hints only: its findings are marked for manual review, never as confirmed violations.
- Area
- Accessibility, Forms & Interaction
- Default severity
- high
- axe-core rule
label
Why we flag this
Users do not know what input is expected.
Missing <label> elements.
What the rule checks
Scope. Rendered text-entry fields (native or ARIA) whose label names a value with a format (date, phone, postal code, pass number, ...).
Expectation. Needs review when such a field gives no instructions: no description, no format in the label ("DD.MM.YYYY", "e.g."), no placeholder. The format need is guessed from the label, so never a confirmed violation. Native date and time inputs bring their own format. Short terms count only as whole words: "Bus pass number" is reported, "Passage" and "Was ist passiert?" are not.
Source. WCAG 2.2 SC 3.3.2 Labels or Instructions; technique G89 (expected data format)
Detection: shared; needs dom, ax_tree.
Failing example
The check flags this for review. Corpus case form_heuristics_flagged. The page may contain further findings for other rules.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Form heuristics: true positives (#643)</title>
<meta name="viewport" content="width=device-width, initial-scale=1"><style>
/* #783: page shell, so the case only reports what it is about */
.skip, nav a { display: inline-block; padding: 12px; min-height: 44px; min-width: 44px; box-sizing: border-box; }
button, input, select, textarea { min-height: 44px; min-width: 44px; box-sizing: border-box; }
input[type="checkbox"], input[type="radio"] { width: 44px; height: 44px; }
</style>
</head>
<body>
<a class="skip" href="#main">Skip to main content</a>
<header><p>Example Shop</p><nav aria-label="Main"><a href="/" aria-current="page">Home</a> <a href="/help">Help</a></nav></header>
<main id="main">
<h1>Registration form</h1>
<form>
<!-- Date field without any instruction: still reported, but as
needs review (the format requirement is guessed from the
label), never as a confirmed violation -->
<label for="dob">Date of birth</label>
<input type="text" id="dob" name="dob">
<!-- Two related checkboxes (same name) without fieldset/legend -->
<p>Interests</p>
<label><input type="checkbox" name="interests" value="news"> News</label>
<label><input type="checkbox" name="interests" value="events"> Events</label>
<button type="submit">Register</button>
</form>
</main>
<footer><p>Example Shop, 2026</p></footer>
</body>
</html>Passing example
The check reports nothing here. Corpus case form_heuristics_clean, element input#booking-date. The page may contain further findings for other rules.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Form heuristics: true negatives (#643)</title>
<meta name="viewport" content="width=device-width, initial-scale=1"><style>
/* #783: page shell, so the case only reports what it is about */
.skip, nav a { display: inline-block; padding: 12px; min-height: 44px; min-width: 44px; box-sizing: border-box; }
button, input, select, textarea { min-height: 44px; min-width: 44px; box-sizing: border-box; }
input[type="checkbox"], input[type="radio"] { width: 44px; height: 44px; }
</style>
</head>
<body>
<a class="skip" href="#main">Skip to main content</a>
<header><p>Example Shop</p><nav aria-label="Main"><a href="/" aria-current="page">Home</a> <a href="/help">Help</a></nav></header>
<main id="main">
<h1>Booking form</h1>
<form>
<!-- Mode switch: radios correctly grouped -->
<fieldset>
<legend>Mode</legend>
<label><input type="radio" name="mode" value="broken" checked> Broken</label>
<label><input type="radio" name="mode" value="fixed"> Fixed</label>
</fieldset>
<!-- Date field with instructions via aria-describedby: the
description counts as the format instruction -->
<label for="booking-date">Date</label>
<input type="text" id="booking-date" name="date" inputmode="numeric" aria-describedby="booking-date-hint">
<p id="booking-date-hint">Day of travel</p>
<!-- "passiert" contains "pass" but is no passport field -->
<label for="report-what">Was ist passiert?</label>
<textarea id="report-what" name="what" rows="4" aria-describedby="report-what-hint"></textarea>
<span id="report-what-hint">Was Sie erwartet haben und was stattdessen passiert ist</span>
<!-- A single checkbox, and a second one with a different name:
neither is a group -->
<label><input type="checkbox" class="bill-sr"> Screen reader view</label>
<label><input type="checkbox" name="newsletter"> Send me the newsletter</label>
<button type="submit">Search</button>
</form>
</main>
<footer><p>Example Shop, 2026</p></footer>
</body>
</html>This page is generated from the rule catalogue and the rule contracts; see therule overview for how the outcome classes are derived.