Labels or Instructions
Form fields and inputs must have visible labels or instructions describing what the user is expected to enter.
What it requires
Every `<input>`, `<select>`, and `<textarea>` must have a programmatic label — either a `<label for="id">` element wrapping or referencing the input, or an `aria-label` / `aria-labelledby` attribute. Placeholder text alone does not count: it disappears as soon as the user types, and screen readers do not always announce it.
Visible labels are also required by 3.3.2 — placeholder-only forms (where the field name lives only inside the placeholder) fail. Floating labels are acceptable as long as the label remains visible above the field after the user begins typing.
Common Shopify failure
Newsletter signup at the bottom of a Shopify theme with `<input type="email" placeholder="Your email">` and no `<label>`. Search bars in mega-menus with placeholder-only labeling.
How to fix it
Add `<label for="newsletter-email" class="sr-only">Email</label>` (or visible if design allows) and reference it via the matching `id`. AccessComply's FormLabelAgent detects every unlabeled input and writes the label.
Primary source: W3C — WCAG 2.0 Understanding 3.3.2