Menu

Como abrir link em nova aba no HTML (target _blank)

Adicione target="_blank" a um link para abri-lo numa nova aba. Esta página cobre rel="noopener" e noreferrer, como avisar o usuário de que o link abre uma nova aba, os outros valores de target e como fazer isso com JavaScript.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Adicione target="_blank" ao link. O navegador abre o destino numa nova aba e deixa a sua página onde estava.

A técnica é só isso: target="_blank" no <a>, mais rel="noopener", explicado a seguir. O leitor também pode abrir qualquer link numa nova aba por conta própria com Ctrl+clique (Cmd+clique no Mac) ou com o botão do meio, então use target="_blank" só quando sair da página custaria algo a ele, como um formulário preenchido pela metade ou um vídeo tocando.

As prévias desta página abrem todo link externo numa nova aba, com ou sem target, porque um frame de exemplo nunca pode navegar para fora. Para ver a diferença que target faz, salve o exemplo como arquivo e abra no seu navegador.

rel="noopener" e rel="noreferrer"

Uma página aberta com target="_blank" recebia uma referência à sua página em window.opener, e podia usá-la para mandar a sua aba para outra URL (por exemplo, uma página de login falsa). rel="noopener" remove essa referência.

Valor de relwindow.opener na nova abaReferenciador enviado ao novo site
nenhum (navegadores antigos)A sua páginaSim
nenhum (navegadores atuais)nullSim
noopenernullSim
noreferrernullNão
openerA sua páginaSim

As versões atuais de Chrome, Firefox e Safari tratam todo link com target="_blank" como noopener, a não ser que você escreva rel="opener". Escrever rel="noopener" mesmo assim protege visitantes em navegadores antigos e deixa a intenção visível no código.

noreferrer também impede o navegador de enviar o referenciador, então o site para onde você aponta não vê de qual página o visitante veio. É uma escolha de privacidade, não de segurança: use quando a sua URL deve ficar privada, e deixe de fora com parceiros que precisam ver o seu tráfego.

<!-- Safe, the other site still sees the referral -->
<a href="https://example.com" target="_blank" rel="noopener">Example</a>

<!-- Safe, and the other site does not see where the visit came from -->
<a href="https://example.com" target="_blank" rel="noopener noreferrer">Example</a>

rel aceita vários valores separados por espaço, então noopener combina com os valores de SEO: rel="noopener sponsored" para um link pago, rel="noopener nofollow" para um link que você não recomenda.

Uma aba nova que abre sem aviso desorienta, principalmente quem usa leitor de tela, que pode nem perceber que a página mudou. Diga isso no link. Um ícone pequeno mostra para quem enxerga; um texto oculto diz para quem usa leitor de tela:

O seletor a[target="_blank"] adiciona a seta a todo link de nova aba automaticamente, então você nunca esquece nenhum. O span oculto é lido como parte do nome do link, "accessibility guidelines (opens in a new tab)", mas não ocupa espaço na tela.

Seletores de atributo podem estilizar links pelo href. Aqui todo link que começa com http ganha a seta, e os links internos do site não:

^= significa "começa com". O seletor só estiliza os links: os atributos target e rel continuam precisando estar no HTML.

Os valores de target

target diz onde o link abre. Existem quatro palavras-chave, e qualquer outro valor é um nome:

targetAbre o link em
_selfA mesma aba ou frame. É o padrão.
_blankUma aba nova, sem nome
_parentO pai do frame atual (igual a _self fora de frames)
_topA aba inteira, saindo de todos os frames
qualquer nome, ex. helpA aba ou frame com esse nome, criada se não existir

Um target com nome é reaproveitado. Todo link com target="help" abre na mesma aba, então quem clica em cinco links de ajuda fica com uma aba, não cinco. _top é o que se usa dentro de um <iframe> quando um link deve substituir a página inteira, e não só o frame.

<base target="_blank"> no <head> define o target padrão de todos os links e formulários da página:

<head>
  <base target="_blank">
</head>
<body>
  <a href="https://example.com">Opens in a new tab</a>
  <a href="/about" target="_self">Opens in this tab</a>
</body>

O target próprio de um link vence o <base>. Use isso raramente: uma página em que todo link abre uma aba nova é chata de usar.

Abrir uma nova aba com JavaScript

window.open(url, '_blank') abre uma aba a partir de um script. Passe 'noopener' como terceiro argumento para ter a mesma proteção do atributo rel. Com ele, window.open retorna null em vez de uma referência à nova aba:

Os navegadores bloqueiam window.open a não ser que ele rode em resposta a um clique ou tecla, então chame a função a partir de um event listener, não no carregamento da página nem depois de um timer. Se o destino é uma URL que o leitor poderia ver antes, um link com target="_blank" é mais simples e funciona sem JavaScript. O link em si está em link HTML.

Erros comuns

  • target="blank" sem o sublinhado. É um nome, não a palavra-chave. Abre uma aba nova na primeira vez e depois reaproveita essa aba para todo outro link com o mesmo nome.
  • target="_new". Também é só um nome, com o mesmo efeito: uma aba reaproveitada.
  • Colocar target em todo link. Links internos devem abrir na mesma aba. Quem quer uma aba nova sabe como conseguir.
  • Nenhuma indicação de que o link abre uma nova aba. Adicione um ícone e um texto oculto.
  • Adicionar noreferrer a links de parceiros ou de afiliados e depois não entender por que o parceiro não vê as indicações.

Perguntas frequentes

Como fazer um link abrir em nova aba no HTML?

Adicione target="_blank" à tag <a>: <a href="https://example.com" target="_blank" rel="noopener">Example</a>. O navegador abre a página numa nova aba e mantém a página atual aberta.

Ainda preciso de rel="noopener" com target="_blank"?

As versões atuais de Chrome, Firefox e Safari aplicam noopener automaticamente aos links com target="_blank", então a página nova não consegue acessar a sua por window.opener. Escrever rel="noopener" não custa nada e protege visitantes em navegadores antigos, por isso a maioria dos guias de estilo ainda pede.

Qual a diferença entre noopener e noreferrer?

noopener corta a ligação entre as duas abas (window.opener é null na nova). noreferrer faz isso e também impede que o navegador envie a URL da sua página como referenciador, então o analytics do outro site vê a visita como direta.

O HTML consegue forçar um link a abrir numa nova janela em vez de uma aba?

Não. target="_blank" pede um novo contexto de navegação, e o navegador e as configurações do usuário decidem se será uma aba ou uma janela. Os navegadores atuais abrem uma aba.

Como abrir todos os links de uma página em nova aba?

Coloque <base target="_blank"> no <head>. Todo link sem target próprio passa a abrir numa nova aba. Isso também afeta formulários, então use só em páginas em que é mesmo isso que você quer.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR