The Complete WCAG 2.1 Remediation Guide
We're sharing this knowledge openly because accessible websites benefit everyone. This guide covers all 28 WCAG 2.1 Level AA checks our scanner runs — with real-world impact, before-and-after code, fix time estimates, and platform-specific guidance.
Quick Reference: All 28 Checks at a Glance
Click any row to jump to the detailed remediation guidance below.
| Issue | WCAG | Severity | Prevalence | Fix Time |
|---|---|---|---|---|
| Language of Page | 3.1.1 | Error | 92% of WV entities | 2 minutes |
| Non-text Content | 1.1.1 | Error | 92% of WV entities | 1–4 hours depending on image count |
| Info and Relationships | 1.3.1 | Info | 83% of WV entities | 30–60 minutes |
| Info and Relationships | 1.3.1 | Info | 83% of WV entities | 15–30 minutes |
| Page Titled | 2.4.2 | Error | 45% of WV entities | 5 minutes per page |
| Info and Relationships | 1.3.1 | Error | 67% of WV entities | 15–30 minutes |
| Info and Relationships | 1.3.1 | Error | 40% of WV entities | 10–20 minutes per table |
| Link Purpose (In Context) | 2.4.4 | Warning | 67% of WV entities | 30–60 minutes |
| Bypass Blocks | 2.4.1 | Warning | 58% of WV entities | 15 minutes |
| Contrast (Minimum) | 1.4.3 | Error | 35% of WV entities | 1–2 hours |
| Focus Visible | 2.4.7 | Warning | 30% of WV entities | 15–30 minutes |
| Parsing | 4.1.1 | Info | 25% of WV entities | 30–60 minutes |
| Resize Text | 1.4.4 | Warning | 20% of WV entities | 2 minutes |
| Name, Role, Value | 4.1.2 | Error | 20% of WV entities | 30–60 minutes |
| Error Identification | 3.3.1 | Warning | 40% of WV entities | 20–40 minutes |
| Error Suggestion | 3.3.3 | Warning | 35% of WV entities | 15–30 minutes |
| Identify Input Purpose | 1.3.5 | Info | 60% of WV entities | 10 minutes |
| Label in Name | 2.5.3 | Warning | 15% of WV entities | 10–20 minutes |
| Status Messages | 4.1.3 | Warning | 25% of WV entities | 10–15 minutes |
| Pointer Cancellation | 2.5.2 | Warning | 10% of WV entities | 15–30 minutes |
| Timing Adjustable | 2.2.1 | Warning | 5% of WV entities | 5 minutes |
| Captions (Prerecorded) | 1.2.2 | Error | 8% of WV entities | 1–2 hours per video |
| Audio Description | 1.2.5 | Info | 5% of WV entities | 2–4 hours per video |
| Audio Control | 1.4.2 | Warning | 5% of WV entities | 5 minutes |
| Orientation | 1.3.4 | Warning | 3% of WV entities | 2 minutes |
| Reflow | 1.4.10 | Warning | 15% of WV entities | 1–2 hours |
| Text Spacing | 1.4.12 | Warning | 10% of WV entities | 30 minutes |
| Language of Parts | 3.1.2 | Info | 5% of WV entities | 5–10 minutes |
Fix First
Found on 80%+ of WV government sites. These are one-line or template-level fixes that instantly improve accessibility for every page.
Error Language of Page WCAG 3.1.1 92% of WV entities 2 minutes
Why it matters
Screen readers need the lang attribute to pronounce content correctly. Without it, a screen reader may use the wrong language profile, making the content unintelligible to users who rely on assistive technology.
How to fix it
Add a lang attribute to the opening <html> tag with the appropriate language code. Use "en" for English. This is typically a one-line change in your site's master template.
<html>
<head>...</head>
<body>...</body>
</html><html lang="en">
<head>...</head>
<body>...</body>
</html>CivicPlus: Edit the master page template. WordPress: Most themes include this automatically — check your theme's header.php. Drupal: Set in /admin/config/regional/language.
Error Non-text Content WCAG 1.1.1 92% of WV entities 1–4 hours depending on image count
Why it matters
Images without alt text are invisible to screen reader users. The alt attribute provides a text alternative that describes the image content or function. For decorative images, use an empty alt="" to tell screen readers to skip them.
How to fix it
Add an alt attribute to every <img> element. For informative images, write a concise description. For decorative images (borders, spacers), use alt="" (empty string). For functional images (icons in buttons), describe the action.
<!-- Missing alt attribute -->
<img src="governor.jpg">
<!-- Decorative image without empty alt -->
<img src="divider.png"><!-- Informative image -->
<img src="governor.jpg" alt="Governor signing House Bill 1234">
<!-- Decorative image -->
<img src="divider.png" alt="">
<!-- Functional image in a link -->
<a href="/search">
<img src="search-icon.svg" alt="Search">
</a>CivicPlus: Use the image properties dialog in the WYSIWYG editor. WordPress: Fill in the 'Alt Text' field in the Media Library. All platforms: Audit existing content with our scanner to find every missing alt.
Info Info and Relationships WCAG 1.3.1 83% of WV entities 30–60 minutes
Why it matters
Screen reader users navigate pages by jumping between headings. When heading levels are skipped (e.g., h1 directly to h3), users lose the logical structure and may think they missed a section.
How to fix it
Ensure heading levels are sequential. Start with a single h1 for the page title, then h2 for major sections, h3 for subsections. Don't use heading tags for visual styling — use CSS instead.
<h1>Benefits Application</h1>
<h3>Eligibility</h3> <!-- Skipped h2! -->
<h5>Photo ID</h5> <!-- Skipped h4! --><h1>Benefits Application</h1>
<h2>Eligibility Requirements</h2>
<h3>Income Limits</h3>
<h3>Residency Requirements</h3>
<h2>Required Documents</h2>
<h3>Photo ID</h3>CivicPlus/WordPress/Drupal: Use the heading dropdown in your WYSIWYG editor — never use bold text as a fake heading.
Info Info and Relationships WCAG 1.3.1 83% of WV entities 15–30 minutes
Why it matters
ARIA landmarks define the major regions of a page. Screen reader users rely on landmarks to quickly jump between sections. Without them, users have no way to understand the page layout.
How to fix it
Use HTML5 semantic elements: <main> for primary content, <nav> for navigation, <header> for the banner, <footer> for footer content, <aside> for sidebars.
<body>
<div id="header">...</div>
<div id="nav">...</div>
<div id="content">...</div>
<div id="footer">...</div>
</body><body>
<header>
<h1>WV DHHR</h1>
</header>
<nav>
<ul>...</ul>
</nav>
<main>
<h2>Welcome</h2>
</main>
<footer>
<p>Contact information</p>
</footer>
</body>CivicPlus: Edit the master page template to replace <div> wrappers with semantic elements. WordPress: Most modern themes already use landmarks — check with our scanner.
Error Page Titled WCAG 2.4.2 45% of WV entities 5 minutes per page
Why it matters
The page title is the first thing a screen reader announces. It also appears in browser tabs and bookmarks. Without a descriptive title, users cannot identify the page.
How to fix it
Add a <title> element inside <head>. Use a pattern like 'Page Name - Site Name'. Ensure each page has a unique, descriptive title.
<head>
<meta charset="UTF-8">
<!-- No title element -->
</head><head>
<meta charset="UTF-8">
<title>Apply for Benefits - WV DHHR</title>
</head>CivicPlus: Set in page properties. WordPress: The page/post title automatically becomes the <title>. Drupal: Configure in the Metatag module.
Error Info and Relationships WCAG 1.3.1 67% of WV entities 15–30 minutes
Why it matters
Form inputs without labels are unusable for screen reader users. They cannot determine what information is being requested. Labels also increase the clickable area for motor-impaired users.
How to fix it
Associate a label with every form input: 1) <label for="id"> matching the input's id (preferred), 2) Wrap input inside <label>, 3) Use aria-label for inputs where a visible label isn't appropriate.
<!-- No label -->
First Name:
<input type="text" id="fname">
<!-- Placeholder is NOT a label -->
<input type="email" placeholder="Enter your email"><!-- label with for attribute (preferred) -->
<label for="fname">First Name</label>
<input type="text" id="fname">
<!-- aria-label for search -->
<input type="search" aria-label="Search this site">CivicPlus: Use the form builder's label field — never leave it blank. WordPress: Contact Form 7 and Gravity Forms generate labels automatically if configured.
Error Info and Relationships WCAG 1.3.1 40% of WV entities 10–20 minutes per table
Why it matters
Data tables without header cells are extremely difficult for screen reader users. Without <th> elements, a screen reader cannot announce which column or row a data cell belongs to.
How to fix it
Use <th> elements for header cells. Add scope="col" for column headers and scope="row" for row headers. Add a <caption> to describe the table's purpose.
<table>
<tr>
<td>Name</td>
<td>County</td>
<td>Status</td>
</tr>
<tr>
<td>John Smith</td>
<td>Kanawha</td>
<td>Approved</td>
</tr>
</table><table>
<caption>Benefit Applications by County</caption>
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">County</th>
<th scope="col">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>John Smith</td>
<td>Kanawha</td>
<td>Approved</td>
</tr>
</tbody>
</table>Quick Wins
Found on 50-80% of sites. Most take under an hour and have outsized impact on keyboard and screen reader users.
Warning Link Purpose (In Context) WCAG 2.4.4 67% of WV entities 30–60 minutes
Why it matters
Screen reader users navigate by pulling up a list of all links on a page. Generic text like 'click here' or 'read more' is meaningless out of context.
How to fix it
Replace generic link text with descriptive text that explains the destination. The link text should make sense read on its own.
<a href="/benefits">Click here</a> to apply.
For details, <a href="/eligibility">read more</a>.<a href="/benefits">Apply for SNAP benefits</a>
<a href="/eligibility">View SNAP eligibility requirements</a>Error Contrast (Minimum) WCAG 1.4.3 35% of WV entities 1–2 hours
Why it matters
Low contrast makes content difficult or impossible to read for users with low vision, color blindness, or aging eyes. Minimum ratio: 4.5:1 for normal text, 3:1 for large text (18pt+).
How to fix it
Use a contrast checker (WebAIM Contrast Checker) to verify all text/background combinations. Avoid light gray text on white, or dark text on dark backgrounds.
<!-- Low contrast: light gray on white -->
<p style="color: #999; background: #fff;">Hard to read</p><!-- Sufficient contrast -->
<p style="color: #333; background: #fff;">Easy to read</p>Warning Focus Visible WCAG 2.4.7 30% of WV entities 15–30 minutes
Why it matters
Keyboard users rely on visible focus indicators to know which element is active. When focus outlines are removed with CSS and no replacement is provided, keyboard navigation becomes impossible.
How to fix it
Don't remove focus outlines without providing a visible alternative. Use :focus-visible to customize focus styles.
<a href="/about" style="outline: none;">About</a><style>
a:focus-visible {
outline: 2px solid #0066cc;
outline-offset: 2px;
}
</style>Info Parsing WCAG 4.1.1 25% of WV entities 30–60 minutes
Why it matters
Deprecated HTML elements like <font>, <center>, and <marquee> are not reliably supported by assistive technologies. Modern HTML and CSS provide accessible alternatives.
How to fix it
Replace <font> with <span> + CSS, <center> with CSS text-align, <marquee> — remove entirely, <strike> with <del>.
<font size="5" color="red">Important</font>
<center>Welcome</center>
<marquee>Breaking news</marquee><span class="alert-text">Important</span>
<div style="text-align: center;">Welcome</div>
<p>Breaking news</p>Warning Resize Text WCAG 1.4.4 20% of WV entities 2 minutes
Why it matters
Users with low vision need to zoom in to read content. When the viewport meta tag includes user-scalable=no, it prevents pinch-to-zoom on mobile, making content unreadable.
How to fix it
Remove user-scalable=no and maximum-scale restrictions from your viewport meta tag.
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1.0"><meta name="viewport" content="width=device-width, initial-scale=1">Error Name, Role, Value WCAG 4.1.2 20% of WV entities 30–60 minutes
Why it matters
Interactive elements need accessible names so screen reader users know what they do. Custom widgets built with ARIA roles must have names via aria-label or visible text. Clickable divs need a role.
How to fix it
Add aria-label or visible text to elements with interactive ARIA roles. Add role='button' to clickable div/span elements.
<div role="button"></div>
<div onclick="doSomething()" tabindex="0">Click me</div><div role="button" aria-label="Close dialog">X</div>
<div role="button" onclick="doSomething()" tabindex="0">Click me</div>Forms & Interactive
Critical for any site with forms, search, or dynamic content. These ensure every resident can complete tasks online.
Warning Error Identification WCAG 3.3.1 40% of WV entities 20–40 minutes
Why it matters
When a required form input has no error message mechanism, users who make mistakes cannot identify what went wrong. Screen reader users especially need programmatic error identification.
How to fix it
For required inputs, use aria-describedby pointing to an error message container with role='alert'.
<input type="text" required><input type="text" required aria-describedby="name-error">
<span id="name-error" role="alert"></span>Warning Error Suggestion WCAG 3.3.3 35% of WV entities 15–30 minutes
Why it matters
Inputs with validation constraints should provide format hints. Without them, users must guess the correct format through trial and error.
How to fix it
Add aria-describedby to validated inputs, linking to a hint that describes the expected format.
<input type="email">
<input pattern="\d{3}-\d{4}"><input type="email" aria-describedby="email-hint">
<span id="email-hint">Example: user@example.com</span>Info Identify Input Purpose WCAG 1.3.5 60% of WV entities 10 minutes
Why it matters
Users with cognitive or motor disabilities benefit from browser autofill. The autocomplete attribute lets browsers pre-fill information, reducing effort and errors.
How to fix it
Add autocomplete attributes to form fields: given-name, family-name, email, tel, postal-code, etc.
<input type="text" name="fname">
<input type="email" name="email"><input type="text" name="fname" autocomplete="given-name">
<input type="email" name="email" autocomplete="email">Warning Label in Name WCAG 2.5.3 15% of WV entities 10–20 minutes
Why it matters
When an element has both visible text and an aria-label, speech-input users (Dragon NaturallySpeaking) cannot activate the control by speaking its visible label if the aria-label doesn't contain that text.
How to fix it
Ensure aria-label values contain the visible text of the element.
<button aria-label="Find items">Search</button><button aria-label="Search products">Search</button>Warning Status Messages WCAG 4.1.3 25% of WV entities 10–15 minutes
Why it matters
Dynamic messages (alerts, notifications, progress) must be announced to screen reader users. Elements with role='alert' or role='status' need aria-live attributes.
How to fix it
Add aria-live='assertive' to role='alert' elements and aria-live='polite' to role='status' elements.
<div role="alert">Form submitted</div><div role="alert" aria-live="assertive">Form submitted</div>Warning Pointer Cancellation WCAG 2.5.2 10% of WV entities 15–30 minutes
Why it matters
Users with motor impairments may accidentally trigger actions on pointer down. Actions should fire on pointer up (click) so users can cancel by moving the pointer away.
How to fix it
Use onclick instead of onmousedown or ontouchstart.
<button onmousedown="submitForm()">Submit</button><button onclick="submitForm()">Submit</button>Warning Timing Adjustable WCAG 2.2.1 5% of WV entities 5 minutes
Why it matters
Auto-refreshing pages via <meta http-equiv='refresh'> disorient users, especially those using screen readers. Users may lose their place or be redirected before finishing.
How to fix it
Remove <meta http-equiv='refresh'> tags. Use server-side redirects (HTTP 301/302) instead.
<meta http-equiv="refresh" content="5;url=/new-page"><!-- Use server-side redirect instead -->
<p>This page has moved. <a href="/new-page">Go to the new page</a></p>Media, Display & Code Quality
Important for sites with video, PDFs, or legacy HTML. Ensures content works at all zoom levels and on all devices.
Error Captions (Prerecorded) WCAG 1.2.2 8% of WV entities 1–2 hours per video
Why it matters
Users who are deaf or hard of hearing cannot access audio in videos without captions. Captions also benefit users in noisy environments or those who process written information better.
How to fix it
Add a <track> element with kind='captions' inside each <video>. The track should reference a WebVTT (.vtt) file.
<video controls src="/training.mp4"></video><video controls>
<source src="/training.mp4" type="video/mp4">
<track kind="captions" src="/training.vtt"
srclang="en" label="English">
</video>Info Audio Description WCAG 1.2.5 5% of WV entities 2–4 hours per video
Why it matters
Blind or low-vision users cannot see visual information in videos. Audio descriptions narrate important visual content not conveyed through the existing audio.
How to fix it
Add a <track> element with kind='descriptions' to video elements.
<video controls>
<source src="/training.mp4">
<track kind="captions" src="/captions.vtt">
</video><video controls>
<source src="/training.mp4">
<track kind="captions" src="/captions.vtt">
<track kind="descriptions" src="/descriptions.vtt"
srclang="en" label="Audio Description">
</video>Warning Audio Control WCAG 1.4.2 5% of WV entities 5 minutes
Why it matters
Audio that plays automatically interferes with screen readers. Users may not hear their assistive technology over autoplaying media.
How to fix it
Remove the autoplay attribute. If autoplay is necessary, add muted and provide a visible pause button.
<video autoplay src="/intro.mp4"></video><video autoplay muted loop playsinline>
<source src="/background.mp4">
</video>
<button onclick="document.querySelector('video').pause()">
Pause video
</button>Warning Orientation WCAG 1.3.4 3% of WV entities 2 minutes
Why it matters
Some users mount devices in a fixed orientation (e.g., wheelchair-mounted tablets). Forcing orientation prevents access.
How to fix it
Remove orientation restrictions from the viewport meta tag.
<meta name="viewport" content="width=device-width, orientation=landscape"><meta name="viewport" content="width=device-width, initial-scale=1">Warning Reflow WCAG 1.4.10 15% of WV entities 1–2 hours
Why it matters
Content must reflow to 320px width (400% zoom) without horizontal scrolling. Fixed-width elements prevent this for low-vision users.
How to fix it
Replace fixed pixel widths with flexible units (%, vw, max-width). Use flexbox or grid layouts.
<div style="width: 800px;">Content</div><div style="max-width: 800px; width: 100%;">Content</div>Warning Text Spacing WCAG 1.4.12 10% of WV entities 30 minutes
Why it matters
Users with dyslexia often override text spacing. Elements with overflow:hidden + fixed line-height may clip text when spacing is increased.
How to fix it
Use relative units (em, rem) for line-height and letter-spacing. Avoid combining overflow:hidden with fixed text properties.
<div style="overflow: hidden; line-height: 14px; height: 20px;">
Content that may be clipped
</div><div style="line-height: 1.5; letter-spacing: 0.12em;">
Content adapts to spacing overrides
</div>Info Language of Parts WCAG 3.1.2 5% of WV entities 5–10 minutes
Why it matters
When a page section is in a different language, screen readers need a lang attribute on that element to switch pronunciation. Empty or invalid lang attributes cause wrong pronunciation.
How to fix it
Use valid BCP 47 language tags: en, es, fr, de, zh, ar. Remove empty lang attributes.
<p lang="">Some text</p>
<span lang="english">Hello</span><p lang="es">Hola mundo</p>
<span lang="fr">Bonjour</span>PDF Accessibility: Beyond WCAG
WCAG 2.1 covers web pages, but PDFs have their own accessibility standard: PDF/UA (ISO 14289-1). Government agencies that publish PDFs must meet both WCAG requirements and the PDF/UA structural requirements that screen readers depend on.
PDF/UA (ISO 14289-1)
The international standard for accessible PDFs. Requires a complete structure tree with proper tag hierarchy (headings, paragraphs, lists, tables), language declarations, alternative text for images, proper reading order, and Unicode character mapping. Every tagged element must have a role that assistive technology can interpret.
Matterhorn Protocol
The definitive test suite for PDF/UA compliance, maintained by the PDF Association. Defines 136 specific failure conditions across 31 checkpoints, covering structure, metadata, fonts, images, annotations, and content tagging. Approximately 89 of these checks can be fully automated; the remainder require human judgment.
Section 508
The U.S. federal accessibility standard that applies to all government agencies and organizations receiving federal funding. For electronic documents like PDFs, Section 508 incorporates WCAG 2.0 Level AA and PDF/UA requirements. Non-compliance can result in complaints, lawsuits, and loss of federal funding.
Why Adobe Acrobat (and Other Checkers) Miss Things
Not all accessibility checkers test the same rules. A PDF can pass Adobe Acrobat's built-in checker and still fail a full Matterhorn Protocol validation. Here's why.
Common Checkers
Adobe Acrobat Pro, PAC 2024, Axes
- Partial Matterhorn coverage. Adobe checks ~30 of 136 failure conditions. PAC covers more but still misses edge cases in font encoding, annotation tagging, and XMP metadata.
- Lenient structure validation. May accept a PDF with a structure tree that
lacks
ParentTreeentries, missing/StructParentkeys on annotations, or orphaned marked-content references — all of which break screen readers. - XMP metadata gaps. Rarely validate that
pdfuaid:partis declared with the requiredpdfaExtension:schemasdescription. A PDF can claim PDF/UA conformance in its metadata while missing the schema declaration that proves it. - No Type3 font glyph validation. Type3 fonts define each glyph as a content stream. If those streams contain untagged drawing operators, assistive technology can't associate them with the structure tree. Most checkers ignore this entirely.
- Inconsistent role mapping checks. May not flag custom tag names
that lack a
/RoleMapentry mapping them to standard PDF structure types.
veraPDF (Our Validator)
Open-source, used by Library of Congress & EU national archives
- Full Matterhorn Protocol coverage. Tests all 89 machine-checkable failure conditions across every clause of ISO 14289-1. Nothing is skipped.
- Strict structure tree validation. Verifies that every content operator
on every page is wrapped in a marked-content sequence, that every annotation has a
/StructParententry pointing to a validParentTreenode, and that the tag hierarchy forms a valid tree. - Complete XMP metadata checks. Validates not just that
pdfuaid:part=1exists, but that the extension schema declaration is present and well-formed — the exact check that proves real conformance. - Type3 font and Form XObject validation. Inspects content streams
inside Type3
/CharProcsglyph definitions and Form XObjects to ensure every drawing operator is wrapped in proper artifact or tag markers. - Deterministic, reproducible results. Same PDF always produces the same validation output. No heuristics, no "close enough" — either the document meets the standard or it doesn't.
A PDF that passes Adobe Acrobat's accessibility check can still fail 20–40 Matterhorn Protocol rules when tested with veraPDF. These aren't theoretical edge cases — they're real failures that cause screen readers like JAWS and NVDA to skip content, read elements out of order, or crash on complex documents. We validate every PDF against the full Matterhorn Protocol before marking it compliant.
How We Ensure Every Check Is Correct
Our remediation pipeline doesn't just fix once and hope. It validates after every change, iterates on remaining failures, and escalates to more powerful strategies automatically.
Fix & Validate Loop
Every PDF goes through an automated fix-validate cycle. After each remediation pass, the document is re-validated against all 89 machine-checkable Matterhorn Protocol rules. If any failures remain, the system identifies the specific clauses that failed and generates targeted fixes for each one.
6-Strategy Escalation
If a light-touch fix doesn't achieve compliance, the system automatically escalates through six increasingly powerful strategies — from metadata repair to OCR remediation to full structure rebuilds to pixel-level reconstruction. Each strategy is followed by a complete re-validation.
Clause-Targeted Refinement
After initial remediation, remaining failures are analyzed by specific PDF/UA clause.
The system generates surgical fixes for individual violations — a missing ParentTree entry, an untagged annotation, an improperly wrapped content
stream — and re-validates after each fix. This iterative refinement is what
pushes compliance from ~90% to 99%+.
Continuous Monitoring
Every fixed PDF is tracked in a compliance database. If a site publishes a new PDF or replaces an existing one, it's automatically detected, validated, and remediated. Compliance isn't a one-time event — it's maintained continuously.
DIY vs SiteCheck ADA
If you have the technical capacity, these fixes are straightforward — this guide gives you everything you need. All 28 checks are documented above with before-and-after code you can copy directly. If you'd rather have experts handle it, we're here to help.
| Task | Do it yourself | With SiteCheck ADA |
|---|---|---|
| Full WCAG 2.1 AA scan (all 28 checks, every public page) | Hours of manual testing per page | Automated in minutes |
| PDF accessibility audit & remediation | Requires Adobe Pro + training | Unlimited structural + AI-enhanced fixes included |
| Prioritized remediation roadmap | Self-organized spreadsheet | Delivered as PDF + dashboard |
| AI-generated HTML fixes for every issue | Requires in-house dev + WCAG expertise | Included with $4,800 package |
| Post-remediation verification | Another round of manual testing | Automated rescan included |
| 365 days of compliance monitoring | Hire or contract an accessibility firm | Included with $4,800 package |
Services & pricing
Simple annual pricing. No hidden fees. Invoiced to your agency's normal vendor-payment process.
Transparent pricing. No hidden fees. Generous included allocations.
Compliance Report
Detailed assessment of all WCAG 2.1 violations with remediation guidance.
- Full HTML & PDF accessibility audit
- WCAG 2.1 Level AA issue breakdown
- Prioritized remediation roadmap
- Executive summary for leadership
- Delivered within 48 hours
Report + Full Remediation
1 year of hosted compliance monitoring, remediation, and PDF Agent credits.
- Everything in Compliance Report
- 1 year access to the hosted platform
- Purpose-built AI remediation — fine-tuned on accessibility standards — generates production-ready fixes for every page
- Unlimited structural PDF remediation & tagging
- Included PDF Agent credits for complex documents
- Post-remediation verification scan
- 365 days of compliance monitoring
- Automated weekly scans with alerts
- Dashboard access for ongoing tracking
Includes unlimited structural fixes. PDF Agent credits for complex documents included in your allocation.
Enterprise
Everything in Full Remediation — scaled for departments managing multiple websites or large document libraries.
- Everything in Report + Full Remediation
- 1,500 PDF Agent credits (3x standard)
- Up to 3 sites under one subscription
- Priority processing queue
- Dedicated account manager
- Quarterly compliance summary reports
- Discounted additional credits ($0.75/PDF)
- Compliance documentation support
Need more than 3 sites or 1,500 credits? Contact us for custom sizing.
Still have questions? We're here to help — not to sell.
Email ada@appalach.info or call (304) 814-2769. We'll answer your accessibility questions, no strings attached.