Sobre este problema HTML
O atributo name em elementos <a> foi historicamente usado para criar âncoras nomeadas — alvos de fragmento que podiam ser ligados com href="#anchorName". No HTML moderno (o padrão vivo WHATWG), o atributo name em <a> é considerado obsoleto para este propósito. O atributo id é agora a forma padrão de criar alvos de fragmento, e pode ser colocado em qualquer elemento, não apenas em tags <a>.
Independentemente de usar name ou id, o valor deve ser uma string não vazia. O validador W3C aplica esta regra porque um identificador vazio não serve qualquer propósito funcional — não pode ser referenciado por uma ligação de fragmento, não pode ser alvo de JavaScript, e cria markup inválido. Os navegadores podem ignorá-lo silenciosamente, mas polui o DOM e sinaliza um provável erro no código.
Atributos name vazios aparecem frequentemente em conteúdo migrado de plataformas CMS mais antigas ou editores WYSIWYG que inseriram âncoras de marcador como <a name=""></a>. Podem também resultar de sistemas de template onde uma variável destinada a preencher o atributo foi resolvida como uma string vazia.
Porque é que isto importa
-
Conformidade com os padrões: Tanto o padrão vivo HTML WHATWG como a especificação HTML W3C requerem que atributos tipo identificador (
id,name) não sejam strings vazias. - Acessibilidade: Leitores de ecrã e tecnologias assistivas podem tentar processar âncoras nomeadas. Identificadores vazios criam ruído sem fornecer qualquer valor de navegação.
-
Funcionalidade: Um
nameouidvazio não pode ser usado como alvo de fragmento, pelo que o elemento é efetivamente inútil como destino de ligação.
Como corrigir
- Remover completamente o elemento se a âncora vazia não serve qualquer propósito — esta é a correção mais comum.
-
Substituir
nameporide fornecer um valor significativo e não vazio se precisar de um alvo de fragmento. -
Mover o
idpara um elemento semântico próximo em vez de usar uma tag<a>vazia independente. Por exemplo, colocar oiddiretamente num cabeçalho, secção ou parágrafo. -
Garantir unicidade — cada valor
idnum documento deve ser único.
Exemplos
❌ Atributo name vazio gera o erro
<a name=""></a>
<h2>Introdução</h2>
<p>Bem-vindo ao guia.</p>
❌ name vazio gerado por um template
<a name=""></a>
<p>Esta âncora deveria ser um alvo mas o valor está em falta.</p>
<a href="#">Saltar para a secção</a>
✅ Remover a âncora vazia se for desnecessária
<h2>Introdução</h2>
<p>Bem-vindo ao guia.</p>
✅ Usar id diretamente no elemento alvo
<h2 id="introduction">Introdução</h2>
<p>Bem-vindo ao guia.</p>
<!-- Ligação para a secção de outro lugar -->
<a href="#introduction">Ir para Introdução</a>
✅ Usar id numa âncora independente se necessário
Se precisar de um ponto de âncora preciso que não corresponda a um elemento existente, use uma tag <a> com um id válido e não vazio:
<a id="section-start"></a>
<p>Este parágrafo segue o ponto de âncora.</p>
<a href="#section-start">Saltar para o início da secção</a>
✅ Migrar name legado para id
Se o seu código existente usa o atributo name obsoleto com um valor válido, atualize-o para usar id:
<!-- Antes (obsoleto mas era válido em HTML4) -->
<a name="contact"></a>
<!-- Depois (HTML moderno) -->
<a id="contact"></a>
<!-- Ainda melhor: colocar o id num elemento semântico -->
<h2 id="contact">Contacte-nos</h2>
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.