Labels or Instructions
Every form control has a label or instructions describing what input is expected.
Why it matters
A placeholder is not a label — it disappears the moment a user starts typing, and many screen readers don't reliably announce it at all. Without a real label, a form field has no accessible name.
Automatically detected
axe-core reliably flags a form control with no programmatically associated label.
Related axe-core rules: label, select-name
Fails
<input type="text" placeholder="Company name">No <label>, no aria-label — the placeholder is the only hint, and it vanishes as soon as the user types.
Passes
<label for="company">Company name</label>
<input type="text" id="company" placeholder="e.g. Acme Inc.">A real <label> gives the field a persistent accessible name; the placeholder is now just a helpful example, not the only label.
Openwell finds violations like this one across your whole site, clusters them by the component that caused them, and generates a fix that's re-validated before you see it.
Scan your site free