Accessibility Regression Audit Prompts: 12 Templates Beyond axe-core

axe-core catches ~57% of WCAG issues. 12 copy-ready prompts for keyboard order, focus management, screen-reader copy, WCAG 2.2 target size, and motion preferences.

Deque’s 2024 coverage study (13,000+ pages, ~300,000 issues) found that fully automated tooling like axe-core catches about 57% of WCAG issues — and the remaining ~43% is exactly the part that breaks real users: focus traps, missing live regions, broken keyboard order, and motion that triggers seizures. None of that shows up as a red line in CI. The prompts below hand the failure mode to an LLM (Claude Opus 4.7 or GPT-5.5 read diffs and component code well) and force reproduction steps, file:line references, and a fix — not a vague “consider improving accessibility.”

TL;DR

  • Run axe-core first. It clears the ~57% of issues a machine can verify with near-zero false positives. Don’t burn AI tokens re-finding contrast bugs.
  • Use these 12 prompts for the other ~43%: keyboard tab order, focus management on route change, screen-reader announcements, WCAG 2.2 target size, and prefers-reduced-motion.
  • Target WCAG 2.2 Level AA. It is the current stable W3C recommendation (published October 2023) and adds six AA criteria most teams miss, including Target Size (Minimum) at 24×24 CSS px and Focus Not Obscured.
  • Compliance is now enforced. The European Accessibility Act deadline passed June 28, 2025; its presumed standard (EN 301 549) maps to WCAG 2.1 AA, with penalties up to €100,000 or 4% of revenue.

Who this is for

Engineers shipping consumer apps that must meet WCAG 2.2 AA, designers running a11y reviews, and founders bidding on government or enterprise contracts that require a documented audit. If you sell into the EU after June 2025, accessibility is a legal requirement, not a nice-to-have.

What WCAG 2.2 added that axe-core can’t fully check

WCAG 2.2 (the current W3C recommendation) introduced nine new success criteria; six of them land at Level AA, the tier most organizations target. Three matter most for regression audits and are awkward to test automatically:

CriterionLevelThe ruleWhy a tool struggles
2.4.11 Focus Not Obscured (Min)AAA focused element can’t be fully hidden by author contentNeeds to know if a sticky header/cookie banner overlaps the focus ring at runtime
2.5.7 Dragging MovementsAAAny drag action needs a single-pointer alternativeTool can’t tell intent behind a drag handle
2.5.8 Target Size (Min)AATargets ≥ 24×24 CSS px or sufficiently spacedPadding, inline exceptions, and spacing math are easy to miscount

Note the number: WCAG 2.2 sets the floor at 24×24 CSS px, not 44. The 44×44 figure is Apple’s Human Interface Guidelines recommendation, and Material Design suggests 48×48 dp — both are good design targets above the legal minimum.

12 copy-ready prompt templates

Paste your diff or component code under each prompt. Each one names a specific failure mode and demands file:line plus severity so output is actionable, not advisory.

1. PR-scoped a11y diff

Audit this PR for a11y regressions in the diff only. Cover: (1) New interactive elements without keyboard handlers, (2) `role="button"` on non-buttons missing key handlers, (3) Removed aria-labels, (4) Decorative imagery added without `alt=""`, (5) Heading order broken. Output file:line + severity (blocker/major/minor). Skip unchanged code.

2. Keyboard order verification

For `[componentName]`, describe the keyboard tab order step by step (Tab / Shift+Tab / Enter / Esc / Arrow keys). Flag: (1) Focus skipping a logical element, (2) Focus moving into invisible content, (3) Tab order that doesn't match visual order, (4) Esc that doesn't close a modal, (5) Focus not returned to the trigger on close.

Variables to swap: [componentName]

3. Screen-reader copy review

Audit what a screen reader (NVDA/VoiceOver) will announce for `[componentName]`: (1) Accessible name (label / aria-label / aria-labelledby), (2) State announcements (selected / expanded / loading), (3) Live region for async results, (4) Icon-only buttons get a visible-or-aria name. Output a script-like trace of expected announcements per interaction.

Variables to swap: [componentName]

4. Form error accessibility

Audit this form's error UX: (1) Errors associated via `aria-describedby` to the right input, (2) Submission summary at top with anchor links, (3) Live region announces error count, (4) Focus moves to first invalid field on submit, (5) Errors don't rely on colour alone. Output file:line.

5. Focus management on route change

For this SPA, audit focus management on navigation: (1) Does focus move to the new page's main heading? (2) Is the page title announced? (3) Are skip-links present and working? (4) Does focus survive modal open/close? Output failures + a fix recipe per page.

6. Focus Not Obscured (WCAG 2.2, 2.4.11)

Audit WCAG 2.2 SC 2.4.11 Focus Not Obscured (Minimum). Identify any sticky header, cookie banner, chat widget, or toast that can fully cover a focused element when tabbing. For each: name the overlapping component, the elements it can hide, and a scroll-padding or focus-scroll fix. file:line.

7. Motion + prefers-reduced-motion

Audit motion: (1) Any animation > 5s that loops without pause/stop? (2) Flashing > 3 times per second (seizure risk, WCAG 2.3.1)? (3) Parallax or autoplay video without controls? (4) Is `prefers-reduced-motion` honoured for every transition/animation? Output file:line + fix.

8. Colour contrast on the diff

For colour changes in this diff only, compute contrast against WCAG 2.2 AA: (1) Body text ≥ 4.5:1, (2) Large text (≥ 18.66px bold or 24px) and UI components ≥ 3:1, (3) Focus indicator ≥ 3:1 against adjacent colours. Give the measured ratio per pair. Don't check unchanged elements.

9. Target size (WCAG 2.2, 2.5.8)

Audit interactive targets against WCAG 2.2 SC 2.5.8 Target Size (Minimum): each target ≥ 24×24 CSS px including padding, OR a 24px-diameter circle around it doesn't overlap another target. Note inline-link and user-agent exceptions. Also flag anything below 44×44 (Apple HIG) as a design improvement, not a failure. file:line + severity.

10. Loading / async announcement

Audit async UX: (1) Loading state announced via aria-live or role="status", (2) Errors announced via aria-live="assertive" sparingly, (3) Optimistic UI matched by a reverted, announced state on failure. Output file:line.

11. Custom widget ARIA pattern

For `[widgetType]`, verify it implements the WAI-ARIA Authoring Practices pattern. List: (1) Required role + key behaviours, (2) Where this implementation diverges, (3) Top 3 fixes ranked by user impact. Don't propose a full rewrite if 2 patches close the gap.

Variables to swap: [widgetType] — combobox / tabs / dialog / menu / treegrid

12. Mobile screen-reader walkthrough

Walk through this screen with VoiceOver (iOS) and TalkBack (Android). Predict the announcement per swipe-right. Flag where Android and iOS diverge meaningfully (e.g. heading nav, custom roles). Output a comparison table.

Bonus: a11y regression triage

Last release had [nIssues] a11y bug reports. Triage: (1) Cluster by component, (2) Identify the top 3 by user impact (severity × reach), (3) Suggest one preventive check per cluster (axe rule, lint rule, or manual step). Output a table.

Variables to swap: [nIssues]

Common mistakes

  • Treating “no axe violations” as a pass. Automated tooling covers ~57% of issues; the rest needs keyboard and screen-reader checks.
  • Removing focus rings for visual polish. This kills keyboard usability and breaks WCAG 2.4.7.
  • Using <div onClick> instead of <button>. You lose keyboard activation and the screen-reader role in one move.
  • Tab traps in modals because focus isn’t returned to the trigger on close.
  • aria-live="assertive" on every update. It interrupts and overwhelms screen-reader users; reserve it for genuine alerts.
  • Form errors marked only in red. Invisible to colour-blind users; pair colour with text and an icon.
  • Skipping the WCAG 2.2 additions — target size, dragging alternatives, and focus-not-obscured are the most common new gaps.

How to push results further

  • Run axe-core (or Axe DevTools) in CI first, then use these prompts for what it misses.
  • Test keyboard-only navigation manually on every new interactive component.
  • Inspect with VoiceOver / NVDA at least quarterly, and on any flow that handles money or auth.
  • Use semantic HTML; ARIA is the fallback, not the goal — a real <button> beats role="button" every time.
  • Add a one-page a11y.md per component documenting its keyboard and screen-reader contract.
  • Block PRs that introduce new axe-core violations; don’t block on pre-existing ones, to keep PR scope tight.

FAQ

  • Is axe-core enough for WCAG AA?: No. Deque’s data puts automated coverage at ~57% of issues. Combine it with manual keyboard and screen-reader checks for the rest.
  • What WCAG version should I target in 2026?: WCAG 2.2 AA — it’s the current W3C recommendation (October 2023). Note the EU’s EAA still maps to WCAG 2.1 AA via EN 301 549, but 2.2 is a superset, so targeting 2.2 covers both.
  • Is 44×44 the legal minimum target size?: No. WCAG 2.2 SC 2.5.8 sets the floor at 24×24 CSS px. 44×44 is Apple’s recommendation and 48dp is Material Design’s — good targets, not the legal bar.
  • Do I really need a disabled tester?: For any consumer-scale product, eventually yes. Tooling plus AI gets you to “good”; lived-experience testing gets you to “great.”
  • What’s a 30-second smoke test?: Unplug your mouse and complete the feature with the keyboard only. If you can’t, neither can a keyboard user.
  • Can AI replace an a11y consultant?: Not for high-stakes or legal audits. Use AI for routine, PR-scoped checks; bring in a consultant for edge cases and sign-off. See the W3C’s WCAG 2.2 standard and WAI-ARIA Authoring Practices for the source of truth.

Tags: #Prompt #Coding #Accessibility #Accessibility (a11y)