Skip to main content
Validação HTML

O papel “banner” é desnecessário para o elemento “header”.

Sobre este problema HTML

A especificação HTML define papéis semânticos incorporados para muitos elementos, e o elemento <header> é um deles. Quando um <header> é um filho direto de <body> (ou pelo menos não aninhado dentro de um elemento de secção), os navegadores e as tecnologias assistivas já o interpretam como um marco banner — a região da página que tipicamente contém o logótipo do site, navegação e outro conteúdo introdutório. Adicionar explicitamente role="banner" duplica aquilo que o navegador já sabe, o que adiciona ruído desnecessário à sua marcação.

Este princípio faz parte da orientação da especificação WAI-ARIA sobre o uso de papéis ARIA: a primeira regra do ARIA é “Se você puder usar um elemento ou atributo HTML nativo com a semântica e comportamento que requer já incorporados, em vez de reaproveitarum elemento e adicionar um papel, estado ou propriedade ARIA para o tornar acessível, então faça-o.” Papéis redundantes normalmente não quebram nada, mas confundem o código, podem confundir os programadores que mantêm o projeto e sinalizam uma incompreensão da semântica HTML.

Vale a pena notar uma nuance importante: o elemento <header> só mapeia para o papel banner quando não é descendente de <article>, <aside>, <main>, <nav>, ou <section>. Quando aninhado dentro de um destes elementos de secção, <header> não tem papel de marco correspondente — serve simplesmente como o cabeçalho para essa secção particular. Nesse contexto, adicionar role="banner" não seria redundante; na verdade mudaria a semântica, o que quase certamente não é o que você quer.

Para corrigir o aviso, remova o atributo role="banner" do seu elemento <header>. A semântica nativa é suficiente.

Exemplos

Incorreto: role="banner" redundante em <header>

Isto desencadeia o aviso do validador porque <header> já implica o papel banner ao nível superior:

<header role="banner">
  <img src="logo.svg" alt="My Company">
  <nav>
    <a href="/">Home</a>
    <a href="/about">About</a>
  </nav>
</header>

Correto: deixar <header> usar o seu papel implícito

Simplesmente remova o atributo role="banner":

<header>
  <img src="logo.svg" alt="My Company">
  <nav>
    <a href="/">Home</a>
    <a href="/about">About</a>
  </nav>
</header>

Correto: usar role="banner" num elemento não-<header>

Se por alguma razão você não puder usar um elemento <header> (por exemplo, trabalhando dentro de um CMS legado), aplicar role="banner" a uma <div> é a forma apropriada de transmitir a mesma semântica de marco:

<div role="banner">
  <img src="logo.svg" alt="My Company">
  <nav>
    <a href="/">Home</a>
    <a href="/about">About</a>
  </nav>
</div>

Um <header> dentro de um elemento de secção não tem papel banner

Quando <header> está aninhado dentro de um <article> ou outro elemento de secção, não tem o papel banner. Isto é esperado e correto — o <header> aqui simplesmente introduz o conteúdo do artigo:

<article>
  <header>
    <h2>Article Title</h2>
    <p>Published on <time datetime="2024-01-15">January 15, 2024</time></p>
  </header>
  <p>Article content goes here.</p>
</article>

Encontre problemas como este automaticamente

O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.