TechLead

HTML Semántico

Elementos HTML5 significativos para mejor estructura

¿Qué es HTML Semántico?

El HTML semántico utiliza elementos que describen claramente su significado y propósito tanto a los navegadores como a los desarrolladores. En lugar de usar <div> y <span> genéricos para todo, los elementos semánticos indican a los navegadores, lectores de pantalla y motores de búsqueda exactamente qué tipo de contenido contienen.

Piénsalo como etiquetar cajas al mudarte: "Suministros de Cocina" es más útil que "Caja #3". El HTML semántico hace lo mismo para la estructura de tu página web.

Comparación No Semántico vs Semántico

No Semántico (Malo)

<div id="header">
  <div id="logo">Logo</div>
  <div id="nav">
    <div>Inicio</div>
    <div>Acerca de</div>
  </div>
</div>

<div id="content">
  <div class="post">
    <div class="title">Título</div>
    <div class="text">...</div>
  </div>
</div>

<div id="sidebar">...</div>
<div id="footer">...</div>

Todo es un div—¡sin significado!

Semántico (Bueno)

<header>
  <h1>Logo</h1>
  <nav>
    <a href="/">Inicio</a>
    <a href="/about">Acerca de</a>
  </nav>
</header>

<main>
  <article>
    <h2>Título</h2>
    <p>...</p>
  </article>
</main>

<aside>...</aside>
<footer>...</footer>

¡Estructura clara y significativa!

Diseño de Página Semántico

Así es como los elementos semánticos crean una página bien estructurada:

<header> - Encabezado del sitio, logo, navegación principal
<main> - Contenido principal de la página
<article> - Contenido independiente
<section> - Agrupación temática
<aside> - Barra lateral
<footer> - Pie del sitio, copyright, enlaces
<header>
  <h1>Nombre del Sitio</h1>
  <nav>
    <ul>
      <li><a href="/">Inicio</a></li>
      <li><a href="/about">Acerca de</a></li>
    </ul>
  </nav>
</header>

<main>
  <article>
    <h2>Título del Artículo</h2>
    <section>
      <h3>Encabezado de Sección</h3>
      <p>Contenido...</p>
    </section>
  </article>

  <aside>
    <h3>Enlaces Relacionados</h3>
    <!-- Contenido de barra lateral -->
  </aside>
</main>

<footer>
  <p>© 2024 Nombre de la Empresa</p>
</footer>

Elementos Semánticos Clave Explicados

<header>

Contenido introductorio o navegación. Puede usarse para el encabezado de la página O para encabezados dentro de artículos/secciones.

<header>
  <h1>Mi Sitio Web</h1>
  <nav>...</nav>
</header>

<nav>

Enlaces de navegación. Úsalo para bloques de navegación importantes (no para cada enlace individual).

<nav aria-label="Navegación principal">
  <ul>
    <li><a href="/">Inicio</a></li>
    <li><a href="/about">Acerca de</a></li>
  </ul>
</nav>

<main>

El contenido dominante de la página. ¡Solo UNO por página! Omite contenido repetitivo como encabezados/pies de página.

<main>
  <h1>Título de la Página</h1>
  <!-- Contenido principal aquí -->
</main>

<article>

Contenido independiente que podría sostenerse por sí solo: publicaciones de blog, artículos de noticias, publicaciones de foros, comentarios.

<article>
  <h2>Título de la Publicación del Blog</h2>
  <time datetime="2024-01-15">15 de Enero, 2024</time>
  <p>Contenido del artículo...</p>
</article>

<section>

Agrupación temática de contenido. Usualmente tiene un encabezado. Úsalo cuando no haya un elemento más específico.

<section>
  <h2>Nuestros Servicios</h2>
  <p>Contenido sobre servicios...</p>
</section>

<aside>

Contenido relacionado tangencialmente con el contenido principal: barras laterales, citas destacadas, enlaces relacionados.

<aside>
  <h3>Artículos Relacionados</h3>
  <ul>...</ul>
</aside>

<footer>

Pie de página para la página o sección. Copyright, información de contacto, enlaces relacionados.

<footer>
  <p>© 2024 Empresa</p>
  <nav>...</nav>
</footer>

Elementos Semánticos Especiales

<figure> y <figcaption>

Contenido independiente como imágenes, diagramas, fragmentos de código con subtítulos opcionales.

Gráfico de ventas
Rendimiento de Ventas Q4 2024
<figure>
  <img src="grafico.png" alt="Gráfico de ventas" />
  <figcaption>Rendimiento de Ventas Q4 2024</figcaption>
</figure>

<!-- ¡También funciona para código! -->
<figure>
  <pre><code>const x = 10;</code></pre>
  <figcaption>Declaración de variable en JavaScript</figcaption>
</figure>

<details> y <summary>

Contenido interactivo tipo acordeón/colapsable—¡sin necesidad de JavaScript!

Haz clic para expandir

¡Este contenido está oculto hasta que hagas clic en el resumen!

Otra sección expandible

Puedes tener múltiples elementos details.

<details>
  <summary>Haz clic para expandir</summary>
  <p>Contenido oculto revelado al hacer clic.</p>
</details>

<!-- Abierto por defecto -->
<details open>
  <summary>Comienza expandido</summary>
  <p>Contenido visible inicialmente.</p>
</details>

<time>

Fechas y horas legibles por máquinas para mejor SEO y accesibilidad.

Publicado:

Reunión a las:

<!-- Solo fecha -->
<time datetime="2024-12-25">Día de Navidad</time>

<!-- Solo hora -->
<time datetime="14:30">2:30 PM</time>

<!-- Fecha y hora completa -->
<time datetime="2024-01-01T00:00:00Z">
  Año Nuevo 2024
</time>

<mark>

Texto resaltado o marcado (como un marcador fluorescente).

Resultados de búsqueda para "HTML": HTML es la base de la web.

<p>Lo más importante: <mark>Esta parte</mark></p>

Por Qué Importa el HTML Semántico

  • SEO: Los motores de búsqueda entienden mejor la estructura de tu contenido y te posicionan mejor
  • Accesibilidad: Los lectores de pantalla pueden navegar y entender tu página correctamente
  • Consistencia: Los elementos semánticos tienen comportamientos predecibles por defecto en todos los navegadores
  • Mantenibilidad: El código es autodocumentado—más fácil para ti y otros desarrolladores
  • A prueba de futuro: Nuevos dispositivos y tecnologías pueden interpretar mejor el marcado semántico

Cuándo Usar Cada Elemento

  • <header>: Logo, título del sitio, navegación principal
  • <nav>: Navegación principal del sitio, migas de pan, tabla de contenidos
  • <main>: Contenido principal de la página (¡solo UNO por página!)
  • <article>: Publicaciones de blog, artículos de noticias, comentarios de usuarios, publicaciones de foros
  • <section>: Capítulos, contenido con pestañas, agrupaciones temáticas
  • <aside>: Barras laterales, enlaces relacionados, citas destacadas, publicidad
  • <footer>: Copyright, autoría, enlaces relacionados
  • <div>: Solo cuando ningún elemento semántico encaja (puramente para estilo/diseño)