Skip to main content

The accessibility field guide

What scans catch.
What they miss.

Lighthouse and axe-core are a strong start. Understand what they can detect, where their coverage ends, and what needs a human perspective.

Explore the coverage

Lighthouse & axe-core WCAG 2.2 A & AA

A small example. A big distinction.
An informative chartalt="Chart"

Alternative text is present

A scan can check this.
Markup

Does it explain the chart?

A person needs to judge this.
Meaning

Having a text alternative and having a useful one are different checks. Read the rule

Know the limits

Find an issue. Understand the coverage.

Look up a barrier to see what automation can establish—and what still needs to be tested. Expand any issue for tool details and source links.

Automatically detectable

A rule can identify a specific failure.

Partial coverage

A clue or prerequisite, with limits.

Human testing

Meaning, behavior, and real use.

27 issues across automated and human testing

Expand to explore

Images without a text alternative

An image has no accepted text alternative or decorative treatment. This is different from having an alternative that describes the image well.

Automatic

Lighthouse

Checks image alternatives in its accessibility audit.

axe-core

The image-alt rule runs by default.

What to check yourself

Confirm that informative images have useful descriptions and that images marked decorative really add no necessary information.

Related rules
image-alt
WCAG
1.1.1

Buttons, links, and fields without names

An icon button, empty link, or form field has no name that assistive technology can use.

Automatic

Lighthouse

Checks accessible names for supported buttons, links, and fields.

axe-core

Naming rules for these elements run by default.

What to check yourself

Check whether each name describes the action or input. Fields also need adequate visible labels and instructions.

Related rules
button-namelink-namelabelselect-name
WCAG
4.1.2 · 2.4.4

Invalid roles, states, and relationships

Examples include an unknown role, aria-expanded set to an invalid value, or a widget missing a required child role.

Automatic

Lighthouse

Includes checks for several ARIA markup failures.

axe-core

Checks supported roles, attributes, values, and required relationships.

What to check yourself

Operate the component. Valid markup does not prove that its announced state matches its behavior or that its keyboard controls work.

Related rules
aria-rolesaria-valid-attr-valuearia-prohibited-attraria-required-children
WCAG
4.1.2 · 1.3.1

Missing page titles or language information

The document lacks a nonempty title, has no language declaration, or uses an invalid language code.

Automatic

Lighthouse

Includes document-title and page-language checks.

axe-core

These checks run by default.

What to check yourself

Confirm that the title identifies the page and that the declared language matches the content. Review passages in other languages too.

Related rules
document-titlehtml-has-langhtml-lang-validvalid-lang
WCAG
2.4.2 · 3.1.1 · 3.1.2

Broken list structure and table references

A list has unsupported children, a list item lacks its required parent, or a table cell points to unsuitable header elements.

Automatic

Lighthouse

Includes list structure and table header-reference checks.

axe-core

These structural checks run by default.

What to check yourself

Check that visual lists are marked as lists and that table headers actually explain the right data. Correct syntax alone cannot establish meaning.

Related rules
listlistitemtd-headers-attr
WCAG
1.3.1

Settings that restrict zoom

Viewport settings disable or restrict the ability to enlarge the page.

Automatic

Lighthouse

Explicitly enables the meta-viewport check.

axe-core

Checks restrictive viewport settings by default.

What to check yourself

Enlarge the actual page and test its layout. Removing a zoom restriction does not prove that text and controls remain usable.

Related rules
meta-viewport
WCAG
1.4.4

Invalid autocomplete values

A field has an autocomplete value that is malformed or not recognized.

Automatic

Lighthouse

Explicitly enables autocomplete-valid.

axe-core

Checks existing autocomplete values by default.

What to check yourself

Review fields collecting personal information for the right input-purpose information. This check does not find every missing autocomplete attribute.

Related rules
autocomplete-valid
WCAG
1.3.5

Interactive controls nested inside controls

A control whose child semantics are hidden contains another focusable control, such as a link inside a button.

Automatic

Lighthouse

Lighthouse 13.5.0 explicitly disables nested-interactive.

axe-core

Axe-core 4.14.0 enables nested-interactive by default.

What to check yourself

Check each control's keyboard operation and screen reader announcement after fixing the nesting.

Related rules
nested-interactive
WCAG
4.1.2

