Abrindo links em nova aba: o atributo target
Aprenda a controlar onde um link será aberto e entenda as boas práticas de uso do target _blank.
Na lição anterior, você conheceu o target="_blank" de passagem.
Agora é hora de entender esse atributo com profundidade — seus
valores, suas implicações de segurança, seus impactos na
experiência do usuário e, principalmente, quando usá-lo e
quando evitá-lo.
Parece simples, mas o target é um dos atributos mais mal
usados do HTML. Dominar suas nuances faz diferença real na
qualidade do código que você escreve.
O que é o atributo target
O atributo target define onde o conteúdo do link será
aberto — em qual contexto de navegação o destino vai aparecer.
<a href="https://exemplo.com" target="_blank">Abrir em nova aba</a>
Por padrão — quando target não é informado — o link abre
na mesma aba em que o usuário está navegando. O target
existe justamente para mudar esse comportamento quando
necessário.
Os valores do atributo target
_self — mesma aba (padrão)
<a href="/sobre" target="_self">Sobre nós</a>
Abre o link na mesma aba e janela atual. É o comportamento
padrão de qualquer link — você raramente precisará escrever
target="_self" explicitamente, mas é útil para documentar
a intenção ou sobrescrever um target herdado de um elemento
pai.
_blank — nova aba ou janela
<a href="https://exemplo.com" target="_blank">Abrir em nova aba</a>
Abre o link em uma nova aba — ou nova janela, dependendo
das configurações do navegador e do sistema operacional do
usuário. É o valor mais usado do atributo target no
desenvolvimento web.
💡 A decisão de abrir em aba ou janela é do navegador, não do desenvolvedor. Você não tem controle direto sobre isso com HTML puro.
_parent — contexto pai
<a href="/pagina" target="_parent">Ir para a página</a>
Abre o link no contexto de navegação pai do elemento
atual. Se a página está dentro de um <iframe>, o link
abre na janela que contém o iframe — não dentro do iframe.
Se não há contexto pai, se comporta como _self.
_top — contexto raiz
<a href="/pagina" target="_top">Sair do frame e abrir na janela inteira</a>
Abre o link no contexto de navegação mais externo —
a janela principal do navegador, ignorando qualquer nível
de iframe aninhado. Se não há frames, se comporta como
_self.
Nome personalizado — aba nomeada
<!-- Primeiro clique: cria uma nova aba com o nome "painel" -->
<a href="/relatorio-jan" target="painel">Janeiro</a>
<!-- Segundo clique: reutiliza a aba "painel" já aberta -->
<a href="/relatorio-fev" target="painel">Fevereiro</a>
<!-- Terceiro clique: também reutiliza a mesma aba "painel" -->
<a href="/relatorio-mar" target="painel">Março</a>
Você pode passar um nome personalizado como valor do
target. Se uma aba com aquele nome já estiver aberta,
o link carrega nela. Se não existir, uma nova aba com
aquele nome é criada.
Esse comportamento é útil em painéis onde você quer que vários links carreguem sempre na mesma aba auxiliar, sem abrir múltiplas abas.
Resumo dos valores
| Valor | Onde abre |
|---|---|
_self |
Mesma aba (padrão) |
_blank |
Nova aba ou janela |
_parent |
Contexto pai (útil com iframes) |
_top |
Contexto raiz (ignora todos os frames) |
"nome" |
Aba com aquele nome — cria se não existir |
Segurança: o problema do window.opener
Quando um link com target="_blank" é clicado, o navegador
abre uma nova aba — mas, por padrão em navegadores mais
antigos, essa nova aba tem acesso à aba original por meio
da propriedade JavaScript window.opener.
Isso cria uma vulnerabilidade conhecida como reverse tabnapping:
1. Usuário está na sua página (aba A)
2. Clica em um link externo que abre em nova aba (aba B)
3. A aba B, sendo maliciosa, executa:
window.opener.location = "https://site-falso.com/sua-pagina"
4. Enquanto o usuário lê a aba B, a aba A silenciosamente
carrega uma cópia falsa da sua página
5. Usuário volta para a aba A e vê uma página de login falsa
O ataque é sutil porque o usuário não percebe que a aba original foi modificada.
A solução: rel="noopener noreferrer"
<a
href="https://site-externo.com"
target="_blank"
rel="noopener noreferrer"
>
Visitar site externo
</a>
noopener→ quebra a referênciawindow.opener, impedindo que a nova aba acesse ou modifique a aba originalnoreferrer→ implicanoopenere também remove o cabeçalhoRefererda requisição, impedindo que o site de destino saiba de qual URL o usuário veio
💡 Navegadores modernos (Chrome 88+, Firefox, Safari) já aplicam
noopenerautomaticamente para_blank. Mas adicionar explicitamente ainda é uma boa prática para garantir compatibilidade com navegadores mais antigos e documentar a intenção de segurança no código.
O atributo rel: além da segurança
O atributo rel define a relação semântica entre a
página atual e o destino do link. Ele não é exclusivo de
links com target="_blank" — mas é especialmente importante
nesse contexto.
Os valores mais relevantes:
| Valor | Significado |
|---|---|
noopener |
Bloqueia acesso ao window.opener |
noreferrer |
Remove o cabeçalho Referer + implica noopener |
nofollow |
Pede ao Google para não seguir este link para SEO |
sponsored |
Indica que o link é patrocinado ou pago |
ugc |
User Generated Content — link criado por usuários |
<!-- Link patrocinado -->
<a href="https://parceiro.com" rel="sponsored noopener noreferrer" target="_blank">
Parceiro comercial
</a>
<!-- Link em comentário de usuário -->
<a href="https://link-usuario.com" rel="ugc nofollow noopener" target="_blank">
Link compartilhado por usuário
</a>
UX: quando usar — e quando não usar — target="_blank"
Esse é o ponto mais ignorado por iniciantes e um dos mais discutidos por profissionais. Abrir links em nova aba não é sempre uma boa ideia — e deve ser uma decisão consciente, não um hábito automático.
✅ Quando faz sentido usar _blank
<!-- Link para documento externo enquanto o usuário preenche um formulário -->
<p>
Leia os
<a href="/termos.pdf" target="_blank" rel="noopener">
Termos de Uso
</a>
antes de continuar.
</p>
<!-- Link para ferramenta auxiliar externa -->
<p>
Verifique seu código no
<a href="https://validator.w3.org" target="_blank" rel="noopener noreferrer">
Validador do W3C
</a>
sem sair desta página.
</p>
<!-- Link para mídia ou conteúdo complementar -->
<p>
Assista ao
<a href="https://youtube.com/watch?v=xyz" target="_blank" rel="noopener noreferrer">
vídeo de demonstração
</a>
enquanto segue o tutorial.
</p>
Use _blank quando:
- O usuário está no meio de uma tarefa e perderia progresso ao navegar para outra página
- O link leva a um documento externo complementar
- O link aponta para um site completamente diferente e faz sentido manter sua página aberta
❌ Quando NÃO usar _blank
<!-- ❌ Não use _blank para navegação interna -->
<nav>
<a href="/sobre" target="_blank">Sobre</a> <!-- errado -->
<a href="/blog" target="_blank">Blog</a> <!-- errado -->
<a href="/contato" target="_blank">Contato</a> <!-- errado -->
</nav>
<!-- ❌ Não use _blank por padrão em todos os links externos -->
<a href="https://qualquer-site.com" target="_blank">Qualquer link</a>
Evite _blank quando:
- O link é de navegação interna do seu próprio site
- Abrir em nova aba interromperia um fluxo de navegação natural
- O usuário não se beneficia de ter as duas páginas abertas ao mesmo tempo
Acessibilidade: avisando o usuário
Abrir uma nova aba sem avisar o usuário é uma má
experiência — especialmente para pessoas que usam
leitores de tela ou têm dificuldades cognitivas.
O botão 'voltar' do navegador não fecha a aba que foi aberta com _blank. Isso pode confundir usuários que esperam retornar ao estado anterior da página original.
Avise no texto do link
<!-- ✅ Aviso no próprio texto -->
<a href="https://exemplo.com" target="_blank" rel="noopener noreferrer">
Documentação oficial (abre em nova aba)
</a>
Use o atributo title como reforço
<!-- ✅ title como complemento — não substituto -->
<a
href="https://exemplo.com"
target="_blank"
rel="noopener noreferrer"
title="Abre em nova aba"
>
Documentação oficial
</a>
Use aria-label para leitores de tela
<!-- ✅ Informação completa para tecnologias assistivas -->
<a
href="https://exemplo.com"
target="_blank"
rel="noopener noreferrer"
aria-label="Documentação oficial, abre em nova aba"
>
Documentação oficial
</a>
💡 O
aria-labelsubstitui o texto do link para leitores de tela. Use-o quando o texto visível não é suficiente para comunicar a ação completa ao usuário.
Exemplo prático: menu de navegação com links mistos
<nav>
<!-- Links internos: sem target -->
<a href="/">Início</a>
<a href="/sobre">Sobre</a>
<a href="/blog">Blog</a>
<a href="/contato">Contato</a>
</nav>
<main>
<h1>Recursos recomendados</h1>
<p>
Consulte a
<a
href="https://developer.mozilla.org/pt-BR/"
target="_blank"
rel="noopener noreferrer"
>
documentação do MDN (abre em nova aba)
</a>
para referências completas sobre HTML e CSS.
</p>
<p>
Valide seu código no
<a
href="https://validator.w3.org"
target="_blank"
rel="noopener noreferrer"
aria-label="Validador W3C, abre em nova aba"
>
Validador W3C
</a>
enquanto acompanha este tutorial.
</p>
</main>
Resumindo
- O atributo
targetdefine onde o link será aberto _blankabre em nova aba — o mais usado no dia a dia_selfé o padrão — abre na mesma aba_parente_topsão para contextos com iframes- Nomes personalizados reutilizam abas já abertas
- Sempre use
rel="noopener noreferrer"com_blankpara evitar a vulnerabilidade de reverse tabnapping - Avise o usuário quando um link vai abrir em nova aba
- Não use
_blankpor padrão — use com intenção e apenas quando beneficiar a experiência do usuário