3 de setembro de 2026/4 min de leitura

HTML Semântico: Por Que Nem Tudo Deveria Ser uma <div>

Se você está começando no desenvolvimento web, é bem provável que já tenha escrito uma página parecida com esta:

<div class="header">
  <div class="nav">
    <div class="nav-item">Início</div>
    <div class="nav-item">Sobre</div>
  </div>
</div>
<div class="content">
  <div class="title">Meu Post</div>
  <div class="text">Algum conteúdo aqui...</div>
</div>
<div class="footer">© 2026</div>

Funciona. O navegador renderiza, o CSS aplica, tudo parece certo na tela. Então qual é o problema?

O problema da "sopa de divs"

Uma <div> não diz absolutamente nada ao navegador (nem a quem for ler seu código) sobre o que aquele pedaço de conteúdo é. É uma caixa genérica — útil, mas sem significado próprio. Quando a página inteira é construída só com <div>s e classes CSS fazendo todo o trabalho, você perde informação que o HTML foi criado para carregar de graça.

Essa informação que falta importa para mais gente do que apenas outros desenvolvedores:

  • Leitores de tela (programas que pessoas cegas ou com baixa visão usam para navegar numa página) anunciam elementos pelo seu papel. Uma <nav> é anunciada como "navegação" — uma <div class="nav"> não é anunciada como nada.
  • Motores de busca usam a estrutura do seu HTML para entender o que é importante na página. Um <h1> e uma <article> têm peso que uma <div> não tem.
  • Navegadores dão comportamento de graça para alguns elementos — um <button> já é focável e funciona com teclado sem esforço nenhum; uma <div> estilizada para parecer um botão não tem nada disso, a não ser que você recrie esse comportamento na mão.

O que "semântico" realmente significa

HTML semântico é só isso: usar a tag que descreve o que o conteúdo é, não só como ele deveria parecer visualmente.

Aqui está o mesmo layout de antes, escrito de forma semântica:

<header>
  <nav>
    <a href="/">Início</a>
    <a href="/sobre">Sobre</a>
  </nav>
</header>
<main>
  <article>
    <h1>Meu Post</h1>
    <p>Algum conteúdo aqui...</p>
  </article>
</main>
<footer>© 2026</footer>

O mesmo resultado visual depois de aplicar o CSS — mas agora a própria estrutura explica a página, sem esforço extra nenhum.

Tags que vale a pena conhecer

TagUse para
<header>Conteúdo introdutório — geralmente logo, título ou navegação no topo de uma página ou seção
<nav>Um bloco de links de navegação
<main>O conteúdo principal da página (só uma por página)
<article>Um conteúdo independente — um post de blog, um comentário, um card de produto
<section>Um agrupamento temático de conteúdo, geralmente com seu próprio título
<aside>Conteúdo relacionado, mas não central — uma barra lateral, um destaque
<footer>Conteúdo de encerramento — direitos autorais, links, contato
<button>Qualquer coisa que o usuário clica para fazer algo (enviar um formulário, abrir um menu)
<a>Qualquer coisa que o usuário clica para ir a algum lugar (um link)

Uma regra prática

Antes de usar <div>, pergunte: "Existe uma tag que já descreve isso?" Se você está construindo um botão, use <button>. Se está linkando para outra página, use <a>. Se está agrupando campos relacionados de um formulário, use <fieldset>.

<div> (e sua prima em linha, <span>) ainda têm uma função real: são para quando genuinamente não há significado semântico a expressar — um wrapper que você precisa só por motivo de estilo ou layout. Esse é um uso legítimo. O objetivo não é eliminar a <div> — é parar de usá-la por padrão.

Por que isso compensa desde cedo

Você não precisa dominar acessibilidade ou SEO para se beneficiar desse hábito. Escrever HTML semântico desde o início significa:

  • Seu CSS fica mais simples, porque tags como <nav> e <button> já vêm com comportamento padrão sensato.
  • Seu código fica mais fácil de ler — daqui a seis meses, <article> conta a história mais rápido do que <div class="post-wrapper">.
  • Você não está acumulando uma dívida que vai precisar pagar depois, quando um cliente ou empregador pedir para tornar o site acessível.

Da próxima vez que for escrever <div>, pare um segundo e pergunte o que aquele conteúdo realmente é. Mais vezes do que você imagina, o HTML já tem uma palavra para isso.