Sample report
This is the whole deliverable.
Not a screenshot and not a mock-up. Covrane crawled 8 pages, ran axe-core 4.13.0 over each one, and grouped what it found. Every number below was written by the scanner. Regenerate it yourself with npm run sample:report.
The site scanned here is invented. Harbourline Dental Practice is a fixture we wrote, at https://harbourline.example/, containing defects we planted on purpose. We will not publish findings about somebody else’s real site, so the sample is about a site that belongs to nobody. Want one about a site you actually look after? Ask us and we will run it.
Summary
What the scan found.
- 8pages checked
- 58occurrences detected
- 15things to actually fix
- 5of those are template-level
That third number is the point of the product. 58 occurrences collapse into 15 groups, and 48 of those occurrences are accounted for by just 5 of them, because they live in a shared header and footer. A list of 58 rows tells you to read 58 rows. This tells you that five edits to one layout file clear most of the site.
A group is marked template-level when it appears on three or more pages. Nothing is filtered out and nothing is scored: every occurrence is still counted, and the total is always on screen.
Findings
Template-level first.
5 shared components, each one broken on every page it appears on. These lead because fixing one clears many pages at once.
button-name
button
Fix any of the following: 7 conditions
- Element does not have inner text that is visible to screen readers
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element has no title attribute
- Element does not have an implicit (wrapped) <label>
- Element does not have an explicit <label>
- Element's default semantics were not overridden with role="none" or role="presentation"
image-alt
img
Fix any of the following: 5 conditions
- Element does not have an alt attribute
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element has no title attribute
- Element's default semantics were not overridden with role="none" or role="presentation"
color-contrast
.small-print
Fix any of the following: 1 conditions
- Element has insufficient color contrast of 2.77 (foreground color: #9b9b9b, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1
link-name
.logo
Fix all of the following: 6 conditions
- Element is in tab order and does not have accessible text
- Fix any of the following:
- Element does not have text that is visible to screen readers
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element has no title attribute
link-name
.social > li:nth-child(1) > a
Fix all of the following: 6 conditions
- Element is in tab order and does not have accessible text
- Fix any of the following:
- Element does not have text that is visible to screen readers
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element has no title attribute
Then everything else.
10 groups confined to one or two pages, heaviest first. The four label groups are four different form fields: each one needs its own label, so each one is its own item rather than a single row saying “forms”.
label
#reg-name
Fix any of the following: 7 conditions
- Element does not have an implicit (wrapped) <label>
- Element does not have an explicit <label>
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element has no title attribute
- Element has no placeholder attribute
- Element's default semantics were not overridden with role="none" or role="presentation"
label
#reg-dob
Fix any of the following: 7 conditions
- Element does not have an implicit (wrapped) <label>
- Element does not have an explicit <label>
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element has no title attribute
- Element has no placeholder attribute
- Element's default semantics were not overridden with role="none" or role="presentation"
label
#msg-name
Fix any of the following: 7 conditions
- Element does not have an implicit (wrapped) <label>
- Element does not have an explicit <label>
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element has no title attribute
- Element has no placeholder attribute
- Element's default semantics were not overridden with role="none" or role="presentation"
label
#msg-email
Fix any of the following: 7 conditions
- Element does not have an implicit (wrapped) <label>
- Element does not have an explicit <label>
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element has no title attribute
- Element has no placeholder attribute
- Element's default semantics were not overridden with role="none" or role="presentation"
color-contrast
.price-note
Fix any of the following: 1 conditions
- Element has insufficient color contrast of 2.61 (foreground color: #a0a0a0, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1
frame-title
iframe
Fix any of the following: 4 conditions
- Element has no title attribute
- aria-label attribute does not exist or is empty
- aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty
- Element's default semantics were not overridden with role="none" or role="presentation"
html-has-lang
html
Fix any of the following: 1 conditions
- The <html> element does not have a lang attribute
list
ul:nth-child(4)
Fix all of the following: 1 conditions
- List element has direct children that are not allowed: div
tabindex
a[href$="prices.pdf"]
Fix any of the following: 1 conditions
- Element has a tabindex greater than 0
heading-order
h3:nth-child(2)
Fix any of the following: 1 conditions
- Heading order invalid
Inventory
Every page we actually reached.
A report that does not say what it looked at cannot be checked. The crawler stayed on one origin, read robots.txt (found), and stopped because it ran out of pages to visit rather than hitting a limit.
- https://harbourline.example/
- https://harbourline.example/about.html
- https://harbourline.example/blog.html
- https://harbourline.example/contact.html
- https://harbourline.example/new-patients.html
- https://harbourline.example/prices.html
- https://harbourline.example/team.html
- https://harbourline.example/treatments.html
Limitations
What this report does not tell you
Automated testing detects a portion of accessibility barriers. Independent research and this tool's own published catch rate both indicate that automated scanning identifies roughly a third to a half of real-world issues. This report does not establish legal compliance with the ADA, the European Accessibility Act, Section 508, or any other law. Issues that require human judgement — including keyboard traps, logical reading and focus order, the quality and accuracy of alt text, caption availability, and whether error messages are actually understandable — are not covered here and require manual testing with assistive technology by a qualified reviewer.
Every report ends on this page, including the ones an agency hands to a client. It is the reason the report is worth handing over at all: a document that claims to have found everything is worth nothing in a room where somebody is looking for a reason to dismiss it. The benchmark shows exactly which defects get past the scanner, with the fixture to prove it.
Next
Want one of these about a site you look after?
Name the site and we will run the scan and send the report within two working days, or write to contact@covrane.com. There is no account to create and nothing to install.
Scan run 17 September 2026 · axe-core 4.13.0 · tags wcag2a, wcag2aa, wcag21a, wcag21aa, wcag22aa, best-practice