Skip to main content
Acessibilidade Axe Core 4.11

Todo o conteúdo da página deve estar contido por landmarks

Sobre esta regra de acessibilidade

As regiões landmark fornecem a estrutura básica de uma página web. Elas permitem aos utilizadores de leitores de ecrã saltar diretamente para secções principais — como a navegação, conteúdo principal ou rodapé — sem ter de navegar com tab ou setas através de todos os elementos da página. Isto é semelhante a como os utilizadores com visão examinam visualmente o layout de uma página para encontrar o que precisam.

Quando existe conteúdo fora de qualquer landmark, os leitores de ecrã podem ignorá-lo completamente durante a navegação por landmarks, ou os utilizadores podem encontrá-lo sem qualquer contexto sobre a que secção da página pertence. Isto afeta principalmente utilizadores que são cegos ou surdocegos, bem como utilizadores com deficiências motoras que dependem de tecnologias assistivas para navegar eficientemente.

Esta regra é sinalizada como uma melhor prática da Deque e também é referenciada no RGAA (o padrão de acessibilidade do governo francês). Embora não corresponda diretamente a um critério de sucesso específico das WCAG, apoia fortemente as WCAG 1.3.1 (Informação e Relações) e WCAG 2.4.1 (Ignorar Blocos) ao garantir que a estrutura da página é transmitida programaticamente às tecnologias assistivas.

Como funcionam os landmarks

O HTML5 introduziu elementos semânticos que criam automaticamente regiões landmark:

Elemento HTML5 Role ARIA equivalente Propósito
<header> banner Cabeçalho do site (quando não aninhado dentro de <article> ou <section>)
<nav> navigation Links de navegação
<main> main Conteúdo principal da página
<footer> contentinfo Rodapé do site (quando não aninhado dentro de <article> ou <section>)
<aside> complementary Conteúdo de apoio
<section> (com nome acessível) region Uma secção distinta da página
<form> (com nome acessível) form Uma região de formulário

Usar elementos nativos HTML5 é preferível a roles ARIA. O princípio geral é: se um elemento HTML nativo fornece a semântica de landmark que você precisa, use-o em vez de adicionar atributos role a elementos <div> genéricos.

Como resolver o problema

  1. Audite a sua página para qualquer conteúdo que se encontre diretamente dentro de <body> sem estar envolvido num elemento landmark.
  2. Envolva conteúdo órfão no landmark apropriado. A maior parte do conteúdo do corpo pertence dentro de <main>. Cabeçalhos e rodapés pertencem em <header> e <footer>. Navegação pertence em <nav>.
  3. Links de salto são a exceção — um link de salto de navegação colocado antes do primeiro landmark é aceitável e não precisa de estar envolvido num landmark.
  4. Use <main> como um contentor universal para qualquer conteúdo que não pertença no cabeçalho, rodapé ou navegação. Cada página deve ter exatamente um elemento <main>.

Exemplos

Incorreto: conteúdo fora de landmarks

Neste exemplo, o parágrafo introdutório e o banner promocional ficam fora de qualquer região landmark. Um utilizador de leitor de ecrã navegando por landmarks perdê-los-ia.

<body>
  <header>
    <h1>My Website</h1>
    <nav>
      <a href="/">Home</a>
      <a href="/about">About</a>
    </nav>
  </header>

  <p>Welcome to our site! Check out our latest offerings.</p>

  <main>
    <h2>Featured Products</h2>
    <p>Browse our catalog below.</p>
  </main>

  <div class="promo-banner">
    <p>Free shipping on orders over $50!</p>
  </div>

  <footer>
    <p>&copy; 2024 My Website</p>
  </footer>
</body>

O elemento <p> após <header> e o <div class="promo-banner"> não estão dentro de qualquer landmark.

Correto: todo o conteúdo dentro de landmarks

Mova o conteúdo órfão para landmarks apropriados:

<body>
  <header>
    <h1>My Website</h1>
    <nav>
      <a href="/">Home</a>
      <a href="/about">About</a>
    </nav>
  </header>

  <main>
    <p>Welcome to our site! Check out our latest offerings.</p>
    <h2>Featured Products</h2>
    <p>Browse our catalog below.</p>
    <aside>
      <p>Free shipping on orders over $50!</p>
    </aside>
  </main>

  <footer>
    <p>&copy; 2024 My Website</p>
  </footer>
</body>

Correto: estrutura básica de página com landmarks HTML5

<body>
  <header>
    <h1>Site Name</h1>
  </header>
  <nav>
    <a href="/">Home</a>
    <a href="/contact">Contact</a>
  </nav>
  <main>
    <h2>Page Title</h2>
    <p>All primary content goes here.</p>
  </main>
  <footer>
    <p>&copy; 2024 Site Name</p>
  </footer>
</body>

Correto: usar roles ARIA (quando elementos HTML5 não são uma opção)

Se não conseguir usar elementos semânticos HTML5, aplique roles ARIA de landmark a elementos genéricos:

<body>
  <div role="banner">
    <h1>Site Name</h1>
  </div>
  <div role="navigation">
    <a href="/">Home</a>
    <a href="/contact">Contact</a>
  </div>
  <div role="main">
    <h2>Page Title</h2>
    <p>All primary content goes here.</p>
  </div>
  <div role="contentinfo">
    <p>&copy; 2024 Site Name</p>
  </div>
</body>

Esta abordagem é válida mas menos preferível. Os elementos nativos HTML5 são mais claros, requerem menos código e são melhor suportados pelos navegadores e tecnologias assistivas.

Correto: link de salto antes dos landmarks

Um link de salto de navegação colocado antes de todos os landmarks é a única exceção aceite a esta regra:

<body>
  <a href="#main-content" class="skip-link">Skip to main content</a>
  <header>
    <h1>Site Name</h1>
  </header>
  <nav>
    <a href="/">Home</a>
  </nav>
  <main id="main-content">
    <h2>Page Content</h2>
    <p>This is the main content area.</p>
  </main>
  <footer>
    <p>&copy; 2024 Site Name</p>
  </footer>
</body>

O link de salto existe fora de qualquer landmark, mas isto é intencional e não acionará a regra.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Detecte problemas de acessibilidade automaticamente

O Rocket Validator examina milhares de páginas com Axe Core e o W3C Validator, encontrando problemas de acessibilidade em todo o seu site.

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