Accessibility quick check, sample report
Shop RO-08: homepage against WCAG 2.1 AA
Electronics retailer, Romania, mid-size. Result: not conformant. Five rules fail on 79 elements, ten of them critical. Almost all of it comes from four places in the code.
1. Summary
| Failed rules (WCAG 2.1 A/AA) | 5 | Language declared | yes, ro |
|---|---|---|---|
| Failing elements | 79 | Level-one heading | none |
| Critical | 10 | Skip link | none (first link is “back to top”) |
| Serious | 69 | Images | 395, all with an alt attribute |
| Needs manual review | 43 | HTML elements on the page | 5,445 |
The failures are concentrated: one carousel component, one banner template, one search form and three colour values in the theme account for 78 of the 79 failing elements. Fixing those four places fixes the homepage, and because they are shared templates, most of the rest of the site.
Estimated remediation effort: 2 to 4 developer days including re-testing, assuming access to the theme's source. This estimate is for planning; a fixed quote follows once I have seen the code.
2. Priorities
- Name the carousel controls. Critical, 9 elements, one component. Finding 1.
- Name the search button. Critical, 1 element. Finding 2.
- Give the promotional links a name. Serious, 20 elements, one template. Finding 3.
- Correct three colour pairs in the theme. Serious, 48 elements. Finding 4.
- Underline the footer link. Serious, 1 element. Finding 5.
- Add a level-one heading and a skip link. Recommended. Finding 6.
3. Findings
Finding 1: carousel dots have no accessible name
Critical- Evidence
- Each slide indicator is a button containing an empty
span. A screen reader announces “button” nine times in a row. Therole="button"on abuttonis redundant. - Effect
- Screen-reader and voice-control users cannot tell which slide a control selects or which one is active.
- Fix
- Add a visually hidden label to each button and mark the active one. If the slider library renders these, the label can be added in its
dotsDataor anonInitializedcallback. - Effort
- About one hour.
<!-- as found -->
<button role="button" class="owl-dot"><span></span></button>
<!-- fixed -->
<button type="button" class="owl-dot" aria-current="true">
<span class="sr-only">Slide 1 of 9</span>
</button>
Finding 2: the search button has no name
Critical- Evidence
- The submit button of the site search is an
inputwith an emptyvalue; the magnifying glass is a background image. - Effect
- Announced as “button” with no purpose. Voice-control users cannot say “click search”.
- Fix
- Give the input a value and keep the icon as a background, or switch to a
buttonwith hidden text. - Effort
- Fifteen minutes.
<!-- as found -->
<input type="submit" value="" class="submit-search">
<!-- fixed -->
<input type="submit" value="Search" class="submit-search">
/* CSS keeps the icon and hides the text visually: */
.submit-search { font-size: 0; color: transparent; background: url(search.svg) center / 20px no-repeat; }
Finding 3: twenty promotional links have no text
Serious- Evidence
- Every banner is a link that contains only an image, and the image's
altis empty. The link therefore has no accessible name; screen readers read “link” or the address. - Effect
- The campaign content, currently the most prominent thing on the page, is invisible to screen-reader users. Twenty tab stops announce nothing.
- Fix
- Let the banner template write the campaign title into the image's
alt. The text should say where the link goes, not what the picture shows. Banners that are purely decorative should not be links. - Effort
- Two hours in the template, plus a title field for each banner in the CMS if it does not exist.
<!-- as found -->
<a href="/ajax/bannerUrl?bannerId=12594"><img src="/banners/12594.jpg" alt=""></a>
<!-- fixed -->
<a href="/ajax/bannerUrl?bannerId=12594">
<img src="/banners/12594.jpg" alt="Back to school: laptops from 1,499 lei" width="600" height="300">
</a>
Finding 4: 48 text elements below the 4.5:1 contrast minimum
Serious- Evidence
- Three colour pairs produce all 48 failures.
| Where | Colours as found | Measured | Suggested | Result |
|---|---|---|---|---|
| Menu link “Servicii”, 15 px | #FF0000 on #FFFFFF | 3.99:1 | #C40000 on white | 6.3:1 |
| Instalment promo strip, 20 px | #FFFFFF on #F76981 | 2.87:1 | white on #C8102E | 5.9:1 |
| “In stoc magazin” on product cards, 14.4 px | #349900 on #FFFFFF | 3.68:1 | #2E7D00 on white | 5.2:1 |
- Effect
- People with low vision, older users and anyone outdoors on a phone cannot read stock status, prices in promotions or the service menu.
- Fix
- Change the three values where they are defined in the theme. The suggested colours keep the hue and pass AA; the designer may prefer other values as long as they reach 4.5:1.
- Effort
- Half a day, including a visual check of every place the tokens are used.
Finding 5: footer link is distinguishable only by colour
Serious- Evidence
- The link is
#666666in a paragraph of#999999text, with no underline. The difference between link and text is 2.01:1; 3:1 is the minimum when colour is the only cue. - Fix
- Underline links inside running text. This also solves the finding for every other paragraph link on the site.
- Effort
- Five minutes.
.footer p a { text-decoration: underline; text-underline-offset: .15em; }
Finding 6: no level-one heading and no skip link
Recommended- Evidence
- The page has no
h1. The first focusable element is a “back to top” link labelled “SUS”, so keyboard users start their journey at the wrong end of the page and have to tab through the entire mega menu to reach the products. - Fix
- Add one
h1(the shop's name and tagline is fine on the homepage) and a skip link as the first element inbodythat points to the main content. - Effort
- Half an hour.
<a class="skip" href="#main">Sari la conținut</a>
…
<main id="main" tabindex="-1">
4. Needs manual review
The scanner could not determine the contrast of 43 text elements because they sit on images or gradients (promotional tiles and category headers). In the paid quick check these are measured by hand and either cleared or added to Finding 4.
5. What this sample does not include
This page shows the automated part of a quick check on a single page. The quick check you order adds, for the homepage, a product page and the checkout:
- a keyboard-only pass: visible focus, focus order, whether the carousel and the mega menu can be operated and escaped, whether autoplay can be paused;
- a screen-reader pass with NVDA through search, product selection and add-to-basket, and through the checkout forms with deliberately wrong input to hear the error messages;
- 200 % zoom and a 320 px wide viewport to check reflow;
- a check of the accessibility statement, if one exists.
6. Next steps
- Fix Findings 1 to 5 in the order above; the first two take an afternoon.
- I re-test each fix and confirm it in writing. Re-testing is included when I implement the fixes and offered at a fixed price when your team does.
- Publish an accessibility statement that names the standard, the known remaining issues and a contact for feedback. I provide the draft in Romanian, German or English.
Daniel Butnar, web developer and accessibility specialist, Brașov. daniel.butnar@gmail.com. Scan date 15 September 2026, axe-core 4.13, WCAG 2.1 A and AA rule set. Automated checks find only part of the barriers; this report makes no claim about criteria that require manual testing.