WCAG 2.2 & EAA Accessibility Checker · SiteVerdict
Pricing
$35.00 / 1,000 page audited (desktop + mobile)s
WCAG 2.2 & EAA Accessibility Checker · SiteVerdict
Audit websites for WCAG 2.2 AA and European Accessibility Act (EN 301 549) issues on desktop and mobile. axe-core plus keyboard focus, focus traps, target size, 320px reflow and reduced-motion checks. Scores, top 10 fixes and a shareable HTML report.
Pricing
$35.00 / 1,000 page audited (desktop + mobile)s
Rating
0.0
(0)
Developer
Aman Thakran
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
SiteVerdict — Website Accessibility Auditor (WCAG 2.2 & EAA)
Quick start: replace the prefilled URL with your own page and press Start. One page audited on desktop and mobile costs $0.035.
Automated checks find many accessibility issues, but not all. This report is technical information, not a compliance certificate or legal advice. We recommend a manual expert audit for conformance claims.
Works well with: Consent Mode v2 Auditor · Cookie & Privacy Policy Checker · Core Web Vitals Scanner.
Check any website for WCAG 2.2 AA accessibility issues on desktop and mobile, mapped to the European Accessibility Act (EN 301 549). Get a 0–100 score, the top 10 fixes in plain English, and a shareable, printable HTML report. Around $0.035 per page, with both devices included.
SiteVerdict runs the industry-standard axe-core engine and adds checks that axe-core cannot do on its own:
- a real keyboard Tab-through that checks visible focus, focus hidden behind sticky bars, keyboard traps and skip links
- WCAG 2.2 target size
- reflow at 320 px, which is the same as 400% zoom
- a reduced-motion test
- vague link text, placeholder-only labels and suspicious alt text
Why accessibility, why now
- The European Accessibility Act (EAA) has applied since 28 June 2025 to e-commerce, banking, transport, e-books and many other services sold to EU consumers, including those sold from the UK and US. The harmonised standard is EN 301 549, whose web requirements are WCAG 2.1 Level A and AA. WCAG 2.2 is expected in the next revision.
- In the UK, the Equality Act 2010 and the Public Sector Bodies Accessibility Regulations require reasonable adjustments and WCAG AA for public bodies. In the US, ADA website lawsuits run into the thousands each year.
- About 1 in 4 adults has a disability. Accessible sites also convert better, rank better and work better on mobile.
What it does
| 🧪 axe-core 4.14 | WCAG 2.0 / 2.1 / 2.2 Level A + AA (optional AAA) plus best-practice rules |
| ⌨️ Keyboard test | Presses Tab up to 25 times (configurable) like a real keyboard user. It flags elements with no visible focus indicator (2.4.7), focus that lands off-screen, focus hidden behind sticky headers or cookie banners (2.4.11, new in WCAG 2.2), keyboard traps (2.1.2), focus that changes the page (3.2.1), and a missing or broken skip link (2.4.1) |
| 👆 Target size | WCAG 2.2 2.5.8: targets smaller than 24×24 px, including the official spacing exception and inline-link exception |
| 🔍 Reflow / zoom | Renders at 320 CSS px (400% zoom) and finds what causes horizontal scrolling or cut-off text (1.4.10) |
| 🎞️ Motion | Finds long or infinite animations (2.2.2) and tests whether they stop when the user turns on "reduce motion" (2.3.3) |
| 🔗 Content heuristics | "Click here"/"read more" links (2.4.4), placeholder-only form labels (3.3.2), file-name or placeholder alt text (1.1.1), generic page titles (2.4.2), pages with no headings (1.3.1) |
| 🎨 Colour contrast summary | Number of failing elements, worst ratio, and the most common failing colour pairs |
| 🏛️ Structure summary | lang, title, h1 count, heading outline, landmarks, images without alt, unlabelled fields |
| 📱 Desktop + mobile | 1366 px desktop and a 390 px mobile touch viewport with a mobile user agent. Both are included in the per-page price. |
| 🇪🇺 EAA mapping | Every issue is mapped to its WCAG success criteria and level, plus its EN 301 549 clause (e.g. 9.1.4.3) and EAA relevance: required, upcoming (WCAG 2.2), AAA optional or best practice |
| 🛠️ Plain-English fixes | A specific fix for every rule, the affected element's CSS selector and an HTML snippet |
| 📊 Scores | A 0–100 score and A–F grade per page and per device, severity counts, top 10 fixes, and a site summary |
| 📄 HTML report | A shareable, printable, accessible report saved to the key-value store (REPORT), plus a JSON SUMMARY |
| 🕷️ Optional crawl | Audits N internal pages per site. It stays on the same domain, respects robots.txt, skips login/cart/checkout pages, and supports include/exclude patterns. |
How to use
- Enter one or more website URLs (for example your home page, a product page and the contact page).
- Optionally switch on Crawl internal pages and set Max pages per website.
- Click Start. A typical page takes 5–20 seconds for both devices.
- Open the Output tab:
- HTML report: send it to your developer or client, or print it to PDF.
- Overview / Top fixes / All issues / Keyboard, reflow, motion & contrast: table views you can export to CSV, Excel or JSON.
- Site summary: JSON for dashboards.
Input example
{"startUrls": [{ "url": "https://www.example-shop.co.uk/" }],"crawl": true,"maxPagesPerSite": 25,"devices": ["desktop", "mobile"],"wcagLevel": "AA"}
All options: crawl depth, include/exclude regex, robots.txt, WCAG level (A/AA/AAA), best-practice rules, needs-review items, number of Tab presses, reflow and motion checks, examples per issue, concurrency, timeouts, extra wait for slow pages, and Apify Proxy.
Input examples
One page, desktop and mobile:
{ "startUrls": [{ "url": "https://www.example.com/" }] }
Crawl up to 20 pages of one site:
{ "startUrls": [{ "url": "https://www.example.com/" }], "crawl": true, "maxPagesPerSite": 20 }
Desktop only:
{ "startUrls": [{ "url": "https://www.example.com/" }], "devices": ["desktop"] }
Output
One dataset item per page. Fields (abridged):
| Field | Meaning |
|---|---|
url, finalUrl, pageTitle, status | audited, failed, blocked or skipped (only audited pages are charged). URLs in results, the report and the log are shown without query strings, fragments or credentials (?[redacted] marks a removed query); urlHash (first 16 hex of SHA-256 over the full URL) lets you join rows to your own list. |
score, grade, scoreByDevice | 0–100 score, A–F, and per-device scores |
severity | Failing rules by impact: critical / serious / moderate / minor |
violations, occurrences, needsReview | Failing rules, affected elements, items to check manually |
eaaRequiredIssues, en301549ClausesFailed | Failing rules in EAA / EN 301 549 scope, and which clauses |
topFixes[] | The 10 highest-impact fixes: rule, WCAG, EAA, element count, fix, example selector |
issues[] | Full list: ruleId, source (axe/custom), type (violation/needs-review), impact, wcag[] (SC, name, level, Understanding link), eaa, fix, device, occurrences, nodes[] (selector, HTML snippet, detail) |
keyboard | Tab stops tested, invisible/obscured focus count, possible trap, skip link, first 30 steps of the focus order |
reflow, motion, contrast, structure | Summaries of those checks |
Key-value store: REPORT (HTML), SUMMARY (JSON site summaries). When a run covers more than one site, there is also one REPORT-<site> per site.
Sample results (real run, 11 Oct 2026)
Local run: 4 start URLs, crawl on (max 5 pages per site, depth 1), desktop + mobile, WCAG 2.2 AA, concurrency 3. 15 pages audited in 61 s; peak memory about 1.8 GB.
| Site | Pages | Avg score | Lowest | Notes |
|---|---|---|---|---|
| gov.uk | 5 | 92 | 82 | Very clean. Skip link present, no invisible focus, no reflow problems. |
| projects.accesscomputing.uw.edu (UW "Accessible University" demo) | 5 | 75 | 19 | The deliberately inaccessible "before" page scores 19. Its fixed "after" page scores 90. |
| bbc.co.uk | 4 | 83 | 52 | The home page has no automated failures (6 needs-review items). Content pages show target-size and label-in-name issues. |
| example.com | 1 | 78 | 78 | No main landmark, no headings, vague "Learn more" link |
The deliberately inaccessible demo page (/au/before.html) received these top fixes (abridged):
{"url": "https://projects.accesscomputing.uw.edu/au/before.html","score": 19, "grade": "F","scoreByDevice": { "desktop": 21, "mobile": 22 },"severity": { "critical": 2, "serious": 6, "moderate": 4, "minor": 0 },"en301549ClausesFailed": ["9.1.1.1", "9.1.3.1", "9.1.4.1", "9.1.4.3", "9.1.4.10", "9.2.4.3", "9.2.4.6", "9.2.4.7", "9.3.1.1", "9.4.1.2"],"topFixes": [{ "rank": 1, "title": "Form elements must have labels", "impact": "critical", "wcag": "4.1.2 Name, Role, Value (A)", "eaa": "required", "occurrences": 10,"fix": "Associate a visible <label for=\"id\"> with every form field (or wrap the field in <label>). Placeholders are not a substitute for labels.","example": "input[name=\"name\"]" },{ "rank": 2, "title": "Images must have alternative text", "impact": "critical", "wcag": "1.1.1 Non-text Content (A)", "occurrences": 2 },{ "rank": 3, "title": "All touch targets must be 24px large, or leave sufficient space", "wcag": "2.5.8 Target Size (Minimum) (AA)", "eaa": "upcoming" },{ "rank": 4, "title": "Elements must meet minimum color contrast ratio thresholds", "wcag": "1.4.3 Contrast (Minimum) (AA)" },{ "rank": 5, "title": "Focused element is off-screen or invisible", "wcag": "2.4.7 Focus Visible (AA); 2.4.3 Focus Order (A)" },{ "rank": 9, "title": "Horizontal scrolling at 320 px width (400% zoom)", "wcag": "1.4.10 Reflow (AA)","fix": "Use responsive layouts: avoid fixed widths in px, use max-width:100% on images/media, allow long words/URLs to wrap ..." }],"keyboard": { "tabStopsTested": 25, "invisibleFocusCount": 0, "possibleTrap": false, "skipLink": "missing" },"reflow": { "viewportWidth": 320, "scrollWidth": 729, "horizontalScroll": true },"contrast": { "failingElements": 4, "worstRatio": 2.52, "pairs": [{ "fg": "#8a94a8", "bg": "#e9e9ed", "ratio": 2.52, "required": 4.5, "count": 4 }] }}
Pricing
$0.035 per successfully audited page, with desktop and mobile both included ($35 per 1,000 pages). 20 pages cost $0.70. Failed, blocked, skipped and off-site pages are not charged. See Performance, memory and cost below for details.
How the score works
- Each failing rule adds a penalty of
weight × (1 + log10(affected elements)). The weights are critical 10, serious 6, moderate 3 and minor 1. score = round(100 × e^(−total penalty / 60)). The grades are A ≥ 90, B ≥ 75, C ≥ 60, D ≥ 40, and F below 40.- Needs-review items never lower the score. The score is a way to prioritise and track progress. It is not a conformance level. A score of 100 means no automatically detectable failures were found. It does not mean the page is accessible.
Performance, memory and cost
- Runtime: typically 5–20 s per page for both devices (measured on gov.uk, bbc.co.uk, example.com and the UW demo). Each page has a hard timeout of 100 s, which you can configure, and pages are retried once. Target: 60 s or less per page.
- Memory: 4 GB is the default and recommended setting (it runs about 3–4 pages in parallel). 2 GB works for 1–2 pages at a time. Give 8 GB or more for large crawls with
maxConcurrency8 or higher. - Price: pay per event, with one
page-auditedevent per successfully audited page (desktop and mobile included). Failed, blocked, skipped and off-site pages are not charged. The run stops automatically when your Max total charge budget is reached.
Limitations (please read)
Automated testing finds only part of accessibility problems. Industry estimates put it at roughly 30–50% of issues, and many WCAG success criteria cannot be tested automatically at all (e.g. meaningful alt text, captions accuracy, logical reading order, error messages, cognitive load). A clean result does not mean a website is accessible or compliant with WCAG 2.2, EN 301 549, the European Accessibility Act, the UK Equality Act, the ADA or any other law. Items marked needs review require human judgement. This tool and its reports are technical information, not legal advice. For conformance claims, an accessibility statement or legal risk assessment, commission a manual expert audit that includes screen reader, keyboard-only, zoom and voice-control testing, ideally with disabled users.
Technical limitations:
- Content inside cross-origin iframes (embedded videos, maps, payment widgets) is not analysed.
- Pages behind logins are not supported. Cookie banners are audited as they appear to a first-time visitor and are not dismissed.
- The motion check detects CSS and Web Animations. JavaScript timer-driven carousels may not be detected.
- The keyboard test samples the first N Tab stops (default 25). It reports a possible trap that you should confirm manually.
- Sites protected by CAPTCHAs or bot-protection services are reported as
blockedand not charged. The Actor never tries to bypass protection.
FAQ
Is this an accessibility overlay? No. SiteVerdict only measures and reports. It never injects anything into your live site. Overlays do not make a site compliant.
Which standard should I choose? Choose WCAG 2.2 AA (the default). The EAA, EN 301 549, UK public-sector rules and most ADA settlements reference AA.
Can I monitor my site weekly? Yes. Create a Schedule in Apify Console with this Actor and your input, and compare scores over time with the Overview view.
Can I white-label the report? The report is self-contained HTML, so you can save it and add your own branding. Built-in white-labelling is on the roadmap.
Data sources, compliance and retention
- What it reads: the public web pages you list (and, with crawling on, same-site links), loaded in a headless Chromium browser, plus each site's robots.txt (respected by default). It does not log in, submit forms or bypass bot protection; blocked pages are reported as
blockedand not charged. - Private-network protection: private, local and internal addresses (for example
localhost,10.x,192.168.x,169.254.169.254) are refused, including after redirects (since 1.0.4). - No personal data is collected on purpose. Results describe page markup (rules, CSS selectors, short HTML snippets). If a page itself shows personal data, a snippet of it can appear in an issue's evidence.
- Where results are stored: the default dataset (one row per page) and key-value store (
REPORT,SUMMARY, per-site reports) of the run, inside your own Apify account. These default storages are unnamed. How long Apify keeps them is set by Apify and your plan, not by SiteVerdict (Apify data retention); you can delete them sooner in Apify Console. - What SiteVerdict keeps: nothing. The Actor runs in your Apify account and sends no data to SiteVerdict.
- Rules used: axe-core 4.14 (Deque, MPL-2.0) mapped to WCAG 2.0/2.1/2.2 success criteria, plus our own checks described above.
- Not a certificate and not legal advice. Automated testing finds only part of the accessibility barriers on a page. A clean result does not mean the site conforms to WCAG, EN 301 549 or the European Accessibility Act; manual testing with assistive technology is still needed.
Open-source licences
This Actor uses axe-core® by Deque Systems, licensed under the Mozilla Public License 2.0 (MPL-2.0). We use the unmodified, published axe-core npm package. Its source code is available at https://github.com/dequelabs/axe-core, and the full licence text ships in the Actor image at node_modules/axe-core/LICENSE. axe-core is © Deque Systems, Inc. "axe" is a trademark of Deque Systems. This product is not affiliated with or endorsed by Deque. Other dependencies (Apify SDK, Crawlee, Playwright) are Apache-2.0. See ./LICENSES.md.
Support
Found a false positive or need a feature? Open an issue on the Actor's Issues tab with the URL and the rule ID. Fixes are usually released within a few days.