EAA Accessibility Auto-Fixer — Complete guide
Install, audit and bring your WordPress/WooCommerce site into European Accessibility Act compliance: WCAG 2.2 AA scanner, automatic fixes, AI alt text and legal statement.
Overview
EAA Accessibility Auto-Fixer brings your WordPress and WooCommerce site into compliance with the European Accessibility Act (EU directive 2019/882, applicable since 28 June 2025). The plugin combines four building blocks: a WCAG 2.2 level AA scanner, an automatic frontend fixer, an AI alt text generator (Anthropic Claude) and a legal accessibility statement generator.
Who is affected? EU e-commerce businesses with more than 10 employees OR more than 2 million euros in annual revenue. Micro-enterprises are exempt for services but must still make their products accessible.
Installation
- Download the ZIP from your DataFirefly account.
- In WordPress, go to Plugins → Add New → Upload Plugin, select the ZIP and click Install Now.
- Click Activate. The plugin automatically creates 4 tables (
wp_eaa_audits,wp_eaa_issues,wp_eaa_fixes,wp_eaa_alt_cache), schedules a weekly audit and generates an “Accessibility statement” page containing the[eaa_accessibility_declaration]shortcode.
Requirements: WordPress 6.2+, WooCommerce 8.0+ (optional — the plugin also works on plain WordPress), PHP 8.1+.
First audit
- Go to EAA Accessibility → Audit.
- The homepage URL is pre-filled; you can replace it with any URL of the site.
- Click Run the audit. The scanner analyzes the page and displays the score out of 100, the list of issues (severity, rule, WCAG criterion, HTML excerpt, suggestion) and a Fix button for auto-fixable issues.
Understanding the score
The score starts at 100 and each issue deducts points based on its severity: critical 15 points, serious 8, moderate 3, minor 1. A score of 90 or above displays in green, 70 to 89 in orange, below that in red. The legal statement mirrors this score: 90+ yields “Fully compliant”, 50 to 89 “Partially compliant”, below 50 “Non compliant”.
The 15 checked rules
- html-lang — lang attribute on the root element (WCAG 3.1.1)
- page-title — presence and content of the title tag (2.4.2)
- headings — single h1 and no level skips (1.3.1)
- image-alt — alt attribute on all images (1.1.1)
- link-name — accessible text on every link (2.4.4)
- button-name — accessible name on every button (4.1.2)
- label — label on every form field (1.3.1, 4.1.2)
- skip-link — skip link at the top of the page (2.4.1)
- landmarks — main landmark present (1.3.1)
- duplicate-id — no duplicate identifiers (4.1.1)
- aria-roles — valid ARIA roles (4.1.2)
- target-size — touch targets of at least 24×24 px (2.5.8, new in WCAG 2.2)
- color-contrast — text/background contrast of at least 4.5:1 (1.4.3)
- tabindex — no positive tabindex (2.4.3)
- autoplay — no uncontrollable autoplay (1.4.2)
Automatic fixes
In EAA Accessibility → Settings → Active fixes, enable the fixes the plugin applies in real time via output buffer, without modifying your theme:
- Lang attribute — adds the site language on the root element if missing.
- Skip link — inserts “Skip to content” at the top of the page, visible on keyboard focus.
- Missing alt text — marks decorative images (decoration, icon classes…) with an empty alt; content images go through AI if enabled.
- Form labels — adds an aria-label derived from the placeholder or name to fields without a label.
- ARIA roles and icons — aria-label on icon buttons, role=”presentation” on decorative SVGs.
- Focus indicator — injects a contrasted :focus-visible style.
- Contrasts — fixes inline colors below 4.5:1 by automatically darkening or lightening.
- Target size — ensures 24×24 px on buttons and links via CSS.
Every fix is logged in the wp_eaa_fixes table with the before/after value — useful in case of an audit. Check the totals by type in the Dashboard.
If a fix conflicts with your theme (for instance an existing skip link), disable the relevant fix: the plugin detects existing elements but some heavily customized themes may need adjustment.
AI alt text generation
Setup
- Create an API key at console.anthropic.com.
- In EAA Accessibility → Settings → AI generation, check Enable AI, paste the key, then click Test the connection.
- Choose the model: Claude Haiku 4.5 (default, around 0.0001 euro per image, recommended), Sonnet 4.6 (higher quality) or Opus 4.7 (maximum quality).
Bulk generation
From the Dashboard, the bulk generation button processes the media library in batches of 5 images. Each description is generated in the language of the attachment (FR/EN/ES/DE/IT), stored in wp_eaa_alt_cache and written into the WordPress alt field. The cache prevents any re-generation: an image already described in a language is never sent to the API again.
Images larger than 4 MB are automatically resized to a maximum of 1024 px before being sent to the API — with no impact on your original files.
Visitor widget
Enable it in Settings → Visitor widget. A floating ♿ button appears in the bottom-right corner of the site and opens a panel with 8 preferences: text size (5 steps, from 100% to 200%), high contrast, dyslexia-friendly font, improved spacing, reduced animations, underlined links, large cursor, and a reset button. Choices are saved in localStorage (no cookie, no data sent to the server) and restored on every visit. The panel is fully keyboard navigable and closes with Escape.
Legal statement
The page created on activation displays, via the [eaa_accessibility_declaration] shortcode: the compliance status computed from the latest audit, the score, the date, the non-accessible content, the methodology and your contact details. Fill in this information under Settings → Information for the legal statement: company name, accessibility contact email, phone, postal address.
Manual completion recommended. Add your legal identifiers (business registration number or equivalent) and have the statement reviewed by an accessibility expert: the plugin covers 30 to 40% of automatable criteria, a human review remains necessary for full compliance.
Then add a link to this page in your footer — this is an EAA requirement.
Scheduled audits
Under Settings → Scheduled audit, pick the frequency: daily, weekly (default) or monthly. The WordPress cron then scans the homepage automatically and feeds the history. Browse all past audits under EAA Accessibility → History with score, duration and issue breakdown by severity.
Uninstall
By default, uninstalling preserves the tables and history (legal traceability). To remove everything, enable the data removal option in the settings before uninstalling: the 4 tables, the options and the statement page will then be deleted.
Troubleshooting
The scanner returns a connection error
The scanner uses wp_remote_get to fetch the page. Check that your server can call itself (loopback): some hosts block outgoing requests to the site’s own domain. Test with Tools → Site Health.
The API key test fails
Check that the key starts with sk-ant-, that your Anthropic account has credit, and that the server allows outgoing HTTPS connections to api.anthropic.com.
Fixes are not applied
The fixer is inactive on RSS feeds, REST/AJAX requests, the admin and cron. If a caching plugin serves a static version, clear the cache after activation. Also check that Enable the frontend fixer is ticked.
The widget does not appear
Check that Visitor widget is enabled in the settings and that your theme calls wp_footer() — the widget hooks into it.