Markup Language

HTML Semântico

O HTML semântico utiliza elementos que descrevem seu significado. Isso torna as páginas acessíveis, encontráveis e mais fáceis de manter, sem custo adicional.

beginner14 min readUpdated 15 de set. de 2026
article.html
html
<!-- article.html -->
<article>
  <header>
    <h1>How DNS works</h1>
    <p><time datetime="2026-09-15">September 15, 2026</time></p>
  </header>
  <p>The Domain Name System turns names into addresses.</p>
  <nav aria-label="Related">
    <a href="/guides/http">HTTP / HTTPS</a>
  </nav>
</article>
Propósito
Descrever o significado
Acessibilidade
Leitores de tela o utilizam
SEO
Crawlers o utilizam
Conteúdo
article, section, aside

Por que importa

Por que a semântica importa

Melhor para tecnologias assistivas

Leitores de tela e outras ferramentas navegam por landmarks, cabeçalhos e funções, que os elementos semânticos fornecem nativamente.

Melhor para motores de busca

Crawlers usam cabeçalhos e estrutura para entender uma página, o que auxilia no ranking e em resultados ricos.

Mais fácil de manter

Uma marcação significativa é legível rapidamente, permitindo que você e seus colegas entendam a estrutura sem a necessidade de comentários.

O panorama completo

As três vantagens do HTML semântico

Acessibilidade, descoberta e manutenibilidade melhoram quando os elementos descrevem o que contêm.

Landmarks

Estrutura

header, nav, main, aside e footer definem as regiões de uma página.

Elementos de conteúdo

Significado

article, section, figure e time descrevem o que o conteúdo é, não como ele se parece.

Cabeçalhos

Esboço

Uma hierarquia lógica de h1 a h6 fornece à página um esboço navegável.

Semântica em resumo

Os elementos principais

header e footer

Conteúdo introdutório ou de navegação e conteúdo de fechamento para uma página ou seção.

nav

Um bloco de links de navegação, preferencialmente rotulado com aria-label quando repetido.

main

O conteúdo principal da página, usado apenas uma vez e saltado por leitores de tela.

article

Conteúdo autossuficiente que poderia existir sozinho, como um post ou um comentário.

section

Um agrupamento temático, geralmente acompanhado de um cabeçalho.

button vs a

Links navegam; botões executam ações. Use o elemento que corresponde à função.

Uma breve historia

De tabelas de layout ao significado

  1. 1998

    Tabelas de layout

    As primeiras páginas usavam tabelas e imagens de espaçamento para controlar o layout.

    98
  2. 2000

    Sopa de Divs

    O layout com CSS substitui as tabelas, mas divs genéricas não possuem significado.

    00
  3. 2011

    Semântica do HTML5

    header, nav, main, article e section tornam-se padrão.

    11
  4. 2014

    Funções de Landmark

    Ferramentas de acessibilidade mapeiam elementos semânticos para funções de landmark ARIA.

    14
  5. Hoje

    Uma expectativa básica

    A marcação semântica é parte fundamental do trabalho profissional de front-end.

    Hoje

O guia completo

HTML Semântico: Tudo que voce precisa saber

O que é HTML semântico?

HTML semântico significa escolher elementos que descrevam o que o conteúdo é, e não a sua aparência. Um <nav> é um bloco de navegação. Um <article> é um conteúdo autocontido. Um <button> executa uma ação. Esses elementos carregam significados que navegadores, tecnologias assistivas e motores de busca podem processar.

A alternativa é uma página construída com elementos genéricos <div> e <span>, frequentemente chamada de “div soup”. Ela pode parecer idêntica na tela, mas é opaca para um leitor de tela e mais difícil de manter. A semântica não custa nada e traz benefícios em todos os lugares.

Landmarks

Elementos de landmark definem as principais regiões de uma página e permitem que os usuários pulem entre elas.

<!-- layout.html -->
<body>
  <header>
    <a href="/">hackweb</a>
    <nav aria-label="Main">
      <a href="/guides">Guides</a>
    </nav>
  </header>

  <main>
    <h1>Guides</h1>
  </main>

  <footer>
    <p>© 2026 hackweb.dev</p>
  </footer>
</body>
  • header — conteúdo introdutório da página ou de uma seção.
  • nav — um bloco de links de navegação. Rotule navs repetidos com aria-label.
  • main — o conteúdo principal, usado apenas uma vez e ignorado por leitores de tela.
  • aside — conteúdo relacionado tangencialmente ao conteúdo principal.
  • footer — conteúdo de encerramento, como copyright ou links relacionados.

Usuários de leitores de tela podem listar e pular entre landmarks, o que transforma uma página longa em uma estrutura navegável.

Cabeçalhos

Os cabeçalhos formam a estrutura da página. Use um único <h1> para o tópico principal, depois <h2> e <h3> para seções e subseções.

<!-- outline.html -->
<h1>CSS Grid</h1>
<h2>Tracks and lines</h2>
<h3>Defining columns</h3>
<h3>Placing items</h3>
<h2>Responsive grids</h2>

Nunca escolha o nível de um cabeçalho com base no seu tamanho. Use CSS para a aparência e cabeçalhos para a estrutura. Pular níveis, como saltar do h1 para o h4, torna a estrutura confusa para tecnologias assistivas.

Elementos de conteúdo

Além dos landmarks, o HTML possui elementos para tipos específicos de conteúdo.

  • article — conteúdo autossuficiente que poderia existir de forma independente, como um post ou comentário.
  • section — um grupo temático, geralmente com um título.
  • figure e figcaption — mídia com uma legenda.
  • blockquote e cite — uma citação e sua fonte.
  • time — uma data ou hora com um datetime legível por máquina.
  • address — informações de contato.
  • ul, ol, dl — listas não ordenadas, ordenadas e de descrição.
<!-- post.html -->
<article>
  <h1>What is DNS?</h1>
  <p><time datetime="2026-09-15">September 15, 2026</time></p>

  <figure>
    <img src="/dns.svg" alt="A DNS lookup walks the name hierarchy" width="800" height="400" />
    <figcaption>Resolving a name step by step.</figcaption>
  </figure>

  <blockquote cite="https://example.com">
    <p>DNS is the internet's phone book.</p>
  </blockquote>
</article>

Usar o elemento correto significa que você obtém o comportamento padrão e o significado adequados, sem esforço extra.

Este é o erro semântico mais comum.

  • Use <a href> para navegação para uma URL. Ele suporta clique com o botão direito, abrir em nova aba, favoritos e ativação via teclado.
  • Use <button> para ações que alteram o estado ou enviam dados. Ele é focável, operável via teclado e anunciado como um botão.
<!-- controls.html -->
<a href="/guides/css">Read the CSS guide</a>
<button type="button" onclick="toggleMenu()">Toggle menu</button>

Um <div onclick="..."> parece clicável, mas não é acessível via teclado, não é anunciado como um controle e não é focável. Corrigi-lo exige recriar tudo o que o botão já oferece nativamente.

Formulários e tabelas

Formulários possuem sua própria semântica: <form>, <label>, <fieldset>, <legend>, <input>, <select> e <textarea>. Todo input deve ter um label, e agrupar controles relacionados com fieldset e legend ajuda a todos. O guia de Formulários & Validação aprofunda esse assunto.

Tabelas servem para dados tabulares, não para layout. Use <table>, <thead>, <tbody>, <th> com scope e <caption> para que a relação entre as células e os cabeçalhos fique clara.

Quando uma div é aceitável

Elementos genéricos não são um pecado. Use <div> e <span> quando você genuinamente precisar de um container para estilização ou layout sem significado semântico. A regra é simples: opte por um elemento semântico quando houver um disponível, e use uma div quando nenhum se encaixar. Adicionar section sem um título ou nav em volta de um único link não relacionado adiciona ruído em vez de significado.

Melhores práticas

  • Use apenas um h1 e mantenha os níveis de cabeçalho em ordem.
  • Estruture as páginas com header, nav, main e footer.
  • Use article e section para o conteúdo, não div.
  • Prefira button para ações e anchors para navegação.
  • Forneça um texto alt significativo para cada imagem, ou alt="" se for decorativa.
  • Rotule os controles de formulário e agrupe os que forem relacionados.
  • Valide seu HTML para que o parser não precise realizar recuperações.

Erros comuns

  • Construir tudo usando divs e spans.
  • Usar uma div com onclick em vez de um button.
  • Escolher os níveis de heading com base no tamanho da fonte.
  • Múltiplos elementos h1 sem um tópico principal claro.
  • Usar tabelas para layout.
  • Envolver links únicos em um nav, ou usar section sem um heading.

Próximos passos

A semântica é a base de uma página acessível e fácil de encontrar. Aprofunde seus conhecimentos com o básico de HTML, torne-a inclusiva com o guia de Acessibilidade, dê suporte com o básico de SEO e complete o aprendizado com Formulários e Validação.

Controles interativos

Um botão é focável, operável via teclado e anunciado corretamente. Uma div com um manipulador de clique não é nada disso.

Preferir
<button type="button" onclick="save()">
  Save
</button>
Evitar
<div class="btn" onclick="save()">
  Save
</div>

Estruturando uma página

Landmarks e elementos de conteúdo dão significado à página e a tornam navegável por tecnologias assistivas.

Preferir
<header>...</header>
<nav aria-label="Main">...</nav>
<main>
  <article>...</article>
</main>
<footer>...</footer>
Evitar
<div class="header">...</div>
<div class="nav">...</div>
<div class="content">
  <div class="post">...</div>
</div>

Perguntas frequentes

Perguntas frequentes

Keep learning

Related topics from the roadmap.

$ comecar a aprender

Pronto para aprender Semantic HTML?

Nosso tutorial interativo te guia por Semantic HTML passo a passo — com quizzes e codigo real que voce pode executar no navegador.