HTML Semântico

Revisa, reescreve e explica semântica HTML5 (tags, landmarks, cabeçalhos, formulários, ARIA). Use sempre que o usuário colar HTML ou pedir uma revisão de marcação, as tags certas, acessibilidade ou correção de 'divite'.

O que é HTML Semântico?

Esta skill analisa snippets de HTML (ou JSX/templates, focando no HTML resultante) e fornece uma revisão completa focada em acessibilidade e semântica pura do HTML5, sem dependência de frameworks. Ela utiliza uma lista de verificação estruturada que cobre desde elementos de documento (DOCTYPE, lang, meta) até landmarks, hierarquia de cabeçalhos, formulários com labels, listas, tabelas, mídia com alt text, elementos de texto semântico e boas práticas de ARIA. O fluxo de trabalho envolve entender o conteúdo antes das tags, aplicar a lista de verificação e gerar uma resposta no formato definido: um diagnóstico com problemas categorizados por impacto (quebra acessibilidade, semântica imprecisa, detalhe), o código HTML corrigido com comentários breves, e explicações curtas (2 a 5) ligadas ao comportamento do navegador/árvore de acessibilidade. A skill se destaca por não supercorrigir: reconhece que `<div>` e `<span>` são apropriados para layout puro, e sempre prioriza elementos nativos sobre ARIA. Um teste mental útil é: 'Se o CSS desaparecesse, a estrutura ainda faria sentido?'

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lucasaugustsof/skills/tree/HEAD/semantic-html

Installed? Explore more Produtividade e Colaboração skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que HTML Semântico faz?

Ajuda a revisar HTML, retornar uma versão corrigida e explicar o raciocínio por trás de cada escolha. O foco é sempre HTML5 puro, independente de framework: se o código vier como JSX ou outro template, analise apenas a marcação resultante e responda em HTML.

Responda no idioma em que o usuário escreve.

Por que a semântica é importante (use isso para explicar)

O navegador transforma HTML no DOM e, a partir dele, constrói a árvore de acessibilidade. Cada tag tem um papel implícito (<button> → botão, <nav> → navegação, <h2> → título nível 2). Leitores de tela, mecanismos de busca, modo leitor e extensões leem essa árvore, não o CSS. Um <div> estilizado como botão parece um botão, mas para a árvore é apenas um bloco genérico: não recebe foco, não responde a Enter/Espaço e não é anunciado como botão.

Funde as explicações nisso — o que o navegador entende e o que muda para as pessoas que usam a página — em vez de regras memorizadas. Prefira exemplos concretos ("o leitor de tela anunciará...", "Tab pulará este elemento...") a abstrações.

Teste mental útil: se o CSS desaparecesse, a estrutura ainda faria sentido?

Fluxo de trabalho

  1. Entenda o conteúdo antes das tags. O que é cada bloco? Navegação, conteúdo principal, um item independente, um controle interativo? Se a intenção for ambígua (ex.: um link que parece botão), assuma a leitura mais provável e indique qual você assumiu.
  2. Revise usando a lista de verificação abaixo.
  3. Responda no formato definido.

Lista de verificação de revisão

Documento

  • <!DOCTYPE html>, <html lang="...">, <meta charset="utf-8">, <meta name="viewport">, um <title> descritivo (apenas se o trecho for um documento completo).

Landmarks

  • <header>, <nav>, <main> (apenas um visível por página), <aside>, <footer>.
  • <section> agrupa conteúdo temático e normalmente tem um título; sem título, provavelmente é um <div>.
  • <article> é conteúdo que faria sentido sozinho (postagem, cartão de produto, comentário).
  • Múltiplos <nav> na página → distinga-os com aria-label.

Cabeçalhos

  • Hierarquia sem níveis pulados (h2 → h4 é problema).
  • Um cabeçalho descreve sua seção; não use cabeçalhos para aumentar texto, nem texto estilizado no lugar de um cabeçalho.

Interação

  • Uma ação na página → <button> (com type explícito dentro de formulários). Navegação para outra URL → <a href>.
  • <div onclick>, <span onclick> e <a> sem href são bandeiras vermelhas.
  • Considere elementos nativos antes de reconstruí-los: <details>/<summary>, <dialog>.

Formulários

  • Cada campo tem um <label> associado (for/id ou envolvendo o input). Um placeholder não substitui um label.
  • Grupos de rádio/checkbox em <fieldset> + <legend>.
  • type apropriado (email, tel, number, date...) e autocomplete onde fizer sentido.

Listas e tabelas

  • Um conjunto de itens → <ul>/<ol>; pares termo–definição → <dl>.
  • <table> apenas para dados tabulares, com <caption>, <thead> e <th scope>. Nunca para layout.

Mídia

  • <img> com alt descrevendo seu propósito; decorativa → alt="".
  • Imagem com legenda → <figure> + <figcaption>.

Texto

  • Ênfase significativa: <strong>/<em>; <b>/<i> apenas para desvio estilístico sem importância.
  • <time datetime>, <blockquote>/<q>, <cite>, <abbr>, <code>/<pre>, <address> onde se encaixam.
  • <br> apenas para quebras de linha que fazem parte do conteúdo (endereço, poema), não para espaçamento.

ARIA

  • Primeira regra: se um elemento nativo existe, use-o em vez de ARIA.
  • Sinalize ARIA redundante (<button role="button">, <nav role="navigation">) e ARIA que contradiz a tag.

Não supercorrija. <div> e <span> são corretos quando um bloco existe apenas para layout ou estilização. Trocar cada <div> por <section> piora a árvore de acessibilidade.

Formato de resposta (tom misto: correção direta + pequena explicação)

Diagnóstico

Lista de problemas agrupados por impacto:

  • Quebra acessibilidade/usabilidade — algo que impede alguém de usar a página (botão sem foco, campo sem label, imagem sem alt).
  • Semântica imprecisa — funciona, mas comunica a estrutura errada (cabeçalho pulado, section sem título).
  • Detalhe — melhoria de granularidade fina.

Cada item: o que está errado → o que usar. Uma linha.

Código corrigido

O HTML completo reescrito, com comentários curtos apenas nas partes alteradas.

Por quê

2 a 5 explicações curtas, uma por decisão importante, ligadas ao que o navegador/árvore de acessibilidade faz. Se um conceito for central (ex.: papel implícito, landmark), explique-o uma vez com um exemplo concreto.

Se o código já estiver bom, diga claramente e aponte apenas o que realmente vale a pena ajustar.

Exemplo

Entrada:

<div class="header">
  <div class="logo">Loja</div>
  <div class="menu"><a>Home</a><a>Produtos</a></div>
</div>
<div class="title">Ofertas</div>
<div onclick="buy()">Comprar</div>

Saída (abreviada):

Diagnóstico

  • Quebra usabilidade: <div onclick> → <button type="button">; <a> sem href → links com href.
  • Semântica imprecisa: .header → <header>; .menu → <nav> com <ul>; .title → <h1>; falta <main>.

Código corrigido

<header>
  <p class="logo">Loja</p>
  <nav aria-label="Principal">
    <ul>
      <li><a href="/">Home</a></li>
      <li><a href="/produtos">Produtos</a></li>
    </ul>
  </nav>
</header>
<main>
  <h1>Ofertas</h1>
  <button type="button" onclick="buy()">Comprar</button>
</main>

Por quê

  • O <div> não está na ordem de Tab e não reage a Enter; <button> vem com foco e suporte a teclado e é anunciado como "botão".
  • Um <a> sem href não é um link para o navegador: não recebe foco e não aparece na lista de links do leitor de tela.
  • <nav> e <main> tornam-se landmarks: usuários de leitor de tela podem pular diretamente para eles.

Fontes

Em caso de dúvida sobre uma regra, confirme-a no MDN ou no HTML Living Standard (se uma ferramenta de documentação estiver disponível, use-a) e cite o link.

Habilidades Relacionadas