How to Use aria-required Correctly: Complete Guide (2026)
What Is aria-required?
aria-required="true" tells assistive technology that a form input must be filled in before the form is submitted. It is a reflection of the required state in the accessibility tree — not validation logic. The browser will still let users submit an empty field unless you also use the native required attribute or JavaScript validation. The audit catches misuse on roles where the attribute has no meaning.
Key Facts (TL;DR)
- What it does: exposes the "required" state of a form control to screen readers — nothing more.
- What it does NOT do: block submission, show an error message, or trigger validation. That's the job of native
requiredor JavaScript. - WCAG 2.2 SC 3.3.2 Labels or Instructions (Level A): users must know which inputs are required before they submit.
- WCAG 2.2 SC 4.1.2 Name, Role, Value (Level A): the required state must be programmatically determinable, not conveyed by an asterisk alone.
- Allowed on form-input roles only:
combobox,gridcell,listbox,radiogroup,spinbutton,textbox,tree, plus native form elements. Putting it on a button, link, or genericdivis an audit failure. - Form abandonment: Baymard Institute's 2024 checkout-usability research found that 22% of users abandon a checkout because of a long or confusing form — unclear required-field cues are a leading cause.
- Native first:
<input required>automatically setsaria-required="true"in the accessibility tree and triggers browser validation. You usually don't needaria-requiredat all.
Think of aria-requiredlike the little asterisk you write on a paper form — it warns the reader, but it doesn't physically stop them from skipping the field. The actual "you can't submit without this" rule is a separate mechanism.
Why Required-Field Signaling Matters
Required-field communication is one of the highest-leverage form accessibility issues. When a screen-reader user can't tell which fields are mandatory until after they submit and hear an error, the experience collapses:
- Form completion drops: users who fail submission, lose their place, and have to re-navigate often abandon entirely. Form-friction is one of the top conversion killers in e-commerce.
- Accessibility conformance: WCAG 2.2 SC 3.3.2 explicitly requires that labels or instructions identify required input. An asterisk alone — with no programmatic state — fails this criterion.
- Legal exposure: the European Accessibility Act (EAA) became enforceable on June 28, 2025, requiring WCAG 2.1 AA conformance for in-scope digital services. Form-input failures are among the most-cited issues in accessibility lawsuits in the US under ADA.
- SEO and AI search:Google's helpful-content evaluation considers accessibility friction as a ranking signal. AI search engines parse the accessibility tree to summarize forms and CTAs — required fields without proper roles are invisible to them.
How aria-required Actually Works
Setting aria-required="true" changes one thing: how a screen reader announces the field. NVDA might say "Email, edit, required" instead of just "Email, edit". That's the entire effect on the accessibility tree.
What it does not do, no matter what your designer hopes:
- It does not stop form submission with an empty value.
- It does not trigger a browser-native error tooltip.
- It does not add red border styling — that's your CSS's job.
- It does not work on roles outside the allowed list (the audit will fail).
<!-- BAD: aria-required on a button (audit failure — buttons can't be required) -->
<button aria-required="true">Submit</button>
<!-- BAD: visual asterisk only, no programmatic state -->
<label for="email">Email *</label>
<input id="email" type="email" />
<!-- BAD: aria-required without a visible cue — sighted users get no signal -->
<label for="phone">Phone</label>
<input id="phone" type="tel" aria-required="true" />
<!-- GOOD: native required + visible asterisk + screen-reader text -->
<label for="email-good">
Email <span aria-hidden="true">*</span>
<span class="visually-hidden">required</span>
</label>
<input id="email-good" type="email" required />
<!-- GOOD: aria-required on a custom combobox where native required doesn't apply -->
<label id="country-label">Country *</label>
<div
role="combobox"
aria-labelledby="country-label"
aria-required="true"
aria-expanded="false"
aria-controls="country-listbox"
tabindex="0"
></div>
<!-- GOOD: short-form pattern — label optional fields instead of required ones -->
<label for="first-name">First name</label>
<input id="first-name" type="text" required />
<label for="middle-name">Middle name (optional)</label>
<input id="middle-name" type="text" />How to Check Your Forms for aria-required Issues
Required-field bugs hide in the accessibility tree, not the visual layout. They need tools that read what assistive technology actually sees.
- Greadme's deep scan — flags every form input where
aria-requiredis misused (wrong role, missing visible cue, redundant alongside nativerequired) and pairs each issue with an AI-generated fix or a one-click GitHub PR. - Greadme's crawler scan — checks every indexable page on your site for required-field accessibility failures so you can spot template-level bugs (a checkout form repeated across 50 product pages).
- Greadme's AI visibility analyzer — shows how AI search engines see your forms and CTAs, so you can confirm required-state signals reach the accessibility tree AI bots parse.
- Chrome DevTools → Accessibility pane — inspect any form input and read the "required" computed property directly from the accessibility tree.
- NVDA, JAWS, VoiceOver, TalkBack — manual check: tab into each input and confirm the screen reader announces "required".
- Open-source
axe-core— programmatic checks for invalidaria-requiredroles in CI.
8 Rules for Using aria-required Correctly
1. Prefer Native required Whenever Possible
<input required>, <textarea required>, and <select required> automatically expose aria-required="true" to screen readers AND trigger native browser validation that blocks empty submission. You get both behaviors for free, with no JavaScript.
2. Use aria-required Only on Allowed Roles
The attribute is meaningful on form-input roles: combobox, gridcell, listbox, radiogroup, spinbutton, textbox, tree, plus native form elements. On a <button>, link, generic div, or any decorative role, it's ignored — and flagged by accessibility audits.
3. Always Pair the Programmatic State with a Visible Cue
An asterisk, the word "Required", or labeling optional fields with "(optional)" — sighted users need a visible signal too. If you only set aria-required, screen-reader users hear it but everyone else gets ambushed at submit time.
4. For Short Forms, Label the Optional Fields Instead
When most fields are required, marking only the optional ones reduces visual noise and is recommended in the WAI-ARIA Authoring Practices. The required fields stay un-marked visually, and you set required programmatically on the inputs.
5. Hide the Asterisk from Screen Readers
The asterisk is a visual convention. If aria-required="true" (or native required) is already announcing the state, wrap the asterisk in aria-hidden="true"so screen-reader users don't hear "star" or "asterisk" before every label.
6. Use aria-required for Custom Widgets
When you build a custom role="combobox", role="listbox", or other non-native input, native required doesn't apply — so aria-required="true" is the only way to expose the state. Pair it with your own validation logic.
7. Don't Set aria-required="false" — Just Omit It
The default state is implicit false. Writing aria-required="false"isn't wrong, but it adds noise to the accessibility tree and clutters your markup. If a field isn't required, leave the attribute off entirely.
8. Use aria-required When Validation Fires on Blur, Not Submit
If you're using JavaScript validation that fires when a field loses focus (rather than at submit), native required can interfere with the user flow. aria-required="true" announces the state without triggering native browser tooltips.
Common aria-required Mistakes and Fixes
Problem: aria-required="true" on a Button
What's happening: Buttons cannot be "required" — they don't hold a value. Audits fail, and the attribute is ignored by screen readers.
Fix: Remove the attribute. If the button submits a form with required fields, set required on the inputs themselves.
Problem: Visual Asterisk With No Programmatic State
What's happening: Sighted users see Email * but screen-reader users hear "Email, edit" with no required cue. Fails WCAG SC 3.3.2 and SC 4.1.2.
Fix: Add native required to the input (preferred) or aria-required="true" if you're handling validation in JavaScript. Wrap the asterisk in aria-hidden="true".
Problem: aria-required Set, But No Visible Cue
What's happening: Screen-reader users hear "required"; sighted users have no signal and only learn at submit time.
Fix: Add an asterisk, the word "Required" in the label, or label the optional fields instead. The visible and programmatic states must match.
Problem: Redundant aria-required on Native Inputs
What's happening: <input required aria-required="true"> — both attributes set the same state. Not a failure, but it wastes markup and can cause maintenance bugs (one gets removed, the other stays).
Fix: Use only native required. The browser maps it to aria-required="true" automatically.
aria-required vs. Other Required-Field Approaches
Three mechanisms can mark a field as required, and they are not interchangeable. Pick based on whether you need validation, screen-reader exposure, or both.
| Approach | Blocks Submission? | Exposed to Screen Readers? | Best Used For |
|---|---|---|---|
Native required attribute | Yes (browser validation) | Yes (auto-sets aria-required) | Most native form inputs — first choice. |
aria-required="true" | No | Yes | Custom widgets (role="combobox") or JS-validated forms. |
| JavaScript validation only | Yes (custom logic) | Only if you also set aria-required | Complex business rules (cross-field, async checks). |
| Visible asterisk only | No | No | Never on its own — always pair with one of the above. |
FAQ
Do I need aria-required if I use the native required attribute?
No. <input required> automatically sets aria-required="true" in the accessibility tree. Adding both is redundant and can cause maintenance drift if one is later removed. Use only native required on standard form inputs.
Which roles can aria-required be used on?
aria-required is meaningful on form-input roles: combobox, gridcell, listbox, radiogroup, spinbutton, textbox, tree, plus native form elements (<input>, <textarea>, <select>). On any other role — buttons, links, generic div — it is ignored and flagged by audits.
Does aria-required prevent form submission?
No. aria-required only changes how screen readers announce the field. It does not block submission, show errors, or trigger validation. Use the native required attribute or JavaScript validation if you need to actually prevent empty submissions.
Should I use aria-required="false"?
Almost never. The default state is implicit false, so omitting the attribute has the same effect. The "false" value is technically valid but adds noise to the accessibility tree and clutters your markup. Only set aria-required="true" on fields that genuinely require input.
Is a visual asterisk enough on its own?
No. An asterisk with no programmatic state fails WCAG 2.2 SC 3.3.2 (Labels or Instructions) and SC 4.1.2 (Name, Role, Value), because screen-reader users cannot determine the required state without submitting. Always pair the visible cue with native required or aria-required="true".
How do AI search engines like ChatGPT and Perplexity handle required-field forms?
AI search engines parse the accessibility tree when they extract form structure to summarize CTAs, lead-capture flows, or signup pages. A form where required state is encoded only in a visual asterisk produces an incomplete summary — the bot doesn't know which fields are mandatory. Pages with proper aria-required or native required markup are summarized accurately and cited more reliably.
What's better — marking required fields or marking optional ones?
For long forms with many required fields, marking only the optional fields with "(optional)" reduces visual noise and is recommended in the WAI-ARIA Authoring Practices. The required fields still get programmatic state via required, but the visual UI is calmer. For short forms with mostly optional fields, marking the required ones with an asterisk is clearer.
Conclusion
aria-required is one of the most commonly misused ARIA attributes — usually because developers reach for it before they reach for the native required attribute that already handles 90% of cases. The simple rule: prefer native required on standard inputs, use aria-required="true" on custom widgets or JS-validated forms, and always pair the programmatic state with a visible cue.
Run a Greadme deep scan to find every form on your site where aria-required is misused, missing, or out of sync with the visible UI — each issue comes with an AI-generated fix or a one-click GitHub PR.
