Is my site accessible?
With ACHECKS, you can test your webpages for accessibility across two free accessibility checkers, namely AChecker and Lighthouse. AChecker is based on the markup of your website and tests against the WCAG 2.0 guidelines. Whereas Lighthouse is based on the rendering of your website on an actual browser and checks against the WCAG 2.1 AA guidelines.
You can also test your PDFs via the Tingtun checker either on this page by pasting the URL of your PDF, or through the upload PDF file tool.
If you are specifically looking for a color contrast checker to test your color palettes, you may want to check out the ACHECKS WCAG 2 Accessible Color Contrast Checker.
While automated tests do help with identifying many accessibility issues, they are not in and of themselves sufficient. For example, there are many things that cannot be automatically tested and do need manual checking. If you need help with this, contact our support team to engage our experts.
How do I use the ACHECKS accessibility checker?
You can either use the free checkers listed here on your individual webpages or PDF documents by pasting the URL and selecting the desired guideline.
If you prefer a more automated solution with regular compliance reporting generated across your entire domain, you can check out the ACHECKS pricing plans.
`[accesskey]` values are unique
Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique.
`[aria-*]` attributes match their roles
Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes.
Values assigned to `role=""` are valid ARIA roles.
ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies.
`button`, `link`, and `menuitem` elements have accessible names
When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers.
Elements with `role="dialog"` or `role="alertdialog"` have accessible names.
ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements.
`[aria-hidden="true"]` is not present on the document `<body>`
Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document `<body>`.
`[aria-hidden="true"]` elements do not contain focusable descendents
Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers.
ARIA input fields have accessible names
When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers.
ARIA `meter` elements have accessible names
When a meter element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers.
ARIA `progressbar` elements have accessible names
When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers.
`[role]`s have all required `[aria-*]` attributes
Some ARIA roles have required attributes that describe the state of the element to screen readers.
Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.
Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions.
`[role]`s are contained by their required parent element
Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions.
`[role]` values are valid
ARIA roles must have valid values in order to perform their intended accessibility functions.
Elements with the `role=text` attribute do not have focusable descendents.
Adding `role=text` around a text node split by markup enables VoiceOver to treat it as one phrase, but the element's focusable descendents will not be announced.
ARIA toggle fields have accessible names
When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers.
ARIA `tooltip` elements have accessible names
When a tooltip element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers.
ARIA `treeitem` elements have accessible names
When a `treeitem` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers.
`[aria-*]` attributes have valid values
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values.
`[aria-*]` attributes are valid and not misspelled
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names.
Buttons have an accessible name
When a button doesn't have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers.
The page contains a heading, skip link, or landmark region
Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently.
Background and foreground colors have a sufficient contrast ratio
Low-contrast text is difficult or impossible for many users to read.
`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.
When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output.
Definition list items are wrapped in `<dl>` elements
Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them.
Document has a `<title>` element
The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search.
`[id]` attributes on active, focusable elements are unique
All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies.
ARIA IDs are unique
The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies.
All heading elements contain content.
A heading with no content or inaccessible text prevent screen reader users from accessing information on the page's structure.
No form fields have multiple labels
Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels.
`<frame>` or `<iframe>` elements have a title
Screen reader users rely on frame titles to describe the contents of frames.
Heading elements appear in a sequentially-descending order
Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies.
`<html>` element has a `[lang]` attribute
If a page doesn't specify a `lang` attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly.
`<html>` element has a valid value for its `[lang]` attribute
Specifying a valid [BCP 47 language] (https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly.
`<html>` element has an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.
If the webpage does not specify a consistent language, then the screen reader might not announce the page's text correctly.
Identical links have the same purpose.
Links with the same destination should have the same description, to help users understand the link's purpose and decide whether to follow it.
Image elements have `[alt]` attributes
Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute.
Image elements do not have `[alt]` attributes that are redundant text.
Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice.
Input buttons have discernible text.
Adding discernable and accessible text to input buttons may help screen reader users understand the purpose of the input button.
`<input type="image">` elements have `[alt]` text
When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button.
Elements with visible text labels have matching accessible names.
Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users.
Form elements have associated labels
Labels ensure that form controls are announced properly by assistive technologies, like screen readers.
Document has a main landmark.
One main landmark helps screen reader users navigate a web page.
Links are distinguishable without relying on color.
Low-contrast text is difficult or impossible for many users to read. Link text that is discernible improves the experience for users with low vision.
Links have a discernible name
Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users.
Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).
Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output.
List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements
Screen readers require list items (`<li>`) to be contained within a parent `<ul>`, `<ol>` or `<menu>` to be announced properly.
The document does not use `<meta http-equiv="refresh">`
Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience.
`[user-scalable="no"]` is not used in the `<meta name="viewport">` element and the `[maximum-scale]` attribute is not less than 5.
Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page.
`<object>` elements have alternate text
Screen readers cannot translate non-text content. Adding alternate text to `<object>` elements helps screen readers convey meaning to users.
Select elements have associated label elements.
Form elements without effective labels can create frustrating experiences for screen reader users.
Skip links are focusable.
Including a skip link can help users skip to the main content to save time.
No element has a `[tabindex]` value greater than 0
A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies.
Tables have different content in the summary attribute and `<caption>`.
The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers.
Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.
Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users.
Touch targets have sufficient size and spacing.
Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets.
`<td>` elements in a large `<table>` have one or more table headers.
Screen readers have features to make navigating tables easier. Ensuring that `<td>` elements in a large table (3 or more cells in width and height) have an associated table header may improve the experience for screen reader users.
Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.
Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users
`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have data cells they describe.
Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users.
`[lang]` attributes have a valid value
Specifying a valid [BCP 47 language] (https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader.
`<video>` elements contain a `<track>` element with `[kind="captions"]`
When a video provides a caption it is easier for deaf and hearing impaired users to access its information.