Redundant ARIA role
lists/role-redundant
- WCAG success criterion
- 4.1.2 (level A)
- Outcome class
- Hint only. An automated check that by design reports review hints only: its findings are marked for manual review, never as confirmed violations.
- Area
- Accessibility, Technical Robustness
- Default severity
- low
- axe-core rule
redundant-role
Why we flag this
No immediate user harm, but an unnecessary risk of inconsistency in future changes.
role attribute duplicates the tag's native implicit role.
What the rule checks
Scope. Every rendered <ul>/<ol> with role="list".
Expectation. role="list" on <ul>/<ol> repeats the implicit role and is redundant (best practice) only while the list keeps visible markers. With list-style-type: none the role restores semantics WebKit/VoiceOver drop, so it is needed and passes. A role needed in one viewport is not redundant: a list whose markers are removed only at a mobile or only at a desktop width passes. Without a computed list-style-type the rule cannot decide and reports UNTESTED for the page.
Source. WAI-ARIA 1.2 §5.1 (do not repeat implicit roles), ARIA in HTML §4 (redundant roles); auditmysite#644 (WebKit drops list semantics for list-style: none)
Detection: shared; needs dom, computed_style.
Failing example
The check flags this for review. Corpus case redundant_role_list_style, element ol#numbered-list. The page may contain further findings for other rules.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Redundant role and unstyled lists</title>
<style>
.plain { list-style: none; padding: 0; }
button { min-width: 44px; min-height: 44px; }
</style>
</head>
<body>
<main>
<h1>Lists with explicit roles</h1>
<!-- #644: role="list" restores the list semantics WebKit/VoiceOver
drops for list-style: none lists. Not redundant. -->
<ul role="list" class="plain" id="plain-list">
<li>First</li>
<li>Second</li>
</ul>
<!-- Default list style keeps its semantics everywhere: the role only
restates the implicit one. -->
<ol role="list" id="numbered-list">
<li>One</li>
<li>Two</li>
</ol>
<button type="button" role="button" id="send-button">Send</button>
</main>
</body>
</html>Passing example
The check passes here and reports nothing. Corpus case redundant_role_list_style, element ul#plain-list. The page may contain further findings for other rules.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Redundant role and unstyled lists</title>
<style>
.plain { list-style: none; padding: 0; }
button { min-width: 44px; min-height: 44px; }
</style>
</head>
<body>
<main>
<h1>Lists with explicit roles</h1>
<!-- #644: role="list" restores the list semantics WebKit/VoiceOver
drops for list-style: none lists. Not redundant. -->
<ul role="list" class="plain" id="plain-list">
<li>First</li>
<li>Second</li>
</ul>
<!-- Default list style keeps its semantics everywhere: the role only
restates the implicit one. -->
<ol role="list" id="numbered-list">
<li>One</li>
<li>Two</li>
</ol>
<button type="button" role="button" id="send-button">Send</button>
</main>
</body>
</html>This page is generated from the rule catalogue and the rule contracts; see therule overview for how the outcome classes are derived.