Menu

HTML semântico: tags, estrutura da página e acessibilidade

HTML semântico significa escolher as tags pelo que o conteúdo é, não pela aparência. Veja as tags semânticas de layout (header, nav, main, article, aside, footer), o que elas oferecem a leitores de tela e buscadores e como verificar a estrutura da sua página.

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

O que é HTML semântico

HTML semântico significa escolher cada tag pelo que o conteúdo é: a navegação vai em <nav>, o conteúdo principal em <main>, um post de blog em <article>. As tags parecem caixas comuns, mas dizem ao navegador, aos leitores de tela e aos buscadores o que cada parte da página faz. Aqui está uma página completa montada com as tags semânticas de layout, cada uma com contorno e rótulo:

Apague o elemento <style> e a página parece texto simples, mas a estrutura continua lá para quem lê o código e para programas que o leem sem olhar os pixels.

As tags semânticas de layout

TagUse paraLandmark no leitor de tela
<header>A introdução da página ou de um artigo: logo, título, autoriabanner (só quando não está dentro de article, aside, main, nav ou section)
<nav>Um bloco de links de navegação principaisnavigation
<main>O conteúdo exclusivo desta página, uma vez por páginamain
<article>Uma peça independente que faz sentido sozinha: um post, um comentário, um card de produtonenhum por padrão
<section>Um grupo temático de conteúdo com um título próprioregion, só quando tem um nome acessível
<aside>Conteúdo relacionado ao lado do fluxo principal: uma barra lateral, uma notacomplementary
<footer>Informações de fechamento da página ou de um artigo: copyright, autor, linkscontentinfo (só no nível da página)

Cada tag tem a sua própria página com mais detalhes: header, nav, section e footer. Esta página mostra como elas se encaixam.

Por que não usar só div

Uma página feita só de elementos <div> pode parecer idêntica a uma semântica. A diferença está no que a marcação diz. Aperte os botões para contornar os elementos que carregam significado em cada versão:

A versão com divs encontra 0, a versão semântica encontra 4. É isso que as tecnologias assistivas enxergam: quem usa leitor de tela pode pular direto para a navegação ou para o conteúdo principal na página semântica, e precisa ler tudo na página de divs. Nomes de classe como class="nav" não significam nada para o navegador.

<div> continua sendo a escolha certa para caixas que existem só para estilo ou layout, como o wrapper flex .cols do primeiro exemplo.

main, article e aside

<main> envolve o que é exclusivo desta página e aparece uma vez. Dentro dele, <article> marca conteúdo que faria sentido sozinho se fosse copiado para outro site, e <aside> marca conteúdo relacionado que poderia ser removido sem quebrar o artigo:

O artigo tem o seu próprio <header> e <footer>. Eles não se limitam ao nível da página: cada um introduz ou fecha o article ou section mais próximo. O elemento <time datetime> dá a data num formato legível por máquina enquanto a mostra num formato legível por pessoas.

Verifique a estrutura dos títulos

Os títulos são a outra metade da estrutura. Quem usa leitor de tela muitas vezes percorre a página de título em título, então os níveis devem se ler como um sumário, sem níveis pulados. Este script imprime a estrutura da página em que roda:

O h4 embaixo de "Brewing" pula um nível. Troque por h3 e a estrutura fica limpa. Escolha os níveis de título pela estrutura e mude o tamanho com CSS se quiser maiores ou menores.

Mais tags semânticas

Semântica não é só layout. Estas tags de texto também carregam significado:

TagSignificado
<strong>Texto importante (negrito por padrão)
<em>Ênfase (itálico por padrão)
<figure> e <figcaption>Uma imagem, gráfico ou trecho de código com a sua legenda
<time datetime="...">Uma data ou hora num formato legível por máquina
<address>Dados de contato do autor da página ou do artigo
<mark>Texto destacado, como um resultado de busca
<abbr title="...">Uma abreviação com a sua forma completa
<button>Algo que executa uma ação

Passe o mouse sobre a abreviação "W3C" para ver a forma completa numa dica.

Erros comuns

  • Usar uma tag pela aparência. <blockquote> é para citações, não para recuo; <h3> é um nível de título, não um texto em negrito de tamanho médio. Estilize com CSS.
  • Envolver tudo em <section>. Uma section deve ter um título e um tema. Se você precisa de uma caixa para estilo, use <div>.
  • Mais de um <main> visível. Mantenha um por página, e nunca o coloque dentro de <article>, <aside>, <header>, <nav> ou <footer>.
  • Colocar toda lista de links em <nav>. Reserve para blocos de navegação principais, como o menu do site ou um sumário. Alguns links num rodapé não precisam dela.
  • Elementos <div> clicáveis. Uma <div onclick> não é alcançável pelo teclado. Use <button> para ações e <a href> para navegação.

Perguntas frequentes

O que é HTML semântico?

HTML semântico é a marcação em que cada tag descreve o significado do seu conteúdo: <nav> para navegação, <article> para uma peça independente, <button> para um botão. Assim o navegador, os leitores de tela e os buscadores entendem a página sem adivinhar a partir de nomes de classe ou estilos.

Quais são as tags semânticas do HTML?

As tags de layout são <header>, <nav>, <main>, <article>, <section>, <aside> e <footer>. Outras tags semânticas comuns são <figure>, <figcaption>, <time>, <address>, <strong>, <em> e os títulos de <h1> a <h6>.

A div é um elemento semântico?

Não. <div> não tem significado próprio; é uma caixa genérica para estilo e layout. Use quando nenhuma tag semântica serve, e use <header>, <main>, <nav> e as outras quando alguma serve.

Para que serve a tag aside?

<aside> guarda conteúdo relacionado ao conteúdo principal, mas fora do seu fluxo: uma barra lateral, uma caixa de links relacionados, uma nota de glossário ou uma citação em destaque. No nível da página, os leitores de tela a listam como um landmark complementar.

Quantos elementos main uma página pode ter?

Um <main> visível por página. Ele envolve o conteúdo exclusivo daquela página e não deve ficar dentro de <header>, <nav>, <article>, <aside> ou <footer>.

HTML semântico ajuda no SEO?

Ajuda os buscadores a entender qual parte da página é o conteúdo principal, qual é a navegação e como os títulos se relacionam. Sozinho ele não é um atalho de ranqueamento, mas elimina o trabalho de adivinhação e melhora a acessibilidade, o que já vale a pena por si só.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR