Detector registry

Form Label Accessibility: Detecting Unlabeled Inputs

See whether your forms expose accessible labels. LaunchTrust scans for <label> and aria-label signals tied to WCAG 3.3.2 and the EAA.

Updated 2026-06-19form label accessibilitySignals, not a verdict

Every sign-up box, search field, and checkout form on your site is a form input. When those inputs have no programmatic label, screen-reader users hear "edit text" with no idea what to type, and voice-control users cannot target the field by name. For an indie developer or store owner shipping a landing page, a waitlist form, or a checkout flow, unlabeled inputs are one of the most common — and most quietly fixable — accessibility gaps, and the signal lives right in your HTML.

LaunchTrust looks for that signal passively, on the public surfaces you point it at, and reports what it sees without grading your form or claiming it is "accessible." This page explains exactly what the check inspects and how to read its result.

What LaunchTrust checks

The form-input-labels detector (a11y_form_labels) parses the page HTML and reasons about whether your interactive inputs appear to have a labeling mechanism. It does this without rendering, clicking, or storing anything.

Concretely, the detector:

  1. Finds every <input> element in the HTML, then filters out inputs that do not need a visible label — those with type="hidden", "submit", "button", "image", or "reset". What remains are the "labelable" inputs a person actually types into or selects.
  2. Counts how many <label> elements exist anywhere on the page.
  3. Counts how many of the labelable inputs carry an aria-label or aria-labelledby attribute.
  4. Compares the totals. If the number of <label> elements plus inputs with ARIA labels is at least the number of labelable inputs, the signal is detected.

Here is how to read each result:

  • Detected — Either the page has no labelable inputs at all (nothing to flag), or there are enough <label> elements and ARIA-labeled inputs to plausibly cover every input. The example summary looks like 5 inputs, 4 <label> + 1 aria-label.
  • Not detected — There are more labelable inputs than the combined count of <label> elements and ARIA labels, e.g. 5 inputs but only 2 <label> + 0 aria-label. This is flagged at low severity, because it is a heuristic count, not proof that a specific field is unlabeled.

This is a positive signal: a present, sufficient set of labels is the thing you want the scan to find. Because the check counts elements rather than matching each <label for="..."> to its input, it is deliberately lenient — it can over-count (a label that points nowhere still counts), which is why the severity is low. Treat "detected" as "no obvious shortfall," not a guarantee that every input is correctly wired. The detector works only from HTML the scan already retrieved, so there is no separate "unable" outcome here.

Why it matters

Accessible form labels map directly to WCAG Success Criterion 3.3.2 (Labels or Instructions), which sits under Guideline 3.3, Input Assistance, and is a Level A requirement in WCAG 2.1 and 2.2. The criterion calls for labels or instructions to be provided when content requires user input. WCAG is the technical standard most regulators point to, and the related expectation that an input's name be programmatically available is what lets assistive technology announce a field correctly.

In the EU, the European Accessibility Act (EAA) brings many consumer-facing digital products and e-commerce services into scope, and conformance is commonly demonstrated against WCAG via the harmonized standard EN 301 549. If you sell to EU customers, labeled form controls on your purchase and account flows are among the signals reviewers and auditors commonly expect to see. Similar expectations appear in public-sector and procurement rules elsewhere, so getting labels right has value well beyond Europe. Labels also help everyone: they expand the tap target, enable autofill, and reduce form-abandonment on the checkouts you rely on.

A concrete example

A field that fails the underlying intent often looks like this — a placeholder masquerading as a label:

<!-- Placeholder is not a label: it disappears on focus and is not announced reliably -->
<input type="email" placeholder="Email address">

A field that contributes a label signal looks like one of these:

<!-- Visible label associated by id -->
<label for="email">Email address</label>
<input type="email" id="email" name="email">

<!-- Or, when a visible label is not desired, an ARIA label -->
<input type="search" aria-label="Search products" name="q">

The first example adds zero to the <label> or ARIA counts; the second and third each add one.

How to address it

  1. Inventory your inputs. List every text box, email field, search field, checkbox, and radio on the page — everything a user types into or toggles.
  2. Give each one a <label>. Add a visible <label for="fieldId"> whose for matches the input's id, or wrap the input inside the <label>.
  3. Use ARIA only where a visible label is impractical. For an icon-only search box, add aria-label="Search" (or aria-labelledby pointing at existing visible text). Do not double-label — aria-label overrides visible text for screen readers.
  4. Stop relying on placeholders. Placeholder text is not a label; keep it for hints only, and always pair it with a real label.
  5. Verify the association, not just the count. Confirm each for/id pair actually matches. A label pointing at the wrong id still inflates the count, so a per-field check is worth doing.
  6. Re-scan and test with a screen reader. Tab through the form and confirm each field announces a meaningful name.

Check this in 30 seconds

Point LaunchTrust's free scanner at your live URL and it will report, in plain language, whether your labelable inputs appear to be covered by <label> or ARIA labels — alongside other pre-submission signals like image alt text and page language. It is a fast way to catch an unlabeled checkout field before a customer (or an auditor) does. Run a scan and read the detected / not-detected line for this check, plus the input-versus-label counts so you can see exactly where a form falls short.

FAQ

Does a "detected" result make my app accessible or conformant? No. LaunchTrust surfaces signals; it does not certify accessibility or conformance, and it is not legal advice. "Detected" means the page has enough label and ARIA elements to plausibly cover its inputs — it does not prove each field is correctly associated or that the rest of WCAG is met.

Why is this flagged at low severity? Because the check is a count-based heuristic. It compares totals rather than matching every label to its input, so it can both miss subtle problems and over-credit stray labels. Low severity signals "worth a look," not "critical defect."

Do placeholders count as labels? No. The detector only counts <label> elements and aria-label / aria-labelledby attributes. Placeholder text is not counted, and under WCAG it is not a substitute for a label.

What about inputs like hidden fields or submit buttons? The detector ignores type="hidden", "submit", "button", "image", and "reset" inputs, since those do not need a typed-in label in the same way. Only labelable inputs are compared against the label count.

Compliance aid, not legal advice. LaunchTrust reports signals, not a verdict or certification.