Aria required children
Moderate effortFound on 18% of audited stores.
Add the required child ARIA roles (e.g. `role="option"` inside `role="listbox"`, or `role="group"`/`role="option"` inside `role="combobox"`) so every composite ARIA widget contains the child roles the ARIA specification demands.
What it is
ARIA (Accessible Rich Internet Applications) is a set of attributes that tells screen readers and other assistive technologies what a piece of your page does. Some ARIA roles are "composite widgets" — they are containers that only make sense when they hold specific child roles inside them. For example, a `role="listbox"` must contain items marked with `role="option"`, and a `role="combobox"` must own a `role="listbox"` (or similar) that in turn contains `role="option"` children. When those required children are missing, the widget is structurally broken from an accessibility standpoint. The scanner flagged WCAG Success Criterion 1.3.1 ("Info and Relationships"), which requires that the structure you communicate visually is also communicated to assistive technology — and a role hierarchy missing its required children fails that test.
Why it matters
Screen readers used by blind or low-vision shoppers rely entirely on correct ARIA role relationships to announce and navigate interactive controls like drop-down lists, autocomplete fields, product filters, and size/colour selectors. When required child roles are absent, the screen reader either announces the container as empty, skips it entirely, or narrates meaningless raw text — making the control unusable. This directly blocks those customers from completing purchases, which is both a lost conversion and a legal accessibility risk: WCAG 2.1 Level AA is the benchmark cited in ADA, EAA (Europe), and similar legislation, and regulators and plaintiffs increasingly target ecommerce stores. Fixing this also signals to Google that your pages are well-structured, which can contribute to crawl quality and Core Web Vitals signals over time.
How to fix it
- Identify every element on the page that carries an ARIA container role (e.g. role="listbox", role="combobox", role="menu", role="radiogroup", role="tablist", role="tree", role="grid") — your scanner report will name the specific element and role.
- Look up the required owned elements for that role in the ARIA specification (e.g. listbox → option; combobox → listbox containing option; menu/menubar → menuitem/menuitemcheckbox/menuitemradio; tablist → tab; tree → treeitem; radiogroup → radio; grid → row → gridcell).
- Inspect the actual rendered HTML (browser DevTools → Elements tab) to confirm whether those child roles exist directly inside the container or are owned via aria-owns.
- Add the missing role attributes to the correct child elements (e.g. add role="option" to each list item inside a role="listbox"), or refactor the markup so the DOM nesting matches what the ARIA spec requires.
- If the children are present in the DOM but not yet loaded (e.g. rendered asynchronously), add aria-busy="true" to the container while loading and remove it — plus add the child roles — once the content is injected.
- Re-test with an automated tool (axe DevTools, WAVE) and manually with a screen reader (NVDA+Firefox or VoiceOver+Safari) to confirm the widget is announced and navigable correctly.
Fix it on your platform
Pick your platform for the exact steps.
How to fix aria required children on Shopify
- In your Shopify Admin go to Online Store → Themes → click the '...' (Actions) menu next to your active theme → Edit code.
- Identify which template or section renders the broken widget. Common culprits: sections/product-form.liquid (variant selectors), sections/header.liquid (nav dropdowns), snippets/facets.liquid (collection filters).
- Open that file and locate the container element that has the incorrect or missing ARIA roles (e.g. a <ul> acting as a listbox for a custom dropdown).
- Add role="listbox" (or the appropriate container role) to the wrapper element and role="option" (or appropriate child role) to each child <li> or <div>.
- Also add aria-selected="true/false" to each option child if required by the role (listbox options require aria-selected).
- Save the file, then preview the theme and test with a screen reader or the axe browser extension to confirm the violation is resolved.
- If the widget is rendered by a third-party app (e.g. a custom search or filter app), contact the app developer or replace the app with one that passes ARIA validation.
How to fix aria required children on Shopify Plus
- Follow all Shopify steps above — Shopify Plus stores use the same theme code layer.
- If you use a custom storefront (Hydrogen/Headless), locate the relevant React component in your repo (e.g. ProductOptions.tsx, ComboBox.tsx) and apply the role corrections directly in JSX.
- For Hydrogen, prefer Radix UI or Headless UI primitives which ship with correct ARIA role trees out of the box.
How to fix aria required children on WooCommerce
- In WordPress Admin go to Appearance → Theme File Editor (or use a local editor / SFTP).
- Open the child theme file that renders the broken widget — typically woocommerce/content-single-product.php, woocommerce/global/form-row.php, or a plugin's template override in /wp-content/plugins/<plugin>/templates/.
- Locate the container element with the incorrect role and add the required child roles to its children (e.g. add role="option" to <li> items inside a role="listbox" wrapper).
- Always edit from a child theme so WooCommerce updates do not overwrite your changes.
- Alternatively, install an accessibility plugin such as 'WP Accessibility' to audit issues, but note that automated fixes from plugins rarely fix custom widget ARIA trees — manual template edits are usually required.
- Test with the axe browser extension and a screen reader after saving.
How to fix aria required children on BigCommerce
- In your BigCommerce Control Panel go to Storefront → Themes → click Customise on your active theme → Open in Editor (Stencil theme editor), or download the theme ZIP for local editing.
- Locate the Handlebars template responsible for the broken widget — common files: templates/components/products/product-view.hbs (variant pickers), templates/components/faceted-search/ (filters), templates/layout/base.hbs (navigation).
- Add the missing ARIA child roles directly to the Handlebars markup (e.g. role="option" on each <option>-equivalent child element).
- Upload the modified theme or push via Stencil CLI (stencil push), then activate it.
- Use the axe DevTools extension on your live or preview URL to verify the fix.
How to fix aria required children on Wix
- Wix's drag-and-drop editor generates its own HTML and ARIA attributes; you cannot directly edit the rendered role attributes for built-in Wix widgets.
- For custom widgets built with Velo (Wix's JavaScript API): open the Velo editor, locate the relevant custom element or Repeater component, and set ARIA attributes programmatically using $w('#element').setAttribute('role', 'option') on each child item in the onReady or data-binding callback.
- For built-in Wix components (e.g. dropdown menus, galleries) that are generating the violation, report the issue to Wix Support — Wix controls the underlying accessibility of its own components.
- Consider replacing a non-accessible built-in widget with a custom HTML embed (Insert → Embed → Custom Code) where you control the full ARIA markup.
- After any change, verify with the axe DevTools browser extension.
How to fix aria required children on Wix Studio
- In Wix Studio, open the page containing the broken widget in the editor.
- If the widget is a custom component, open the Components panel, select the component, and use the Dev Mode panel to add or correct ARIA attributes via JavaScript (same Velo API as standard Wix).
- For Studio-native 'blocks' that output incorrect ARIA, use the Settings → Accessibility panel (where available) or file a bug with Wix Studio support.
- For full control, insert a Custom Embed block containing hand-authored HTML with the correct role hierarchy.
- Verify with axe DevTools after publishing.
How to fix aria required children on Squarespace
- Squarespace does not expose direct HTML editing for its built-in blocks; go to Website → Pages → select the page → Edit.
- For built-in widgets (dropdowns, navigation) that generate the violation, the only option is to report it to Squarespace Support, as the platform controls that HTML output.
- For custom content areas: go to the block where the issue appears → Edit → switch to a Code Block, and write the widget markup manually with the correct ARIA role tree.
- In Settings → Advanced → Code Injection you can add a small JavaScript snippet that post-processes the DOM on DOMContentLoaded to add missing role attributes to children of a specific container — use this as a last resort when the source cannot be changed.
- Test with axe DevTools after publishing.
How to fix aria required children on Webflow
- Open the page in the Webflow Designer and select the container element that has the incorrect ARIA role (e.g. a Div with a custom role attribute).
- In the right-hand panel open Element Settings (the gear icon) → Custom Attributes section.
- Select each child element (e.g. each item Div inside the container) and add a custom attribute: Name = role, Value = option (or the required child role for your widget type).
- Also add any required state attributes on the children (e.g. aria-selected = false).
- For dynamic CMS-driven lists: select the Collection List Wrapper, open Settings, and add role="listbox" to the wrapper; select the Collection Item and add role="option" and aria-selected="false" as custom attributes.
- Publish the site and verify with axe DevTools.
How to fix aria required children on Adobe Commerce (Magento)
- Identify the PHTML or Knockout JS template rendering the broken widget. Common locations: app/design/frontend/<Vendor>/<theme>/Magento_Catalog/templates/ (product options), app/design/frontend/<Vendor>/<theme>/Magento_LayeredNavigation/templates/ (filters), app/code/<Vendor>/<Module>/view/frontend/templates/.
- Open the relevant .phtml or .html (Knockout) template file and locate the container element with the ARIA container role.
- Add the required child roles to the child elements in the template markup (e.g. role="option" and aria-selected="false" on each filter item <li>).
- Run bin/magento cache:clean and bin/magento setup:static-content:deploy after editing templates.
- If the widget is generated by a third-party module, create a template override in your custom theme rather than editing the module directly.
- Test on your staging environment with the axe browser extension and a screen reader before deploying to production.
How to fix aria required children on Headless / Custom (I build in code)
- Search your component library for any element that sets a composite container ARIA role (role="listbox", role="combobox", role="menu", role="tablist", role="radiogroup", role="tree", role="grid") either as a static attribute or via JavaScript.
- Cross-reference each container role with the required owned roles table in the WAI-ARIA specification and add the missing child roles to the appropriate descendant elements.
- Prefer established accessible component libraries (Radix UI, Headless UI, Reach UI, Adobe React Aria) which implement the full ARIA role trees correctly out of the box, rather than building composite widgets from scratch.
- For server-side rendered HTML, add role attributes directly in your template/JSX. For client-side rendered children, set the roles as soon as child elements are inserted into the DOM (not after a setTimeout).
- Add automated accessibility tests (jest-axe, Playwright + axe-core) to your CI pipeline to catch regressions.
- Manually test the complete widget with NVDA+Firefox and VoiceOver+Safari.
How to fix aria required children on Magento Open Source
- Follow the same steps as Adobe Commerce above — the template override mechanism is identical in Magento Open Source.
- Use bin/magento cache:flush after any template change.
- Verify with axe DevTools browser extension.
How to fix aria required children on PrestaShop
- Go to your PrestaShop back office → Design → Theme & Logo → (active theme). The template files live in /themes/[your-theme]/templates/.
- Use FTP/SFTP or your hosting file manager to open the relevant .tpl (Smarty) template (e.g. _partials/header.tpl, catalog/listing/product-list.tpl).
- Locate the parent ARIA role, check its children, and add the missing child role attributes or remove the disallowed tabindex from img/a elements.
- Clear PrestaShop's cache via Advanced Parameters → Performance → Clear Cache, then re-test with axe DevTools.
How to fix aria required children on OpenCart
- Connect via FTP/SFTP to your server. Template files are in catalog/view/theme/[your-theme]/template/.
- Identify the relevant .twig or .tpl file (e.g. common/header.twig, product/category.twig).
- Edit the file to add the correct child role attributes to children of ARIA parent roles, or remove tabindex from img/a elements that are illegal children.
- Save the file and hard-refresh your browser. Test with axe DevTools.
Does your site have this issue?
Run a free SEOLZ scan to find aria required children — and every other issue — across your whole site in minutes.
Scan my site freeFrequently asked questions
What is Aria required children?
ARIA (Accessible Rich Internet Applications) is a set of attributes that tells screen readers and other assistive technologies what a piece of your page does. Some ARIA roles are "composite widgets" — they are containers that only make sense when they hold specific child roles inside them. For example, a `role="listbox"` must contain items marked with `role="option"`, and a `role="combobox"` must own a `role="listbox"` (or similar) that in turn contains `role="option"` children. When those required children are missing, the widget is structurally broken from an accessibility standpoint. The scanner flagged WCAG Success Criterion 1.3.1 ("Info and Relationships"), which requires that the structure you communicate visually is also communicated to assistive technology — and a role hierarchy missing its required children fails that test.
Why does aria required children matter?
Screen readers used by blind or low-vision shoppers rely entirely on correct ARIA role relationships to announce and navigate interactive controls like drop-down lists, autocomplete fields, product filters, and size/colour selectors. When required child roles are absent, the screen reader either announces the container as empty, skips it entirely, or narrates meaningless raw text — making the control unusable. This directly blocks those customers from completing purchases, which is both a lost conversion and a legal accessibility risk: WCAG 2.1 Level AA is the benchmark cited in ADA, EAA (Europe), and similar legislation, and regulators and plaintiffs increasingly target ecommerce stores. Fixing this also signals to Google that your pages are well-structured, which can contribute to crawl quality and Core Web Vitals signals over time.
How do I fix aria required children?
Add the required child ARIA roles (e.g. `role="option"` inside `role="listbox"`, or `role="group"`/`role="option"` inside `role="combobox"`) so every composite ARIA widget contains the child roles the ARIA specification demands.