Covrane · accessibility scanning

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

    critical · WCAG · 8 occurrences on 8 pages

    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

    critical · WCAG · 8 occurrences on 8 pages

    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

    serious · WCAG · 8 occurrences on 8 pages

    .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

    serious · WCAG · 8 occurrences on 8 pages

    .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

    serious · WCAG · 16 occurrences on 8 pages

    .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

    critical · WCAG · 1 occurrence on 1 page

    #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

    critical · WCAG · 1 occurrence on 1 page

    #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

    critical · WCAG · 1 occurrence on 1 page

    #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

    critical · WCAG · 1 occurrence on 1 page

    #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

    serious · WCAG · 1 occurrence on 1 page

    .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

    serious · WCAG · 1 occurrence on 1 page

    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

    serious · WCAG · 1 occurrence on 1 page

    html

    Fix any of the following: 1 conditions
    • The <html> element does not have a lang attribute
  • list

    serious · WCAG · 1 occurrence on 1 page

    ul:nth-child(4)

    Fix all of the following: 1 conditions
    • List element has direct children that are not allowed: div
  • tabindex

    serious · best practice · 1 occurrence on 1 page

    a[href$="prices.pdf"]

    Fix any of the following: 1 conditions
    • Element has a tabindex greater than 0
  • heading-order

    moderate · best practice · 1 occurrence on 1 page

    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