Label
Moderate effortFound on 15% of audited stores.
Add a visible or programmatic label to every form input so assistive technologies can identify its purpose.
What it is
Every form field on your website — such as a search box, email signup, checkout address field, or contact form — needs a label that clearly describes what information belongs there. A "label" is either a visible text description linked to the input, or a special code attribute (like `aria-label`) that screen readers can announce. When a form field has no label at all, assistive technology users hear something unhelpful like "edit text" with no context about what to type. WCAG Success Criterion 4.1.2 requires all interactive elements, including form inputs, to have a name that can be determined programmatically.
Why it matters
Unlabeled form fields directly block customers who use screen readers, voice-control software (like Dragon NaturallySpeaking), or keyboard-only navigation — they simply cannot use your checkout, contact, or signup forms. This is a recognized WCAG 2.1 Level A failure, meaning it is among the most serious accessibility violations and creates real legal exposure under the ADA (US), AODA (Canada), EAA (EU), and similar laws — several major retailers have faced lawsuits citing exactly this issue. Beyond legal risk, it also damages conversions: any customer who cannot complete a form cannot buy from you. Additionally, Google uses accessibility signals as part of its overall quality assessment, so fixing these issues supports your SEO health too.
How to fix it
- Identify every unlabeled form input — use your browser's developer tools (Inspect Element) or an accessibility scanner to find all <input>, <select>, and <textarea> elements that lack a linked label.
- For each input, add a visible <label> element with a 'for' attribute matching the input's 'id' attribute (e.g., <label for="email">Email address</label> paired with <input id="email" type="email">). This is the preferred, most accessible approach.
- If a visible label is not feasible due to design constraints (e.g., a lone search bar), add an aria-label attribute directly on the input element (e.g., <input type="search" aria-label="Search products">), or use aria-labelledby pointing to another visible element's id.
- Never use placeholder text as the only label — placeholders disappear when a user starts typing and are not reliably announced by all screen readers.
- After making changes, retest with an automated scanner (axe DevTools browser extension) and manually tab through your forms with a screen reader (NVDA on Windows or VoiceOver on Mac/iOS) to confirm each field is announced with a meaningful name.
- Apply the fix to ALL forms site-wide: checkout, login, registration, search, newsletter signup, contact, and any custom forms — not just the one page where the issue was first found.
<label for="customer-email">Email address</label>
<input id="customer-email" type="email" name="email" autocomplete="email">
<!-- OR, when a visible label is not possible: -->
<input type="search" aria-label="Search products" name="q">Fix it on your platform
Pick your platform for the exact steps.
How to fix label on Shopify
- Go to Online Store → Themes → click 'Customize' on your active theme.
- For theme template files (e.g., contact form, newsletter): click 'Edit code' (Online Store → Themes → ··· → Edit code).
- Locate the relevant Liquid template (e.g., sections/contact-form.liquid, sections/footer.liquid, templates/customers/login.liquid).
- Find any <input> or <textarea> missing a <label> and add a linked <label for="INPUT_ID"> element above it, ensuring the input has a matching id attribute.
- For third-party app forms (reviews, popups, etc.), check the app's own settings for a 'label' or 'field name' option, or contact the app developer.
- Save the file, then verify with the axe DevTools Chrome extension on your live storefront.
How to fix label on WooCommerce
- Install the 'WP Accessibility' plugin (by Joe Dolson) from Plugins → Add New — it auto-fixes several common label issues including search fields.
- For checkout and account forms, copy the relevant WooCommerce template file (e.g., woocommerce/templates/checkout/form-billing.php) into your child theme under woocommerce/checkout/form-billing.php.
- Open the copied file in Appearance → Theme File Editor (or via FTP/SFTP) and add <label for="INPUT_ID"> elements above any unlabeled inputs.
- For custom or plugin-added forms, use your theme's functions.php or a code snippet plugin to hook into the form output and inject labels.
- Use the axe DevTools browser extension to re-scan checkout, login, and registration pages after changes.
How to fix label on BigCommerce
- Go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme.
- Locate the relevant Handlebars template (e.g., templates/components/forms/, templates/pages/contact-us.html, templates/pages/auth/login.html).
- Add a <label for="INPUT_ID"> element linked to each unlabeled <input> or <textarea>, ensuring the input has a matching id.
- For the native search bar in the header, edit templates/components/header.html and add aria-label="Search" to the search input if a visible label is not shown.
- Save changes and use the axe DevTools browser extension to verify on the live or preview storefront.
How to fix label on Adobe Commerce (Magento)
- Create or edit a template override in your custom theme directory (app/design/frontend/Vendor/theme/).
- Locate the relevant .phtml template — e.g., Magento_Customer/templates/form/login.phtml, Magento_Checkout/templates/form/field.phtml.
- Add <label for="INPUT_ID"> markup above unlabeled inputs; use the class 'sr-only' (visually hidden via CSS) if design requires hiding the label visually while keeping it accessible.
- Run bin/magento setup:static-content:deploy and clear the cache (bin/magento cache:flush) after saving template changes.
- Audit all custom module forms and third-party extension templates for the same issue, then verify with axe DevTools.
How to fix label on Wix
- Open your site in the Wix Editor and click on the form element (Wix Forms widget) to select it.
- Click 'Settings' on the form widget — each field should have a visible label; enable or edit the label text directly in the field settings panel.
- For Wix Forms fields, ensure 'Show Label' is toggled on for every input field in the field's design settings.
- If you use a custom HTML embed (Add → Embed → Custom Code), edit that HTML block directly and add proper <label for=""> markup inside your custom code.
- Wix's native form builder handles label association automatically when labels are enabled, so verify by publishing and running axe DevTools on the live page.
How to fix label on Squarespace
- In the Pages panel, click Edit on the page containing the form, then click the Form Block to open its settings.
- Each form field in Squarespace Form Blocks has a 'Label' field in its options — ensure a descriptive label is entered for every field (do not leave it blank).
- For Newsletter Blocks, go to the block's Design tab and enable 'Show label' or enter placeholder text supplemented by a title attribute — note that Squarespace Newsletter Blocks are limited; consider switching to a Form Block for full label control.
- Custom code injections (Settings → Advanced → Code Injection, or Page Settings → Advanced) can be used to add aria-label attributes via JavaScript if Squarespace's UI does not expose a label option for a specific widget.
- Publish and verify with the axe DevTools browser extension.
How to fix label on Webflow
- Open your project in the Webflow Designer and click on the Form Block containing the unlabeled input.
- Select the individual Form Field element (Input, Textarea, or Select); in the right-hand Settings panel, ensure the 'Label' toggle is ON and the label text is descriptive (e.g., 'Email address', not just 'Email').
- Webflow automatically links the <label> to its input using for/id when the label is added via the Settings panel — do not delete the auto-generated id on the input.
- If you need a visually hidden label (design-only), add a custom 'sr-only' CSS class to the label element with CSS: position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap;
- For custom-embedded forms via HTML Embed components, manually add <label for="id"> markup inside the embed.
- Publish and test with axe DevTools or VoiceOver/NVDA.
Does your site have this issue?
Run a free SEOLZ audit to find label — and every other issue — across your whole site in minutes.
Scan my site freeFrequently asked questions
What is Label?
Every form field on your website — such as a search box, email signup, checkout address field, or contact form — needs a label that clearly describes what information belongs there. A "label" is either a visible text description linked to the input, or a special code attribute (like `aria-label`) that screen readers can announce. When a form field has no label at all, assistive technology users hear something unhelpful like "edit text" with no context about what to type. WCAG Success Criterion 4.1.2 requires all interactive elements, including form inputs, to have a name that can be determined programmatically.
Why does label matter?
Unlabeled form fields directly block customers who use screen readers, voice-control software (like Dragon NaturallySpeaking), or keyboard-only navigation — they simply cannot use your checkout, contact, or signup forms. This is a recognized WCAG 2.1 Level A failure, meaning it is among the most serious accessibility violations and creates real legal exposure under the ADA (US), AODA (Canada), EAA (EU), and similar laws — several major retailers have faced lawsuits citing exactly this issue. Beyond legal risk, it also damages conversions: any customer who cannot complete a form cannot buy from you. Additionally, Google uses accessibility signals as part of its overall quality assessment, so fixing these issues supports your SEO health too.
How do I fix label?
Add a visible or programmatic label to every form input so assistive technologies can identify its purpose.
Authoritative references
- How to fix this specific rule — Deque/axe (rule reference)
- WCAG 2 overview — W3C WAI
- Forms tutorial — W3C WAI
- ARIA basics — MDN