Frequently litigated
Conflicting labels are pleaded alongside missing labels as evidence the checkout is unusable.
Which WCAG criterion this fails
- Does not meet 3.3.2 Labels or Instructions (Level A)
- Does not meet 4.1.2 Name, Role, Value (Level A)
How to fix it on WooCommerce
Everything below is done from Appearance > Theme File Editor, or your child theme over SFTP. Take a copy of the theme before editing.
- Find the input id from the finding, then search the theme for that id inside `for="…"`. There will be two or more matches.
- Keep exactly one <label>. This usually happens after an app injects a duplicate label, or after a section was copy-pasted.
- If the second label is genuinely a hint or a unit ("kg", "optional"), convert it to a <span> and link it with aria-describedby instead of `for`.
- If an app added the duplicate, check the app's settings for a "render label" toggle before editing the theme, or the edit will be overwritten on the next app update.
Where this usually lives
woocommerce/checkout/form-*.php overrides, and form plugins that render their own label on top of the theme label
Paths given for Storefront, Astra, Flatsome and other WooCommerce themes. A heavily customised theme may differ; the CSS selector in your scan report points at the exact element.
Code
<!-- Before: two labels claim the same field -->
<label for="Qty">Quantity</label>
<label for="Qty">Required</label>
<input id="Qty" type="number">
<!-- After: one label, the rest becomes a description -->
<label for="Qty">Quantity</label>
<input id="Qty" type="number" aria-describedby="QtyHint">
<span id="QtyHint">Required</span>How to confirm it is fixed
Re-run the scan. This rule should drop out of the findings entirely. If the instance count falls but does not reach zero, the same defect exists in another template — product cards and quick-view modals are the usual second home for it.
Effort: low. Rule id: form-field-multiple-labels (axe-core).