Skip to main content
How it works

A scanner built to find what
plaintiffs' firms actually look for.

axe-core is a strong baseline for machine-verifiable WCAG 2.2 AA issues. Sturdly adds behavioral, structural, media, mobile, and screen-reader evidence, then produces the manual review plan needed for criteria automation cannot prove.

Rule subset
Browser DevTools / Lighthouse
Useful baseline, limited workflow evidence
Rule engine
axe-core alone
No behavioral or content testing
Human attestation
Manual expert audit
Best for final conformance claims
Scanner + manual plan
Sturdly
Automated evidence plus the review steps still required

The seven-layer scanning stack

Core page layers run across sampled pages, and costlier AI, workflow, mobile, and site-level probes are budgeted by scan type. Results are deduplicated and paired with manual-review steps for criteria that require human judgment.

01

Automated rule engine

Automated rule coverage
Powered by axe-core + Playwright
1.1.11.3.11.4.32.4.14.1.2

Every page is loaded in a real Chromium browser and analyzed with axe-core — the same engine used by Google, Microsoft, and Deque to test their own products. This catches all machine-verifiable WCAG violations: missing alt text, insufficient color contrast, form labels, landmark regions, ARIA attribute errors, and more.

What it catches
  • Images missing alt text (WCAG 1.1.1)
  • Color contrast below 4.5:1 / 3:1 ratio (WCAG 1.4.3)
  • Form inputs without programmatic labels (WCAG 1.3.1)
  • Missing skip navigation (WCAG 2.4.1)
  • Duplicate IDs and invalid ARIA attributes (WCAG 4.1.2)
  • Interactive elements without accessible names (WCAG 4.1.2)
Limitations
  • Whether alt text is actually descriptive
  • Whether link text makes sense out of context
02

Behavioral interaction testing

Behavioral evidence
Powered by Playwright keyboard simulation
2.1.12.1.22.4.32.4.73.3.1

After loading each page, Sturdly simulates real keyboard-only navigation using Tab, Shift+Tab, Enter, Escape, and arrow keys. This catches focus management failures that are invisible to static analysis but immediately apparent to keyboard users and screen reader users.

What it catches
  • Focus traps — modals and menus that keyboard users cannot exit (WCAG 2.1.2)
  • Focus order that doesn't match visual reading order (WCAG 2.4.3)
  • Focus indicators hidden or suppressed by CSS (WCAG 2.4.7)
  • Interactive elements unreachable via keyboard (WCAG 2.1.1)
  • Form errors not announced to assistive technology (WCAG 3.3.1)
  • Dynamic content updates not reflected in the accessibility tree
Limitations
  • Complex widget patterns require manual expert review
03

Advanced structural analysis

Structural evidence
Powered by Playwright + accessibility tree
1.3.41.4.101.4.122.5.83.1.1

Sturdly validates WCAG 2.2 criteria, structural patterns, and rendering behavior that no rule engine checks. This includes viewport-constrained reflow testing, text spacing injection, ARIA widget pattern validation (tabs, accordions, carousels), and touch target measurements on mobile viewports.

What it catches
  • Content that breaks at 320px width without horizontal scroll (WCAG 1.4.10)
  • Layout that breaks when letter/word/line spacing is overridden (WCAG 1.4.12)
  • Touch targets smaller than 24×24px (WCAG 2.5.8)
  • Orientation locked to portrait or landscape only (WCAG 1.3.4)
  • Missing lang attribute — screen readers can't select the right voice (WCAG 3.1.1)
  • ARIA widget patterns that violate APG design patterns (tabs, accordions, dialogs)
  • Content that flashes more than 3 times per second (WCAG 2.3.1)
Limitations
  • Subjective content quality judgments
04

Synthetic screen-reader walk + AI journey eval

Screen-reader evidence
Powered by DOM tab-order walker + Claude Sonnet 4.6
4.1.22.4.12.4.22.4.42.4.64.1.3

Sturdly walks every page in tab order the way NVDA / VoiceOver would, building the literal announce sequence a blind user hears. The sequence is then handed to Claude to evaluate: "as a blind user, can I actually use this page?" This catches journey-level issues that no rule engine can — three buttons labeled 'Read more' going to different destinations, page identity unclear from the first five tab stops, state changes that aren't announced, navigation announced before the page name.

What it catches
  • Multiple controls with identical accessible names ("Read more" × 14) — WCAG 2.4.4
  • Page identity unclear from the first 5 tab stops — WCAG 2.4.2
  • No <main> landmark — keyboard users can't skip to content (WCAG 2.4.1)
  • Missing headings — screen-reader users can't skim (WCAG 2.4.6)
  • Toggle buttons with no aria-expanded — state changes silent (WCAG 4.1.2)
  • Heading hierarchy that skips levels — confusing outline navigation (WCAG 1.3.1)
Limitations
  • Subjective UX judgments about flow quality
05

AI content quality review (with vision)

Content-quality evidence
Powered by Claude Sonnet 4.6 (vision-enabled)
1.1.12.4.41.3.13.1.53.3.3

Sturdly sends extracted page content — alt text, link text, headings, button labels, error messages — AND the actual images to Claude for qualitative review. The vision-enabled pass actually LOOKS at images to verify alt text accurately describes them, not just that it exists or follows naming conventions.

