Markup Language

HTML Semántico

El HTML semántico utiliza elementos que describen su significado. Hace que las páginas sean accesibles, fáciles de encontrar y de mantener, sin coste adicional.

beginner14 min readUpdated 15 sept 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
Describir el significado
Accesibilidad
Los lectores de pantalla lo utilizan
SEO
Los rastreadores lo utilizan
Contenido
article, section, aside

Por que importa

Por qué importa la semántica

Mejor para tecnologías asistivas

Los lectores de pantalla y otras herramientas navegan mediante landmarks, encabezados y roles, los cuales los elementos semánticos proporcionan de forma nativa.

Mejor para motores de búsqueda

Los rastreadores utilizan los encabezados y la estructura para comprender una página, lo que favorece el posicionamiento y los resultados enriquecidos.

Más fácil de mantener

Un marcado significativo es legible a simple vista, por lo que tú y tu equipo comprendéis la estructura sin necesidad de comentarios.

La imagen completa

Las tres ventajas del HTML semántico

La accesibilidad, la capacidad de descubrimiento y la mantenibilidad mejoran cuando los elementos describen lo que contienen.

Landmarks

Estructura

header, nav, main, aside y footer definen las regiones de una página.

Elementos de contenido

Significado

article, section, figure y time describen qué es el contenido, no cómo se ve.

Encabezados

Esquema

Una jerarquía lógica de h1 a h6 proporciona a la página un esquema navegable.

Semántica de un vistazo

Los elementos principales

header y footer

Contenido introductorio o de navegación y contenido de cierre para una página o sección.

nav

Un bloque de enlaces de navegación; es recomendable etiquetarlo con aria-label cuando se repite.

main

El contenido principal de la página, se usa una sola vez y es el punto al que saltan los lectores de pantalla.

article

Contenido autónomo que podría existir por sí mismo, como una publicación o un comentario.

section

Una agrupación temática, generalmente con un encabezado.

button vs a

Los enlaces navegan; los botones ejecutan acciones. Usa el elemento que corresponda.

Una breve historia

De las tablas de diseño al significado

  1. 1998

    Tablas de diseño

    Las primeras páginas usaban tablas e imágenes espaciadoras para controlar el diseño.

    98
  2. 2000

    Sopa de divs

    El diseño con CSS reemplaza a las tablas, pero los divs genéricos no aportan significado.

    00
  3. 2011

    Semántica de HTML5

    header, nav, main, article y section se convierten en el estándar.

    11
  4. 2014

    Roles de landmark

    Las herramientas de accesibilidad mapean los elementos semánticos a roles de landmark de ARIA.

    14
  5. Hoy

    Una expectativa básica

    El marcado semántico es parte fundamental del trabajo profesional de front-end.

    Hoy

La guia completa

HTML Semántico: Todo lo que necesitas saber

¿Qué es el HTML semántico?

El HTML semántico consiste en elegir elementos que describan qué es el contenido, no cómo se ve. Un <nav> es un bloque de navegación. Un <article> es contenido autónomo. Un <button> realiza una acción. Estos elementos aportan un significado que los navegadores, las tecnologías de asistencia y los motores de búsqueda pueden procesar.

La alternativa es una página construida con elementos genéricos <div> y <span>, lo que a menudo se denomina “div soup”. Puede verse idéntica en pantalla, pero es opaca para un lector de pantalla y más difícil de mantener. La semántica no cuesta nada y rinde frutos en todas partes.

Landmarks

Los elementos landmark definen las regiones principales de una página y permiten a los usuarios saltar entre ellas.

<!-- 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 — contenido introductorio de la página o de una sección.
  • nav — un bloque de enlaces de navegación. Etiqueta los nav repetidos con aria-label.
  • main — el contenido principal; se utiliza una sola vez y es el punto al que saltan los lectores de pantalla.
  • aside — contenido relacionado tangencialmente con el contenido principal.
  • footer — contenido de cierre, como el copyright o enlaces relacionados.

Los usuarios de lectores de pantalla pueden listar y saltar entre landmarks, lo que convierte una página larga en una estructura navegable.

Encabezados

Los encabezados forman el esquema de la página. Utiliza un único <h1> para el tema principal, y luego <h2> y <h3> para las secciones y subsecciones.

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

Nunca elijas el nivel de un encabezado basándote en su tamaño. Utiliza CSS para la apariencia y los encabezados para la estructura. Saltar niveles, como pasar de h1 a h4, hace que el esquema sea confuso para las tecnologías de asistencia.

Elementos de contenido

Más allá de los landmarks, HTML dispone de elementos para tipos específicos de contenido.

  • article — contenido autónomo que podría existir por sí solo, como una publicación o un comentario.
  • section — un grupo temático, generalmente con un encabezado.
  • figure y figcaption — contenido multimedia con un pie de foto.
  • blockquote y cite — una cita y su fuente.
  • time — una fecha o hora con un datetime legible por máquina.
  • address — información de contacto.
  • ul, ol, dl — listas desordenadas, ordenadas y de descripción.
<!-- 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 el elemento correcto significa obtener el comportamiento predeterminado y el significado adecuados, sin necesidad de trabajo extra.

Enlaces frente a botones

Este es el error semántico más común.

  • Usa <a href> para la navegación hacia una URL. Permite hacer clic derecho, abrir en una pestaña nueva, añadir a marcadores y activación mediante teclado.
  • Usa <button> para acciones que cambian el estado o envían datos. Es enfocable, operable mediante teclado y se anuncia como un botón.
<!-- controls.html -->
<a href="/guides/css">Read the CSS guide</a>
<button type="button" onclick="toggleMenu()">Toggle menu</button>

Un <div onclick="..."> parece clickable, pero no es accesible mediante teclado, no se anuncia como un control y no es enfocable. Corregirlo requiere recrear manualmente todo lo que un botón ya te ofrece de forma nativa.

Formularios y tablas

Los formularios tienen su propia semántica: <form>, <label>, <fieldset>, <legend>, <input>, <select> y <textarea>. Cada input debe tener una etiqueta, y agrupar los controles relacionados con fieldset y legend ayuda a todos los usuarios. La guía de Formularios y Validación profundiza más en este tema.

Las tablas son para datos tabulares, no para el diseño (layout). Utiliza <table>, <thead>, <tbody>, <th> junto con scope y <caption> para que la relación entre las celdas y los encabezados sea clara.

Cuando un div es suficiente

Los elementos genéricos no son un pecado. Usa <div> y <span> cuando realmente necesites un contenedor para estilos o diseño que no tenga un significado semántico. La regla es sencilla: recurre a un elemento semántico cuando exista uno, y usa un div cuando ninguno encaje. Añadir section sin un encabezado o nav alrededor de un único enlace no relacionado añade ruido en lugar de significado.

Mejores prácticas

  • Usa un solo h1 y mantén los niveles de los encabezados en orden.
  • Estructura las páginas con header, nav, main y footer.
  • Usa article y section para el contenido, no div.
  • Prefiere button para acciones y anclas para la navegación.
  • Asigna a cada imagen un texto alt significativo, o alt="" si es decorativa.
  • Etiqueta los controles de formulario y agrupa los que estén relacionados.
  • Valida tu HTML para que el parser no tenga que recuperarse.

Errores comunes

  • Construir todo utilizando divs y spans.
  • Usar un div con un onclick en lugar de un button.
  • Elegir los niveles de los encabezados basándose en el tamaño de la fuente.
  • Utilizar múltiples elementos h1 sin un tema principal claro.
  • Usar tablas para definir el layout.
  • Envolver enlaces individuales en un nav, o usar section sin un encabezado.

Próximos pasos

La semántica es la base de una página accesible y fácil de encontrar. Refuerza tus conocimientos con los conceptos básicos de HTML, haz que tu sitio sea inclusivo con la guía de Accesibilidad, apóyalo con los conceptos básicos de SEO y completa el panorama con Formularios y Validación.

Controles interactivos

Un botón es enfocable, operable mediante teclado y se anuncia correctamente. Un div con un manejador de clic no es ninguna de estas cosas.

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

Estructuración de una página

Los landmarks y los elementos de contenido dan significado a la página y la hacen navegable mediante tecnología asistiva.

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>

Preguntas frecuentes

Preguntas frecuentes

Keep learning

Related topics from the roadmap.

$ comienza a aprender

Listo para aprender Semantic HTML?

Nuestro tutorial interactivo te guia a traves de Semantic HTML paso a paso — con quizzes y codigo real que puedes ejecutar en el navegador.