auditmysitev2.0.2

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.

redundant_role_list_style.htmlHTML
<!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.

redundant_role_list_style.htmlHTML
<!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.