Accessibility checker messages, and how to fix each
The exact words the free checkers use, each with the guide that shows what goes wrong for people and how to fix it. Find yours with your browser’s Find (Ctrl+F, or Command+F on a Mac).
axe DevTools
The issue titles in the axe DevTools extension, from axe-core 4.13. Accessibility Insights and many other tools run the same rules.
accesskey attribute value should be unique
Active <area> elements must have alternative text
All page content should be contained by landmarks
All touch targets must be 24px large, or leave sufficient space
Alternative text of images should not be repeated as text
ARIA attributes must be used as specified for the element's role
ARIA attributes must conform to valid names
ARIA attributes must conform to valid values
ARIA commands must have an accessible name
ARIA dialog and alertdialog nodes should have an accessible name
ARIA hidden element must not be focusable or contain focusable elements
ARIA input fields must have an accessible name
ARIA meter nodes must have an accessible name
ARIA progressbar nodes must have an accessible name
ARIA role should be appropriate for the element
ARIA roles used must conform to valid values
ARIA tab nodes must have an accessible name
ARIA toggle fields must have an accessible name
ARIA tooltip nodes must have an accessible name
ARIA treeitem nodes should have an accessible name
aria-braille attributes must have a non-braille equivalent
aria-hidden="true" must not be present on the document body
autocomplete attribute must be used correctly
Banner landmark should not be contained in another landmark
Buttons must have discernible text
Certain ARIA roles must be contained by particular parents
Certain ARIA roles must contain particular children
Contentinfo landmark should not be contained in another landmark
CSS Media queries must not lock display orientation
Data or header cells must not be used to give caption to a data table.
Delayed refresh must not be used
Delayed refresh under 20 hours must not be used
Deprecated ARIA roles must not be used
<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements
Document should have one main landmark
Document should not have more than one banner landmark
Document should not have more than one contentinfo landmark
Document should not have more than one main landmark
Documents must have <title> element to aid in navigation
<dt> and <dd> elements must be contained by a <dl>
Elements marked as presentational should be consistently ignored
Elements must have their visible text as part of their accessible name
Elements must meet enhanced color contrast ratio thresholds
Elements must meet minimum color contrast ratio thresholds
Elements must only use permitted ARIA attributes
Elements must only use supported ARIA attributes
Elements should not have tabindex greater than zero
Form elements must have labels
Form elements should have a visible label
Form field must not have multiple label elements
Frames must have a unique title attribute
Frames must have an accessible name
Heading levels should only increase by one
Headings should not be empty
<html> element must have a lang attribute
<html> element must have a valid value for the lang attribute
HTML elements with lang and xml:lang must have the same base language
IDs of active elements must be unique
IDs used in ARIA and labels must be unique
Image buttons must have alternative text
Images must have alternative text
Inline text spacing must be adjustable with custom stylesheets
Input buttons must have discernible text
Interactive controls must not be nested
Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
lang attribute must have a valid value
<li> elements must be contained in a <ul> or <ol>
Links must be distinguishable without relying on color
Links must have discernible text
Links with the same name must have a similar purpose
Main landmark should not be contained in another landmark
<marquee> elements are deprecated and must not be used
Non-empty <td> elements in larger <table> must have an associated table header
<object> elements must have alternative text
Page must have means to bypass repeated blocks
Page should contain a level-one heading
Required ARIA attributes must be provided
[role="img"] and [role="image"] elements must have alternative text
"role=text" should have no focusable descendants
scope attribute should be used correctly
Scrollable region must have keyboard access
Select element must have an accessible name
Styled <p> elements must not be used as headings
Summary elements must have discernible text
<svg> elements with an img or image role must have alternative text
Table cell headers attributes must refer to other <th> elements in the same table
Table header text should not be empty
Table headers in a data table must refer to data cells
The skip-link target should exist and be focusable
<ul> and <ol> must only directly contain <li>, <script> or <template> elements
Users should be able to zoom and scale the text up to 500%
<video> elements must have captions
<video> or <audio> elements must not play automatically
Zooming and scaling must not be disabled
Lighthouse
The failing audits in the Accessibility section of a Lighthouse or PageSpeed Insights report, from Lighthouse 13.5. Older messages are marked with the version that dropped them.
[accesskey]values are not uniqueARIA attributes are not used as specified for the element's role
[aria-*]attributes are not valid or misspelled[aria-*]attributes do not have valid values[aria-*]attributes do not match their rolesARIA IDs are not unique
ARIA input fields do not have accessible names
ARIA
meterelements do not have accessible names.ARIA
progressbarelements do not have accessible names.ARIA toggle fields do not have accessible names
ARIA
tooltipelements do not have accessible names.ARIA
treeitemelements do not have accessible names.[aria-hidden="true"]elements contain focusable descendents[aria-hidden="true"]is present on the document<body>autocompleteattributes are not used correctlyBackground and foreground colors do not have a sufficient contrast ratio.
button,link, andmenuitemelements do not have accessible names.Buttons do not have an accessible name
Cells in a
<table>element that use the[headers]attribute refer to an elementidnot found within the same table.Definition list items are not wrapped in
<dl>elementsDeprecated ARIA roles were used
<dl>'s do not contain only properly-ordered<dt>and<dd>groups,<script>,<template>or<div>elements.Document does not have a main landmark.
Document doesn't have a
<title>elementElements use prohibited ARIA attributes
Elements with an ARIA
[role]that require children to contain a specific[role]are missing some or all of those required children.Elements with
role="dialog"orrole="alertdialog"do not have accessible names.Elements with
role="none"orrole="presentation"have conflictsElements with the
role=textattribute do have focusable descendents.Form elements do not have associated labels
Form fields have multiple labels
<frame>or<iframe>elements do not have a titleHeading elements are not in a sequentially-descending order
Heading elements do not contain content.
<html>element does not have a[lang]attribute<html>element does not have a valid value for its[lang]attribute.<html>element does not have an[xml:lang]attribute with the same base language as the[lang]attribute.[id]attributes on active, focusable elements are not unique (versions before 12)Identical links do not have the same purpose.
Image elements do not have
[alt]attributesImage elements have
[alt]attributes that are redundant text.Input buttons do not have discernible text.
<input type="image">elements do not have[alt]text[lang]attributes do not have a valid valueLinks do not have a discernible name
Links do not have descriptive text
Links rely on color to be distinguishable.
List items (
<li>) are not contained within<ul>,<ol>or<menu>parent elements.Lists do not contain only
<li>elements and script supporting elements (<script>and<template>).<object>elements do not have alternate textPrevents users from pasting into input fields
[role]values are not valid[role]s are not contained by their required parent element[role]s do not have all required[aria-*]attributesSelect elements do not have associated label elements.
Skip links are not focusable.
Some elements have a
[tabindex]value greater than 0SVG elements with an
imgrole do not have an accessible text alternativeTap targets are not sized appropriately (versions before 12)
<th>elements and elements with[role="columnheader"/"rowheader"]do not have data cells they describe.The document uses
<meta http-equiv="refresh">The page does not contain a heading, skip link, or landmark region
Touch targets do not have sufficient size or spacing.
[user-scalable="no"]is used in the<meta name="viewport">element or the[maximum-scale]attribute is less than 5.Uses ARIA roles on incompatible elements
<video>elements do not contain a<track>element with[kind="captions"].
WAVE
The errors, contrast errors and alerts in the WAVE extension. WAVE is in English only.
A nearby image has the same alternative text
Accesskey
Audio/Video
Blinking content
Broken ARIA menu
Broken ARIA reference
Broken same-page link
Broken skip link
Empty button
Empty form label
Empty heading
Empty link
Empty table header
Fieldset missing legend
HTML5 video or audio
Image button missing alternative text
Image map area missing alternative text
Image map missing alternative text
Image with title
JavaScript jump menu
Language missing or invalid
Layout table
Link to PDF document
Linked image missing alternative text
Long alternative text
Marquee
Missing alternative text
Missing fieldset
Missing first level heading
Missing form label
Missing or uninformative page title
Multiple form labels
No heading structure
No page regions
Orphaned form label
Page refreshes or redirects
Possible heading
Possible list
Possible table caption
Redundant alternative text
Redundant title text
Select missing label
Skipped heading level
Spacer image missing alternative text
Suspicious alternative text
Suspicious link text
Tabindex
Unlabeled form control with title
Very low contrast
YouTube video
Pa11y (HTML_CodeSniffer)
The WCAG 2 AA errors from HTML_CodeSniffer, which Pa11y runs by default. Where a message names an element or value, it is shown as “…”.
A title should be provided for the document, using a non-empty title element in the head section.
Anchor element found with a valid href attribute, but no link content has been supplied.
Area element in an image map missing an alt attribute.
Heading tag found with no content.
Iframe element requires a non-empty title attribute that identifies the frame.
Image submit button missing an alt attribute.
Img element inside a link must not use alt text that duplicates the text content of the link.
Img element is the only content of the link, but is missing alt text.
Img element missing an alt attribute.
Incorrect headers attribute on this td element.
Invalid autocomplete value: …. Element does not belong to Date control group.
Invalid autocomplete value: …. Element does not belong to Month control group.
Invalid autocomplete value: …. Element does not belong to Multiline control group.
Invalid autocomplete value: …. Element does not belong to Numeric control group.
Invalid autocomplete value: …. Element does not belong to Password control group.
Invalid autocomplete value: …. Element does not belong to Telephone control group.
Invalid autocomplete value: …. Element does not belong to Text control group.
Invalid autocomplete value: …. Element does not belong to Url control group.
Meta refresh tag used to redirect to another page, with a time limit that is not zero.
Meta refresh tag used to refresh the current page.
Object elements must contain a text alternative after all other alternatives are exhausted.
Table cell has an invalid scope attribute.
The html element should have a lang or xml:lang attribute which describes the language of the document.
The language specified in the lang attribute of the document element does not appear to be well-formed.
The language specified in the lang attribute of this element does not appear to be well-formed.
The language specified in the xml:lang attribute of the document element does not appear to be well-formed.
The language specified in the xml:lang attribute of this element does not appear to be well-formed.
The title element in the head section should be non-empty.
There is no head section in which to place a descriptive title element.
This button element does not have a name available to an accessibility API.
This buttoninput element does not have a name available to an accessibility API.
This checkboxinput element does not have a name available to an accessibility API.
This colorinput element does not have a name available to an accessibility API.
This dateinput element does not have a name available to an accessibility API.
This datetime-localinput element does not have a name available to an accessibility API.
This element has insufficient contrast at this conformance level.
This element has role of "button" but does not have a name available to an accessibility API.
This emailinput element does not have a name available to an accessibility API.
This fileinput element does not have a name available to an accessibility API.
This form field should be labelled in some way.
This imageinput element does not have a name available to an accessibility API.
This monthinput element does not have a name available to an accessibility API.
This numberinput element does not have a name available to an accessibility API.
This passwordinput element does not have a name available to an accessibility API.
This radioinput element does not have a name available to an accessibility API.
This rangeinput element does not have a name available to an accessibility API.
This searchinput element does not have a name available to an accessibility API.
This select element does not have a name available to an accessibility API.
This telinput element does not have a name available to an accessibility API.
This textarea element does not have a name available to an accessibility API.
This textinput element does not have a name available to an accessibility API.
This timeinput element does not have a name available to an accessibility API.
This urlinput element does not have a name available to an accessibility API.
This weekinput element does not have a name available to an accessibility API.
IBM Equal Access Accessibility Checker
The reason the IBM Equal Access Accessibility Checker gives for each violation. Where a message names an element or value, it is shown as “…”. English only.
Accessible name does not match or contain the visible label text
'accesskey' attribute value on the element is not unique
An <object> element does not have a text alternative
<area> element in an image map has no text alternative
Content is not within a landmark element
CSS !important should not be used in inline ‘letter-spacing’ style
CSS !important should not be used in inline ‘line-height’ style
CSS !important should not be used in inline ‘word-spacing’ style
Element "…" should not be focusable within the subtree of an element with an 'aria-hidden' attribute with value 'true'
Element with '…' role does not have the required ARIA attribute(s): '…'
Element with "…" role is not contained in or owned by an element with one of the following roles: "…"
Form control element <…> has no associated label
Form control has more than one label
Form control with "…" role has no associated label
Hyperlink has no link text, label or image with a text alternative
Image 'alt' attribute value consists only of blank space(s)
Image 'alt' value within a link is repeated in link text of the link after
Image map or child <area> has no text alternative
Inline frame does not have a 'title' attribute
Link text is repeated in an image 'alt' value within the same link
Link text of previous link is repeated in image 'alt' value of a link
Missing <head> element so there can be no <title> element present
Missing <title> element in <head> element
Multiple elements with "…" landmarks within the same parent region are not distinguished from one another because they have the same "…" label
Multiple elements with "banner" role do not have unique labels
Multiple elements with "banner" role found on the page
Multiple elements with "complementary" role do not have unique labels
Multiple elements with "contentinfo" role do not have unique labels
Multiple elements with "contentinfo" role found on the page
Multiple elements with "form" role do not have unique labels
Multiple elements with "main" role do not have unique labels
Multiple elements with "navigation" role do not have unique labels
Multiple elements with "region" role do not have unique labels
Multiple elements with "search" role do not have unique labels
Page detected as HTML, but does not have a 'lang' attribute
Page detected as XHTML 1.0, but has neither 'lang' nor 'xml:lang' attributes
Page detected as XHTML, but does not have an 'xml:lang' attribute
Page detected with 'lang' and 'xml:lang' attributes and primary languages do not match: "…", "…"
Page detected with 'lang' and 'xml:lang' attributes that do not match: "…", "…"
Scrolling content found that uses the obsolete <marquee> element
Specified 'lang' attribute does not conform to BCP 47
Specified 'lang' attribute does not include a valid primary language
Specified 'xml:lang' attribute does not conform to BCP 47
Specified 'xml:lang' attribute does not include a valid primary language
Text contrast of … with its background is less than the WCAG AA minimum requirements for text of size …px and weight of …
The ARIA attributes "…" are not valid for the element <…> with ARIA role "…"
The ARIA attributes "…" are not valid for the element <…> with implicit ARIA role "…"
The ARIA role '…' is not valid for the element <…>
The ARIA role '…' is not valid for the element <…> and may be ignored by the browser since the element is focusable
The attribute(s) '…' referenced by the element <…> is not a valid ARIA state or property
The 'autocomplete' attribute has an incorrect value
The 'autocomplete' attribute's token(s) are not appropriate for an input form field of any type
The 'autocomplete' attribute's token(s) are not appropriate for the input form field
The element <…> is restricted to either landscape or portrait orientation using CSS transform property
The 'headers' attribute value "…" does not refer to a cell in the same table
The 'headers' attribute value "…" does not refer to a cell indicated with <th> or a role of "columnheader" or "rowheader"
The 'headers' attribute value "…" does not reference a valid 'id' in this document
The 'headers' attribute value "…" refers to itself
The image does not have an 'alt' attribute or ARIA label, and the 'title' attribute value consists only of blank space(s)
The image has neither an accessible name nor is marked as decorative or redundant
The <input> element of type "image" has no text alternative
The <label> element does not have descriptive text that identifies the expected input
The page does not provide a way to quickly navigate to the main content (ARIA "main" landmark or a skip link)
The role '…' defined on the element is not valid per ARIA specification
The 'scope' attribute should only be used on a <th> element
The scrollable element <…> with non-interactive content is not tabbable
The SVG element has no accessible name
The <title> element is empty (no innerHTML)
The value "…" specified for attribute '…' on element <…> is not valid
Undersized target "…" does not have sufficient spacing of 12 CSS pixels from another target "…"
Value provided is invalid for the 'scope' attribute
When the checker finds nothing
A clean report means none of these rules failed, not that the page works. Whether alt text is right, whether focus order makes sense, whether an error message helps: a person with a keyboard and a screen reader finds those.