O prazo de 28 de junho de 2025 do Ato Europeu de Acessibilidade já passou. Se constrói ou mantém sites WordPress para clientes que vendem a consumidores na UE (e-commerce, banca, transportes, bilhética, ebooks), esses clientes carregam agora exposição legal direta se o site não cumprir WCAG 2.2 AA. A auditoria deixou de ser um “extra simpático de consultoria”; é o documento que o departamento jurídico do cliente vai pedir quando entrar a primeira queixa.
Em Portugal, o quadro é familiar: o Decreto-Lei 83/2018 transpõe a Diretiva (UE) 2016/2102 e exige a declaração de acessibilidade nos sites do setor público, com a AMA (Agência para a Modernização Administrativa) a coordenar a conformidade. O Estatuto do Estudante com Necessidades Específicas e o quadro do Estado Social (ENS) reforçam o contexto público. A EAA estende esta obrigação ao setor privado e o cruzamento com o RGPD aparece assim que há formulários ou contas de cliente.
Este texto é o workflow que de facto corremos em projetos WordPress: por que ferramentas automáticas começar, onde deixam de ser úteis e como tratar as partes do WCAG 2.2 que só uma pessoa com teclado e NVDA consegue verificar.
Onde a exposição legal vive de facto
Uma moldura útil antes de abrir qualquer ferramenta: a EAA não cobre só “setor público”. Cobre serviços orientados ao consumidor. Clientes privados que auditámos nos últimos doze meses e estavam no âmbito: uma livraria portuguesa de ebooks, um e-commerce alemão de mobiliário e uma pequena plataforma europeia de reservas em WooCommerce. Nenhum percebeu que estava no âmbito até o responsável de compliance levantar o ponto.
Um desses clientes (loja WooCommerce a vender para a Alemanha e França) recebeu uma queixa escrita dois meses depois do lançamento. O gatilho foi um passo de checkout personalizado em que o controlo “continuar para pagamento” tinha sido feito como <div onclick="..."> em vez de button. Utilizadores de teclado não conseguiam chegar lá e o NVDA não anunciava nada no foco. A correção foi pequena (substituir por <button type="button">, restaurar foco nativo, anunciar a transição com aria-live="polite"), mas o vai-e-vem jurídico consumiu cerca de uma semana de tempo da agência. É essa a forma do risco: não um processo dramático, mas correspondência lenta e cara que se evita auditando antes do lançamento e em cada PR que mexe na estrutura do DOM.
O próprio WCAG 2.2 acrescenta três critérios que mapeiam de perto falhas comuns em WordPress e WooCommerce:
- 2.4.11 Foco Não Ocultado (AA) e 2.4.13 Aparência do Foco (AAA) - cabeçalhos sticky, banners de cookies e widgets de chat tapam regularmente o elemento focado. Convém verificar em todos os templates.
- 2.5.7 Movimentos de Arrastar (AA) - qualquer interação só por arrastar (toggles em slider, ordenação tipo kanban no backoffice, sliders de comparação de imagens no front) precisa de alternativa single-pointer, como botões mais/menos ou input por teclado.
- 2.5.8 Tamanho do Alvo Mínimo (AA) - alvos interativos têm de ter pelo menos 24×24 pixels CSS. A maioria dos rodapés de tema, links de paginação e tiras de ícones sociais falha isto em mobile por defeito.
O núcleo do WordPress tem acessibilidade decente para o editor de blocos e primitivas de navegação no front. As falhas que encontramos em auditoria estão quase sempre em três sítios: blocos ACF personalizados (que não herdam a ligação ARIA do Gutenberg), overrides de componentes do tema e page builders de terceiros. Planeie a auditoria em torno destes, não do core.
Compreender o WCAG 2.2: A Fundação da Auditoria de Acessibilidade
Antes de mergulhar nas ferramentas e fluxos de trabalho, os auditores devem compreender a estrutura das Diretrizes de Acessibilidade para Conteúdo Web (WCAG) 2.2. Lançado em outubro de 2023, o WCAG 2.2 constrói sobre versões anteriores com nove novos critérios de sucesso focados na acessibilidade cognitiva e motora.
Os Quatro Princípios da Acessibilidade
O WCAG 2.2 organiza os requisitos dé acessibilidade em torno de quatro princípios fundamentais, comumente lembrados pelo acrónimo POUR:
1. Percetível
A informação é os componentes da interface do útilizador devem ser apresentáveis aos útilizadores de formas que eles possam percecionar. Este princípio abrange:
- Alternativas de texto para conteúdo não textual (imagens, vídeos, áudio)
- Legendas e transcrições para multimédia
- Contraste de cores e capacidades de redimensionamento de texto
- Conteúdo que não dependa exclusivamente de características sensoriais
2. Operável
Os componentes da interface do útilizador é a navegação devem ser operáveis por todos os útilizadores. Requisitos-chave incluem:
- Acessibilidade total por teclado
- Limites de tempo suficientes com capacidade de extensão
- Prevenção de convulsões e reações físicas
- Navegação clara é orientação
3. Compreensível
A informação é a operação da interface do útilizador devem ser compreensíveis:
- Conteúdo de texto legível e compreensível
- Funcionalidade e navegação previsíveis
- Assistência de entrada e prevenção de erros
- Identificação e rotulagem consistentes
4. Robusto
O conteúdo deve ser suficientemente robusto para funcionar com tecnologias dé assistência atuais e futuras:
- HTML válido e bem formado
- Compatível com tecnologias dé assistência
- Princípios de melhoria progressiva
- Marcação conforme com padrões
Níveis de Conformidade WCAG 2.2
O WCAG 2.2 define três níveis de conformidade, cada um construindo sobré o anterior:
| Nível | Descrição | Caso de Uso Típico |
|---|---|---|
| A | Requisitos mínimos dé acessibilidade; aborda as barreiras mais críticas | Conformidade básica, raramente suficiente sozinha |
| AA | Padrão da indústria; aborda barreiras dé acessibilidade principais | Exigido pela maioria da legislação (EAA, ADA, AODA) |
| AAA | Acessibilidade melhorada; o nível mais alto de conformidade | Aplicações especializadas, objetivo aspiracional |
A maioria dos requisitos legais exige conformidade com o Nível AA do WCAG 2.2. Esté artigo foca em alcançar e manter a conformidade com o Nível AA.
Novidades no WCAG 2.2
O WCAG 2.2 introduz nove novos critérios de sucesso qué os auditores devem compreender:
- 2.4.11 Foco Não Ocultado (AA): Os indicadores de foco não devem ser escondidos por outro conteúdo
- 2.4.12 Foco Não Ocultado (Melhorado) (AAA): Requisitos mais rigorosos para visibilidade do foco
- 2.4.13 Aparência do Foco (AAA): Requisitos específicos para tamanho e contraste do indicador de foco
- 2.5.7 Movimentos de Arrastar (AA): Alternativas a arrastar para entrada de ponteiro
- 2.5.8 Tamanho do Alvo (Mínimo) (AA): Tamanho mínimo dé alvo de 24×24 pixels CSS
- 3.2.6 Ajuda Consistente (A): Mecanismos dé ajuda em localizações consistentes
- 3.3.7 Entrada Redundante (A): Evitar exigir informação já introduzida
- 3.3.8 Autenticação Acessível (Mínimo) (AA): Testes de função cognitiva não exigidos para autenticação
- 3.3.9 Autenticação Acessível (Melhorada) (AAA): Sem testes de função cognitiva com alternativas
Ferramentas automáticas: o que apanham de facto
Sé honesto com o cliente sobre este número: as ferramentas automáticas de acessibilidade cobrem grosso modo 30 a 40 por cento dos critérios de sucesso WCAG. São boas a detetar atributos alt em falta, labels de formulário em falta, contraste insuficiente em texto estático, atributos de língua em falta, IDs duplicados e ARIA visivelmente partido. Não te dizem se o alt é significativo, se a ordem de foco faz sentido, se o leitor de ecrã anuncia uma mudança de estado, ou se o teu carrossel personalizado funciona sem rato. Os restantes 60 a 70 por cento exigem uma pessoa com teclado, leitor de ecrã e paciência.
Corre as verificações automáticas primeiro porque são baratas e limpam as falhas óbvias antes de gastares tempo em testes manuais. Começa pelo axe DevTools (Deque) como extensão de browser durante o desenvolvimento - as tags WCAG 2.2 entram diretamente no relatório, e a separação entre “carece de revisão” e violações certas mantém os falsos positivos perto de zero. Faz scan a cada template distinto (página inicial, arquivo, single, produto, checkout, contacto, login, resultados de pesquisa) em vez de a cada URL - a maioria dos sites WordPress portugueses tem menos de dez templates distintos mesmo com milhares de páginas. O WebAIM WAVE serve como segunda opinião e é particularmente bom a visualizar a estrutura de cabeçalhos quando um redator escreveu h4 “porque parece bem”. O Pa11y em GitHub Actions ou Bitbucket Pipelines apanha regressões no PR onde são mais baratas de corrigir. A Tenon API é exagero para um único site e vale a pena montar quando se passa de cinco ou seis sites de cliente sob a mesma agência.
As ferramentas automatizadas de teste dé acessibilidade fornecem deteção rápida e escalável de problemas comuns. Embora detetem apenas aproximadamente 30% das barreiras dé acessibilidade, são essenciais para estabelecer a conformidade de base e detetar regressões.
Extensões de Navegador para Feedback Imediato
axe DevTools
Desenvolvida pela Deque Systems, a axe DevTools é o padrão da indústria para testes dé acessibilidade baseados no navegador. A extensão gratuita do navegador fornece:
- Zero Falsos Positivos: A axe é projetada para reportar apenas problemas que pode verificar, minimizando ruído
- Cobertura WCAG 2.2: Suporté abrangente para todos os critérios de sucesso WCAG 2.2
- Teste Inteligente: Distingue entre “necessita revisão” e violações definitivas
- Pronta para Integração: Os resultados podem ser exportados para documentação
Instalação e Utilização Básica:
- Instalé a extensão axe DevTools da Chrome Web Storé ou Firefox Add-ons
- Navegue para a página que pretende testar
- Abra as DevTools do navegador (F12) e selecioné o separador “axe DevTools”
- Clique em “Scan all of my page” para uma análisé abrangente
- Revisé os resultados categorizados por gravidade: Crítico, Grave, Moderado, Menor
Interpretação dos Resultados axe:
Crítico: Bloqueia completamente útilizadores de tecnologias dé assistência
Exemplo: Etiquetas de formulário em falta, botões vazios
Grave: Causa barreiras significativas para alguns útilizadores
Exemplo: Contraste de cores insuficiente, texto alternativo em falta
Moderado: Causa frustração ou conclusão mais lenta de tarefas
Exemplo: Texto de link ambíguo, níveis de cabeçalho saltados
Menor: Inconveniência menor ou violação de boas práticas
Exemplo: Texto alternativo redundante, links redundantes
WAVE (Web Accessibility Evaluation Tool)
O WAVE, desenvolvido pela WebAIM, oferecé uma abordagem visual para testes dé acessibilidade:
- Sobreposições Visuais: Os problemas são destacados diretamente na página
- Ícones e Indicadores: Ícones codificados por cores mostram tipos de erro rápidamente
- Sem Registo Obrigatório: Completamente gratuito, não é necessária conta
- Detalhes no Painel Lateral: Explicações detalhadas ao lado dos indicadores visuais
Utilização Eficaz do WAVE:
- Instalé a extensão do navegador WAVE ou usé a versão online em wave.webaim.org
- Clique no ícone WAVE para ativar a avaliação
- Revisé o painel de resumo mostrando erros, alertas, funcionalidades, elementos estruturais e ARIA
- Clique em qualquer ícone na página para ver informação detalhada
- Usé o separador “Reference” para compreender os requisitos WCAG
Accessibility Insights for Web
A Accessibility Insights da Microsoft fornece dois modos de teste:
- FastPass: Verificações automatizadas rápidas (2 minutos)
- Assessment: Fluxo de trabalho de teste manual abrangente guiado (30+ minutos)
A ferramenta é particularmente valiosa para equipas que já útilizam ferramentas de desenvolvimento da Microsoft e integra-se bem com o Azure DevOps.
Plugins de Acessibilidade Específicos para WordPress
WP Accessibility
O WP Accessibility aborda problemas comuns dé acessibilidade do WordPress sem exigir alterações de código:
Funcionalidades:
- Remové atributos target de links (evita janelas novas inesperadas)
- Adiciona links de salto para navegação por teclado
- Força atributos alt em imagens (com tratamento de fallback)
- Adiciona etiquetas a formulários padrão do WordPress
- Fornece barra de ferramentas com controlos de tamanho de fonte e contraste
Melhores Práticas de Configuração:
// Definições recomendadas do WP Accessibility para preparação dé auditoria
// Definições → WP Accessibility
// Ativar: Adicionar links de salto ao tema
// Ativar: Adicionar papéis de março a elementos estruturais HTML5
// Ativar: Forçar atributos alt em imagens
// Ativar: Adicionar títulos de posts a links "ler mais"
// Desativar: Remover atributos title (pode conflitar com alguns temas)
Accessibility Checker by Equalize Digital
Este plugin fornece verificação dé acessibilidade em tempo real dentro do administrador do WordPress:
- Integração com Editor: Analisa conteúdo à medida qué o cria
- Análise Frontend: Verifica páginas publicadas da perspetiva do visitante
- Relatórios Detalhados: Mostra o código exato que causa problemas
- Análise em Massa: Audita sites inteiros automáticamente
Funcionalidades da Versão Pro:
- Análisé automatizada de site completo
- Geração de relatórios PDF
- Priorização de problemas
- Orientação de remediação
One Click Accessibility
Um plugin leve para melhorias rápidas dé acessibilidade:
- Link de salto para conteúdo
- Contorno de foco para navegação por teclado
- Controlos de redimensionamento de fonte
- Modo de escala de cinzentos para testes
- Modos dé alto contraste e luz
Integração CI/CD para Acessibilidade Contínua
O testé automatizado dé acessibilidade deve fazer parte do pipeline de integração contínua para prevenir regressões.
axe-core com GitHub Actions
# .github/workflows/accessibility.yml
name: Testes de Acessibilidade
on: [push, pull_request]
jobs:
accessibility:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configurar Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Instalar dependências
run: npm install @axe-core/cli http-server
- name: Compilar site
run: npm run build
- name: Iniciar servidor
run: npx http-server ./dist -p 8080 &
- name: Executar testes dé acessibilidadé axe
run: |
npx axe http://localhost:8080 \
--tags wcag2a,wcag2aa,wcag22aa \
--exit
Pa11y para Análise Automatizada
O Pa11y é uma ferramenta de linha de comandos que pode ser integrada em qualquer pipeline CI/CD:
# Instalar Pa11y
npm install -g pa11y
# Executar teste dé acessibilidade numa única página
pa11y https://example.com --standard WCAG2AA
# Executar com ações (clicar elementos, esperar por conteúdo)
pa11y https://example.com --actions "click element #menu-toggle"
# Gerar relatório JSON para integração CI
pa11y https://example.com --reporter json --standard WCAG2AA > accessibility-report.json
Lighthouse CI para Desempenho e Acessibilidade
O Lighthouse CI do Google podé acompanhar as pontuações dé acessibilidadé ao longo do tempo:
// lighthouserc.json
{
"ci": {
"collect": {
"url": [
"http://localhost:8080/",
"http://localhost:8080/about/",
"http://localhost:8080/contact/"
],
"numberOfRuns": 3
},
"assert": {
"assertions": {
"categories:accessibility": ["error", {"minScore": 0.9}]
}
}
}
}
Comparação entre Testes Automatizados e Manuais
| Aspeto | Testes Automatizados | Testes Manuais |
|---|---|---|
| Cobertura | ~30% dos critérios WCAG | ~100% com métodologia adequada |
| Velocidade | Minutos para site inteiro | Horas para auditoria abrangente |
| Custo | Baixo (ferramentas frequentemente gratuitas) | Mais elevado (requer especialização) |
| Consistência | Altamente reproduzível | Depende da habilidade do testador |
| Falsos Positivos | Mínimos com ferramentas de qualidade | Nenhuns |
| Falsos Negativos | Significativos (~70% em falta) | Mínimos com testes completos |
| Melhor Para | Conformidade de base, prevenção de regressões | Auditorias abrangentes, conformidade legal |
| Frequência | Cada implementação | Trimestral ou lançamentos principais |
Teste manual: teclado, leitor de ecrã, contraste
É aqui que vai a maior fatia do tempo de auditoria, e onde vivem os critérios que decidem mesmo uma queixa: operabilidade por teclado, anúncios do leitor de ecrã, gestão de foco e contraste. Três ferramentas em três sessões, por esta ordem.
Navegação só com teclado
Desliga o rato. Tab por cada template distinto, do topo da página até ao rodapé, depois Shift+Tab a regressar. Ativa cada elemento interativo com Enter ou Espaço. As perguntas a que estás a responder: chegas a todos os elementos interativos, incluindo os revelados por hover (mega menus, tooltips, “ver mais”)? O indicador de foco está sempre visível - em fundos escuros o outline padrão do browser desaparece muitas vezes, e o critério 2.4.13 quer pelo menos 2 pixels CSS de espessura com 3:1 de contraste face às cores adjacentes? O foco fica tapado por header sticky, banner de cookies ou widget de chat (critério 2.4.11, a falha WCAG 2.2 mais comum em sites construídos antes de 2024)? Há alguma interação que exija arrastar (sliders de comparação, range inputs estilizados como pegas de drag, controlos de reordenação no backoffice)? Em caso afirmativo, precisa de alternativa single-pointer ao abrigo de 2.5.7. Os alvos interativos têm pelo menos 24×24 pixels CSS (critério 2.5.8)? Links de paginação, ícones sociais em rodapé e “x” de fechar inline falham isto a maior parte das vezes.
O Protocolo de Teste por Teclado
Passo 1: Navegação Básica
- Desligué o rato ou desativé o trackpad
- Pressione Tab para mover através de elementos interativos (links, botões, campos de formulário)
- Pressione Shift+Tab para mover para trás
- Use Enter para ativar links e botões
- Use Espaço para ativar botões e caixas de verificação
- Usé as setas para botões de rádio, seletores e widgets personalizados
Passo 2: Teste de Visibilidade do Foco
Verifique sé os indicadores de foco estão claramente visíveis:
/* Garantir qué os indicadores de foco são visíveis */
/* WCAG 2.2 requer indicadores de foco com pelo menos 2px de espessura */
/* Bom: Indicador de foco claro */
a:focus,
button:focus,
input:focus {
outline: 3px solid #0056b3;
outline-offset: 2px;
}
/* Mau: Sem indicador de foco ou contraste insuficiente */
a:focus {
outline: none; /* Remove completamenté o indicador de foco */
}
Passo 3: Ordem Lógica do Tab
A ordem do tab deve seguir a ordem de leitura visual (tipicamente da esquerda para a direita, de cima para baixo). Verifique:
- Armadilhas de tab (não consegue sair dé um elemento com Tab)
- Elementos saltados que deveriam ser focáveis
- Saltos ilógicos na ordem de foco
- Elementos escondidos a receber foco
Passo 4: Teste de Elementos Interativos
Teste todos os componentes interativos:
| Elemento | Operação por Teclado | Comportamento Esperado |
|---|---|---|
| Links | Tab, Enter | Navegar para o destino |
| Botões | Tab, Enter, Espaço | Ativar ação |
| Caixas de verificação | Tab, Espaço | Alternar seleção |
| Botões de rádio | Tab, Setas | Alterar seleção dentro do grupo |
| Dropdowns de seleção | Tab, Setas, Enter/Espaço | Abrir e selecionar opções |
| Diálogos modais | Tab (preso), Escape | Foco preso, fechar com Escape |
| Acordeão | Tab, Enter/Espaço, Setas | Expandir/colapsar painéis |
| Separadores | Tab, Setas, Enter | Alternar entre painéis de separadores |
Problemas Comuns de Teclado no WordPress
Problema: Estilos de foco em falta nos temas
/* Correção: Adicionar estilos de foco visíveis ao tema */
/* Adicionar a style.css ou personalizador CSS adicional */
*:focus {
outline: 2px solid #007cba;
outline-offset: 2px;
}
/* Foco melhorado para alto contraste */
@media (prefers-contrast: high) {
*:focus {
outline: 3px solid currentColor;
outline-offset: 3px;
}
}
Problema: Dropdowns personalizados não acessíveis por teclado
<!-- Mau: Dropdown personalizado sem suporte de teclado -->
<div class="dropdown">
<span class="dropdown-trigger">Menu</span>
<div class="dropdown-content">
<a href="#">Item 1</a>
<a href="#">Item 2</a>
</div>
</div>
<!-- Bom: Dropdown acessível com ARIA -->
<div class="dropdown">
<button
class="dropdown-trigger"
aria-expanded="false"
aria-haspopup="true"
id="menu-button"
>
Menu
</button>
<div
class="dropdown-content"
role="menu"
aria-labelledby="menu-button"
hidden
>
<a href="#" role="menuitem">Item 1</a>
<a href="#" role="menuitem">Item 2</a>
</div>
</div>
Testes com Leitor de Ecrã
Os leitores de ecrã convertem conteúdo visual em áudio ou braille. Testar com leitores de ecrã revela problemas que ferramentas automatizadas não conseguem detetar.
Opções de Leitores de Ecrã
| Leitor de Ecrã | Plataforma | Custo | Melhor Para |
|---|---|---|---|
| NVDA | Windows | Gratuito | Testes primários Windows, mais popular |
| JAWS | Windows | Pago (95$/ano) | Testes de conformidade empresarial |
| VoiceOver | macOS/iOS | Integrado | Testes ecossistema Apple |
| TalkBack | Android | Integrado | Testes móveis Android |
| Narrador | Windows | Integrado | Testes rápidos Windows |
Fluxo de Trabalho de Teste NVDA
O NVDA (NonVisual Desktop Access) é o leitor de ecrã mais amplamente útilizado e essencial para testes dé acessibilidade Windows.
Instalação:
- Descarregue de nvaccess.org
- Executé o instalador (versão portátil disponível)
- Inicie com Ctrl+Alt+N
Comandos Essenciais do NVDA para Testes:
Navegação Básica:
- Tab: Mover para elemento focável seguinte
- Shift+Tab: Mover para elemento focável anterior
- H: Cabeçalho seguinte
- 1-6: Cabeçalho de nível 1-6 seguinte
- L: Lista seguinte
- I: Item de lista seguinte
- T: Tabela seguinte
- F: Campo de formulário seguinte
- G: Gráfico seguinte
- D: Marco seguinte
Comandos de Leitura:
- Insert+Seta Abaixo: Iniciar leitura contínua
- Ctrl: Parar leitura
- Insert+Seta Cima: Ler linha atual
- Insert+Tab: Ler foco atual
Alternância de Modo:
- Insert+Espaço: Alternar entre modos de navegação e foco
O que Ouvir:
- Anúncios significativos: O leitor de ecrã transmité o propósito de cada elemento?
- Contexto: Os campos de formulário estão devidamente etiquetados?
- Estrutura: Os cabeçalhos são anunciados com os seus níveis?
- Mudanças de estado: As atualizações dinâmicas são anunciadas (regiões dinâmicas)?
- Navegação: Consegue navegar por cabeçalhos, marços e listas?
Teste VoiceOver no macOS
O VoiceOver é integrado no macOS e essencial para testar dispositivos Apple.
Ativar VoiceOver:
- Pressione Cmd+F5 (ou clique triplo no Touch ID em Macs mais recentes)
- Ou: Definições do Sistema → Acessibilidade → VoiceOver
Comandos Essenciais do VoiceOver:
Navegação Básica:
- Cmd+F5: Alternar VoiceOver
- Ctrl+Option+Seta Direita/Esquerda: Navegar para item seguinte/anterior
- Ctrl+Option+Shift+Seta Abaixo: Entrar/interagir com elemento
- Ctrl+Option+Shift+Seta Cima: Sair do elemento
Navegação Web:
- Ctrl+Option+Cmd+H: Cabeçalho seguinte
- Ctrl+Option+Cmd+L: Link seguinte
- Ctrl+Option+Cmd+J: Controlo de formulário seguinte
- Ctrl+Option+Cmd+T: Tabela seguinte
Leitura:
- Ctrl+Option+A: Iniciar leitura
- Ctrl: Parar leitura
Testes de Leitor de Ecrã Móvel
A acessibilidade móvel é crítica à medida qué o tráfego móvel continua a crescer.
Teste VoiceOver iOS:
- Definições → Acessibilidade → VoiceOver → Ativar
- Use deslizar para a direita com um dedo para navegar
- Toque duplo para ativar
- Deslizar com três dedos para deslocar
Teste TalkBack Android:
- Definições → Acessibilidade → TalkBack → Ativar
- Use deslizar para a direita com um dedo para navegar
- Toque duplo para ativar
- Deslizar com dois dedos para deslocar
Verificação de Contraste de Cores
O WCAG 2.2 exige rácios de contraste específicos para texto e componentes de interface.
Requisitos de Contraste
| Tipo de Conteúdo | Nível A | Nível AA | Nível AAA |
|---|---|---|---|
| Texto normal (<18pt ou <14pt negrito) | 3:1 | 4.5:1 | 7:1 |
| Texto grande (≥18pt ou ≥14pt negrito) | 3:1 | 3:1 | 4.5:1 |
| Componentes de Interface e Gráficos | 3:1 | 3:1 | 3:1 |
| Indicadores de foco (WCAG 2.2) | 3:1 | 3:1 | 4.5:1 |
Ferramentas de Teste
DevTools do Navegador:
Os navegadores modernos incluem verificação de contraste nas DevTools:
- Clique direito no elemento → Inspecionar
- No painel Estilos, clique na amostra de cor
- Verifiqué o rácio de contrasté apresentado
- Procure pelo visto verde (passa) ou ícone dé aviso (falha)
WebAIM Contrast Checker:
A ferramenta online da WebAIM fornecé análise detalhada:
- Visite webaim.org/resources/contrastchecker/
- Introduza as cores de primeiro plano e fundo
- Reveja o estado de passa/falha para cada nível
- Usé o deslizador de luminosidade para encontrar alternativas que passem
Sim Daltonism:
Teste como o sité aparece para útilizadores com deficiências de visão de cores:
- macOS: Disponível na App Store
- Windows: ColorVeil ou ferramentas semelhantes
- Online: Extensão de navegador Colorblindly
Problemas Comuns de Contraste no WordPress
Problema: Texto cinzento claro em fundos brancos
/* Mau: Contraste insuficiente */
.text-muted {
color: #999999; /* 2.8:1 contraste - FALHA WCAG AA */
}
/* Bom: Contraste suficiente */
.text-muted {
}
Problema: Contraste de texto de placeholder
/* Mau: Placeholder padrão frequentemente falha */
::placeholder {
}
/* Bom: Placeholder mais escuro */
::placeholder {
}
Testes de Gestão do Foco
O WCAG 2.2 coloca ênfasé aumentada na visibilidade e gestão do foco.
Foco Não Ocultado (2.4.11)
Quando um componente de interface recebe foco de teclado, o componente não deve ser completamente escondido por conteúdo criado pelo autor.
Procedimento de Teste:
- Navegue pela página usando Tab
- Verifique sé os elementos focados estão totalmente visíveis
- Verifique cabeçalhos/rodapés fixos que possam ocultar o foco
- Teste modais e sobreposições para bloqueio de foco
Problema Comum: Cabeçalhos Fixos a Esconder Foco
/* Problema: Cabeçalho fixo cobre elementos focados */
.header-sticky {
position: fixed;
top: 0;
height: 80px;
}
/* Solução: Padding de scroll para cabeçalhos fixos */
html {
scroll-padding-top: 100px; /* Altura do cabeçalho + margem */
}
/* Ou usar offset :target para links de âncora */
:target {
scroll-margin-top: 100px;
}
Aparência do Foco (2.4.13 - AAA)
Embora seja nível AAA, compreender a aparência do foco ajuda a criar melhores experiências:
/* Indicador de foco melhorado cumprindo diretrizes AAA */
:focus-visible {
outline: 2px solid currentColor;
outline-offset: 2px;
border-radius: 2px;
}
/* Área mínima: 48×48 pixels CSS */
.focus-enhanced:focus-visible {
box-shadow: 0 0 0 2px white, 0 0 0 4px currentColor;
}
Problemas Comuns de Acessibilidade WordPress e Correções
Os sites WordPress partilham padrões comuns dé acessibilidade. Compreender estes acelera a auditoria e remediação.
Problema 1: Texto Alternativo em Falta ou Inadequado
O Problema:
Imagens sem texto alternativo ou com nomes de ficheiro sem significado como texto alternativo.
Deteção:
- Ferramentas automatizadas sinalizam atributos alt em falta
- Leitores de ecrã anunciam “imagem” ou nome de ficheiro
A Correção:
<!-- Mau: Texto alternativo em falta -->
<img src="photo.jpg">
<!-- Mau: Texto alternativo sem significado -->
<img src="photo.jpg" alt="photo">
<!-- Bom: Texto alternativo descritivo -->
<img src="wordpress-dashboard.jpg" alt="Painel de administração WordPress mostrando o editor de blocos com um bloco de parágrafo selecionado">
<!-- Bom: Imagem decorativa com alt vazio -->
<img src="decorative-border.png" alt="">
Implementação WordPress:
// Forçar texto alternativo na biblioteca de media WordPress
function enforce_alt_text($response, $attachment, $meta) {
if (empty($response['alt'])) {
$response['alt'] = ''; // Marcar como decorativo por padrão
}
return $response;
}
add_filter('wp_prepare_attachment_for_js', 'enforce_alt_text', 10, 3);
// Adicionar lembrete de texto alternativo no admin
function alt_text_admin_notice() {
$screen = get_current_screen();
if ($screen && $screen->id === 'attachment') {
echo '<div class="notice notice-warning">
<p><strong>Lembrete de Acessibilidade:</strong> Por favor adicione texto alternativo descritivo ou marque como decorativo.</p>
</div>';
}
}
add_action('admin_notices', 'alt_text_admin_notice');
Problema 2: Estrutura de Cabeçalhos Incorreta
O Problema:
Níveis de cabeçalhos saltados, uso de cabeçalhos para estilização, ou H1 em falta.
Deteção:
- Axe sinaliza níveis de cabeçalhos saltados
- WAVE mostra estrutura de cabeçalhos
- Utilizadores de leitores de ecrã navegam por cabeçalhos
A Correção:
<!-- Mau: Níveis saltados e uso incorreto para estilização -->
<h1>Título da Página</h1>
<h4>Cabeçalho de Secção</h4> <!-- Saltou h2, h3 -->
<h2 style="font-size: 14px;">Texto Pequeno</h2> <!-- Usar h2 para estilização -->
<!-- Bom: Hierarquia lógica de cabeçalhos -->
<h1>Título da Página</h1>
<h2>Secção Principal</h2>
<h3>Subsecção</h3>
<h3>Outra Subsecção</h3>
<h2>Outra Secção Principal</h2>
Correção no Editor de Blocos WordPress:
// Restringir níveis de cabeçalho no editor de blocos
function restrict_heading_levels($settings) {
$settings['allowedBlockTypes'] = array(
'core/paragraph',
'core/heading',
'core/list',
// ... outros blocos permitidos
);
return $settings;
}
// Ou usar CSS para indicar visualmenté o nível de cabeçalho
function admin_heading_styles() {
echo '<style>
h1.wp-block-heading { border-left: 4px solid #007cba; padding-left: 8px; }
h2.wp-block-heading { border-left: 4px solid #00a0d2; padding-left: 8px; }
h3.wp-block-heading { border-left: 4px solid #46b450; padding-left: 8px; }
</style>';
}
add_action('admin_head', 'admin_heading_styles');
Problema 3: Etiquetas de Formulário e Mensagens de Erro
O Problema:
Campos de formulário sem etiquetas, associações de erro em falta, ou mensagens de erro pouco claras.
Deteção:
- Axe sinaliza campos de formulário sem etiquetas
- Leitores de ecrã não anunciam o propósito do campo
- Mensagens de erro não estão associadas programaticamente
A Correção:
<!-- Mau: Sem associação de etiqueta -->
<input type="email" placeholder="Introduza o seu email">
<!-- Mau: Placeholder como etiqueta -->
<input type="email" placeholder="Endereço de Email">
<!-- Bom: Etiqueta explícita com atributo for -->
<label for="email">Endereço de Email <span aria-label="obrigatório">*</span></label>
<input type="email" id="email" name="email" required aria-required="true">
<!-- Bom: Mensagem de erro associada programaticamente -->
<label for="email">Endereço de Email *</label>
<input
type="email"
id="email"
name="email"
required
aria-required="true"
aria-invalid="true"
aria-describedby="email-error"
>
<span id="email-error" class="error" role="alert">
Por favor introduza um endereço de email válido (ex: nome@exemplo.pt)
</span>
Melhoria Contact Form 7 WordPress:
// Adicionar atributos ARIA ao Contact Form 7
add_filter('wpcf7_form_elements', function($content) {
// Adicionar aria-required a campos obrigatórios
$content = preg_replace(
'/<input[^>]*class="[^"]*wpcf7-validates-as-required[^"]*"[^>]*>/',
'$0 aria-required="true"',
$content
);
return $content;
});
Problema 4: Componentes Personalizados Inacessíveis por Teclado
O Problema:
Dropdowns personalizados, separadores e modais que só funcionam com rato.
A Correção:
// Componente de Separadores Acessível
class AccessibleTabs {
constructor(container) {
this.container = container;
this.tabs = Array.from(container.querySelectorAll('[role="tab"]'));
this.panels = Array.from(container.querySelectorAll('[role="tabpanel"]'));
this.tabs.forEach((tab, index) => {
tab.addEventListener('click', () => this.selectTab(index));
tab.addEventListener('keydown', (e) => this.handleKeydown(e, index));
});
}
handleKeydown(event, index) {
let newIndex;
switch(event.key) {
case 'ArrowRight':
newIndex = (index + 1) % this.tabs.length;
break;
case 'ArrowLeft':
newIndex = (index - 1 + this.tabs.length) % this.tabs.length;
break;
case 'Home':
newIndex = 0;
break;
case 'End':
newIndex = this.tabs.length - 1;
break;
default:
return;
}
event.preventDefault();
this.tabs[newIndex].focus();
this.selectTab(newIndex);
}
selectTab(index) {
this.tabs.forEach((tab, i) => {
const isSelected = i === index;
tab.setAttribute('aria-selected', isSelected);
tab.setAttribute('tabindex', isSelected ? '0' : '-1');
this.panels[i].hidden = !isSelected;
});
}
}
// Inicializar
document.querySelectorAll('[role="tablist"]').forEach(tabs => {
new AccessibleTabs(tabs);
});
<!-- Marcação de Separadores Acessível -->
<div class="tabs">
<div role="tablist" aria-label="Informação do Produto">
<button
role="tab"
aria-selected="true"
aria-controls="panel-1"
id="tab-1"
tabindex="0"
>
Descrição
</button>
<button
role="tab"
aria-selected="false"
aria-controls="panel-2"
id="tab-2"
tabindex="-1"
>
Especificações
</button>
</div>
<div
role="tabpanel"
id="panel-1"
aria-labelledby="tab-1"
>
Conteúdo da descrição do produto...
</div>
<div
role="tabpanel"
id="panel-2"
aria-labelledby="tab-2"
hidden
>
Especificações técnicas...
</div>
</div>
Problema 5: Links de Salto em Falta
O Problema:
Utilizadores que navegam por teclado devem percorrer todos os itens de navegação para alcançar o conteúdo principal.
A Correção:
<!-- Implementação de Link de Salto -->
<body>
<a href="#main-content" class="skip-link">
Saltar para conteúdo principal
</a>
<nav><!-- Itens de navegação --></nav>
<main id="main-content" tabindex="-1">
<!-- Conteúdo principal -->
</main>
</body>
/* Estilização de Link de Salto */
.skip-link {
position: absolute;
top: -40px;
left: 0;
background: #000;
color: #fff;
padding: 8px 16px;
z-index: 100;
text-decoration: none;
}
.skip-link:focus {
top: 0;
}
Implementação WordPress:
// Adicionar link de salto em header.php (antes de qualquer outro conteúdo)
function add_skip_link() {
echo '<a href="#main-content" class="skip-link">' .
esc_html__('Saltar para conteúdo principal', 'textdomain') .
'</a>';
}
add_action('wp_body_open', 'add_skip_link');
// Garantir qué a área de conteúdo principal tem ID
echo '<main id="main-content" tabindex="-1">';
Problema 6: Diálogos Modais Inacessíveis
O Problema:
Modais que não prendem o foco, não fecham com Escape, ou não devolvem o foco ao acionador.
A Correção:
// Componente Modal Acessível
class AccessibleModal {
constructor(trigger, modal) {
this.trigger = trigger;
this.modal = modal;
this.focusableElements = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
this.firstFocusable = null;
this.lastFocusable = null;
this.previousFocus = null;
trigger.addEventListener('click', () => this.open());
modal.querySelector('.modal-close').addEventListener('click', () => this.close());
modal.addEventListener('keydown', (e) => this.handleKeydown(e));
}
open() {
this.previousFocus = document.activeElement;
this.modal.hidden = false;
this.modal.setAttribute('aria-modal', 'true');
const focusable = this.modal.querySelectorAll(this.focusableElements);
this.firstFocusable = focusable[0];
this.lastFocusable = focusable[focusable.length - 1];
this.firstFocusable.focus();
document.body.style.overflow = 'hidden';
}
close() {
this.modal.hidden = true;
this.modal.removeAttribute('aria-modal');
document.body.style.overflow = '';
this.previousFocus.focus();
}
handleKeydown(event) {
if (event.key === 'Escape') {
this.close();
}
if (event.key === 'Tab') {
if (event.shiftKey && document.activeElement === this.firstFocusable) {
event.preventDefault();
this.lastFocusable.focus();
} else if (!event.shiftKey && document.activeElement === this.lastFocusable) {
event.preventDefault();
this.firstFocusable.focus();
}
}
}
}
<!-- Marcação Modal Acessível -->
<button aria-haspopup="dialog" aria-controls="modal-1" id="modal-trigger">
Abrir Modal
</button>
<div
role="dialog"
aria-modal="true"
aria-labelledby="modal-title"
id="modal-1"
hidden
>
<h2 id="modal-title">Título do Modal</h2>
<p>Conteúdo do modal...</p>
<button class="modal-close" aria-label="Fechar modal">
<span aria-hidden="true">×</span>
</button>
</div>
Criar um Relatório de Auditoria de Acessibilidade
Um relatório dé auditoria bem estruturado transforma descobertas em planos de remediação acionáveis.
Estrutura do Relatório
1. Resumo Executivo
- Estado geral de conformidade (WCAG 2.2 Nível AA)
- Contagem de problemas críticos
- Avaliação de risco
- Ordem de prioridade recomendada
2. Metodologia
- Ferramentas útilizadas (axe, WAVE, leitores de ecrã)
- Páginas testadas (amostra representativa)
- Datas de teste é ambiente
3. Descobertas Detalhadas
Organize por princípio WCAG (Percetível, Operável, Compreensível, Robusto) ou por gravidade.
Modelo de Descoberta:
### Problema: [Breve Descrição]
**Critério WCAG:** [ex: 1.1.1 Conteúdo Não Textual (Nível A)]
**Gravidade:** [Crítico | Grave | Moderado | Menor]
**Localização:** [URL e elemento específico]
**Descrição:**
Explicação detalhada do problema e seu impacto nos útilizadores.
**Código Atual:**
```html
<!-- Código problemático -->
Correção Recomendada:
<!-- Código corrigido -->
Verificação de Teste:
- [Passo para verificar correção]
- [Resultado esperado]
**4. Roteiro de Remediação**
| Prioridade | Problema | Esforço Estimado | Responsável | Data Alvo |
|------------|----------|-----------------|-------------|-----------|
| P0 | Etiquetas de formulário em falta | 2 horas | Programador | Semana 1 |
| P0 | Armadilhas de teclado | 4 horas | Programador | Semana 1 |
| P1 | Contraste de cores | 3 horas | Designer | Semana 2 |
| P2 | Estrutura de cabeçalhos | 2 horas | Conteúdo | Semana 3 |
### Geração Automatizada de Relatórios
**Usando axe-core para Relatórios:**
```javascript
// generate-accessibility-report.js
const { axe } = require('@axe-core/webdriverjs');
const { Builder } = require('selenium-webdriver');
const fs = require('fs');
async function auditPage(url) {
const driver = await new Builder().forBrowser('chrome').build();
try {
await driver.get(url);
const results = await axe(driver).analyze();
const report = {
url,
timestamp: new Date().toISOString(),
violations: results.violations.map(v => ({
id: v.id,
impact: v.impact,
description: v.description,
help: v.help,
helpUrl: v.helpUrl,
nodes: v.nodes.length
})),
passes: results.passes.length,
incomplete: results.incomplete.length,
inapplicable: results.inapplicable.length
};
fs.writeFileSync(
`audit-${Date.now()}.json`,
JSON.stringify(report, null, 2)
);
return report;
} finally {
await driver.quit();
}
}
// Auditar múltiplas páginas
const pages = [
'https://example.com/',
'https://example.com/about/',
'https://example.com/contact/'
];
pages.forEach(url => auditPage(url));
Modelos de Relatório
Colunas de Modelo de Folha de Cálculo:
- ID do Problema
- Critério WCAG
- Nível (A/AA/AAA)
- Página/URL
- Localização do Elemento
- Descrição do Problema
- Impacto no Utilizador
- Correção Recomendada
- Estimativa de Esforço
- Prioridade
- Estado
- Notas
Fluxo de Trabalho de Remediação
Transformar descobertas dé auditoria num sité acessível requer remediação sistemática.
Fase 1: Problemas Críticos (Semana 1)
Foco em barreiras que bloqueiam completamente útilizadores:
- Etiquetas de formulário em falta - Impede conclusão de formulários
- Armadilhas de teclado - Bloqueia útilizadores em elementos
- Texto alternativo em falta em imagens informativas - Bloqueia compreensão de conteúdo
- Botões/links vazios - Impede interação
Perguntas Diárias de Standup:
- Quais problemas críticos foram resolvidos hoje?
- Existem bloqueios que impedem correções?
- As correções foram testadas com teclado e leitor de ecrã?
Fase 2: Problemas Graves (Semana 2-3)
Abordar barreiras significativas que causam frustração:
- Falhas de contraste de cores
- Níveis de cabeçalhos saltados
- Links de salto em falta
- Uso incorreto de ARIA
Fase 3: Problemas Moderados (Semana 4)
Polir a experiência:
- Links redundantes
- Texto de link ambíguo
- Atributos de idioma em falta
- Acessibilidade de PDFs
Protocolo de Verificação de Testes
Para cada correção, verifique com:
- Re-testé automatizado: Executé axe na página específica
- Verificação por teclado: Navegue e interaja com o elemento
- Verificação com leitor de ecrã: Confirmé anúncio adequado
- Inspeção visual: Verifique indicadores de foco e contraste
Prevenção de Regressões
Hooks Pre-commit:
// package.json
{
"husky": {
"hooks": {
"pre-commit": "npm run test:accessibility"
}
},
"scripts": {
"test:accessibility": "axe http://localhost:3000 --exit"
}
}
Testes de Regressão Visual:
Inclua testes visuais específicos dé acessibilidade:
// accessibility-visual.test.js
describe('Indicadores de foco', () => {
it('deve mostrar foco visível em botões', async () => {
await page.goto('http://localhost:3000');
await page.keyboard.press('Tab');
const screenshot = await page.screenshot();
expect(screenshot).toMatchImageSnapshot();
});
});
Recursos Relacionados
Para orientação mais abrangente sobré otimização e desenvolvimento WordPress, explore estes artigos relacionados:
- Semantic SEO for WordPress: The Complete 2026 Guide - Aprenda como melhorias dé acessibilidade melhoram a sua estratégia de SEO
- WordPress Contact Forms: The Ultimate Guide for 2026 - Garanta qué os seus formulários cumprem os padrões WCAG
- How to Update URLs in the WordPress Database When Moving to a New Domain - Mantenha a acessibilidade durante migrações de sites
Dados Estruturados Amigáveis para LLM
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Auditoria Prática de Acessibilidade: Ferramentas e Fluxo de Trabalho para WordPress",
"description": "Um guia completo para auditar sites WordPress para conformidade com WCAG 2.2 usando ferramentas automatizadas e técnicas de teste manual.",
"author": {
"@type": "Organization",
"name": "WPPoland",
"url": "https://wppoland.com"
},
"publisher": {
"@type": "Organization",
"name": "WPPoland",
"logo": {
"@type": "ImageObject",
"url": "https://wppoland.com/logo.png"
}
},
"datePublished": "2026-01-29",
"dateModified": "2026-01-29",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://wppoland.com/blog/practical-accessibility-auditing-workflow"
},
"about": {
"@type": "Thing",
"name": "Auditoria de Acessibilidade Web",
"sameAs": "https://www.w3.org/WAI/standards-guidelines/wcag/"
},
"teaches": [
"Testes de conformidade WCAG 2.2",
"Testes automatizados dé acessibilidade com axe e WAVE",
"Testes manuais com leitores de ecrã",
"Testes de navegação por teclado",
"Remediação dé acessibilidade WordPress"
],
"proficiencyLevel": "Intermédio",
"dependencies": "WordPress, Navegador web moderno, Software de leitor de ecrã"
}
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Como Realizar uma Auditoria de Acessibilidade WCAG 2.2 no WordPress",
"description": "Fluxo de trabalho passo a passo para auditar sites WordPress para conformidade com acessibilidade",
"totalTime": "PT4H",
"supply": [
"Navegador web (Chrome, Firefox ou Edge)",
"Extensão de navegador axe DevTools",
"Extensão de navegador WAVE",
"Leitor de ecrã (NVDA, JAWS ou VoiceOver)"
],
"tool": [
{
"@type": "HowToTool",
"name": "axe DevTools"
},
{
"@type": "HowToTool",
"name": "WAVE Evaluation Tool"
},
{
"@type": "HowToTool",
"name": "NVDA Screen Reader"
}
],
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "Executar Testes Automatizados",
"text": "Instalé as extensões de navegador axe DevTools e WAVE. Análise todas as páginas-chave incluindo homepage, página de contacto e modelos de conteúdo. Documente todas as violações por nível de gravidade.",
"url": "https://wppoland.com/blog/practical-accessibility-auditing-workflow#ferramentas-de-teste-automatizado"
},
{
"@type": "HowToStep",
"position": 2,
"name": "Testar Navegação por Teclado",
"text": "Desligué o rato e navegue no site inteiro usando apenas Tab, Shift+Tab, Enter, Espaço e teclas de Seta. Verifique se todos os elementos interativos são alcançáveis é operáveis.",
"url": "https://wppoland.com/blog/practical-accessibility-auditing-workflow#testes-de-navegacao-por-teclado"
},
{
"@type": "HowToStep",
"position": 3,
"name": "Realizar Testes com Leitor de Ecrã",
"text": "Teste com NVDA (Windows) ou VoiceOver (macOS). Navegue por cabeçalhos, marços e campos de formulário. Verifique se todo o conteúdo é anunciado adequadamente é a navegação é lógica.",
"url": "https://wppoland.com/blog/practical-accessibility-auditing-workflow#testes-com-leitor-de-ecra"
},
{
"@type": "HowToStep",
"position": 4,
"name": "Verificar Contraste de Cores",
"text": "Use DevTools do navegador ou WebAIM Contrast Checker para verificar se todo o texto cumpré os requisitos de contraste WCAG 2.2 (4.5:1 para texto normal, 3:1 para texto grande).",
"url": "https://wppoland.com/blog/practical-accessibility-auditing-workflow#verificacao-de-contraste-de-cores"
},
{
"@type": "HowToStep",
"position": 5,
"name": "Documentar e Priorizar Descobertas",
"text": "Crié um relatório abrangenté organizando problemas por princípio WCAG e gravidade. Desenvolva um roteiro de remediação com cronogramas e partes responsáveis.",
"url": "https://wppoland.com/blog/practical-accessibility-auditing-workflow#criar-um-relatorio-de-auditoria"
},
{
"@type": "HowToStep",
"position": 6,
"name": "Remediar e Verificar Correções",
"text": "Corrija primeiro os problemas críticos, seguidos pelos graves e moderados. Verifique cada correção com ferramentas automatizadas, testes de teclado e confirmação com leitor de ecrã.",
"url": "https://wppoland.com/blog/practical-accessibility-auditing-workflow#fluxo-de-trabalho-de-remediacao"
}
]
}
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Qual é a diferença entre WCAG 2.1 e WCAG 2.2?",
"acceptedAnswer": {
"@type": "Answer",
"text": "O WCAG 2.2 constrói sobré o WCAG 2.1 com nove novos critérios de sucesso focados na acessibilidade cognitiva e motora. Adições-chave incluem Foco Não Ocultado (2.4.11), Movimentos de Arrastar (2.5.7) e Autenticação Acessível (3.3.8). O WCAG 2.2 também deprecia o critério de sucesso 4.1.1 Parsing."
}
},
{
"@type": "Question",
"name": "Com que frequência devo realizar auditorias dé acessibilidade?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Para sites ativos, realizé análises automatizadas com cada implementação é auditorias manuais abrangentes trimestralmenté ou com lançamentos principais. Após atualizações significativas, realizé auditorias direcionadas das áreas afetadas."
}
},
{
"@type": "Question",
"name": "Posso alcançar conformidade WCAG usando apenas ferramentas automatizadas?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Não. As ferramentas automatizadas detetam aproximadamente 30% dos critérios WCAG, principalmenté aqueles que podem ser verificados programaticamente. O teste manual com navegação por teclado e leitores de ecrã é essencial."
}
},
{
"@type": "Question",
"name": "Qual leitor de ecrã devo usar para testes?",
"acceptedAnswer": {
"@type": "Answer",
"text": "O NVDA é o leitor de ecrã mais amplamente útilizado e é gratuito, tornando-o o melhor ponto de partida para testes Windows. Para testes de conformidadé abrangentes, teste também com JAWS e VoiceOver."
}
},
{
"@type": "Question",
"name": "Existem riscos legais para sites WordPress não conformes?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Sim. Na União Europeia, o Ato Europeu de Acessibilidade exige conformidade WCAG 2.2 Nível AA para sites do setor público e serviços essenciais, com penalidades até 100.000€ em algumas jurisdições. Nos Estados Unidos, os processos judiciais ADA Título III aumentaram significativamente."
}
}
]
}