# EAA Accessibility Auto-Fixer — Complete guide

> 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…

- Page: <https://www.datafirefly.com/en/documentation/eaa-accessibility-auto-fixer/>
- Language: en
- Last updated: 2026-07-01
- Other languages: [fr](https://www.datafirefly.com/documentation/eaa-accessibility-auto-fixer/index.md), [es](https://www.datafirefly.com/es/documentation/eaa-accessibility-auto-fixer/index.md), [de](https://www.datafirefly.com/de/documentation/eaa-accessibility-auto-fixer/index.md), [it](https://www.datafirefly.com/it/documentation/eaa-accessibility-auto-fixer/index.md), [pl](https://www.datafirefly.com/pl/documentation/eaa-accessibility-auto-fixer/index.md), [nl](https://www.datafirefly.com/nl/documentation/eaa-accessibility-auto-fixer/index.md), [pt](https://www.datafirefly.com/pt/documentation/eaa-accessibility-auto-fixer/index.md)
- Index: <https://www.datafirefly.com/en/documentation/llms.txt>

## 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

1. Download the ZIP from your DataFirefly account.
2. In WordPress, go to **Plugins → Add New → Upload Plugin**, select the ZIP and click **Install Now**.
3. 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

1. Go to **EAA Accessibility → Audit**.
2. The homepage URL is pre-filled; you can replace it with any URL of the site.
3. 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

1. Create an API key at [console.anthropic.com](https://console.anthropic.com/).
2. In **EAA Accessibility → Settings → AI generation**, check **Enable AI**, paste the key, then click **Test the connection**.
3. 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.
