O que o 2.4.6 exige

Os cabeçalhos e os rótulos descrevem o tópico ou a finalidade.

Critério de sucesso 2.4.6 Cabeçalhos e Rótulos (Nível AA), 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)

Headings and labels describe topic or purpose.

Web Content Accessibility Guidelines (WCAG) 2.1, Recomendação do W3C de 6 de maio de 2025. Copyright © 2020-2025 World Wide Web Consortium.

Quem usa leitor de tela costuma andar pela página de cabeçalho em cabeçalho, e todo mundo passa os olhos por eles. Um cabeçalho que descreve a seção ajuda a achar o que se procura; um rótulo que descreve o campo ajuda a preenchê-lo.

Curto não é problema. O Understanding 2.4.6 (em inglês) diz que uma palavra, ou até um caractere, pode bastar quando dá a pista certa, como uma letra sobre uma parte de um glossário.

O 2.4.6 não exige cabeçalhos nem rótulos; exige que os que existem descrevam o assunto ou a finalidade. Marcá-los é o 1.3.1, oferecer rótulos é o 3.3.2 e expor o nome do campo é o 4.1.2. Um campo pode ter o nome bem exposto e ainda assim reprovar no 2.4.6, porque o nome não diz nada.

Regras ACT do 2.4.6

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 cabeçalho que sobrou do template

“Título aqui” serviria para qualquer seção de qualquer página. Quem lista os cabeçalhos não descobre nada sobre o horário de funcionamento abaixo dele.

Antes, reprova no 2.4.6

<h2>Título aqui</h2>
<p>De segunda a sexta, das 7h às 18h.
   Sábado, das 8h às 13h.</p>

Depois, aprova

<h2>Horário de funcionamento</h2>
axe-core

Aprova: nenhuma regra do axe-core lê o que um cabeçalho diz.

Rampa
✗ html > body > main > h2:nth-of-type(1)
  O título "Título aqui" não diz nada sobre o conteúdo abaixo dele.
  Evidência: "Título aqui"
  Patch:
    - <h2>Título aqui</h2>
    + <h2>Horário de funcionamento</h2>
  confiança alta · 1/1 rodadas · evidência verificada · id 80df57450868

Um cabeçalho que fala de outro assunto

A seção é sobre devoluções e o cabeçalho diz entrega. Quem pula de cabeçalho em cabeçalho passa direto pela parte de que precisa.

Antes, reprova no 2.4.6

<h2>Entrega</h2>
<p>Você pode devolver pacotes fechados em até
   30 dias e receber o valor de volta.</p>

Depois, aprova

<h2>Devoluções</h2>
axe-core

Aprova: nenhuma regra do axe-core lê o que um cabeçalho diz.

Rampa

O Rampa aprovou este cabeçalho na execução gravada: um falso negativo. Também aprovou o mesmo exemplo em inglês.

Dois campos com o mesmo rótulo

Os dois campos dizem “Nome”, e nada na página separa quem compra de quem recebe. O Rampa põe isso no contexto como um fato, porque saber se o rótulo descreve o campo depende disso.

Antes, reprova no 2.4.6

<label for="de-nome">Nome</label>
<input id="de-nome" autocomplete="name">
<label for="para-nome">Nome</label>
<input id="para-nome">

Depois, aprova

<label for="de-nome">Seu nome</label>
<input id="de-nome" autocomplete="name">
<label for="para-nome">Nome de quem recebe</label>
<input id="para-nome">
axe-core

Aprova: a label encontra um rótulo para cada campo.

Rampa
✗ #de-nome
  O rótulo "Nome" não diz o que preencher.
  Evidência: "Nome"
  Patch:
    - <label for="de-nome">Nome</label>
    + <label for="de-nome">Nome do beneficiário</label>
  confiança alta · 1/1 rodadas · evidência verificada · id 301f49bb588d
✗ #para-nome
  O rótulo "Nome" não diz o que preencher.
  Evidência: "Nome"
  Patch:
    - <label for="para-nome">Nome</label>
    + <label for="para-nome">Nome do beneficiário</label>
  confiança alta · 1/1 rodadas · evidência verificada · id cb6b60e6b72e

Os dois achados estão certos, mas a primeira sugestão está errada: aquele campo é de quem compra. Um patch é uma proposta para uma pessoa revisar.

O que o axe-core verifica

O axe-core 4.14.0 não tem regra mapeada para o 2.4.6. Duas ficam ao lado: a label, mapeada para o 4.1.2, reprova campo de formulário sem rótulo nenhum, e a empty-heading, de boa prática, reprova cabeçalho sem texto. O Rampa só roda regras marcadas com WCAG A e AA, então a label entra numa execução e a empty-heading não; um campo reprovado pela label nunca vai para o modelo.

Regras do axe-core 4.14.0 para o 2.4.6, e as vizinhas
RegraO que verificaMapeada paraNuma execução do Rampa
label, página da regra na Deque University, em inglêsElementos de formulário devem ter rótulos4.1.2roda
empty-heading, página da regra na Deque University, em inglêsOs títulos não devem ser vaziosboa práticanão roda: boa prática

Nenhuma delas lê o texto. “Título aqui”, um cabeçalho sobre o assunto errado e dois campos chamados “Nome” passam em todas as regras.

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 cabeçalho visível que tenha texto e algo abaixo dele, e todo campo de formulário visível com nome: caixas de texto, de busca e de combinação, listas, campos numéricos, sliders, caixas de seleção e botões de opção.

O que o modelo vê

  • Para um cabeçalho: o nível e o conteúdo que ele introduz, até o próximo cabeçalho do mesmo nível ou de nível mais alto ou o fim do elemento de seção, uns 700 caracteres. Os campos desse conteúdo aparecem como campos, por exemplo a textbox field labeled “Email”.
  • Para um cabeçalho, também: os cabeçalhos das seções em que ele está e os outros cabeçalhos do mesmo nível na mesma seção.
  • Para um rótulo: o papel e o tipo do campo, os atributos name, id, autocomplete e placeholder, o cabeçalho visível acima dele e o grupo em que está, como a legenda de um fieldset.
  • Quando vários campos têm o mesmo rótulo: uma frase dizendo se um cabeçalho visível ou um grupo os diferencia.
  • O idioma da página, para a sugestão.

O que ele precisa responder

Primeiro, o que o texto nomeia, em poucas palavras, para o modelo ler antes de julgar; depois um veredito, o texto copiado como evidência, o problema (genérico, desacordo com o conteúdo ou texto de preenchimento), um texto sugerido com 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 cabeçalho ou do rótulo.
  • 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.

O patch

O texto sugerido substitui o texto do cabeçalho, o texto do elemento label ou o aria-label do campo.

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 2.4.6: precisão, recall e F1, com o Gemma 4 12B numa GPU local
ConjuntoTestaCasosaxe-core, precisão / recallRampa, precisão / recall / F1
2.4.6, título de seção é descritivo (ACT b49b2e)significado12não definida, nada apontado / 0,000,80 / 1,00 / 0,89
2.4.6, rótulo de campo é descritivo (ACT cc0f0a)significado16não definida, nada apontado / 0,001,00 / 0,83 / 0,91

Pares corrompidos: o Rampa separou 8 de 9 (títulos e rótulos), 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

  • Os prompts e o contexto de 2.4.2, 2.4.4 e 2.4.6 foram ajustados depois de ler os erros desta rodada, sem copiar as páginas de teste para os prompts. Precisam de páginas novas antes que os números signifiquem mais do que “o pipeline funciona”.
  • O único par que o Rampa não separou é uma página intacta que ele também reprova: um glossário sob o cabeçalho “A”.
  • Páginas reais têm mais ruído que casos de teste. Na página deste projeto, o Gemma aponta três cabeçalhos curtos em inglês que uma pessoa aprovaria, como o nome de etapa “Collect”, e nada na página em português.

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

Limitações

  • Na execução gravada para esta página, o Gemma aprovou “Entrega” sobre um parágrafo de devoluções, um falso negativo, e reprovou “Vale-presente” sobre o formulário do vale-presente, um falso positivo. Os dois aconteceram em português e em inglês.
  • Cabeçalho sem nada abaixo fica de fora, e texto que só parece cabeçalho não é visto: marcar cabeçalhos é o 1.3.1.
  • Julga os rótulos de campos de formulário. O texto de botões e de outros controles não é julgado no 2.4.6.
  • O modelo lê uns 700 caracteres da seção, então uma seção longa é julgada pelo começo.

Perguntas sobre o 2.4.6

O WCAG 2.4.6 exige cabeçalhos e rótulos?

Não. Ele exige que os cabeçalhos e rótulos que existem descrevam o assunto ou a finalidade. Se o conteúdo precisa de cabeçalhos ou os campos de rótulos é assunto do 1.3.1 e do 3.3.2, e se o nome do campo é exposto, do 4.1.2.

Um cabeçalho pode ter uma palavra só?

Pode. O Understanding 2.4.6 diz que uma palavra, ou até um caractere, pode bastar quando dá a pista certa. O Rampa diz o mesmo ao modelo e ainda erra: na página deste projeto, o Gemma aponta três cabeçalhos curtos que uma pessoa aprovaria.

O axe-core verifica cabeçalhos e rótulos?

Nenhuma regra do axe-core é mapeada para o 2.4.6. A label (mapeada para o 4.1.2) reprova campo sem rótulo nenhum, e a empty-heading, de boa prática, reprova cabeçalho sem texto. Um rótulo “Campo 1” 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.6 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.6

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