O que o 1.1.1 exige

Todo o conteúdo não textual que é exibido ao usuário tem uma alternativa textual que serve a um propósito equivalente, exceto para as situações indicadas abaixo.

Controles, Entrada
Se o conteúdo não textual for um controle ou aceitar a entrada de dados por parte do usuário, então esse conteúdo não textual possui um nome que descreve a sua finalidade. (Consultar o Critério de Sucesso 4.1.2 para requisitos adicionais de controles e conteúdo que aceitam entrada de dados por parte do usuário)
Mídias com base no tempo
Se o conteúdo não textual consiste em mídia baseada em tempo, então as alternativas textuais fornecem, no mínimo, uma identificação descritiva do conteúdo não textual (Consulte a Diretriz 1.2 para obter os requisitos adicionais para mídia).
Teste
Se o conteúdo não textual for um teste ou um exercício, que ficaria inválido se fosse apresentado em texto, então as alternativas textuais fornecem, no mínimo, uma identificação descritiva do conteúdo não textual.
Sensorial
Se a finalidade do conteúdo não textual for, essencialmente, criar uma experiência sensorial específica, então as alternativas textuais fornecem, no mínimo, uma identificação descritiva do conteúdo não textual.
CAPTCHA
Se a finalidade do conteúdo não textual for confirmar que o conteúdo está sendo acessado por uma pessoa e não por um computador, então devem ser fornecidas alternativas textuais que identificam e descrevem a finalidade do conteúdo não textual. Formas alternativas de CAPTCHA, que utilizam modos de saída para diferentes tipos de percepção sensorial, devem ser apresentadas para atender diferentes deficiências.
Decoração, Formatação, Invisível
Se o conteúdo não textual for meramente decorativo, se for utilizado apenas para formatação visual, ou se não for exibido aos usuários, então esse conteúdo não textual deve ser implementado de uma forma que possa ser ignorado pelas tecnologias assistivas.
Critério de sucesso 1.1.1 Conteúdo Não Textual (Nível A), citado da tradução autorizada para o português do Brasil das Diretrizes de Acessibilidade para Conteúdo Web (WCAG) 2.2, publicada em 27 de março de 2025 pelo Ceweb.br. Copyright © 2020-2023 World Wide Web Consortium. Usado sob a Licença de Documentos do W3C. A WCAG 2.1 não tem tradução autorizada, e este critério tem o mesmo texto na 2.1 e na 2.2. Em caso de divergência, vale o original em inglês.
Texto original, em inglês (WCAG 2.1)

All non-text content that is presented to the user has a text alternative that serves the equivalent purpose, except for the situations listed below.

Controls, Input
If non-text content is a control or accepts user input, then it has a name that describes its purpose. (Refer to Success Criterion 4.1.2 for additional requirements for controls and content that accepts user input.)
Time-Based Media
If non-text content is time-based media, then text alternatives at least provide descriptive identification of the non-text content. (Refer to Guideline 1.2 for additional requirements for media.)
Test
If non-text content is a test or exercise that would be invalid if presented in text, then text alternatives at least provide descriptive identification of the non-text content.
Sensory
If non-text content is primarily intended to create a specific sensory experience, then text alternatives at least provide descriptive identification of the non-text content.
CAPTCHA
If the purpose of non-text content is to confirm that content is being accessed by a person rather than a computer, then text alternatives that identify and describe the purpose of the non-text content are provided, and alternative forms of CAPTCHA using output modes for different types of sensory perception are provided to accommodate different disabilities.
Decoration, Formatting, Invisible
If non-text content is pure decoration, is used only for visual formatting, or is not presented to users, then it is implemented in a way that it can be ignored by assistive technology.
Web Content Accessibility Guidelines (WCAG) 2.1, Recomendação do W3C de 6 de maio de 2025. Copyright © 2020-2025 World Wide Web Consortium.

A alternativa em texto é o que o leitor de tela fala, o que a linha braille mostra e o que aparece quando a imagem não carrega. Servir a um propósito equivalente é fazer o papel que a imagem faz nesta página: a foto de um produto nomeia o produto, um gráfico diz a sua conclusão, um botão de imagem nomeia a ação.

O contexto muda a resposta. O Understanding 1.1.1 (em inglês) dá à mesma imagem do globo a alternativa “International Travel” num site de viagens e “International Campuses” no de uma universidade. Dentro de um link ou botão, a alternativa diz para onde ele leva ou o que ele faz.

Uma imagem que não acrescenta nada recebe alternativa vazia, alt="", para a tecnologia assistiva ignorá-la. A WCAG lista os dois lados como falha: um nome de arquivo ou placeholder como alternativa (F30) e um alt não vazio, como “spacer”, numa imagem que deveria ser ignorada (F39).

Falhas comuns

Abaixo de cada exemplo: o que o axe-core e o Rampa relataram sobre a marcação de antes da correção, numa execução com o Gemma 4 12B em 8 de outubro de 2026.

Um nome de arquivo como alternativa

Sistemas de conteúdo costumam preencher o alt com o nome do arquivo, e o leitor de tela lê “8841-frente”. A WCAG lista isso como a falha F30.

Ilustração: uma mochila verde com bolso frontal de zíper e uma etiqueta amarela.

Antes, reprova no 1.1.1

<img src="/produtos/8841-frente.svg" alt="8841-frente">

Depois, aprova

<img src="/produtos/8841-frente.svg"
     alt="Mochila verde com bolso frontal de zíper">
axe-core

Aprova: a image-alt encontra um alt.

Rampa
✗ html > body > main > img:nth-of-type(2)
  O texto alternativo "8841-frente" é um nome de arquivo ou um placeholder.
  Evidência: "8841-frente"
  Patch:
    - <img src="/produtos/8841-frente.svg" alt="8841-frente">
    + <img src="/produtos/8841-frente.svg" alt="Mochila verde com detalhes em amarelo">
  confiança alta · 1/1 rodadas · evidência verificada · id a5ab338aeba6

Uma alternativa escrita para outra imagem

O banner mudou para a campanha de inverno e o alt continua descrevendo o de verão. Não atualizar a alternativa quando a imagem muda é a falha F20 da WCAG, e só quem olha a imagem consegue perceber.

Ilustração: um banner com o texto “Liquidação de inverno, botas de couro, 20% de desconto”, ao lado de uma bota marrom.

Antes, reprova no 1.1.1

<img src="/banners/liquidacao-inverno.svg"
     alt="Promoção de verão: sandálias com 30% de desconto">

Depois, aprova

<img src="/banners/liquidacao-inverno.svg"
     alt="Liquidação de inverno: botas de couro com 20% de desconto">
axe-core

Aprova: a image-alt encontra um alt.

Rampa
✗ html > body > main > img:nth-of-type(1)
  O texto alternativo "Promoção de verão: sandálias com 30% de desconto" descreve algo que a imagem não mostra.
  Evidência: "Promoção de verão: sandálias com 30% de desconto"
  Patch:
    - <img src="/banners/liquidacao-inverno.svg" alt="Promoção de verão: sandálias com 30% de desconto">
    + <img src="/banners/liquidacao-inverno.svg" alt="Liquidação de inverno: botas de couro com 20% de desconto">
  confiança alta · 1/1 rodadas · evidência verificada · id 486103d1064d

Um link de ícone chamado “ícone”

Dentro de um link, a alternativa da imagem é o nome do link, então ela precisa dizer para onde ele leva. O leitor de tela anuncia um link chamado “ícone”, e mais nada.

Ilustração: um ícone de carrinho de compras.

Antes, reprova no 1.1.1

<a href="/carrinho"><img src="/icones/carrinho.svg" alt="ícone"></a>

Depois, aprova

<a href="/carrinho"><img src="/icones/carrinho.svg" alt="Carrinho de compras"></a>
axe-core

Aprova: a image-alt encontra um alt e a link-name encontra um nome.

Rampa
✗ html > body > header > a > img
  O texto alternativo "ícone" é um nome de arquivo ou um placeholder.
  Evidência: "ícone"
  Patch:
    - <img src="/icones/carrinho.svg" alt="ícone">
    + <img src="/icones/carrinho.svg" alt="Carrinho de compras">
  confiança alta · 1/1 rodadas · evidência verificada · id 25aa52ce97f2

O que o axe-core verifica

O axe-core 4.14.0 mapeia sete regras para o 1.1.1. Cada uma verifica se o elemento tem alternativa em texto ou nome acessível; a image-alt também aceita imagem marcada como decorativa. O Rampa roda essas regras primeiro e relata as falhas delas como estão. Uma imagem reprovada pela image-alt, input-image-alt, role-img-alt ou svg-img-alt nunca vai para o modelo.

