Accessibility
· 13 checks — Landmarks, headings, alt text, forms, and link quality rolled into one auditable list.DLandmark StructureActionNo landmarksFIX
No landmarks detected
Screen reader users have no way to navigate by region.
Screen reader users cannot quickly navigate to the primary content. Wrap your main content in <main>.
Without a <main> landmark, screen-reader users can't skip past the navigation to the page content — every page starts with re-reading the menu.
Learn more ▾ ▴
The <main> element marks the page's primary content area. Assistive tech offers a 'jump to main' shortcut — but only if <main> exists. Without it, every page navigation forces re-reading the header. Wrap your primary content in a single <main>.
Source: WAI-ARIA / WCAG 2.4.1
Add a skip link as the first focusable element so keyboard users can bypass repeated navigation.
Without a skip-nav link, keyboard users tab through every nav item before reaching content — every page, every visit.
Learn more ▾ ▴
WCAG 2.4.1 (Bypass Blocks) requires a mechanism to skip past repeated content. The standard implementation is a 'Skip to main content' link that's the first focusable element, visually hidden until focused. Three lines of HTML + four of CSS.
Source: WCAG 2.1 SC 2.4.1
FFavicon & BrandingActionNo icons detectedFIX
DWeb ManifestActionNot foundFIX
No web manifest found.
DDark Mode SupportActionNo dark mode signalsFIX
Detection limited to meta tags and inline styles.
DPrint StylesheetActionNo print stylesFIX
BHeading HierarchyNo headingsREVIEW
No headings found
Headings create the document outline for screen reader navigation.
Headings (H1-H6) create the document outline for screen reader navigation.
A page with zero headings is unnavigable by assistive tech and reads as one undifferentiated wall of text.
Learn more ▾ ▴
Screen reader users navigate by jumping between H1-H6 elements. A page with no headings has no skip targets — users have to read every word linearly. Adding a heading hierarchy (one H1, then H2 sections, optional H3 subsections) makes the page skimmable for both AT and human readers.
Source: WCAG 1.3.1 / W3C WAI
C404 Error PageActionCould not testREVIEW
404 page quality check not available.
CLighthouse Accessibility AuditsActionScore 73/100 — 9 failing, 24 passedREVIEW
Accessibility
These checks highlight opportunities to improve the accessibility of your web app. Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so manual testing is also encouraged.
ARIA
Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. Learn how to match ARIA attributes to their roles.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
div#toggle-ticker > a.standard-ticker-container > label.switch > input div#toggle-ticker > a.standard-ticker-container > label.switch > input |
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. Learn how to make command elements more accessible.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container div.oct-teaser__calls-to-action > a.oct-link > div.oct-button__content > div.oct-ripple-container |
form.oct-signup__form > button.oct-button > div.oct-button__content > div.oct-ripple-container form.oct-signup__form > button.oct-button > div.oct-button__content > div.oct-ripple-container |
These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader.
Navigation
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. Learn more about the `tabindex` attribute.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
Boots Logo div#header > div#estore_header_top_row > div#logo > a |
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. Learn more about heading order.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
shopping with us div.row > div.acol12 > div.footer-section > h3.mobile_show |
These are opportunities to improve keyboard navigation in your application.
Names and labels
Labels ensure that form controls are announced properly by assistive technologies, like screen readers. Learn more about form element labels.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
div#toggle-ticker > a.standard-ticker-container > label.switch > input div#toggle-ticker > a.standard-ticker-container > label.switch > input |
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. Learn how to make links accessible.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
div#header_link_container > ul#omniPresentLinksBar > li#mobileLink_search > a div#header_link_container > ul#omniPresentLinksBar > li#mobileLink_search > a |
div#estore_footer > div#estore_partnerSitesLogo > div > a div#estore_footer > div#estore_partnerSitesLogo > div > a |
These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader.
Best practices
Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. Learn more about the viewport meta tag.
Informational: a Permissions-Policy directive showing feature -> allowed origins.
Source: MDN Permissions-Policy
| Failing Elements |
|---|
head > meta head > meta |
Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. Learn more about touch targets.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
div.oct-teaser__contents-panel > div.oct-teaser__contents-panel--main-content > div.oct-teaser__calls-to-action > a.oct-link div.oct-teaser__contents-panel > div.oct-teaser__contents-panel--main-content > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
FIND OUT MORE div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SHOP NOW div.oct-teaser__contents > div.oct-teaser__contents-panel > div.oct-teaser__calls-to-action > a.oct-link |
SIGN UP div.oct-signup__container > div > form.oct-signup__form > button.oct-button |
These items highlight common accessibility best practices.
Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. Learn more about accessible names.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
No7 Prime Forever takeover div.oct-grid__cell > div.oct-htmlSlot > div#toggle-ticker > a.standard-ticker-container |
Prepare for summer with hayfever relief, sun lotion, insect repellent & more. A… div.oct-grid > div.oct-grid__row > div.oct-grid__cell > div.oct-ticker-banner |
Discover Remington Balder collection, designed for clean shaves, defined edges … div.oct-grid > div.oct-grid__row > div.oct-grid__cell > div.oct-ticker-banner |
Book your travel vaccinations online today with the Travel Vaccinations & Healt… div.oct-grid > div.oct-grid__row > div.oct-grid__cell > div.oct-ticker-banner |
Make more room for NEW beauty offers, available exclusively in the Boots app
D… div.oct-grid > div.oct-grid__row > div.oct-grid__cell > div.oct-ticker-banner |
A+Alt Text QualityNo imagesPASS
A+Form AccessibilityNo form controlsPASS
A+Link & Button QualityNo links or buttonsPASS
A+Color Contrast (Screenshot)1 text elements analyzed, 0 fail WCAG AAPASS
Analyzes text contrast against the actual rendered page, including background images, gradients, and overlays that CSS-based tools cannot detect.
Show all checked elements (1)
| Element | Ratio | Required | FG | BG | Result |
|---|---|---|---|---|---|
| iframe Request unsuccessful… | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
Methodology: The top 20 text elements by font size were checked. Background color was sampled from the desktop screenshot using a 5-point pattern. WCAG 2.1 AA requires 4.5:1 for normal text and 3:1 for large text.