EAA Accessibility Auto-Fixer: guia completo
Instalar, auditar e colocar o seu site WordPress/WooCommerce em conformidade com o European Accessibility Act: scanner WCAG 2.2 AA, correções automáticas, textos alternativos por IA e declaração legal.
Apresentação
O EAA Accessibility Auto-Fixer coloca o seu site WordPress e WooCommerce em conformidade com o European Accessibility Act (diretiva UE 2019/882, aplicável desde 28 de junho de 2025). O plugin combina quatro blocos: um scanner WCAG 2.2 nível AA, um corretor automático no front-end, um gerador de textos alternativos por IA (Anthropic Claude) e um gerador de declaração legal de acessibilidade.
Quem está abrangido? Os operadores de comércio eletrónico da UE com mais de 10 trabalhadores OU mais de 2 milhões de euros de volume de negócios anual. As microempresas estão isentas quanto aos serviços, mas têm de tornar acessíveis os produtos que comercializem.
Instalação
- Descarregue o ZIP a partir da sua conta DataFirefly.
- No WordPress, vá a Plugins → Adicionar → Carregar plugin, selecione o ZIP e clique em Instalar agora.
- Clique em Ativar. O plugin cria automaticamente 4 tabelas (
wp_eaa_audits,wp_eaa_issues,wp_eaa_fixes,wp_eaa_alt_cache), agenda uma auditoria semanal e gera uma página «Declaração de acessibilidade» com o shortcode[eaa_accessibility_declaration].
Requisitos: WordPress 6.2+, WooCommerce 8.0+ (facultativo, o plugin também funciona só com WordPress), PHP 8.1+.
Primeira auditoria
- Vá a EAA Accessibility → Auditoria.
- O URL da página inicial vem pré-preenchido; pode substituí-lo por qualquer URL do site.
- Clique em Lançar a auditoria. O scanner analisa a página e apresenta a pontuação em 100, a lista de anomalias (gravidade, regra, critério WCAG, excerto de HTML, sugestão) e um botão Corrigir para as anomalias corrigíveis automaticamente.
Compreender a pontuação
A pontuação começa em 100 e cada anomalia retira pontos conforme a gravidade: crítica 15 pontos, séria 8, moderada 3, menor 1. Uma pontuação de 90 ou mais aparece a verde, de 70 a 89 a laranja, e abaixo disso a vermelho. A declaração legal retoma essa pontuação: 90 ou mais dá «Totalmente conforme», 50 a 89 «Parcialmente conforme», e menos de 50 «Não conforme».
As 15 regras verificadas
- html-lang: atributo lang no elemento raiz (WCAG 3.1.1)
- page-title: presença e conteúdo da etiqueta title (2.4.2)
- headings: presença de um h1 único e hierarquia sem saltos (1.3.1)
- image-alt: atributo alt em todas as imagens (1.1.1)
- link-name: texto acessível em cada ligação (2.4.4)
- button-name: nome acessível em cada botão (4.1.2)
- label: etiqueta em cada campo de formulário (1.3.1, 4.1.2)
- skip-link: ligação de salto no início da página (2.4.1)
- landmarks: marco main presente (1.3.1)
- duplicate-id: sem identificadores duplicados (4.1.1)
- aria-roles: funções ARIA válidas (4.1.2)
- target-size: alvos táteis de 24×24 px no mínimo (2.5.8, novidade da WCAG 2.2)
- color-contrast: contraste entre texto e fundo de 4,5:1 no mínimo (1.4.3)
- tabindex: sem tabindex positivo (2.4.3)
- autoplay: sem reprodução automática não controlável (1.4.2)
Correções automáticas
Em EAA Accessibility → Definições → Correções ativas, ative as correções que o plugin aplica em tempo real através do output buffer, sem alterar o seu tema:
- Atributo lang: acrescenta o idioma do site no elemento raiz, se estiver em falta.
- Ligação de salto: insere «Ir para o conteúdo» no topo da página, visível ao receber o foco por teclado.
- Texto alternativo em falta: marca as imagens decorativas (classes decoration, icon…) com um alt vazio; as imagens de conteúdo passam pela IA, se estiver ativa.
- Etiquetas de formulário: acrescenta um aria-label deduzido do placeholder ou do name nos campos sem label.
- Funções ARIA e ícones: aria-label nos botões com ícone, role=”presentation” nos SVG decorativos.
- Indicador de foco: injeta um estilo :focus-visible bem contrastado.
- Contrastes: corrige as cores inline abaixo de 4,5:1, escurecendo ou clareando automaticamente.
- Tamanho dos alvos: garante 24×24 px em botões e ligações através de CSS.
Cada correção é registada na tabela wp_eaa_fixes com o valor antes e depois, o que é útil em caso de fiscalização. Consulte o total por tipo no Painel.
Se uma correção entrar em conflito com o seu tema (por exemplo, uma ligação de salto já existente), desative a correção em causa: o plugin deteta os elementos existentes, mas alguns temas muito personalizados podem exigir um ajuste.
Geração de textos alternativos por IA
Configuração
- Crie uma chave de API em console.anthropic.com.
- Em EAA Accessibility → Definições → Geração por IA, assinale Ativar a IA, cole a chave e clique em Testar a ligação.
- Escolha o modelo: Claude Haiku 4.5 (predefinido, cerca de 0,0001 € por imagem, recomendado), Sonnet 4.6 (qualidade superior) ou Opus 4.7 (qualidade máxima).
Geração em massa
A partir do Painel, o botão de geração em massa trata a biblioteca de multimédia em lotes de 5 imagens. Cada descrição é gerada no idioma do anexo (FR/EN/ES/DE/IT), guardada em wp_eaa_alt_cache e escrita no campo alt do WordPress. A cache evita qualquer nova geração: uma imagem já descrita num idioma nunca é reenviada à API.
As imagens com mais de 4 MB são automaticamente redimensionadas para um máximo de 1024 px antes do envio à API, sem qualquer impacto nos seus ficheiros originais.
Widget para visitantes
Ative-o em Definições → Widget para visitantes. Aparece um botão flutuante ♿ em baixo à direita do site, que abre um painel com 8 preferências: tamanho do texto (5 patamares, de 100% a 200%), contraste elevado, tipo de letra adaptado à dislexia, espaçamento melhorado, animações reduzidas, sublinhado das ligações, cursor ampliado e um botão de reposição. As escolhas são guardadas em localStorage (sem cookies e sem qualquer dado enviado ao servidor) e repostas em cada visita. O painel é totalmente navegável por teclado e fecha-se com a tecla Esc.
Declaração legal
A página criada na ativação apresenta, através do shortcode [eaa_accessibility_declaration]: o estado de conformidade calculado sobre a última auditoria, a pontuação, a data, os conteúdos não acessíveis, a metodologia e os seus contactos. Preencha estas informações em Definições → Informações para a declaração legal: designação social, e-mail de contacto de acessibilidade, telefone e morada.
Complemento manual recomendado. Acrescente os seus identificadores legais (número de identificação da empresa, registo comercial ou equivalente) e mande validar a declaração por um especialista em acessibilidade: o plugin cobre 30 a 40% dos critérios automatizáveis, e uma revisão humana continua a ser necessária para a conformidade total.
Acrescente depois uma ligação para esta página no seu rodapé, que é uma exigência do EAA.
Auditorias agendadas
Em Definições → Auditoria agendada, escolha a frequência: diária, semanal (predefinida) ou mensal. O cron do WordPress analisa então a página inicial automaticamente e alimenta o histórico. Consulte todas as auditorias passadas em EAA Accessibility → Histórico, com pontuação, duração e repartição das anomalias por gravidade.
Desinstalação
Por predefinição, a desinstalação conserva as tabelas e o histórico (rastreabilidade legal). Para eliminar tudo, ative a opção de eliminação dos dados nas definições antes de desinstalar: as 4 tabelas, as opções e a página de declaração são então removidas.
Resolução de problemas
O scanner devolve um erro de ligação
O scanner usa o wp_remote_get para obter a página. Verifique que o seu servidor consegue chamar-se a si próprio (loopback): alguns alojamentos bloqueiam os pedidos de saída para o próprio domínio do site. Teste em Ferramentas → Saúde do site.
O teste da chave de API falha
Verifique que a chave começa por sk-ant-, que a sua conta Anthropic tem crédito, e que o servidor autoriza ligações de saída para api.anthropic.com em HTTPS.
As correções não se aplicam
O corretor está inativo nos feeds RSS, nos pedidos REST e AJAX, na administração e no cron. Se um plugin de cache servir uma versão estática, limpe a cache depois da ativação. Verifique também que Ativar o corretor de front-end está mesmo assinalado.
O widget não aparece
Verifique que o Widget para visitantes está ativo nas definições e que o seu tema chama mesmo o wp_footer(), porque é nesse hook que o widget se injeta.