Regras do axe-core 4.14.0 para o 1.1.1, e as vizinhas
RegraO que verificaMapeada paraNuma execução do Rampa
image-alt, página da regra na Deque University, em inglêsImagens devem ter texto alternativo1.1.1roda
input-image-alt, página da regra na Deque University, em inglêsBotões de imagem devem ter um texto alternativo1.1.1, 4.1.2roda
role-img-alt, página da regra na Deque University, em inglêsElementos com [role='img'] tenham um texto alternativo1.1.1roda
svg-img-alt, página da regra na Deque University, em inglêsElementos svg com um 'role' de 'img' tenham um texto alternativo1.1.1roda
object-alt, página da regra na Deque University, em inglêsElementos <object> devem ter um texto alternativo1.1.1roda
aria-meter-name, página da regra na Deque University, em inglêsNós de medição ARIA devem ter um nome acessível1.1.1roda
aria-progressbar-name, página da regra na Deque University, em inglêsNós de barra de progresso ARIA devem ter um nome acessível1.1.1roda
image-redundant-alt, página da regra na Deque University, em inglêsO texto alternativo de imagens não deve ser repetido como textoboa práticanão roda: boa prática

Nenhuma delas lê o que a alternativa diz. alt="8841-frente", alt="ícone" e um alt escrito para outra imagem passam em todas. A regra de boa prática image-redundant-alt aponta alt que repete o texto ao lado; o Rampa só roda regras marcadas com WCAG A e AA, então ela não entra numa execução.

Cada regra leva à página dela na Deque University, a empresa que mantém o axe-core (em inglês).

O que o Rampa julga, e como

O que vai para o modelo

Todo img, input type="image", elemento com role="img" (SVG embutido inclusive) e canvas com nome que tenha alternativa não vazia, não esteja oculto e não tenha sido reprovado pelo axe-core. Alt vazio marca a imagem como decorativa, então ela não vai. As imagens são capturadas como aparecem: as 25 primeiras da página com pelo menos 8 por 8 pixels. Imagem sem captura não é julgada.

O que o modelo vê

  • A imagem como aparece na página: um PNG do elemento, com tamanho, recorte e CSS. Camadas fixas e grudadas, como um aviso de cookies, ficam escondidas enquanto ele é tirado.
  • A alternativa atual e o nome do arquivo da imagem.
  • A marcação do elemento, até 500 caracteres.
  • O nome do link ou botão em que a imagem está, que a alternativa precisa transmitir.
  • O texto dos elementos ao redor, até 300 caracteres, e o idioma da página para a sugestão.

O que ele precisa responder

Um veredito (aprova, reprova ou não dá para dizer), a alternativa atual copiada como evidência, o problema (nome de arquivo ou placeholder, genérica demais, conteúdo errado, informação faltando ou decorativa), o que a imagem mostra numa frase, uma alternativa sugerida com menos de 125 caracteres no idioma da página e um grau de confiança.

O que derruba uma alegação

  • A evidência não é a alternativa atual.
  • Não há descrição do que a imagem mostra.
  • Uma aprovação aponta problema, ou uma reprovação não aponta nenhum.
  • Uma reprovação que não é sobre decoração vem sem sugestão, com sugestão acima de 250 caracteres ou igual à alternativa atual.

O patch

A sugestão substitui o alt, ou o aria-label em elementos que não têm alt, como um canvas. Para imagem decorativa, o patch esvazia o alt. Em placeholders óbvios, como img-1 ou IMG_2034.jpg, um padrão fixo nomeia o problema na mensagem; o veredito continua sendo do modelo. Um alt sugerido é para uma pessoa revisar: o que o modelo diz ver não tem como ser conferido na página.

Em todo critério

  • O conteúdo da página chega ao modelo marcado como dado, e o prompt manda ignorar qualquer instrução que esteja nele.
  • As respostas ficam em cache por um hash do prompt, da imagem, do modelo e das configurações, então a mesma entrada nunca chama um modelo duas vezes.
  • Com --runs 3, o Rampa pergunta três vezes e fica com a maioria; quando as rodadas discordam, a confiança cai. Achados abaixo de --min-confidence (média por padrão) ficam ocultos, e o --verbose lista todos.
  • Alegações derrubadas pela verificação são contadas em todo relatório, nunca mostradas como achados.

Como o Rampa foi medido nele

