Sobre este problema HTML
O elemento <a> com um atributo href é um dos elementos interativos mais fundamentais do HTML. Os browsers e as tecnologias assistivas reconhecem-no inerentemente como um link — é focalizável através da tecla Tab, ativável com Enter, e anunciado como “link” pelos leitores de ecrã. Este comportamento integrado faz parte do role ARIA implícito do elemento, que é link.
Quando adiciona explicitamente role="link" a um elemento <a href="...">, está a comunicar às tecnologias assistivas algo que elas já sabem. O validador W3C assinala isto como desnecessário porque viola o princípio de não definir redundantemente roles ARIA que correspondem à semântica nativa de um elemento. Este princípio está codificado na primeira regra de uso ARIA: “Se pode usar um elemento ou atributo HTML nativo com a semântica e comportamento que necessita já integrados, em vez de reconfigurar um elemento e adicionar um role, estado ou propriedade ARIA para o tornar acessível, então faça-o.”
Embora um role="link" redundante não cause normalmente problemas, cria ruído na sua marcação. Também pode sinalizar a outros developers que o role é necessário, levando a confusão ou padrões de cargo-cult. HTML limpo e semântico que depende de roles nativos é mais fácil de manter e menos propenso a erros.
O atributo role="link" é legitimamente útil quando um elemento não interativo como um <span> ou <div> precisa de comportar-se como um link. Nesse caso, deve também implementar manualmente a interação por teclado (foco através de tabindex, ativação através do manuseamento da tecla Enter) e fornecer um nome acessível. Mas quando já tem um elemento <a> adequado com href, tudo isso vem gratuitamente — sem necessidade de ARIA.
Exemplos
❌ Incorreto: role="link" redundante num anchor
<a href="/about" role="link">Sobre Nós</a>
O role="link" é redundante aqui porque o elemento <a> com href já tem um role implícito de link.
✅ Correto: anchor sem role redundante
<a href="/about">Sobre Nós</a>
Simplesmente remova o atributo role="link". O browser e as tecnologias assistivas já tratam isto como um link.
✅ Correto: usar role="link" num elemento não semântico (quando necessário)
<span role="link" tabindex="0" onclick="location.href='/about'" onkeydown="if(event.key==='Enter') location.href='/about'">
Sobre Nós
</span>
Este é o caso de uso legítimo para role="link" — quando não pode usar um elemento <a> nativo e precisa de fazer um elemento não interativo comportar-se como um link. Note o trabalho adicional necessário: tabindex="0" para focalizabilidade por teclado, um handler de clique, e um handler de keydown para ativação da tecla Enter. Usar um elemento <a> adequado evita todo este esforço extra.
❌ Incorreto: múltiplos anchors com roles redundantes
<nav>
<a href="/" role="link">Início</a>
<a href="/products" role="link">Produtos</a>
<a href="/contact" role="link">Contacto</a>
</nav>
✅ Correto: navegação limpa sem roles redundantes
<nav>
<a href="/">Início</a>
<a href="/products">Produtos</a>
<a href="/contact">Contacto</a>
</nav>
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.
Saiba mais: