Will It Vibe logoWill It Vibe?
A11Y-001Medium severity-8 points

Select element with no accessible name

Part of Documentation, UX & Accessibility, which counts for 15% of the overall score. When this check fires it deducts 8 points from that category, once per scan, no matter how many places it turns up.

What it detects

A <select> with no associated <label for>/htmlFor, aria-label, or aria-labelledby has no announced name, so a screen-reader user hears only "combo box" with no idea what it controls. Heuristic: a <select> nested directly inside a still-open <label> is detected through a bounded 300-character lookback window, not a real parser, and a name set at runtime through JS is invisible to a static scan.

Why it matters

A select menu with no announced name reads to a screen reader as just "combo box", so the user has to guess what choosing an option will actually do. This is a common gap in custom-styled dropdowns where the visual label next to the control was never wired up with a for/id pair. It costs nothing to fix and blocks the field completely for anyone using assistive technology.

How to fix it

Add a <label for="field-id"> (htmlFor in JSX) pointing at the select's id, or wrap the select directly inside the label element. Where a visible label truly does not fit the design, add aria-label="..." directly on the select instead. Do not rely on a placeholder-style first <option> as the only label; it disappears from the accessible name once a real choice is selected.

The paid report includes a ready-to-paste prompt for your AI coding agent for every check it finds, pointed at the exact findings from your scan. See pricing

Does your repo trip this check?

Paste a GitHub URL or drop a project folder. Scans run in your browser and take seconds.

Scan your repo

Related Documentation, UX & Accessibility checks