Scrollable regions without keyboard access

A scrollable area has no suitable way to receive keyboard focus. Some cases need review because browser behavior differs.

Automatic

Lighthouse

Lighthouse 13.5.0 explicitly disables scrollable-region-focusable.

axe-core

Enabled by default in axe-core 4.14.0; some cases return review items.

What to check yourself

Use the keyboard to reach and scroll all content in the supported browsers, including Safari where relevant.

Related rules
scrollable-region-focusable
WCAG
2.1.1

Missing names beyond buttons and links

Linked image-map areas, eligible elements with an image role, disclosure summaries, and ARIA tabs need accessible names too.

Automatic

Lighthouse

Lighthouse 13.5.0 explicitly disables these four dedicated naming rules.

axe-core

Axe-core 4.14.0 enables all four rules by default.

What to check yourself

Check whether names explain their purpose. For tabs and disclosures, also test keyboard behavior and changes in state.

Related rules
area-altrole-img-altsummary-namearia-tab-name
WCAG
1.1.1 · 2.4.4 · 4.1.2

Names and descriptions that convey meaning

Text can exist without helping: a chart labeled “image,” a link named “click here,” or an informative image wrongly marked decorative.

Partial coverage

Lighthouse

Can find missing names and alternatives, but cannot establish their meaning in context.

axe-core

Naming rules check accepted alternatives, not complete content quality.

What to check yourself

Compare each name or description with the content and its purpose. Check that labels stay visible when a person enters information.

Related rules
image-altlink-namelabel
WCAG
1.1.1 · 2.4.4 · 3.3.2

Contrast and information conveyed by color

Supported text contrast failures can be measured. Complex backgrounds, non-text visuals, and color-only meaning need separate review.

Partial coverage

Lighthouse

Checks supported text contrast and some link-color patterns.

axe-core

Checks supported text/background combinations; difficult cases can need review. Color contrast is unsupported in JSDOM.

What to check yourself

Inspect images of text, icons, borders, charts, and focus indicators. Check hover and error states, and ensure color is not the only cue.

Related rules
color-contrastlink-in-text-block
WCAG
1.4.3 · 1.4.11 · 1.4.1

Captions, transcripts, and audio description

A caption track can exist while its words, timing, or sound descriptions are wrong. Other media alternatives also depend on the content.

Partial coverage

Lighthouse

Includes video-caption, but an unresolved review item does not necessarily lower the score.

axe-core

In axe-core 4.14.0, missing caption-track markup produces a review item because captions may use another method.

What to check yourself

Play the media. Check accurate, synchronized captions and the applicable transcript or audio-description requirement. A transcript does not automatically replace captions.

Related rules
video-caption
WCAG
1.2.1 · 1.2.2 · 1.2.3 · 1.2.5

Targets that are too small or crowded

Targets can fail the 24 by 24 CSS pixel size requirement without sufficient spacing or an applicable exception.

Partial coverage

Lighthouse

Lighthouse 13.5.0 explicitly enables target-size.

axe-core

Default-off in axe-core 4.14.0. Include wcag22aa or explicitly enable target-size.

What to check yourself

Review the criterion's exceptions and every state in which a target appears. Check the actual clickable area, including crowded controls.

Related rules
target-size
WCAG
2.5.8

Visible labels missing from accessible names

A control visibly says “Search” but has an accessible name that omits “Search,” making it harder to identify with speech input.

Partial coverage

Lighthouse

Lighthouse 13.5.0 runs the rule but hides it and gives it zero weight in the default report.

axe-core

Label-content-name-mismatch is enabled by default starting in axe-core 4.14.0.

What to check yourself

Compare the visible label and accessible name. Then check whether the wording clearly describes the action; matching words alone do not establish that.

Related rules
label-content-name-mismatch
WCAG
2.5.3

Headings, reading order, and table meaning

A page can have valid markup while its headings misdescribe sections, its reading order is confusing, or its table relationships are misleading.

Partial coverage

Lighthouse

Checks selected structural patterns. Heading-level jumps are reported as a best practice.

axe-core

Checks selected heading and table patterns; those checks do not establish a meaningful structure.

What to check yourself

Read sequentially and navigate headings and table cells with a screen reader. Compare their meaning with the visual layout. A heading jump alone is not always a WCAG failure.

