Most forms on the web still fail at the first hurdle, which is telling a screen reader user what a field is for. The WebAIM Million 2026 report found missing labels on 51% of the top one million home pages in February 2026.
WCAG 2.2 Level AA is the benchmark people build to. The ADA Title II rule and the European Accessibility Act still cite WCAG 2.1 Level AA, though.
What Are Accessible Forms?
People fill in forms with keyboards, screen readers, voice control, magnification and switch devices. An accessible form lets all of them perceive every field, work out what to enter, fix mistakes and submit without asking anyone for help.
Passing an automated scan doesn’t get a form there on its own. WebAIM states that an absence of detected errors does not make a page accessible or conformant.
The W3C WAI Forms Tutorial spells out who leans on what. Screen reader users find controls through labels, field sets and other structure. People using speech input say a visible label as a voice command to reach and activate that field. Anyone with limited dexterity benefits from large clickable areas that include the label, which matters most on radio buttons and checkboxes. For people with cognitive disabilities, the help comes from clearer layout, instructions and feedback.
Forms are where a barrier ends the task instead of slowing it. The US Department of Justice gives a plain example. An inaccessible online tax form blocks the person filing it and makes tax collection harder for the government too.
This is why forms end up at the center of any effort at making sites usable for people with disabilities. W3C adds that accessible forms are easier for everyone else to use as well.
Each field, plus every hint or error message attached to it, is a place where someone can misread or miss something. So forms make a practical starting point for designing for the full range of users.
Inaccessible Forms by the Numbers
The 2025 edition put the same measure at 48.2%, so the trend is going the wrong way. Unlabeled inputs are now the third most common detected WCAG failure, behind low contrast text and missing image alternative text (WebAIM Million 2026).
Pages are getting heavier with forms, too. The average home page has 6.9 form inputs, up 36% in three years, and 33.1% of those inputs have no label through a label element, aria-label, aria-labelledby or title.
That 33.1% is a floor, not an estimate of true failure. WebAIM counts an input as labeled when it carries a title attribute, and the W3C WAI Forms Tutorial calls title less reliable and not recommended because some assistive technology ignores it.
More inputs per page means more chances to ship one without a name.
One caveat on the sample. WebAIM scans home pages with the WAVE engine, so checkout, account and application forms deeper in a site never enter the count.
Which Standards Require Accessible Forms?
Every major regime points at WCAG, but at different versions. US federal agencies work to 2.0 AA, the ADA Title II rule and the EU standard currently cited both use 2.1 AA, and 2.2 is the current W3C Recommendation.
| Standard | Applies to | WCAG version cited | Date (as of October 2026) |
|---|---|---|---|
| Section 508 (2017 refresh) | US federal agencies | 2.0, Level A and AA | Compliance required from 18 January 2018 |
| ADA Title II web rule | US state and local governments | 2.1, Level AA | 26 April 2027 (population 50,000 or more), 26 April 2028 (smaller entities, special districts) |
| European Accessibility Act with EN 301 549 | Covered consumer services such as e-commerce and banking | 2.1, Level AA (EN 301 549 V3.2.1, the version currently cited) | Applies from 28 June 2025 |
| WCAG 2.2 | Benchmark, not a law by itself | 2.2, Level AA | W3C Recommendation, 5 October 2023 |
The Title II dates come from the Justice Department’s interim final rule of April 2026, which pushed back the original deadlines. Directive 2019/882 exempts microenterprises that provide services.
Europe is about to shift. EN 301 549 V4.1.1, which moves to WCAG 2.2 Level AA, was published on 2 September 2026. It isn’t cited in the Official Journal of the EU yet, and that step is expected around the end of November 2026.
On the success criteria side, labels and structure sit under 1.3.1 Info and Relationships (A), 2.4.6 Headings and Labels (AA), 3.3.2 Labels or Instructions (A) and 4.1.2 Name, Role, Value (A).
Errors fall under 3.3.1 Error Identification (A), 3.3.3 Error Suggestion (AA) and 3.3.4 Error Prevention (AA).
Then there’s the effort of actually filling things in, which 1.3.5 Identify Input Purpose (AA), 3.3.7 Redundant Entry (A) and 3.3.8 Accessible Authentication (Minimum) (AA) deal with.
Private businesses fall under ADA Title III, which has no web regulation. Courts fill the gap case by case.
Domino’s is the best-known example. Guillermo Robles, a blind customer, could not order from its website or app with his screen reader, and the Supreme Court declined Domino’s appeal on 7 October 2019, leaving the Ninth Circuit ruling in place.
The legal floor trails the standard. Three form-relevant WCAG 2.2 additions (2.5.8 Target Size (Minimum), 3.3.7 and 3.3.8) are absent from WCAG 2.1, so the US rules and the EU standard currently cited do not name them yet.
Build to WCAG 2.2 AA anyway. W3C describes 2.2 as backward compatible with 2.1, so nothing is lost.
How to Label Form Fields and Mark Required Inputs
Give every field a visible label element whose for attribute matches the input’s id exactly.
That one pairing supplies the accessible name for screen readers, a larger click target and a hook for voice commands, according to the W3C WAI Forms Tutorial.
Visible labels and accessible names
SC 3.3.2 (Level A) checks that a label or instruction exists on every field, required or optional. SC 1.3.1 checks the programmatic association, and SC 4.1.2 checks the accessible name. A field can pass 3.3.2 and still fail 1.3.1, per W3C’s Understanding document for 3.3.2.
Sometimes the design has no room for visible text. A visually hidden label is the cleanest way out. Keep the label element and clip it to a 1 by 1 pixel area, and screen reader and speech users still get it.
aria-label and aria-labelledby are well supported by screen readers but invisible to everyone else, so save them for controls that are obvious from context, like a search box beside a Search button. The title attribute is less reliable, and W3C WAI does not recommend it.
Never hide a label with display: none or visibility: hidden. Both remove it from assistive technology too, and the field ends up with no name at all.
Reach for ARIA attributes only after the native label element is ruled out. Wrapping the input inside the label works for script-generated fields without ids, though explicit for/id pairing has better assistive technology support.
Placeholder text
Placeholder text is a hint, never a label.
Screen readers do not treat it as one, it disappears once the user types, and browsers usually render it in lower contrast (W3C WAI Forms Tutorial). Instructions that vanish also make it harder to check answers before submitting.
If the text matters, put it in the label or in a hint tied to the field with aria-describedby, the approach documented in WCAG technique ARIA1. W3C’s own tutorial notes that linking instructions through ARIA is not fully supported everywhere, braille displays included.
Don’t let a placeholder be the only sign that a field is required. And if users still need a format rule after they’ve typed, it doesn’t belong in a placeholder either.
Required fields and format hints
Mark required status in text inside the label or legend, not by color alone.
The word “required” in the label text works (WCAG technique H90). So does a line at the top of the form explaining what an asterisk means (G184), or a format example in the label, such as a date pattern (G89).
What fails is red label color as the only cue (SC 1.4.1), and instructions that only appear after a failed submit.
W3C’s Understanding document warns that too much instruction hurts as much as too little. Long hints can appear only while the field has focus.
Grouping Related Fields and Building Multi-Step Forms
When two or more controls answer one question, they belong in a fieldset with a legend.
Fieldset and legend
The legend carries the question. Each radio button or checkbox then needs only its own option label.
That covers radio button groups and checkbox sets, billing and shipping address blocks, and any single answer split across fields, a phone number being the usual one.
W3C’s Understanding document for SC 3.3.2 shows the phone case with three fields inside a fieldset with the legend “Phone number”, each labeled Area Code, Exchange or Number. It also rejects one “Name” label over two text fields, since the second field is left unlabeled. Use “Given Name” and “Family Name”.
That same example uses the title attribute for the three part labels, while the Forms Tutorial calls title less reliable. W3C’s two documents disagree, and a visually hidden label is the safer pick.
Keep legends short. Screen readers typically announce the legend together with each control, so a long one repeats on every field.
Multi-step forms
Split a long form into logical steps and tell users how far along they are (W3C WAI Forms Tutorial).
Each step gets a heading that names it, and a text progress indicator such as “Step 2 of 4”. Data entered earlier stays put when the user goes back, and errors are scoped to the current step.
Information entered in one step must not be demanded again in a later step of the same process. The exceptions are covered in the next section.
Time limits need care on long flows. SC 2.2.1 Timing Adjustable (Level A) requires that the user can turn a limit off, adjust it, or extend it after a warning. Real-time events, essential timing and limits longer than 20 hours are exempt, and W3C’s Understanding document recommends designing flows that do not depend on timing at all.
Autocomplete, Redundant Entry and CAPTCHA Rules in WCAG 2.2
1.3.5 Identify Input Purpose (AA), 3.3.7 Redundant Entry (A) and 3.3.8 Accessible Authentication (Minimum) (AA) all exist to cut data-entry effort.
Only 1.3.5 comes from WCAG 2.1, so the ADA Title II rule and the European Accessibility Act reach it. The other two arrived with WCAG 2.2 and are not yet required by either regime as of October 2026, although the EU’s EN 301 549 V4.1.1 adds them once it is cited.
Autocomplete tokens for personal data
SC 1.3.5 requires that fields collecting information about the user declare their purpose in code. In HTML that means the autocomplete attribute with a fixed token.
| Field | Token | Detail |
|---|---|---|
| Given name | given-name | Separate from family-name |
| Family name | family-name | Separate from given-name |
| Birthday | bday | Assistive tools can show a birthday cake icon |
| Phone number | tel | Assistive tools can show a telephone icon |
The type attribute is too coarse for this. Type email says a field takes an email address but not whose, and a token does.
Browser guesswork does not count. W3C says autofill by heuristics fails the criterion, and so do incorrect token values (failure F107).
Billing and shipping blocks use the billing and shipping detail tokens. Autofill can be switched off at form level while the tokens stay in place.
Redundant entry
SC 3.3.7 requires information the user already gave in the same process to be auto-populated or available to select. The browser’s own autocomplete does not satisfy it, because the site has to supply the stored value.
Exceptions exist for essential cases, such as a memory game whose answers would be spoiled by supplying them. Security is another, like retyping a newly created password that is not displayed. And information that has expired no longer has to be offered back.
A “billing address is the same as shipping” checkbox meets the criterion. So does a checkout that keeps the card number in place after a failed submission.
Accessible authentication and CAPTCHA
SC 3.3.8 bans cognitive function tests in authentication, with exceptions for an alternative method, an assistive mechanism, object recognition and personal content.
Password managers and paste both count as mechanisms. A password field that blocks paste or autofill fails, and so does a one-time code split across six boxes that cannot take a pasted value (failure F109).
Device approval prompts, hardware keys and biometrics are not cognitive function tests.
CAPTCHAs get a split ruling. Selecting images that contain a car passes at Level AA under the object recognition exception, but 3.3.9 at Level AAA removes that exception.
An audio CAPTCHA that asks users to transcribe what they hear does not qualify as an alternative. Math and puzzle CAPTCHAs fail outright.
Scope has a limit. The criterion covers logging in to an existing account, not creating one. Per the September 2026 revision of W3C’s Understanding document, the same techniques still lower the burden at sign-up.
Writing and Announcing Error Messages
A good error message names the field and says what went wrong, then shows the fix, all in text that assistive technology can announce without a mouse.
Error text and suggestions
SC 3.3.1 (Level A) requires the error to be identified and described in text. SC 3.3.3 (Level AA) adds a suggested fix whenever one is known.
| Weak message | Stronger message |
|---|---|
| Invalid input | Enter your full name (GOV.UK Design System) |
| Date error | Passport issue date must include a year (GOV.UK Design System) |
| Wrong format | The Date field is in the wrong format, it should be similar to 17/09/2013 (use a / to separate day, month, and year) (W3C WAI) |
GOV.UK also requires the wording in the error summary to match the message beside the field. Inline messages carry a visually hidden “Error:” prefix, and the page title gets the same prefix so screen readers read it first.
Announcement and focus
The summary sits at the top of the main content, below any back link and above the h1, with a heading such as “There is a problem” and one link per error.
Each inline message sits beside its field and is tied to it with aria-describedby, while aria-invalid marks the field itself. For text that should be announced without taking focus, use a live region. That means role=”alert” for errors and role=”status” for success text (SC 4.1.3, Level AA).
Where focus lands after a failed submit is a documented disagreement. GOV.UK moves focus to the summary, while W3C’s tutorial calls it convenient to set focus on the first input that contains an error.
My pick is the summary when several fields fail, and the first invalid field when the form only has one.
Over-announcing has a cost. W3C lists role=”alert” or aria-live=”assertive” on content that is not important and time-sensitive as a failure of 4.1.3, because it interrupts the user.
Platform quirks happen too. In November 2022, GOV.UK Frontend v4.4.0 moved role=”alert” onto a nested element and dropped aria-labelledby after JAWS failed to read the whole error summary.
Validation timing
Validate on submit by default, and on blur for fields with strict formats.
Formatted values such as dates are best checked on blur and announced through an assertive live region, so the message is read before the next field. Availability checks such as usernames can run while typing through aria-live=”polite”, so the message waits until typing stops. Everything else waits for submit.
Checking a date on every keystroke shows an error almost every time, which is why W3C steers formatted input toward blur. The native required attribute is a safe default too, because browser dialogs respect the user’s font size, colors and language.
Accept liberal input. Phone numbers arrive with different separators and postal codes are not numeric everywhere, so type=”number” breaks real users.
Server-side validation stays mandatory, since client-side checks can be bypassed.
Confirmation on high-stakes submissions
SC 3.3.4 (Level AA) covers legal, financial and data-changing submissions. The user can reverse, check or confirm them before they stick.
W3C’s tutorial points to a checkbox reading “I have checked that the amount I wish to transfer is correct”, and to an order summary the user must confirm. A short undo window after sending an email works too.
Keyboard Access and Focus Order in Forms
Every control has to work from the keyboard alone, in an order that matches the visual layout, with the focused field always in view.
Tab order and operability
A div styled as a button must take focus and respond to both Enter and Space (third rule of ARIA use). Tab follows source order (SC 2.4.3), so reorder the markup instead of fiddling with tabindex values.
A user must be able to leave every component by keyboard (SC 2.1.2), and modal dialogs close on Escape. Then there’s aria-hidden on a focusable control, which leaves keyboard users focusing on nothing.
Positive tabindex values are the usual reason order breaks. They pull one field out of source order and leave the rest of the form on the default sequence.
Visible and obscured focus
SC 2.4.7 (Level AA) requires a visible focus indicator. Styling away the outline with CSS removes it and fails the criterion, along with 1.4.11 (failure F78).
SC 2.4.11 Focus Not Obscured (Minimum) (AA) is a fourth WCAG 2.2 addition that reaches forms. A field fails when author-created content hides it entirely.
Sticky footers, sticky headers and cookie banners are common causes of these failures. W3C names CSS scroll-padding as the sufficient technique (C43) and lists a sticky bar that completely hides focused elements as failure F110.
A properly built modal dialog or banner passes, because the user has to dismiss it first. Partial overlap passes at AA, but the AAA criterion 2.4.12 asks that none of the focused field is covered.
Moving focus between steps and dialogs
Focus has to move whenever the screen changes under the user.
In the ARIA Authoring Practices Guide date picker, Enter or Space on the Choose Date button opens the dialog with focus on the entered date, or on today’s date when the field is empty. Escape closes it and returns focus to the button.
Once a date is chosen, the button’s name changes to “Change Date” plus the chosen date, so screen reader users hear the result when focus returns.
The same logic applies to multi-step forms. Send focus to the new step’s heading after Next. A properly built modal takes focus when it opens and keeps it until it closes, per W3C.
Contrast, Color and Target Size for Form Controls
Form controls have to clear 4.5:1 for text and 3:1 for boundaries and states, and pointer targets need to be 24 by 24 CSS pixels.
| Criterion | Applies to | Threshold | Exempt |
|---|---|---|---|
| 1.4.3 Contrast (Minimum), AA | Label, hint and error text | 4.5:1 for normal text | Disabled controls, logotypes |
| 1.4.11 Non-text Contrast, AA | Input borders, checkmarks, focus rings | 3:1 against adjacent colors | Inactive controls, unmodified browser defaults |
| 2.5.8 Target Size (Minimum), AA | Buttons, checkboxes, radios, icons | 24 by 24 CSS pixels, or spacing | Inline links, browser-drawn controls |
Text and control contrast
The text rules cover labels, hints and error text. The control rules cover what the user sees of the field itself, meaning its border, the check inside a checkbox and the focus ring.
Browser developer tools and the Colour Contrast Analyser report the ratio, so color contrast checks on each control state take one measurement apiece.
A text input with a #767676 border on white passes. A checkbox with a #9D9D9D border fails, and so do a #AAA focus outline and a yellow #FFFF00 outline on a white page (all W3C examples).
Disabled controls and unmodified browser defaults are exempt. Once an author restyles a control, the exemption ends.
Signals beyond red
W3C’s pattern for in-line feedback pairs a checkmark and green border for valid input with an error icon and red border for invalid input, each next to text.
The borders in both states still have to meet 3:1 against the page.
Target size and spacing
Small icon buttons, custom checkboxes and stepper arrows are the interactive elements most exposed to SC 2.5.8.
An undersized target passes when a 24 CSS pixel circle centered on it touches no other target. It also passes when another control on the page does the same job at full size, when it is a link inside a sentence, or when it is native browser rendering left unmodified, such as the calendar in a date input. A presentation requirement, for example a legal duty to mirror a paper form, is exempt too.
W3C’s own example has six 20 by 20 pixel buttons with 4 pixels between them passing, while the same buttons touching fail.
Page zoom does not rescue a failing target, because the requirement is measured in CSS pixels regardless of zoom.
Native Controls vs Custom Widgets
Use the native HTML control unless a documented requirement rules it out, and test any ARIA widget with real assistive technology before it ships.
W3C’s first rule of ARIA use names three cases where native fails: the feature exists in HTML but lacks implementation or assistive technology support, the visual design cannot be built with the native element, or HTML has no such element. That document, Using ARIA, became a discontinued draft in February 2026, with the four rules kept for reference and current patterns left to the ARIA Authoring Practices Guide.
WebAIM Million 2026 found home pages with ARIA averaging 59.1 detected errors against 42 on pages without it. WebAIM cautions that those pages are also more complex, so the gap shows correlation, not proof that ARIA caused the errors.
Native HTML controls
Name, role and value (SC 4.1.2) and keyboard behavior come built in. Browser-drawn controls left unmodified are exempt from the target size minimum, and most browsers handle required and type-based validation themselves.
The cost is styling. You get limited control, and the look differs between browsers. For most forms, that trade is worth taking.
Native controls with styling or ARIA added
| Pros | Cons |
|---|---|
| Native semantics survive when CSS or scripts fail | Each added behavior needs its own keyboard and focus test |
| Fits a custom look without rebuilding the control | Hidden inputs must stay focusable and keep a visible focus style |
W3C’s tutorial builds a star rating this way, with visually hidden radio buttons that have text labels such as “3 Stars”, styled through :focus and :hover, and the hiding done by clipping instead of display: none.
Fully custom widgets
- Every role, state and key handler is written by hand in JavaScript, and each one is a place to fail.
- The ARIA Authoring Practices Guide marks its own date picker as not intended for production, flags support gaps across browser and assistive technology pairings, and calls for testing before any use.
- It’s the only route when HTML has no equivalent element.
If a custom widget is unavoidable, start from a library of accessible UI components and test it inside your own forms.
Skip the calendar for dates the user already knows. The GOV.UK Design System builds its date input from three labeled text fields (day, month, year) inside a fieldset.
How to Test Forms and Where Automated Checks Stop
Test each form in six passes, in this order, since each pass catches what the previous one cannot.
- Scan every state. Run axe DevTools, WAVE or Lighthouse on the empty form, the error state and the success state, because errors only exist after a submit.
- Tab through without a mouse. Check order, visible focus, traps, and that Enter and Space operate every control.
- Listen with a screen reader. Check each field’s name, each group’s legend and each error announcement in NVDA, JAWS, VoiceOver and TalkBack.
- Speak the labels. With voice control software such as Dragon NaturallySpeaking, say each visible label and watch whether focus lands on that field.
- Measure and enlarge. Check contrast in every control state with the Colour Contrast Analyser, then enlarge text and zoom the page.
- Break it on purpose. Submit empty, submit wrong formats, paste into authentication fields, and resubmit after correcting.
Pick screen readers to match the audience. In WebAIM’s eleventh survey (July to August 2026, 1,780 valid responses), JAWS was the primary desktop screen reader for 55.0% of respondents and NVDA for 32.9%.
Counting any use gives the same order this time. 69.2% of respondents commonly use JAWS and 59.3% NVDA. In the tenth survey, NVDA led on any use (65.6% against 60.5%) while JAWS led on primary use (40.5% against 37.7%), so the ranking depends on the survey year and the measure.
Region matters as well. JAWS leads in North America and in Australia and Oceania, NVDA leads in Asia and in Africa and the Middle East, and Europe is close to a tie (42.8% JAWS, 42.3% NVDA). VoiceOver is the most commonly used mobile screen reader, at 72.2% of respondents against 29.5% for TalkBack.
Compare those figures with your own analytics before fixing a test matrix.
Automated coverage is the contested number. Deque’s March 2021 study found axe-based automation fully covered 57% of issues by volume across more than 2,000 audits, while Evinced, with data as of December 2025, found axe-core alone detected roughly 22.6% of the issues in 35 manual audits.
Both figures are vendor-reported on different audit sets, so treat the gap as a range, not a ruling. The Justice Department’s Title II guidance lands in the same place. Automated tools cannot test every aspect, so teams need automated and manual checks together.
A scan can flag a missing label. It cannot judge whether an error message makes sense, or whether focus landed somewhere useful.
Once the form passes, run the surrounding page through a full web accessibility checklist, since a clean form on an inaccessible page still blocks users before they reach it.
Accessible Forms FAQ
Do I need both the required attribute and aria-required?
No. The native required attribute is enough in current browsers, which pass it to assistive technology and set aria-required automatically, per W3C’s Forms Tutorial.
Adding aria-required by hand is redundant for those browsers. The label should still say “(required)”.
Should a submit button stay disabled until the form is valid?
No. A disabled button drops out of the tab order and is exempt from contrast rules, so keyboard users get no hint about what is missing.
Keep it active, let the user submit, and report errors in text.
Are form builders like Jotform accessible out of the box?
Not automatically. Jotform describes its forms as Section 508 and WCAG compliant, but a vendor claim does not cover how you set up each field, group and error message.
Test the published form with a keyboard and a screen reader before relying on it.
How can a PDF form be made accessible?
An HTML form is the better route. If a PDF is unavoidable, give every interactive field a label (WCAG technique PDF10) and mark required fields inside the form (PDF5).
Under the ADA Title II rule, the exception for older PDFs does not cover documents currently used to apply for or access services, according to ADA.gov.
Does an accessibility overlay make a form WCAG compliant?
No. The FTC’s April 2025 final order barred overlay vendor accessiBe from claiming its tool can make any website WCAG-compliant and required a $1 million payment.
Labels, fieldsets and error links live in the form markup, so fix them at the source.
What to Fix First on an Existing Form
Accessible forms come from fixing what blocks completion before what slows it. A team should start with the defects that stop a keyboard or screen reader user from finishing at all, then move on to labels and accessible names, error text and focus after a failed submit, and finally contrast, target size and custom widgets.
An unnamed field blocks every assistive technology user, so labels lead. Errors come next, because a failed submit without a usable message strands people who already finished everything else.
The order changes once a regulator names WCAG 2.2 by version, because redundant entry and accessible authentication then become enforceable. As of 11 October 2026 none of the regimes above does, though the EU’s EN 301 549 V4.1.1 is published and awaiting citation.
The cost is a delayed visual redesign and a scan plus a keyboard pass on every release that touches the form. A redesign that drops a label gets caught before users hit it.
- What is Backend in Web Development? - September 13, 2026
- What is Frontend Development? - September 11, 2026
- How to Make a Button in Figma: Design Best Practices - September 10, 2026


