Sobre este problema HTML
O atributo target especifica onde um documento linkado deve ser aberto. Quando o validador encontra target="", reporta um erro porque a especificação HTML requer que os nomes de contexto de navegação tenham pelo menos um caráter. Uma string vazia não é um nome de contexto de navegação válido e não tem comportamento definido, o que significa que os navegadores podem tratá-la de forma inconsistente.
Este problema surge comumente quando um valor target é gerado dinamicamente por um CMS, motor de templates, ou JavaScript e o valor acaba por ficar vazio. Também pode acontecer quando um programador adiciona o atributo com a intenção de preenchê-lo mais tarde mas se esquece de o fazer.
Definir target como uma string vazia é problemático por várias razões:
- Conformidade com padrões: A especificação HTML da WHATWG requer explicitamente que nomes de contexto de navegação válidos sejam strings não vazias. Um valor vazio viola esta regra.
-
Comportamento imprevisível: Os navegadores podem interpretar um
targetvazio de forma diferente — alguns podem tratá-lo como_self, outros podem comportar-se de forma inesperada. Isto torna o seu site mais difícil de testar e manter. -
Preocupações de acessibilidade: Leitores de ecrã e tecnologias assistivas podem anunciar o atributo
targetou usá-lo para informar os utilizadores sobre o comportamento do link. Um valor vazio não fornece informação significativa.
Para corrigir isto, escolha uma das seguintes abordagens:
-
Remova o atributo se quiser o comportamento padrão (abrir no mesmo contexto de navegação, equivalente a
_self). -
Defina uma palavra-chave válida como
_blank,_self,_parent, ou_top. -
Defina um nome personalizado se quiser que múltiplos links partilhem o mesmo contexto de navegação (ex.,
target="externalWindow").
Exemplos
❌ Inválido: atributo target vazio
<a href="https://example.com" target="">Visitar Example</a>
Isto desencadeia o erro de validação porque o valor target é uma string vazia.
✅ Corrigido: remover target completamente
Se quiser que o link abra no contexto de navegação atual (o padrão), simplesmente remova o atributo:
<a href="https://example.com">Visitar Example</a>
✅ Corrigido: usar _blank para abrir numa nova aba
<a href="https://example.com" target="_blank" rel="noopener">Visitar Example</a>
Note a adição de rel="noopener" — esta é uma boa prática de segurança ao usar target="_blank", pois impede que a página aberta aceda à propriedade window.opener.
✅ Corrigido: usar _self explicitamente
Se quiser ser explícito sobre abrir no mesmo contexto:
<a href="https://example.com" target="_self">Visitar Example</a>
✅ Corrigido: usar um nome de contexto de navegação personalizado
Pode usar um nome personalizado para que múltiplos links reutilizem a mesma aba ou janela:
<a href="https://example.com" target="externalWindow">Example</a>
<a href="https://example.org" target="externalWindow">Example Org</a>
Ambos os links abrirão no mesmo contexto de navegação chamado externalWindow. Se ainda não existir, o navegador cria-o; cliques subsequentes reutilizam-no.
Templates dinâmicos
Se o seu valor target vem de um template ou CMS, certifique-se de que o atributo é renderizado condicionalmente em vez de ser produzido com um valor vazio. Por exemplo, numa linguagem de templates:
<!-- Em vez de sempre produzir target -->
<a href="https://example.com" target="">Visitar</a>
<!-- Incluir target apenas quando existe um valor -->
<a href="https://example.com" target="_blank" rel="noopener">Visitar</a>
Na sua lógica de template, omita condicionalmente o atributo target completamente quando nenhum valor é fornecido, em vez de o renderizar como uma string vazia.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.