Related rules
heading-ordertd-headers-attr
WCAG
1.3.1 · 1.3.2 · 2.4.6

Tasks that cannot be completed with a keyboard

A named button responds only to pointer clicks, a menu cannot be operated, or focus becomes trapped with no way out.

Human testing

Lighthouse

A normal scan does not operate every control or complete a keyboard journey.

axe-core

Related markup checks cannot establish full keyboard operation or the absence of traps.

What to check yourself

Complete key tasks using Tab, Shift+Tab, Enter, Space, arrow keys, and Escape where appropriate. Confirm that every component can be entered and exited.

WCAG
2.1.1 · 2.1.2

Focus that jumps, escapes, or disappears

Focus moves in a confusing order, escapes a modal, or is lost after a dialog closes or the page changes.

Human testing

Lighthouse

Offers manual focus checks; a scan does not verify the complete interaction.

axe-core

Can flag some focusability problems, but does not prove logical focus movement through a task.

What to check yourself

Trace focus before, during, and after interactions. Check dialog entry, containment where appropriate, exit, and return to a logical position.

WCAG
2.4.3

Focus indicators people cannot see

The focused control has no visible indicator or is entirely hidden behind a sticky header, footer, or overlay.

Human testing

Lighthouse

A normal accessibility scan does not establish visible, unobscured focus across the page.

axe-core

A passing text-contrast or focusability check does not verify the focus indicator.

What to check yourself

Inspect every focused control, including at enlarged views. WCAG AA prohibits complete obscuring by author-created content; the no-part-obscured requirement is AAA.

WCAG
2.4.7 · 2.4.11

Updates a screen reader does not announce

Search-result counts, cart updates, or status messages about errors or success appear visually without an appropriate announcement.

Human testing

Lighthouse

A scan does not establish that updates are announced at the right time.

axe-core

The presence of aria-live or a valid role does not prove that a message is announced usefully.

What to check yourself

Trigger status messages with a screen reader and check that they are announced without moving focus. Check the timing and wording, and whether repeated announcements interrupt the task.

WCAG
4.1.3

Form errors people cannot understand or fix

An error is vague, disconnected from its field, or offers no useful correction. A person may lose information while trying again.

Human testing

Lighthouse

Naming checks do not establish useful error handling or recovery.

axe-core

Can check some markup in an error state after it is exposed; it does not judge the whole recovery process.

What to check yourself

Submit empty, invalid, and valid data. Check error identification, correction suggestions, preserved information, and applicable confirmation or reversal steps.

WCAG
3.3.1 · 3.3.3 · 3.3.4

Content that breaks when enlarged

Larger text overlaps controls, essential content is clipped, or a task requires unnecessary scrolling in both directions.

Human testing

Lighthouse

A viewport check does not test whether the enlarged layout remains usable.

axe-core

A scan at one size cannot establish usable resizing and reflow.

What to check yourself

Test text at 200% and horizontal-writing layouts at 320 CSS pixels wide, considering exceptions. A common reflow check uses 400% zoom from a 1280-pixel viewport.

WCAG
1.4.4 · 1.4.10

Content lost when text spacing changes

A person's preferred spacing causes clipped text, overlapping controls, or lost functionality.

Human testing

Lighthouse

A normal scan does not apply and inspect the complete text-spacing test.

axe-core

A limited inline-spacing rule exists, but it does not establish that the adjusted layout remains usable.

What to check yourself

Apply line height 1.5, paragraph spacing 2 times font size, letter spacing 0.12 em, and word spacing 0.16 em together. Check for lost content and functionality.

Related rules
avoid-inline-spacing
WCAG
1.4.12

Tooltips and popovers that are hard to use

Extra content disappears too soon, cannot be dismissed, or vanishes when the pointer moves onto it.

Human testing

Lighthouse

A snapshot can inspect exposed content but does not establish the full hover or focus behavior.

axe-core

Scanning an open tooltip does not verify its dismissibility, hoverability, and persistence.

What to check yourself

Trigger content with both pointer and keyboard. Try moving onto it, dismissing it, and keeping it open long enough to use, subject to the criterion's exceptions.

WCAG
1.4.13

Dragging or gestures with no usable alternative

A task requires dragging, multiple touch points, or a precise pointer path without an applicable exception or suitable alternative.

Human testing

Lighthouse

A normal scan does not complete these gestures or compare alternative ways to perform the task.

axe-core

Valid roles and names do not establish a working alternative to the gesture.

What to check yourself

Complete the operation using a simple pointer alternative, and with a keyboard where required. A keyboard alternative alone does not satisfy the dragging requirement.

WCAG
2.5.1 · 2.5.7 · 2.1.1

Time limits and moving content people cannot control

A session expires before a person can finish, or moving and updating content cannot be paused when required.

Human testing

Lighthouse

Some markup patterns can be flagged, but a scan does not evaluate every timeout, animation, or flashing sequence.

axe-core

Limited timing and media rules do not replace testing the actual content and its controls.

What to check yourself

Exercise timeouts and pause, stop, hide, or extend controls. Review applicable exceptions. Flashing content may need a separate analysis of the sequence.

WCAG
2.2.1 · 2.2.2 · 2.3.1

Login barriers and unnecessary repeated entry

Authentication depends on an unsupported memory task, or a process asks for the same information again without an applicable exception.

Human testing

Lighthouse

A normal accessibility scan does not evaluate the whole authentication or multi-step process.

axe-core

Field naming and autocomplete checks cannot establish an accessible sign-in or repeated-entry experience.

What to check yourself

Test password managers, copy and paste, verification alternatives, and reuse of previously supplied information. Check the exceptions in each criterion.

WCAG
3.3.8 · 3.3.7

“Detectable” doesn’t mean “fully tested.” Results depend on the enabled rules, tool version, browser, and page state. This is a guide to common issues, not a complete WCAG checklist.

Behind the results

Same engine.
Different coverage.

Lighthouse uses axe-core with its own selection of rules. Running both can reveal additional issues, but their overlapping checks are not independent proof of accessibility.

See Lighthouse’s rule selection

Lighthouse

A selected set of audits, presented with a weighted accessibility score. Manual checks sit outside that score.

Useful for a quick starting point

axe-core

A configurable testing engine. Findings depend on the rules and standards you select, and the UI states you expose.

Useful for repeatable checks in your workflows
Compare specific rule differencesLighthouse 13.5 · axe-core 4.14

Versions matter. These examples compare Lighthouse 13.5.0 with axe-core 4.14.0. Check the versions in your own reports when interpreting differences.

Selected rule configuration differences between Lighthouse 13.5.0 and axe-core 4.14.0
CheckLighthouseaxe-core
Nested interactive controlsnested-interactiveDisabledOn by default
Keyboard access to scrollable regionsscrollable-region-focusableDisabledOn by default
Image-map area namesarea-altDisabledOn by default
Image-role alternativesrole-img-altDisabledOn by default
Disclosure and tab namessummary-name · aria-tab-nameDisabledOn by default
Target size and spacingtarget-sizeEnabledSelect WCAG 2.2 AA or enable explicitly
Visible label in accessible namelabel-content-name-mismatchEnabled, hidden and unscoredOn by default

A perfect score is not a complete accessibility test.

Zero violations means no failures were reported by the checks that ran. It doesn’t establish that every WCAG criterion passes or every user can complete a task.

How scoring works

Put it into practice

A scan is one part of the process.

Combine automated checks with deliberate review of the experience people actually use.

  1. 1

    Scan the right states

    Test key pages, open menus, dialogs, form errors, and later steps in a task. Use Lighthouse snapshots or rerun axe after each interaction.

    Testing beyond page load
  2. 2

    Review the findings

    Fix confirmed violations. Investigate incomplete results. Keep best-practice advice distinct from confirmed WCAG failures.

    Understanding axe results
  3. 3

    Test with a human perspective

    Complete tasks with a keyboard and screen reader. Review content, media, zoom, and errors. Include people with disabilities in evaluation.

    Involving users in evaluation

Read the result, not just the score

Violations
A specific rule failed.
Incomplete
Investigate; it is not a pass.
Passes
The tested rule checks passed.
Inapplicable
No matching content was found.

Go to the source

Built on official guidance.

Rule-level references are included with every issue above.

Perspective Tester

Go beyond the report.

Bring automated findings and expert human testing together.

Talk about your accessibility needs