How to fix presentation role conflict on Headless / Custom (I build in code)
Remove conflicting ARIA attributes (global ARIA properties and tabindex) from any element that has been marked as purely presentational with role="presentation" or role="none".
Steps for Headless / Custom (I build in code)
- Search your codebase (JSX, TSX, HTML templates) for role="presentation" and role="none" — e.g. grep -r 'role="presentation"' src/.
- For each match, inspect the element for any aria-* props/attributes or tabindex. Remove the conflicting attribute following the decision logic in the generic steps.
- For decorative images in React/Next.js/Nuxt, prefer <img alt="" /> or the framework's Image component with alt="" rather than role="none" + aria-label conflicts.
- Run automated tests (jest-axe, Playwright with axe-core) in CI to catch future regressions.
- Manually test with VoiceOver (Mac/iOS) and NVDA (Windows) to confirm screen readers skip the element silently.
What is presentation role conflict?
When an HTML element is given `role="presentation"` or `role="none"`, it signals to screen readers: "ignore this element — it carries no meaning, it's only here for visual layout." However, if that same element also carries global ARIA attributes (like `aria-label`, `aria-describedby`, `aria-hidden`, etc.) or a `tabindex`, a direct conflict is created. The browser and screen reader receive two contradictory instructions at once: "treat this as meaningless" and "here's meaningful information about it." Different screen readers resolve this conflict differently — some honour the role and ignore the ARIA, others do the opposite — leading to unpredictable and broken experiences for assistive-technology users.
Screen reader users — including many shoppers who are blind or have low vision — may hear garbled, repeated, or missing announcements when navigating your store if this conflict exists on interactive or decorative elements. This directly harms conversions by making it harder to browse products, read descriptions, or complete checkout. Under WCAG 2.1 Success Criteria 4.1.2 (Name, Role, Value), this is a recognized failure that can create legal exposure under accessibility laws such as the ADA (US), EN 301 549 (EU), and the Equality Act (UK). Resolving it also improves your overall accessibility audit score, which is increasingly scrutinized in enterprise purchasing decisions and legal compliance reviews.
See the complete Presentation role conflict guide for every platform and the full background.
Not sure if your Headless / Custom (I build in code) store has this?
Run a free SEOLZ scan — we’ll find presentation role conflict and every other issue across your whole site.
Scan my site free