What it catches
  • Alt text that does not match the image (verified by vision, not just heuristics) (WCAG 1.1.1)
  • Decorative-but-described images that should use alt="" (WCAG 1.1.1)
  • Link text like 'click here', 'read more', or 'learn more' (WCAG 2.4.4)
  • Heading hierarchies that skip levels or use headings decoratively (WCAG 1.3.1)
  • Buttons labeled 'Submit' or 'Go' with no contextual aria-label (WCAG 4.1.2)
  • Error messages that don't tell users how to fix the problem (WCAG 3.3.3)
  • Body content written at a reading level inappropriate for the audience (WCAG 3.1.5)
Limitations
  • Complex multi-page form flows require end-to-end testing
06

Audio / video accessibility

Media evidence
Powered by HTML5 DOM walk + YouTube/Vimeo caption APIs
1.2.11.2.21.2.41.2.51.4.22.2.2

Most scanners only check for <track kind="captions"> on HTML5 <video>, missing the 90%+ of web video that's an iframe embed. Sturdly inspects HTML5 video/audio AND hits YouTube's and Vimeo's public caption APIs to verify captions actually exist on the video — not just that the iframe was configured to show them. For other platforms (Wistia, Loom, Brightcove, JW), Sturdly fingerprints the embed and flags it for review.

What it catches
  • YouTube video with no captions uploaded (verified via timedtext API) — WCAG 1.2.2
  • Vimeo video with no captions (verified via /config API) — WCAG 1.2.2
  • HTML5 <video> missing <track kind="captions"> — WCAG 1.2.2
  • HTML5 <audio> with no transcript association via aria-describedby or sibling — WCAG 1.2.1
  • Auto-playing video/audio with sound — WCAG 1.4.2 / 2.2.2
  • Video iframes with no title attribute (unannounced to screen readers) — WCAG 4.1.2
  • Live streams (Twitch / YouTube Live) — flagged for manual caption verification (WCAG 1.2.4)
Limitations
  • Caption accuracy / quality (auto-captions exist but may be wrong)
  • Audio description quality (we can detect presence, not quality)
07

Workflow & third-party widget audit

+5% additional coverage
Powered by Playwright workflow runner + vendor fingerprinting
2.1.12.1.22.4.34.1.24.1.3

ADA litigation cites WORKFLOW failures, not page failures ("I couldn't complete a checkout with a screen reader"). Sturdly runs four canonical user journeys — search, add-to-cart, signup, contact-form — and captures workflow-level findings like "focus didn't move to results after search submit." Separately, Sturdly fingerprints third-party widgets (Intercom, Drift, Zendesk, OneTrust, accessiBe, UserWay, Klaviyo, Calendly, ...) and ships vendor-specific known-issue findings — including accessibility overlays, which are themselves a leading cause of ADA litigation.

What it catches
  • Search form submits but focus doesn't move to results (WCAG 4.1.3)
  • Add-to-cart click has no announcement / focus move (WCAG 4.1.3)
  • Signup form with unlabeled fields or no submit button (WCAG 3.3.2 / 2.1.1)
  • accessiBe / UserWay / AudioEye / EqualWeb overlays detected (a leading ADA litigation hot-spot)
  • Chat widget (Intercom, Drift, Zendesk, Crisp, Tawk, ...) launcher accessibility gaps
  • Consent banner (OneTrust, Cookiebot, TrustArc, Osano, CookieYes) focus management
  • Marketing popup (Klaviyo, Privy, OptinMonster, Attentive) keyboard accessibility
Limitations
  • Workflows that require authentication or custom forms

What no scanner can catch — and how we handle it

The remaining ~3% of WCAG 2.1 AA issues require a human expert: live video captioning quality, complex custom widget interaction patterns, and cognitive accessibility judgments. We're honest about this.

We document the gap

Every Sturdly report includes a clear statement of what was tested automatically and what was not. Your VPAT reflects this honestly — which is exactly what regulators and plaintiffs' counsel expect.

We prioritize by litigation risk

The 3% we can't automate is almost never what triggers ADA litigation. We focus on the issues that plaintiff firms actually look for — alt text, keyboard access, contrast — and rank everything by legal exposure.

Expert audit partners

If you need a full manual audit — for a government contract, enterprise client, or pre-litigation defense — we can connect you with certified CPACC/WAS practitioners from our partner network.

Daily monitoring covers the rest

The biggest accessibility risk isn't what's wrong today — it's what breaks tomorrow when a developer pushes a change. Daily automated monitoring catches regressions immediately, before a plaintiff's investigator does.

What happens during a scan

A full site scan takes 5–15 minutes depending on page count. Free scans cover one page. Paid plans crawl every page on your site, every day.

  1. 1

    Crawl

    Sturdly navigates your site using a real Chromium browser, following internal links in breadth-first order. It respects robots.txt, skips binary assets, and handles authentication for protected pages.

  2. 2

    Analyze each page — 7 layers

    For each page: run axe-core, simulate keyboard navigation, test reflow and text spacing, check third-party widgets, then send content to Claude for qualitative review.

  3. 3

    Deduplicate and rank

    Issues are fingerprinted across pages so the same violation doesn't appear 50 times. Severity is calibrated to litigation risk — not WCAG impact level alone.

  4. 4

    Generate documentation

    Sturdly automatically produces: a VPAT (Voluntary Product Accessibility Template), a timestamped audit trail, and a public accessibility statement. These are your legal defense.

  5. 5

    Diff against last scan

    Every scan is compared to the previous one. New issues are flagged immediately. Fixed issues are marked and archived. You see the trend, not just the snapshot.

See all seven layers in action on your site

Free scan · No signup required · Results in 60 seconds

Start a free scan →