Casos de teste ACT do W3C para o 1.1.1: precisão, recall e F1, com o Gemma 4 12B numa GPU local
ConjuntoTestaCasosaxe-core, precisão / recallRampa, precisão / recall / F1
1.1.1, imagem tem nome (ACT 23a2a8)sintaxe181,00 / 1,001,00 / 1,00 / 1,00
1.1.1, nome descreve a imagem (ACT qt1vmo)significado16não definida, nada apontado / 0,001,00 / 1,00 / 1,00

Pares corrompidos: o Rampa separou 2 de 2 (alt de imagem), o axe-core 0. Um par é uma página de teste que passa e uma cópia quebrada de propósito; quem dá o mesmo veredito às duas não está julgando.

Rodada em 9 de outubro de 2026: axe-core 4.14.0, Gemma 4 12B numa GPU local, raciocínio desligado, uma rodada, casos de teste ACT a9a1483e. Amostras pequenas e uma rodada só: leia os números como um pipeline que funciona, não como resultado.

Leia com estas ressalvas

  • A primeira rodada, em 07/10/2026, teve recall 0,67 no qt1vmo. Os erros nunca chegaram a um modelo, porque o Rampa não tratava <canvas> como imagem; com isso corrigido, o recall é 1,00.
  • Em 1.1.1 e 3.1.2, o openai:gpt-6-luna teve os mesmos números do Gemma em duas rodadas com chamadas novas, por cerca de US$ 0,005 cada.

Método e análise de erros no README (em inglês)

Limitações

  • Imagem com alt vazio é tratada como decorativa e nunca vai para o modelo, então uma imagem informativa escondida assim passa despercebida.
  • Só as 25 primeiras imagens da página são capturadas, e imagens menores que 8 por 8 pixels ficam de fora.
  • Imagens de fundo em CSS, mapas de imagem (area), vídeo e áudio não são julgados.
  • Um gráfico ou diagrama que precisa de descrição longa é julgado só pela alternativa curta.
  • O modelo vê pixels, não fatos: não sabe quem está numa foto nem se o código de um produto está certo. Revise todo alt sugerido antes de usar.
  • Julgar imagens exige um modelo com visão, no 1.1.1 e no 1.4.5. Modelos só de texto julgam os outros critérios com --criteria 1.3.5,2.4.2,2.4.4,2.4.6,3.1.1,3.1.2,3.3.2.

Perguntas sobre o 1.1.1

Uma ferramenta consegue verificar a qualidade do texto alternativo?

Em parte. Uma regra vê que o alt existe, e listas de palavras pegam nomes de arquivo e palavras como “imagem”. Saber se o alt diz o que a imagem mostra exige julgamento: o Rampa manda a imagem renderizada e o alt dela para um modelo com visão, uma imagem por vez, e só fica com a resposta quando o modelo cita o alt que está na página. Uma pessoa ainda deve revisar cada sugestão.

O axe-core verifica a qualidade do alt?

Não. A regra image-alt verifica se a imagem tem alternativa em texto ou está marcada como decorativa, então alt="img-1" passa. Se o texto combina com a imagem fica para pessoas.

Qual deve ser o alt de uma imagem decorativa?

Vazio: alt="", para o leitor de tela pular a imagem. Uma palavra como “spacer” ou “imagem” ali é a falha F39 da WCAG. Quando o modelo diz que a imagem é decorativa, o patch do Rampa esvazia o alt.

Minhas imagens vão para um provedor na nuvem?

Só se você escolher um. Com um modelo local pelo Ollama ou pelo LM Studio, a imagem não sai da sua máquina. Com um provedor, cada imagem vai num pedido próprio, com o alt e um pouco de contexto.

Verifique suas páginas

O Rampa ainda não está no npm. Clone e rode a partir do código, com Node.js 22.12 ou mais novo e Chrome ou Edge. O --criteria 1.1.1 julga só este critério; sem ele, rodam os oito que rodam por padrão.

Com o Ollama rodando, o Rampa escolhe um modelo local sozinho; o node dist/cli.mjs doctor diz o que falta.

git clone https://github.com/guilhermebsantiago/rampa-cli.git
cd rampa-cli
pnpm install && pnpm build
node dist/cli.mjs check https://example.com --criteria 1.1.1

Conferido com o rampa-cli (commit 0459809) e as fontes do W3C em 9 de outubro de 2026.