O que o 2.4.4 exige
O propósito de cada link pode ser determinado a partir do link sozinho ou a partir do texto do link em conjunto com seu respectivo contexto de link determinado programaticamente, exceto quando o propósito do link for ambíguo para os usuários em geral.
Texto original, em inglês (WCAG 2.1)
The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.
Leitores de tela listam todos os links da página, e quem usa teclado anda de link em link. Fora do parágrafo, dez links “Saiba mais” são dez escolhas iguais. Texto de link que nomeia o destino funciona em qualquer lugar; a WCAG também aceita texto que fica claro junto com o contexto determinado programaticamente.
O Understanding 2.4.4 (em inglês) diz qual é esse contexto: a mesma frase, parágrafo, item de lista ou célula de tabela do link, uma célula de cabeçalho dessa célula, ou um texto ligado ao link por ARIA. Um cabeçalho antes do link é só técnica recomendada (H80). O 2.4.9, mais rigoroso e de nível AAA, pede o texto do link sozinho.
A exceção é uma finalidade ambígua para todo mundo, como as portas de um jogo que só revelam o que há atrás quando abertas. A WCAG lista duas falhas: contexto só em conteúdo sem relação com o link (F63) e imagem que é o único conteúdo do link e não tem nome acessível (F89).
No W3C
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 9 de outubro de 2026.
Texto genérico, com o contexto em outro lugar
A frase que explica o link está em outro parágrafo, então não é o contexto dele: a lista de links do leitor de tela mostra “Clique aqui” e mais nada. É a falha F63 da WCAG. Um “Leia mais” no fim do parágrafo ou do item de lista que nomeia a notícia passaria no 2.4.4.
Antes, reprova no 2.4.4
<p>Nossa política de trocas mudou em 1º de março.</p>
<p><a href="trocas.html">Clique aqui</a></p>Depois, aprova
<p>Nossa política de trocas mudou em 1º de março.
<a href="trocas.html">Leia a nova política de trocas</a>.</p>- axe-core
Aprova: a
link-nameencontra um nome.- Rampa
✗ html > body > main > p:nth-of-type(2) > a O texto do link "Clique aqui" não diz para onde o link leva, e nada ao redor diz. Evidência: "Clique aqui" Patch: - <a href="trocas.html">Clique aqui</a> + <a href="trocas.html">Trocas e devoluções</a> confiança alta · 1/1 rodadas · evidência verificada · id a09a72ad1cbfO texto sugerido é o título da página em
trocas.html, que o Rampa leu antes de julgar.
Um link de imagem sem nome
O logo leva à página inicial, mas a imagem não tem alt, então o link não tem nome nenhum. É a falha F89 da WCAG, e aqui as regras decidem: o axe-core reprova, e o Rampa relata isso sem perguntar a um modelo.
Antes, reprova no 2.4.4
<a href="/"><img src="/logo.svg"></a>Depois, aprova
<a href="/"><img src="/logo.svg" alt="Torrefação Aurora, página inicial"></a>- axe-core
Reprova: a
link-namenão encontra nome, e aimage-altnão encontra alt.- Rampa
✗ html > body > header > a Links devem ter um texto discernível alta · regra link-name · id 1eed5c5c986fA mesma execução relata a imagem no 1.1.1, pela
image-alt.
Texto que não confere com o destino
O link promete os preços da assinatura e leva a um post do blog sobre uma torrefação nova. Antes de julgar, o Rampa leu a página no endereço, então o modelo pôde comparar o título dela com o que o link diz.
Antes, reprova no 2.4.4
<p>Café fresco a cada duas semanas, entregue na sua porta.
<a href="blog/nova-torrefacao.html">Veja os preços da assinatura</a>.</p>Depois, aprova
<p>Café fresco a cada duas semanas, entregue na sua porta.
<a href="assinatura.html">Veja os preços da assinatura</a>.</p>- axe-core
Aprova: a
link-nameencontra um nome.- Rampa
✗ html > body > main > p:nth-of-type(3) > a O texto do link "Veja os preços da assinatura" não corresponde ao destino do link: uma página com o título "Nossa nova torrefação abre em março | Torrefação Aurora". Evidência: "Veja os preços da assinatura" Patch: - <a href="blog/nova-torrefacao.html">Veja os preços da assinatura</a> + <a href="blog/nova-torrefacao.html">Leia sobre a nova torrefação da Aurora</a> confiança alta · 1/1 rodadas · evidência verificada · id 995fc8d081a5Aqui o errado era o endereço, e o patch reescreve o texto para combinar com ele. Um patch é uma proposta para uma pessoa revisar.
O mesmo texto para dois arquivos diferentes
As duas tabelas de preço são um link “Baixar”, em itens de lista que não têm mais nada, sob um só cabeçalho. A lista de links do leitor de tela mostra duas escolhas iguais. O Rampa conta os links que têm o mesmo texto e os lugares para onde levam, e diz ao modelo se algo em volta deste o diferencia.
Antes, reprova no 2.4.4
<h2>Tabelas de preço para cafeterias</h2>
<ul>
<li><a href="precos-varejo.csv">Baixar</a></li>
<li><a href="precos-atacado.csv">Baixar</a></li>
</ul>Depois, aprova
<h2>Tabelas de preço para cafeterias</h2>
<ul>
<li><a href="precos-varejo.csv">Preços de varejo (CSV)</a></li>
<li><a href="precos-atacado.csv">Preços de atacado (CSV)</a></li>
</ul>- axe-core
Aprova: a
link-nameencontra um nome para cada link.- Rampa
✗ html > body > main > ul:nth-of-type(1) > li:nth-of-type(1) > a O texto do link "Baixar" é o mesmo de 2 links que levam a 2 lugares diferentes, e nada ao redor deste o diferencia. Evidência: "Baixar" Patch: - <a href="precos-varejo.csv">Baixar</a> + <a href="precos-varejo.csv">Baixar tabela de preços de varejo (CSV)</a> confiança alta · 1/1 rodadas · evidência verificada · id 0522d3a492ee ✗ html > body > main > ul:nth-of-type(1) > li:nth-of-type(2) > a O texto do link "Baixar" é o mesmo de 2 links que levam a 2 lugares diferentes, e nada ao redor deste o diferencia. Evidência: "Baixar" Patch: - <a href="precos-atacado.csv">Baixar</a> + <a href="precos-atacado.csv">Baixar tabela de preços de atacado (CSV)</a> confiança alta · 1/1 rodadas · evidência verificada · id 70e8c8b965cb
O que o axe-core verifica
O axe-core 4.14.0 mapeia duas regras para o 2.4.4, as duas também mapeadas para o 4.1.2: a link-name reprova link sem nome, e a area-alt, área de mapa de imagem sem alternativa. O Rampa relata as falhas delas como estão, e um link reprovado pela link-name nunca vai para o modelo.
| Regra | O que verifica | Mapeada para | Numa execução do Rampa |
|---|---|---|---|
link-name, página da regra na Deque University, em inglês | Links devem ter um texto discernível | 2.4.4, 4.1.2 | roda |
area-alt, página da regra na Deque University, em inglês | Elementos <area> ativos devem ter um texto alternativo | 2.4.4, 4.1.2 | roda |
Nenhuma delas lê o nome. “Clique aqui”, “Leia mais”, dois links “Baixar” para arquivos diferentes e um link que nomeia a página errada passam. A identical-links-same-purpose do axe-core compara links que têm o mesmo nome, mas é mapeada para o 2.4.9 (nível AAA), fora dos níveis que o Rampa roda.
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 link visível com nome que a link-name não reprovou. Um link cujo único conteúdo é uma imagem fica para o 1.1.1, pelo alt da imagem, a não ser que o nome venha de aria-label ou aria-labelledby.
O que o modelo vê
- O texto do link, o endereço e a tag de abertura.
- O contexto determinado programaticamente: a frase, o parágrafo ou o item de lista em que ele está, com os itens em que esse está aninhado, a célula de tabela e as células de cabeçalho dela, e a descrição por
aria-describedby. Umdivouspancurto em volta do link conta como a frase dele; um bloco que só tem links não é contexto. - O cabeçalho sob o qual o link está e o landmark em volta dele, como a navegação.
- Para onde o link leva: num link
#parte, o texto para onde ele aponta; nos outros, o que o Rampa leu no endereço antes de julgar, que é o título, o primeiroh1, a meta description e a parte para onde um#fragmentoaponta, numa página, ou o tipo e o tamanho, num arquivo. - Os links que têm o mesmo texto: quantos são, a quantos lugares diferentes levam e se o contexto deste o diferencia dos que levam a outro lugar.
- O idioma da página, para a sugestão.
O que ele precisa responder
Primeiro, o que o texto e o contexto prometem e para onde o conteúdo diz que o link leva; depois um veredito, o texto do link copiado como evidência, o problema (genérico, endereço ou nome de arquivo, desacordo com o destino, ou ambíguo entre links com o mesmo texto), um texto de link que diga a finalidade sozinho em menos de 80 caracteres e um grau de confiança.
O que derruba uma alegação
- A evidência não é o texto atual do link.
- Uma aprovação aponta problema, ou uma reprovação não aponta nenhum.
- Uma reprovação vem sem texto sugerido, com sugestão acima de 160 caracteres ou igual ao texto atual.
- Um desacordo com o destino é alegado sem destino conhecido: nem
#parte, nem endereço, nem nada lido nele. - Uma ambiguidade é alegada sem outro link com o mesmo texto que leve a outro lugar a partir do mesmo contexto.
O patch
O texto sugerido substitui o texto do link, ou o aria-label dele quando é de lá que o nome vem.
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--verboselista todos. - Alegações derrubadas pela verificação são contadas em todo relatório, nunca mostradas como achados.
Como o Rampa foi medido nele
| Conjunto | Testa | Casos | axe-core, precisão / recall | Rampa, precisão / recall / F1 |
|---|---|---|---|---|
| 2.4.4, link tem nome (ACT c487ae) | sintaxe | 28 | 1,00 / 1,00 | 1,00 / 1,00 / 1,00 |
| 2.4.4, link é descritivo no contexto (ACT 5effbb) | significado | 18 | não definida, nada apontado / 0,00 | 0,86 / 1,00 / 0,92 |
| 2.4.4, links com o mesmo nome têm a mesma finalidade (ACT fd3a94) | significado | 24 | não definida, nada apontado / 0,00 | 0,58 / 0,88 / 0,70 |
Pares corrompidos: o Rampa separou 10 de 11 (texto do link genérico) e 10 de 10 (link apontado para outro lugar), 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
- O fd3a94 é o conjunto mais fraco. Ele pergunta se links com o mesmo nome levam a lugares equivalentes, e a ACT aceita cópias de uma página e links “ambíguos para os usuários em geral” que o Rampa aponta.
- A avaliação segue links da mesma origem, porque o resultado do fd3a94 depende de para onde os links levam, um redirecionamento imediato ou a cópia de uma página, no mesmo servidor do W3C das páginas de teste. Sites de terceiros para onde as páginas de teste apontam nunca são acessados.
- Os pares quebram os exemplos que passam do c487ae e do 5effbb: um troca o texto de todo link que se basta sozinho por “Check it out”, o outro aponta todo link para um parágrafo sobre horário de funcionamento acrescentado à página. Nenhum usa palavras do prompt.
- O prompt e o contexto do 2.4.4 foram ajustados depois de ler os erros dele nesses casos, sem copiar as páginas de teste para o prompt. Precisam de páginas novas antes que os números signifiquem mais do que “o pipeline funciona”.
Limitações
- Na execução gravada para esta página, o Gemma reprovou com confiança alta um de dois links “Leia mais” cujos itens de lista nomeiam a notícia, em cada idioma. Pela técnica H77 da WCAG, esses passam no 2.4.4: são falsos positivos.
- Os destinos só são lidos quando o julgamento roda, não com
--no-llm: no máximo 40 endereços por página, 4 de cada vez, 8 segundos cada e os primeiros 512 KB de uma página, sem cookies nem credenciais e sem rodar os scripts da página. Uma página que monta o conteúdo no navegador mostra só o que o HTML dela diz. - Por padrão, só são lidos endereços da mesma origem da página, ou arquivos locais ao lado dela. O
--follow-links allacrescenta outros sites, nunca um endereço privado a não ser que a página esteja num, e o--follow-links nonenão lê nada. Um link quebrado, uma tela de login ou um redirecionamento para a página inicial contam como nada conhecido, e nunca viram achado. - O que o Rampa lê num destino entra no prompt, então um provedor de modelo na nuvem vê os títulos e as descrições das páginas para onde a sua página aponta. Use
--follow-links none, ou um modelo local, quando isso importar. - A exceção da ACT para links “ambíguos para os usuários em geral” não é detectada: dois links com o mesmo texto que levam a lugares diferentes, sem nada em volta para ninguém, são apontados como ambíguos.
- Duas páginas contam como um lugar só quando título,
h1e descrição são idênticos e só o caminho muda. Um link feito por script, semhref, não tem destino conhecido, então nunca entra na comparação. - O modelo também vê o cabeçalho sob o qual o link está. A WCAG lista isso só como técnica recomendada (H80), e a definição de contexto de link das regras ACT deixa o cabeçalho de fora, então uma aprovação que depende do cabeçalho merece o olhar de uma pessoa.
Perguntas sobre o 2.4.4
“Leia mais” reprova no WCAG 2.4.4?
Nem sempre. Quando a frase, o parágrafo, o item de lista ou a célula de tabela em volta diz para onde ele leva, o “Leia mais” passa no 2.4.4; reprova no 2.4.9 (nível AAA), mais rigoroso, que pede o texto do link sozinho. Um “Leia mais” sem nada em volta reprova no 2.4.4. Na execução gravada para esta página, o Rampa reprovou por engano um de dois “Leia mais” cujos itens de lista nomeavam a notícia.
O Rampa segue o link?
Ele lê para onde o link leva antes de julgar, sem rodar scripts: o título, o cabeçalho principal e a descrição de uma página, ou o tipo e o tamanho de um arquivo. Por padrão, só lê links do mesmo site, ou arquivos locais ao lado da página; o --follow-links all acrescenta outros sites e o --follow-links none desliga. O destino pode revelar um desacordo, mas nunca faz um texto pouco claro passar: as pessoas não o veem antes de seguir o link.
Dois links com o mesmo texto são uma falha?
Não quando levam ao mesmo lugar, ou quando o contexto de cada um os diferencia. O Rampa só aponta um texto repetido como ambíguo quando os links levam a lugares diferentes e nada em volta deste o diferencia. A regra ACT fd3a94 testa isso, e é onde o Rampa é mais fraco.
Um cabeçalho conta como contexto do link?
Não como técnica suficiente. A WCAG lista o cabeçalho anterior como técnica recomendada (H80), e as regras ACT deixam cabeçalhos fora do contexto de link. O Rampa ainda mostra ao modelo o cabeçalho sob o qual o link está, então uma aprovação que depende só dele merece o olhar de uma pessoa.
O axe-core verifica a finalidade do link?
Verifica se o link tem nome (link-name) e se a área de um mapa de imagem tem texto alternativo (area-alt). Um link que diz “Clique aqui” passa nas duas.
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 2.4.4 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 2.4.4Conferido com o rampa-cli (commit 0459809) e as fontes do W3C em 9 de outubro de 2026.