How to fix aria required children on WooCommerce

Ensure every ARIA parent role contains only its required, permitted child roles — and remove focusable elements (e.g. tabindex on img or a) that are not allowed inside that ARIA context.

Steps for WooCommerce

  1. The violation is almost always in your active WordPress theme's template files or a page-builder block. Go to Appearance → Theme File Editor (or use a child theme via FTP/SFTP).
  2. Search theme files (header.php, functions.php, or relevant template parts in /template-parts/) for role= attributes. Look in navigation menus, product loops, or slider shortcodes.
  3. To edit safely, create or use a child theme: copy the relevant parent template file into your child theme folder, then edit it there so updates don't overwrite your fix.
  4. If the issue is inside a Gutenberg block or page-builder (Elementor, Divi, etc.), edit the block/section: remove or replace the offending tabindex attributes, or switch to a semantic HTML element (e.g. change a <div role="list"> to a <ul>).
  5. For plugin-generated markup (e.g. WooCommerce core product grid), use a template override: copy woocommerce/templates/[relevant-template].php to your-theme/woocommerce/[relevant-template].php and correct the markup there.
  6. Re-test with axe DevTools browser extension after saving.
Official WooCommerce documentation ↗
<!-- ❌ WRONG: img with tabindex is not a valid child of role="list" -->
<ul role="list">
  <img src="product.jpg" alt="Blue Widget" tabindex="0">
</ul>

<!-- ✅ CORRECT: wrap the image in a proper listitem -->
<ul>
  <li>
    <a href="/products/blue-widget">
      <img src="product.jpg" alt="Blue Widget">
    </a>
  </li>
</ul>

<!-- ❌ WRONG: a[tabindex] as direct child of role="menu" -->
<div role="menu">
  <a href="/sale" tabindex="0">Sale</a>
</div>

<!-- ✅ CORRECT: give the child the required menuitem role -->
<div role="menu">
  <a href="/sale" role="menuitem">Sale</a>
</div>

What is aria required children?

ARIA (Accessible Rich Internet Applications) roles tell screen readers and other assistive technologies what a piece of your page is — a list, a menu, a tab panel, etc. Each parent role has a strict set of child roles it is allowed to contain. For example, a `list` role must contain `listitem` children; a `menu` must contain `menuitem` children. When you nest elements that don't belong — such as a plain image or link with a `tabindex` attribute — directly inside a parent ARIA role, assistive technologies get confused and may skip content, announce it incorrectly, or break keyboard navigation entirely. The WCAG 1.3.1 criterion ("Info and Relationships") requires that the structure you see visually is faithfully conveyed in code so every user, regardless of ability, gets the same information.

Screen-reader users — roughly 7–8 million people in the US alone — rely on correct ARIA structure to navigate your store. A broken ARIA parent/child relationship can cause product listings, navigation menus, carousels, or tab panels to become completely invisible or unreadable to assistive technology, directly costing you sales from customers with disabilities. Beyond lost revenue, WCAG 1.3.1 failures are frequently cited in ADA Title III accessibility lawsuits against online retailers; a documented violation increases your legal exposure. Google also uses accessibility signals as a quality indicator, so persistent structural errors can subtly suppress your organic rankings over time.

See the complete Aria required children guide for every platform and the full background.

Not sure if your WooCommerce store has this?

Run a free SEOLZ audit — we’ll find aria required children and every other issue across your whole site.

Scan my site free

Fix aria required children on another platform