Auditing, remediation and compliance reporting

Choosing automated scanners, structuring a manual audit, prioritising fixes by user impact, VPAT and EN 301 549 evidence, and building accessibility into CI.

Structuring an audit

MethodFindsMissesCost
Automated scannerMissing labels, contrast, duplicate ids, missing altWhether the alt text is useful, whether the flow makes senseMinutes
Structured manual passKeyboard traps, focus order, semantics, headingsIssues specific to a real assistive technologyA day per template
Screen reader testingAnnouncements, live regions, form behaviourAnything only visible in a magnifier or a switch setupA day per flow
Assistive technology usersThe barriers people actually hitNothing important, if recruited wellDepends on the study
Accessibility conformance reportWhether a specific standard is metNothing about usabilityWeeks
  1. Define the scope: which templates and which user journeys, at which conformance level, against which standard version.
  2. Run the scanner across the sample and record every issue with the page and the rule.
  3. Do a keyboard-only pass of each journey. Record every point where the user gets stuck or loses their place.
  4. Do a screen reader pass of the critical journeys with one or two real screen readers.
  5. Check zoom at 200 and 400 percent, and reduced motion.
  6. Consolidate into one list, then prioritise by user impact rather than by ease of fixing.
  7. Re-test after remediation with the same script, so the improvement is measurable.
# a scanner in CI, scoped to the pages that matter
npx pa11y-ci --config .pa11yci.json

# a single page, with a full report
npx pa11y https://example.com/checkout --reporter json > checkout-a11y.json

# and one run in the browser against the rendered DOM
# axe DevTools or the axe-core CLI, which sees client-rendered markup

Prioritising fixes

PriorityKind of issueWhy first
BlockerA task that cannot be completed at allNo workaround exists
CriticalA task that can be completed only with great difficultyExcludes most users of the affected input
SeriousA task that is confusing or error-proneCauses mistakes and support tickets
ModerateAn inconsistency or an inconvenienceAnnoying but recoverable
MinorA technical non-conformance with no practical effectFix when touching the component
CosmeticA style preferenceRarely worth the change
  • Prioritise by user impact, not by how many times an issue appears in the report. One unlabelled payment field outranks two hundred missing alt attributes on a page nobody visits.
  • Fix the shared component, not the instances. Every fix at the component level removes the issue from every screen at once.
  • Record what you deliberately deferred and why. An undocumented deferral is indistinguishable from an oversight.
  • Retest the specific barrier with the person who reported it wherever possible.

Conformance reporting and CI

ArtefactAnswersAudience
Accessibility statementWhat we meet, what we do not, how to report a problemPublic, and often legally required
VPAT or ACRConformance per criterion for a named standardProcurement and enterprise buyers
EN 301 549 reportConformance for European public sector requirementsPublic sector tenders
Audit reportMethod, scope, findings, evidenceInternal and regulatory
Remediation planWhat will be fixed, by when, by whomInternal accountability
Test evidenceScreenshots, transcripts, tool outputSupporting the above
  1. State the standard and the level precisely, and the date of the assessment. Vague claims are worse than none.
  2. List the known non-conformances honestly, with an alternative where one exists.
  3. Name a contact route for accessibility problems and commit to a response time.
  4. Publish the statement in an accessible page and link it from the footer of every page.
  5. Review it at least annually and after any major release.
  6. In CI, fail the build on new violations rather than on the absolute count. A legacy backlog should not block every pull request.
# a pragmatic CI gate: only new violations fail the build
- name: Accessibility scan
  run: npx pa11y-ci --config .pa11yci.json

- name: Fail on new violations
  run: node tools/a11y-diff.js --baseline .a11y-baseline.json --fail-on new
💡
A conformance report is evidence, not a goal. A site can be fully conformant on paper and still be unusable with a screen reader if the semantics are technically present and practically useless. Test with people, and let the report describe what you found rather than what you hoped.

FAQ

How many pages should an audit cover?
Every distinct template at least once, plus every critical user journey end to end. Ten well-chosen pages usually represent a site better than a random sample of a hundred.
Does fixing everything in the report mean we are compliant?
Not necessarily. Automated tools cover roughly a third of the criteria. The manual and assistive technology passes are what support a conformance claim.

WCAG in plain language Accessibility in design systems and SPA frameworks

Last refreshed 2026-09-18.