Presentation role conflict
Moderate effortFound on 4% of audited stores.
Remove conflicting ARIA attributes and tabindex from elements that are marked as presentational (role="presentation" or role="none"), so screen readers consistently ignore them.
What it is
In HTML, you can tell screen readers to ignore a purely decorative element by giving it `role="presentation"` or `role="none"`. However, if that same element also has global ARIA attributes (like `aria-label`, `aria-describedby`, `aria-hidden`, etc.) or a `tabindex` attribute, the browser and screen reader disagree about whether to expose the element — creating a conflict. Some screen readers will override the presentational role and announce the element anyway, while others will silently discard it, leading to unpredictable and often broken experiences for users who rely on assistive technology.
Why it matters
Screen reader users — including people with visual impairments — depend on a consistent, predictable page structure. When presentational-role conflicts exist, they can cause screen readers to announce decorative or layout elements that serve no informational purpose, cluttering the experience and confusing users. This violates WCAG 2.1 Success Criterion 4.1.2 (Name, Role, Value), which is a Level A requirement — the most basic level of accessibility compliance. Failing Level A criteria creates legal exposure under laws like the ADA (US), EN 301 549 (EU), and the Equality Act (UK), and can result in lawsuits or regulatory complaints. Fixing these conflicts also demonstrates a baseline commitment to accessibility that protects your brand reputation and broadens your potential customer base.
How to fix it
- Audit your HTML for any element that has role="presentation" or role="none" AND also carries one or more global ARIA attributes (aria-label, aria-describedby, aria-hidden, aria-live, etc.) or a tabindex attribute.
- Decide the element's true purpose: if it is purely decorative or a layout spacer, it should have no ARIA attributes and no tabindex — keep only role="presentation" or role="none" (or remove the role entirely if the element already has no semantic meaning, e.g. a <div> or <span>).
- If the element actually needs to convey information or be focusable, remove role="presentation"/role="none" instead and keep the ARIA attributes that describe it accurately.
- Never combine role="presentation" or role="none" with any global ARIA attribute or a positive/zero tabindex — these combinations are inherently contradictory and will always trigger this rule.
- After editing, validate your changes with an automated accessibility checker (e.g. axe DevTools browser extension) and test manually with a screen reader (NVDA + Firefox or VoiceOver + Safari) to confirm the element is no longer announced.
- Re-run your accessibility scan to confirm the presentation-role-conflict finding is resolved before deploying.
<!-- ❌ WRONG: role="presentation" conflicts with aria-label and tabindex -->
<div role="presentation" aria-label="decorative divider" tabindex="0">
<img src="divider.png" alt="">
</div>
<!-- ✅ CORRECT (option A): purely decorative — remove all conflicting attributes -->
<div role="presentation">
<img src="divider.png" alt="">
</div>
<!-- ✅ CORRECT (option B): element actually needs to be announced — remove the presentational role -->
<div aria-label="Section divider" tabindex="0">
<img src="divider.png" alt="">
</div>Fix it on your platform
Pick your platform for the exact steps.
How to fix presentation role conflict on Shopify
- In your Shopify admin, go to Online Store → Themes → click the three-dot menu next to your active theme → Edit code.
- Use the search box (top of the file tree) to search across all files for 'role="presentation"' and 'role="none"' to locate every instance.
- For each match, inspect the surrounding HTML in the code editor: look for any aria-* attribute or tabindex on the same element.
- Remove the conflicting attribute(s) following the decision logic in the generic steps above — either strip the ARIA/tabindex, or remove the presentational role.
- Save the file. Preview the theme and re-run an axe scan on the changed page to verify the conflict is gone.
- If the element is inside a third-party app section (e.g. a slider or carousel app), contact the app developer to report the conflict, as you cannot directly edit third-party app code.
How to fix presentation role conflict on WooCommerce
- In your WordPress admin, go to Appearance → Theme File Editor (or use a child theme and a local code editor for safer editing).
- Search your active theme's template files and any custom blocks/widgets for 'role="presentation"' and 'role="none"'.
- Also check any page builder output (Elementor, Divi, etc.) by inspecting the live page with browser DevTools — identify which widget or block is generating the conflicting element.
- If it's in theme files, edit the relevant template file to remove the conflicting ARIA attribute or tabindex as described in the generic steps.
- If it's generated by a page builder plugin, edit the widget/element settings and remove any custom ARIA attribute that was added in the plugin's Advanced/Accessibility fields.
- Update and clear any caching plugin (e.g. WP Rocket, W3 Total Cache). Re-scan with axe to confirm the fix.
How to fix presentation role conflict on BigCommerce
- In your BigCommerce admin, go to Storefront → My Themes → click Customize on your active theme → then Edit Theme Files (or download the theme ZIP and edit locally).
- Search all Handlebars (.html) and JS template files for 'role="presentation"' and 'role="none"'.
- For each match, inspect the element for co-occurring aria-* attributes or tabindex.
- Remove the conflicting attribute following the decision logic in the generic steps, then save or re-upload the theme.
- Preview the storefront and run an axe DevTools scan on the relevant page to confirm the conflict is resolved.
- If the element comes from a third-party widget script, contact the widget vendor.
How to fix presentation role conflict on Wix
- Wix renders most HTML automatically; open the Wix Editor for your site and inspect the page element that carries the conflicting role.
- Select the element, open its Settings or Accessibility panel (available on some element types via the right-click context menu → Accessibility) and remove any custom ARIA label or role you have manually added.
- If the conflict was introduced by a Wix App from the App Market, check the app's settings panel for ARIA/accessibility options, or contact the app developer.
- For custom code injected via Wix Velo (Developer Tools → Custom Code or a code panel), open the relevant code file and locate the element — remove the conflicting aria-* attribute or tabindex there.
- Publish the site and verify with axe DevTools in your browser.
How to fix presentation role conflict on Squarespace
- In Squarespace, most HTML is auto-generated. Open your Pages panel, navigate to the affected page, and click Edit.
- If you added a Code Block containing the conflicting element, click that block to open it and edit the raw HTML — remove the conflicting ARIA attribute or tabindex per the generic steps.
- If it's in a built-in Squarespace component (e.g. gallery, slideshow), you cannot edit that HTML directly. Instead, go to Website → Custom CSS / Inject Code (Settings → Advanced → Code Injection) and check whether any custom code snippet introduced the conflict.
- Remove or correct the conflicting snippet in Code Injection or the Custom CSS area.
- Preview and verify using the axe browser extension.
How to fix presentation role conflict on Webflow
- Open your Webflow Designer and select the element flagged with the conflict.
- In the right-hand panel, open the Element Settings tab (the gear icon) and scroll to the Custom Attributes section.
- Review every attribute listed: if role is set to 'presentation' or 'none' AND an aria-* attribute or tabindex is also present, remove the conflicting one(s) following the decision logic in the generic steps.
- If the element should be purely decorative, delete all ARIA attributes and tabindex, keeping only role="presentation" (or remove the role entirely for non-semantic tags like div/span).
- Publish the site and run an axe DevTools scan to confirm the fix.
How to fix presentation role conflict on Adobe Commerce (Magento)
- Identify the conflicting element via browser DevTools and note which template file (*.phtml) or layout XML file is responsible (use template hints: Stores → Configuration → Advanced → Developer → Debug → Enable Template Path Hints).
- In your custom theme directory (app/design/frontend/<Vendor>/<theme>/), locate the relevant .phtml file.
- Open the file and find the element with role="presentation" or role="none" that also carries aria-* attributes or tabindex.
- Edit the element to remove the conflicting attribute(s) per the generic steps, then save.
- From the Magento CLI run: php bin/magento cache:flush and php bin/magento setup:static-content:deploy.
- Reload the storefront page and verify with axe DevTools that the conflict is resolved.
Does your site have this issue?
Run a free SEOLZ audit to find presentation role conflict — and every other issue — across your whole site in minutes.
Scan my site freeFrequently asked questions
What is Presentation role conflict?
In HTML, you can tell screen readers to ignore a purely decorative element by giving it `role="presentation"` or `role="none"`. However, if that same element also has global ARIA attributes (like `aria-label`, `aria-describedby`, `aria-hidden`, etc.) or a `tabindex` attribute, the browser and screen reader disagree about whether to expose the element — creating a conflict. Some screen readers will override the presentational role and announce the element anyway, while others will silently discard it, leading to unpredictable and often broken experiences for users who rely on assistive technology.
Why does presentation role conflict matter?
Screen reader users — including people with visual impairments — depend on a consistent, predictable page structure. When presentational-role conflicts exist, they can cause screen readers to announce decorative or layout elements that serve no informational purpose, cluttering the experience and confusing users. This violates WCAG 2.1 Success Criterion 4.1.2 (Name, Role, Value), which is a Level A requirement — the most basic level of accessibility compliance. Failing Level A criteria creates legal exposure under laws like the ADA (US), EN 301 549 (EU), and the Equality Act (UK), and can result in lawsuits or regulatory complaints. Fixing these conflicts also demonstrates a baseline commitment to accessibility that protects your brand reputation and broadens your potential customer base.
How do I fix presentation role conflict?
Remove conflicting ARIA attributes and tabindex from elements that are marked as presentational (role="presentation" or role="none"), so screen readers consistently ignore them.
Authoritative references
- How to fix this specific rule — Deque/axe (rule reference)
- WCAG 2 overview — W3C WAI
- ARIA basics — MDN