Menu

HTML semántico: etiquetas, estructura y accesibilidad

HTML semántico significa elegir las etiquetas por lo que es el contenido, no por cómo se ve. Aprende las etiquetas semánticas de estructura (header, nav, main, article, aside, footer), lo que aportan a los lectores de pantalla y a los buscadores, y cómo revisar la estructura de tu página.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Qué es el HTML semántico

HTML semántico significa elegir cada etiqueta por lo que es el contenido: la navegación va en <nav>, el contenido principal en <main>, una entrada de blog en <article>. Las etiquetas parecen cajas normales, pero le dicen al navegador, a los lectores de pantalla y a los buscadores qué hace cada parte de la página. Aquí tienes una página completa construida con las etiquetas semánticas de estructura, cada una con su contorno y su nombre:

Borra el elemento <style> y la página parece texto plano, pero la estructura sigue ahí para quien lee el código, y para el software que lo lee sin mirar los píxeles.

Las etiquetas semánticas de estructura

EtiquetaÚsala paraLandmark para lectores de pantalla
<header>La introducción de la página o de un artículo: logo, título, autoríabanner (solo cuando no está dentro de article, aside, main, nav o section)
<nav>Un bloque de enlaces de navegación principalesnavigation
<main>El contenido propio de esta página, una vez por páginamain
<article>Una pieza independiente que tiene sentido por sí sola: una entrada, un comentario, una tarjeta de productoninguno por defecto
<section>Un grupo temático de contenido con su propio encabezadoregion, solo cuando tiene un nombre accesible
<aside>Contenido relacionado junto al flujo principal: una barra lateral, una notacomplementary
<footer>La información de cierre de la página o de un artículo: copyright, autor, enlacescontentinfo (solo a nivel de página)

Cada etiqueta tiene su propia página con más detalle: header, nav, section y footer. Esta página explica cómo encajan entre sí.

Por qué no usar solo div

Una página hecha solo con elementos <div> puede verse idéntica a una semántica. La diferencia está en lo que dice el marcado. Pulsa los botones para resaltar los elementos que tienen significado en cada versión:

La versión con divs encuentra 0, la versión semántica encuentra 4. Eso es lo que ven las tecnologías de asistencia: en la página semántica, quien usa un lector de pantalla puede saltar directamente a la navegación o al contenido principal, y en la página de divs tiene que leerlo todo. Nombres de clase como class="nav" no significan nada para el navegador.

<div> sigue siendo la opción correcta para cajas que solo existen por estilo o diseño, como el envoltorio flex .cols del primer ejemplo.

main, article y aside

<main> envuelve lo que es propio de esta página y aparece una vez. Dentro, <article> marca contenido que tendría sentido copiado por sí solo en otro sitio, y <aside> marca contenido relacionado que se podría quitar sin romper el artículo:

El artículo tiene su propio <header> y su propio <footer>. No se limitan al nivel de página: cada uno introduce o cierra el article o la section más cercana. El elemento <time datetime> da la fecha en un formato legible por máquinas mientras la muestra en uno legible por personas.

Revisa el esquema de encabezados

Los encabezados son la otra mitad de la estructura. Quienes usan lectores de pantalla suelen recorrer una página de encabezado en encabezado, así que los niveles deben leerse como un índice sin niveles saltados. Este script imprime el esquema de la página en la que se ejecuta:

El h4 bajo "Brewing" se salta un nivel. Cámbialo por h3 y el esquema se lee limpio. Elige los niveles de encabezado por la estructura y cambia su tamaño con CSS si los quieres más grandes o más pequeños.

Más etiquetas semánticas

La semántica no es solo cuestión de estructura. Estas etiquetas de texto también tienen significado:

EtiquetaSignificado
<strong>Texto importante (en negrita por defecto)
<em>Énfasis (en cursiva por defecto)
<figure> y <figcaption>Una imagen, un gráfico o un ejemplo de código con su pie
<time datetime="...">Una fecha u hora en un formato legible por máquinas
<address>Datos de contacto del autor de la página o del artículo
<mark>Texto resaltado, como una coincidencia de búsqueda
<abbr title="...">Una abreviatura con su forma completa
<button>Algo que realiza una acción

Pasa el ratón por la abreviatura "W3C" para ver su forma completa en un texto de ayuda.

Errores comunes

  • Usar una etiqueta por su aspecto. <blockquote> es para citas, no para sangrar; <h3> es para un nivel de encabezado, no para texto en negrita de tamaño medio. Da estilo con CSS.
  • Envolverlo todo en <section>. Una section debe tener un encabezado y un tema. Si necesitas una caja para dar estilo, usa <div>.
  • Más de un <main> visible. Deja uno por página, y nunca lo anides dentro de <article>, <aside>, <header>, <nav> ni <footer>.
  • Meter cada lista de enlaces en <nav>. Resérvalo para los bloques de navegación principales, como el menú del sitio o un índice. Unos pocos enlaces en un pie de página no lo necesitan.
  • Elementos <div> clicables. Un <div onclick> no se puede alcanzar con el teclado. Usa <button> para acciones y <a href> para navegar.

Preguntas frecuentes

¿Qué es el HTML semántico?

El HTML semántico es un marcado en el que cada etiqueta describe el significado de su contenido: <nav> para la navegación, <article> para una pieza independiente, <button> para un botón. Así el navegador, los lectores de pantalla y los buscadores entienden la página sin tener que adivinar a partir de nombres de clase o estilos.

¿Cuáles son las etiquetas semánticas de HTML?

Las etiquetas de estructura son <header>, <nav>, <main>, <article>, <section>, <aside> y <footer>. Otras etiquetas semánticas habituales son <figure>, <figcaption>, <time>, <address>, <strong>, <em> y los encabezados de <h1> a <h6>.

¿div es un elemento semántico?

No. <div> no tiene significado propio; es una caja genérica para estilos y diseño. Úsalo cuando ninguna etiqueta semántica encaje, y usa <header>, <main>, <nav> y las demás cuando alguna encaje.

¿Para qué sirve la etiqueta aside?

<aside> contiene contenido relacionado con el contenido principal pero que no forma parte de su flujo: una barra lateral, una caja de enlaces relacionados, una nota de glosario o una cita destacada. A nivel de página, los lectores de pantalla la listan como landmark complementario.

¿Cuántos elementos main puede tener una página?

Un <main> visible por página. Envuelve el contenido propio de esa página, y no debe estar dentro de <header>, <nav>, <article>, <aside> ni <footer>.

¿El HTML semántico ayuda al SEO?

Ayuda a los buscadores a entender qué parte de la página es el contenido principal, cuál es la navegación y cómo se relacionan los encabezados. No es un atajo para posicionar por sí solo, pero elimina conjeturas y mejora la accesibilidad, que merece la pena de todos modos.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR