VPAT example: a sample VPAT 2.5 WCAG edition report
This is a real draft from a trial on the public pages of a small, live web app, used with its owner's permission. The product's name, addresses and brand details are replaced with "Example App".
This shows the draft stage, before review. Scanners and scripted checks produced it in about 14 minutes. The two right-hand columns are reviewer notes: of 56 rows, tools settled 5 on their own and 46 still needed a person to confirm or judge. In a delivered report those columns are removed, every row has been checked by a person, and the 5 "Not Evaluated" rows (which needed a signed-in test account) are tested and answered.
Report details
- Name of product / version
- Example App, public website and tool pages, as live on November 10, 2026
- Report date
- November 10, 2026 (draft)
- Product description
- A web app with a free lookup tool, sign-in and paid plans.
- Contact information
- [The vendor's accessibility contact]
- Notes
- Scope: 8 public pages and the login dialog. The signed-in application (results, downloads, account and billing pages) was not evaluated in this trial, so this draft covers only the public site.
- Evaluation methods used
- Automated: axe-core 4.14 (WCAG 2.0, 2.1 and 2.2 A and AA rules, desktop 1280 px and mobile 390 px), Pa11y 10 (axe and HTML_CodeSniffer), Lighthouse 13.6 accessibility audit. Scripted: keyboard-only walk with focus-visibility and obscured-focus checks at every tab stop, accessibility-tree review, reflow at 320 px, 200% zoom, text-spacing override, reduced motion, target size, navigation consistency, and keyboard operation of the dialog, tabs and FAQ. Not yet done at draft stage: testing with a real screen reader, real browser zoom, Windows high-contrast mode and form submission.
- Pages tested
- Home, Pricing, two tool pages, Support, About, Blog index, one blog post, and the login dialog.
Applicable standards
- WCAG 2.0: Level A (Yes), Level AA (Yes), Level AAA (No)
- WCAG 2.1: Level A (Yes), Level AA (Yes), Level AAA (No)
- WCAG 2.2: Level A (Yes), Level AA (Yes), Level AAA (No)
Draft results at a glance
- Supports: 33
- Partially Supports: 5
- Does Not Support: 2 (1.4.1 Use of Color and 1.4.3 Contrast)
- Not Applicable: 11
- Not Evaluated: 5 (must be tested before a report is issued)
Note the honest result: a real product with real issues. Buyers trust that more than a page of "Supports".
Table 1: Success criteria, Level A
| Criteria | Conformance level | Remarks and explanations | Draft basis (reviewer note) | Needs a person? |
|---|---|---|---|---|
| 1.1.1 Non-text Content (Level A) | Supports | All images on the 8 tested pages have text alternatives (logos, badges, blog diagrams). Decorative icons are hidden. The logo image next to the visible product name repeats the name (redundant, not a failure). | Script + human confirm | Yes, about 25 min |
| 1.2.1 Audio-only and Video-only (Prerecorded) (Level A) | Not Applicable | No audio-only or video-only content on the tested pages. | Script + human confirm | Yes, about 3 min |
| 1.2.2 Captions (Prerecorded) (Level A) | Not Applicable | No prerecorded video with audio on the tested pages. | Script + human confirm | Yes, about 3 min |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) (Level A) | Not Applicable | No prerecorded video on the tested pages. | Script + human confirm | Yes, about 2 min |
| 1.3.1 Info and Relationships (Level A) | Partially Supports | Headings, lists, the tab control and the blog data table (5 header cells) are marked up. Exceptions: the Blog index and blog posts have no main landmark (axe landmark-one-main, region); footer section headings jump from H1 to H4 on every page (axe heading-order); the blog table has no caption. | Script + human confirm | Yes, about 30 min |
| 1.3.2 Meaningful Sequence (Level A) | Supports | Keyboard and accessibility-tree order matched the visual reading order on all 8 pages. | Script + human confirm | Yes, about 15 min |
| 1.3.3 Sensory Characteristics (Level A) | Supports | One instruction uses location ("open the account menu at the top right, choose 'Manage subscription'") but also names the control. | Human judgment | Yes, about 10 min |
| 1.4.1 Use of Color (Level A) | Does Not Support | Links inside paragraphs (Pricing and a tool page) are told apart from body text only by colour: 1.81:1 against the surrounding text, no underline until hover (axe link-in-text-block, 6 instances). | Tool decided | No |
| 1.4.2 Audio Control (Level A) | Not Applicable | No audio plays automatically. | Script + human confirm | No |
| 2.1.1 Keyboard (Level A) | Supports | 206 tab stops across 8 pages were all reached with Tab; no mouse-only clickable elements were found. The login dialog, the two result tabs (arrow keys) and the FAQ disclosures work from the keyboard. | Script + human confirm | Yes, about 40 min |
| 2.1.2 No Keyboard Trap (Level A) | Supports | Tab order cycles through each page; the login dialog keeps focus inside by design and closes with Escape. | Script + human confirm | Yes, about 10 min |
| 2.1.4 Character Key Shortcuts (Level A) | Supports | No single-character keyboard shortcuts found. | Human judgment | Yes, about 5 min |
| 2.2.1 Timing Adjustable (Level A) | Not Applicable | No time limits on the tested pages. | Human judgment | Yes, about 5 min |
| 2.2.2 Pause, Stop, Hide (Level A) | Supports | No looping animations or auto-updating content found (0 infinite animations). | Script + human confirm | Yes, about 5 min |
| 2.3.1 Three Flashes or Below Threshold (Level A) | Supports | No flashing content. | Human judgment | Yes, about 3 min |
| 2.4.1 Bypass Blocks (Level A) | Supports | No skip link, but the header holds only the logo and a Login button before the main content, and most pages have a main landmark. Blog pages lack a main landmark (see 1.3.1). | Human judgment | Yes, about 10 min |
| 2.4.2 Page Titled (Level A) | Supports | Every tested page has a unique, descriptive title (e.g. "Pricing: Free and Pro plans | Example App"). | Script + human confirm | Yes, about 5 min |
| 2.4.3 Focus Order (Level A) | Partially Supports | Order is logical, but when the login dialog is closed with Escape, focus goes to the top of the page instead of back to the Login button. | Script + human confirm | Yes, about 20 min |
| 2.4.4 Link Purpose (In Context) (Level A) | Supports | Repeated "View Tool" links carry names that include the tool ("View Tool: Export Tool"). No vague link text found. | Script + human confirm | Yes, about 10 min |
| 2.5.1 Pointer Gestures (Level A) | Not Applicable | No multipoint or path-based gestures. | Human judgment | Yes, about 3 min |
| 2.5.2 Pointer Cancellation (Level A) | Supports | Controls are native links and buttons that act on release. | Human judgment | Yes, about 3 min |
| 2.5.3 Label in Name (Level A) | Supports | Accessible names start with the visible label ("View Tool" -> "View Tool: ..."); the Check, Login and tab buttons match their text. | Script + human confirm | Yes, about 5 min |
| 2.5.4 Motion Actuation (Level A) | Not Applicable | No motion-operated features. | Human judgment | No |
| 3.1.1 Language of Page (Level A) | Supports | lang="en" on every page. | Tool decided | No |
| 3.2.1 On Focus (Level A) | Supports | Moving focus through every page caused no navigation or pop-ups. | Script + human confirm | Yes, about 5 min |
| 3.2.2 On Input (Level A) | Supports | Choosing a tab changes the panel only; no form was submitted (read-only test). | Human judgment | Yes, about 10 min |
| 3.2.6 Consistent Help (Level A) | Supports | "Contact Us" sits in the same footer position on all pages; the chat button appears on the tool pages in the same corner. | Script + human confirm | Yes, about 5 min |
| 3.3.1 Error Identification (Level A) | Not Evaluated | Not tested: needs a form submission or a signed-in account, which this read-only trial did not do. | Not tested (needs sign-in / form submit) | Yes, about 20 min |
| 3.3.2 Labels or Instructions (Level A) | Partially Supports | The account-name field has a programmatic label (aria-label "Account name") but its only visible label is placeholder text ("account name"), which disappears while typing. | Human judgment | Yes, about 10 min |
| 3.3.7 Redundant Entry (Level A) | Not Evaluated | Multi-step flows are behind sign-in; not tested. | Not tested (needs sign-in / form submit) | Yes, about 10 min |
| 4.1.1 Parsing (Level A) | Supports | Per VPAT 2.5Rev: WCAG 2.0 and 2.1, always answer Supports; WCAG 2.2, obsolete and removed, does not apply. (Pa11y noted one duplicate SVG id; no effect on assistive technology.) | Tool decided | No |
| 4.1.2 Name, Role, Value (Level A) | Partially Supports | Tabs on the tool pages point aria-controls at panels that are not rendered (axe aria-valid-attr-value, critical); the support-chat iframe has no title; the chat widget's hidden close button has no name; the login dialog lacks aria-modal (focus is still kept inside). | Script + human confirm | Yes, about 30 min |
Table 2: Success criteria, Level AA
| Criteria | Conformance level | Remarks and explanations | Draft basis (reviewer note) | Needs a person? |
|---|---|---|---|---|
| 1.2.4 Captions (Live) (Level AA) | Not Applicable | No live media. | Human judgment | No |
| 1.2.5 Audio Description (Prerecorded) (Level AA) | Not Applicable | No prerecorded video. | Script + human confirm | Yes, about 2 min |
| 1.3.4 Orientation (Level AA) | Supports | Pages work in portrait (390 px) and landscape; no orientation lock found. | Script + human confirm | Yes, about 5 min |
| 1.3.5 Identify Input Purpose (Level AA) | Supports | The only field asks for any public account name to look up, not the user's own details for this site, so no autocomplete token is required. Reviewer to confirm this reading. | Human judgment | Yes, about 10 min |
| 1.4.3 Contrast (Minimum) (Level AA) | Does Not Support | The light brand blue fails: white text on blue buttons ("Check", "Upgrade") and blue text links on white ("Upgrade", inline links) are 2.65:1 against the required 4.5:1. Found on all 8 pages at desktop or phone width, including the Login button on phones (axe color-contrast, up to 11 elements a page). | Tool decided | No |
| 1.4.4 Resize Text (Level AA) | Supports | At a 640 px viewport (about 200% zoom of 1280 px) no page scrolled sideways or clipped text. | Script + human confirm | Yes, about 10 min |
| 1.4.5 Images of Text (Level AA) | Supports | Badges are logotypes (exempt). A blog diagram contains words and has a full text alternative; reviewer to decide if it is essential. | Human judgment | Yes, about 5 min |
| 1.4.10 Reflow (Level AA) | Supports | At 320 px no page scrolled sideways except one blog post, where a 5-column data table needs horizontal scrolling; data tables are an allowed exception. Reviewer to confirm. | Script + human confirm | Yes, about 15 min |
| 1.4.11 Non-text Contrast (Level AA) | Partially Supports | The account-name input border is 1.24:1 against white (needs 3:1), and the selected tab is shown by a white pill on a near-white strip (1.05:1) plus a faint shadow. Focus rings use the browser default and pass. | Script + human confirm | Yes, about 20 min |
| 1.4.12 Text Spacing (Level AA) | Supports | With WCAG text-spacing overrides injected, no text was clipped or overlapped (scripted check and screenshots). | Script + human confirm | Yes, about 10 min |
| 1.4.13 Content on Hover or Focus (Level AA) | Not Applicable | No custom tooltips or hover pop-ups found. | Human judgment | Yes, about 5 min |
| 2.4.5 Multiple Ways (Level AA) | Supports | Every page is reachable from the footer menu and from the home page's tool list and blog index. | Human judgment | Yes, about 5 min |
| 2.4.6 Headings and Labels (Level AA) | Supports | Headings describe their sections; the control labels are clear. | Human judgment | Yes, about 10 min |
| 2.4.7 Focus Visible (Level AA) | Supports | All 206 tab stops showed a visible change on focus (browser default ring); none hidden. | Script + human confirm | Yes, about 10 min |
| 2.4.11 Focus Not Obscured (Minimum) (Level AA) | Supports | No focused element was covered by the header or the chat button (checked at each tab stop). | Script + human confirm | Yes, about 10 min |
| 2.5.7 Dragging Movements (Level AA) | Not Applicable | No drag interactions. | Human judgment | No |
| 2.5.8 Target Size (Minimum) (Level AA) | Supports | Small targets found were 20 px-tall text links with enough spacing ("Upgrade", a footer link); reviewer to confirm the spacing exception. | Script + human confirm | Yes, about 10 min |
| 3.1.2 Language of Parts (Level AA) | Supports | All content is in English. | Human judgment | No |
| 3.2.3 Consistent Navigation (Level AA) | Supports | Header and footer links are identical and in the same order on all 8 pages (scripted comparison). | Tool decided | No |
| 3.2.4 Consistent Identification (Level AA) | Supports | Login, Contact Us and tool links are named the same everywhere. | Script + human confirm | Yes, about 5 min |
| 3.3.3 Error Suggestion (Level AA) | Not Evaluated | Not tested: needs form submission. | Not tested (needs sign-in / form submit) | Yes, about 15 min |
| 3.3.4 Error Prevention (Legal, Financial, Data) (Level AA) | Not Evaluated | Checkout and subscription changes are behind sign-in (Stripe); not tested. | Not tested (needs sign-in / form submit) | Yes, about 15 min |
| 3.3.8 Accessible Authentication (Minimum) (Level AA) | Supports | Sign-in is "Continue with Google" only; the product sets no memory or puzzle test. Google's own sign-in pages are out of scope. | Human judgment | Yes, about 10 min |
| 4.1.3 Status Messages (Level AA) | Not Evaluated | Status messages appear only after a lookup runs; not triggered in a read-only test. A notifications live region exists. | Not tested (needs sign-in / form submit) | Yes, about 20 min |
Table 3: Success criteria, Level AAA
Not evaluated.
Legal disclaimer (as used in the draft)
This report describes the accessibility of the pages listed above as tested on November 10, 2026, using the methods described. It is the vendor's own statement about its product, not a certification, legal opinion or guarantee, and it does not mean the product is free of accessibility barriers or of legal risk. Conformance may change as the product changes.
VPAT® is a registered service mark of the Information Technology Industry Council (ITI).