WebAIM WAVE Accessibility Checker: False Positives Checked
What happened
On 25 October 2026 we ran WAVE, the free web accessibility evaluation tool from WebAIM at Utah State University, on the aiwebpageseo.com home page. Its result: 0 errors, 0 contrast errors, 18 alerts, and an AIM score of 9.7 out of 10.
On the same day our own Accessibility Audit scored the same page 100/100: 25 checks passed, 0 errors and 0 warnings, against WCAG 2.2.
WAVE does not call its alerts failures. It describes them as things to look at. We checked all 18 against the live page's code. One was a false positive, three were fair advice, and none was a WCAG failure. This post goes through them with the code.
The short version
- Errors: 0, and contrast errors: 0. Our audit also found 0 errors and 0 warnings, with 271 text elements measured and none below the AA contrast level.
- "A nearby image has the same alternative text" (1 alert): false positive. The two logos are a light and a dark version, and the stylesheet always hides one of them.
- "Missing fieldset" (15 alerts): fair advice, not a failure. The page has 15 pairs of Plain English and Technical switches, each clearly labelled, with no shared group label.
- "Redundant link" (1 alert): fair advice, not a failure. "Sign In" and "Join free" sit side by side and go to the same page.
- "Redundant title text" (1 alert): accurate. The Copy link button has the same words in its title and its aria-label. Harmless, but the title adds nothing.
False positive: "A nearby image has the same alternative text"
What WAVE said. One alert on the site logo, which appears twice in the page code with the same alternative text:
<img class="bk-logo-img bk-logo-l" src="/images/aiwebpageseo-logo.png" width="166" height="40" alt="AIWebPageSEO">
<img class="bk-logo-img bk-logo-d" src="/images/aiwebpageseo-logo-white.png" width="166" height="40" alt="AIWebPageSEO">
What the page does. One logo is for the light colour scheme and one, in white, is for the dark scheme. The stylesheet shows only one at a time:
.bk-logo-d{display:none}
[data-theme='dark'] .bk-logo-l{display:none}
[data-theme='dark'] .bk-logo-d{display:block}
An element with display:none is removed from what screen readers get, so a screen reader user hears "AIWebPageSEO" once, never twice. WAVE's alert exists to catch the same text being read out twice in a row. That does not happen here. WAVE cannot know which logo the visitor's theme will show, so it flags both, which is reasonable for an alert, but on this page it is a false positive.
What the rule says. WCAG 2.2 success criterion 1.1.1 Non-text Content (Level A) asks for a text alternative for each image that is presented to the user. Content hidden with display:none is not presented, and browsers leave it out of the accessibility tree that screen readers read, as the W3C's HTML Accessibility API Mappings describe.
Expected: the visible logo has meaningful alt text. It does.
Who complies. Our page complies. The repeated text is never read out twice.
Fair advice: "Missing fieldset" (15 alerts)
What WAVE said. 15 alerts, one for each group of radio buttons without a <fieldset>.
What the page has. Each audit card on the home page has a switch between a Plain English and a Technical explanation. That is 15 pairs, 30 radio buttons, each with its own label, and each pair sharing a name:
<input type="radio" class="vs-en" name="vs-established" id="vs-established-en" checked>
<input type="radio" class="vs-tech" name="vs-established" id="vs-established-tech">
There is no <fieldset> and no role="radiogroup" around each pair, so a screen reader announces "Plain English, radio button, 1 of 2" without saying what the choice is for. The labels make sense on their own, and the switch only changes how the text below is explained, so this is not a failure. A <fieldset> with a <legend>, or a role="radiogroup" with an aria-label such as "Explanation style", would remove all 15 alerts and make the purpose of the choice clearer. That is a fair point, and one our audit does not check.
What the rule says. W3C technique H71: Providing a description for groups of form controls using fieldset and legend elements is a sufficient technique for WCAG 1.3.1 Info and Relationships and 3.3.2 Labels or Instructions. It is one way to meet those criteria, not the only way, and it is most important where the individual labels do not make sense without the group's label.
Expected: grouped controls whose purpose is clear. Here each label is clear, and the group's purpose is shown visually but not given a name.
Who complies. No WCAG criterion is failed. A group label would be a worthwhile improvement.
Fair advice: "Redundant link" and "Redundant title text"
Redundant link. In the top bar, "Sign In" and "Join free" both go to /seo-auth/login.html, where visitors can sign in or create an account. WAVE flags adjacent links to the same address because keyboard and screen reader users meet two stops for one destination. Each link has clear text and both lead to the right place, so it is not a failure. It is a design choice worth knowing about.
Redundant title text. The share bar's Copy link button has title="Copy link" and aria-label="Copy link". The title adds nothing that the aria-label does not already say. WAVE is right, and it is harmless.
What our audit found on the same page
- Score 100/100: 25 checks passed, 0 errors, 0 warnings.
- Contrast: 271 text elements and 33 control edges measured, all passing WCAG AA.
- Images and graphics: all 9 images have alt text, and all 15 SVG graphics are named or hidden from screen readers.
- Forms and buttons: all form fields labelled and all buttons named. WAVE counted the same 30 form labels.
- Structure: a single H1 and a logical heading order, with main and nav landmarks. WAVE found the same 1 H1, 3 H2 and 19 H3, with header, navigation, main and footer.
- Keyboard and layout: focus visible on all 40 tab stops checked, the skip link tested with Tab and Enter, no sideways scrolling at 320px, text still fits at 200% zoom and with increased text spacing, and the page works in both orientations.
Side by side
- Errors: WAVE, 0, and 0 contrast errors. Our audit, 0 errors and 0 warnings.
- Alerts or advice: WAVE, 18 alerts: 1 false positive, 16 fair advice, 1 accurate but harmless. Our audit, none on the submitted page; optional AAA contrast notes reported separately.
- Where WAVE goes further: radio button grouping, and links side by side going to the same page.
- Where our audit goes further: keyboard focus, the skip link pressed with Tab and Enter, reflow at phone width, zoom, text spacing, orientation, and two further pages of the site.
- Cost: WAVE, free. Our audit, £2.49.
Why this result matters
This month we have published false positives from TraceValid, Skynet Technologies and accessScan by accessiBe, and found none from a11y-check.eu. WAVE is close behind: no errors, and alerts that are clearly labelled as things to check rather than failures. Of its 18 alerts, one was a false positive, and WAVE's own wording makes clear that alerts need a person's judgement.
That is the difference between a report that helps and one that alarms. A good tool separates errors from advice, shows the element, and leaves the decision to you when it cannot be sure.
How to read any automated accessibility report
- Separate errors from alerts. In WAVE, only errors and contrast errors are likely failures. Alerts are prompts to check.
- Check what is hidden. Elements hidden with
display:noneare not read by screen readers, so repeated text in them is not repeated for the user. - Group related controls. Radio buttons that belong together are clearer with a fieldset and legend, or a labelled radiogroup.
- Test with the keyboard too. WAVE and axe-core check code. Press Tab through your page to check focus, order and the skip link.
Our Accessibility Audit costs £2.49. It checks the page in Chrome after its scripts run, against all 55 WCAG 2.2 Level A and AA criteria, reports AAA and best-practice notes separately and unscored, shows the evidence for every result, and lists which criteria still need a person to check. See a real report in our example accessibility report.
The full reports
Every report used in this post is published in full and unedited: WAVE's summary and page view, our Accessibility Audit report, and our live checks of the page code. See the full reports.
Sources
- WebAIM: WAVE Web Accessibility Evaluation Tools
- W3C WCAG 2.2: 1.1.1 Non-text Content
- W3C: H71, providing a description for groups of form controls using fieldset and legend
- W3C: HTML Accessibility API Mappings
Frequently asked questions
Is WAVE an accurate accessibility checker?
On our home page it was. WAVE found 0 errors and 0 contrast errors, which matched our own audit, and it labels everything else as alerts for a person to check rather than as failures. Of its 18 alerts, one was a false positive, a duplicate logo alt text where the stylesheet always hides one logo. The other 17 were fair advice or accurate but harmless points, and none was a WCAG failure. That is a good result for an automated tool.
What is the difference between a WAVE error and a WAVE alert?
WAVE errors and contrast errors are issues that are very likely to be accessibility failures, such as a missing image alternative or text below the WCAG contrast minimum. Alerts are things that may cause problems depending on how they are used, so a person needs to look at them and decide. An alert is not a failure. A page can have alerts and still meet WCAG, as long as each alert is checked and found to be fine or improved.
Does a group of radio buttons need a fieldset?
Not always. WCAG technique H71, fieldset and legend, is one sufficient way to meet 1.3.1 and 3.3.2, but it is not required where each label makes sense on its own. It matters most when the labels only make sense with the group's question, such as Yes and No answers. A fieldset with a legend, or a role of radiogroup with an aria-label, is still good practice because screen reader users then hear what the choice is about.
Is the same alt text on a light and a dark logo a problem?
Not if only one of them is shown at a time. If the stylesheet hides one logo with display none, browsers leave it out of what screen readers get, so the alt text is read once. It would be a problem if both images were visible together, or hidden only with opacity or positioning, because then a screen reader could read the same words twice in a row. Check the CSS that switches the logos for each theme.
Should I fix every WAVE alert?
Check every alert, but fix only the ones that make a real difference for visitors. Group labels for related form controls, clearer link text and removing duplicate links in the same place are usually worth doing. Alerts caused by hidden content, such as theme-specific logos, can be left as they are once you have confirmed what the browser actually exposes. Keep a short note of each decision so the next audit is quicker to review.