Artículo vs. Sección: cuándo y cómo usar <article> y <section> en tu blog
Domina la semántica HTML5 para mejorar la accesibilidad, el SEO y la mantenibilidad de tus páginas web.
¿Por qué importa la semántica?
Los navegadores, los motores de búsqueda y los lectores de pantalla interpretan la estructura de una página a través de etiquetas semánticas. Un marcado correcto permite:
- Mejorar el ranking SEO al facilitar el rastreo de contenido relevante.
- Optimizar la accesibilidad para usuarios con discapacidades.
- Incrementar la legibilidad del código para equipos de desarrollo.
Definiciones oficiales
<article>
Representa una pieza de contenido independiente y auto‑contenida que podría distribuirse de forma aislada (p.ej., una entrada de blog, una noticia, un comentario).
Características clave:
- Puede incluir su propio
<header>,<footer>,<nav>y<section>. - Debe ser autónomo y tener sentido fuera del contexto de la página que lo contiene.
- Ideal para RSS/Atom feeds y micro‑datos (schema.org).
<section>
Delimita una agrupación temática de contenido dentro de una página. No es necesariamente independiente.
Características clave:
- Se usa para dividir una página en bloques lógicos (p.ej., "Sobre mí", "Últimos artículos", "Contacto").
- Generalmente lleva un encabezado (
<h1–h6>) que describe su tema. - No se espera que tenga sentido por sí solo fuera del documento.
Comparativa rápida
| Aspecto | <article> |
<section> |
|---|---|---|
| Independencia del contenido | ✅ Autocontenido, reutilizable | ❌ Depende del contexto de la página |
| Uso típico | Post de blog, noticia, comentario, producto | División temática, capítulos, grupos de formularios |
| Encabezado obligatorio | No obligatorio (pero recomendado) | Generalmente sí (h1‑h6) |
| SEO | Facilita la extracción de snippets en SERPs | Ayuda a estructurar la jerarquía pero menos peso propio |
| Accesibilidad (ARIA) | Se mapea a role="article" |
Se mapea a role="region" cuando lleva aria-label |
Ejemplos prácticos en un blog
A continuación se muestra una estructura típica de una página de blog que combina ambos elementos.
<!-- Contenedor principal del blog -->
<div class="container">
<header class="mb-4">
<h1>Mi Blog de Desarrollo</h1>
</header>
<!-- Sección de presentación (no reutilizable) -->
<section class="mb-5" aria-label="Sobre mí">
<h2>Sobre el autor</h2>
<p>Soy ingeniero con 15 años de experiencia en DevOps y contenedores...</p>
</section>
<!-- Lista de artículos (cada uno es autocontenido) -->
<section class="row" aria-label="Últimos artículos">
<article class="col-md-6 mb-4">
<header>
<h2>Cómo optimizar imágenes para la web</h2>
<time datetime="2025-10-01">1 Oct 2025</time>
</header>
<p>En este artículo aprenderás a reducir el peso de tus imágenes sin perder calidad...</p>
<footer>
<a href="/articulos/optimizar-imagenes" class="btn btn-primary">Leer más</a>
</footer>
</article>
<article class="col-md-6 mb-4">
<header>
<h2>Docker vs. Podman: ¿Cuál elegir en 2025?</h2>
<time datetime="2025-09-20">20 Sep 2025</time>
</header>
<p>Comparativa actualizada de rendimiento, seguridad y compatibilidad...</p>
<footer>
<a href="/articulos/docker-vs-podman" class="btn btn-primary">Leer más</a>
</footer>
</article>
</section>
<!-- Pie de página global del blog -->
<footer class="mt-5 pt-3 border-top">
<p class="text-muted">© 2025 Mi Blog de Desarrollo – Todos los derechos reservados</p>
</footer>
</div>
Observaciones:
- Los
<article>están dentro de una<section>que actúa como contenedor de lista. - Cada artículo lleva su propio
<header>y<footer>, lo que permite extraer metadatos de forma independiente. - Se usa
aria-labelen las secciones para mejorar la navegación con lectores de pantalla.
Buenas prácticas y checklist de implementación
- Siempre incluye un encabezado (
<h1–h6>) dentro de<section>para describir su temática. - Utiliza
timecon atributodatetimeen<article>para marcas de fecha legibles por máquinas. - Aplica micro‑datos Schema.org (
itemscope itemtype="https://schema.org/BlogPosting") a los artículos para SEO avanzado. - Evita anidar
<article>dentro de otro<article>a menos que el contenido interno sea también autocontenido (p.ej., comentarios). - Usa clases de Bootstrap (
row,col-*) para una disposición responsiva sin romper la semántica. - Incluye atributos ARIA como
role="article"oaria-labelcuando la intención no sea evidente.
Impacto en rendimiento y SEO
Los motores de búsqueda priorizan contenido bien estructurado. Un <article> correctamente marcado puede aparecer como featured snippet o en los resultados de Google News. Además, al separar bloques temáticos con <section> se reduce el tiempo de renderizado crítico (CRITICAL) porque los navegadores pueden paralelizar la carga de recursos asociados a cada región.
Recomendaciones de rendimiento:
- Lazy‑load de imágenes dentro de
<article>usandoloading="lazy". - Minimiza el CSS de Bootstrap con custom build para cargar solo los componentes que utilizas (
grid,buttons,tables). - Implementa HTTP/2 Server Push para fuentes y iconos que aparecen en los encabezados de los artículos.
Solución de problemas frecuentes
1. Los lectores de pantalla ignoran el <section>
Asegúrate de añadir aria-label o aria-labelledby para describir la región.
2. Google no reconoce mis <article> como contenido independiente
Verifica que cada artículo tenga itemscope y itemtype="https://schema.org/BlogPosting". Usa la herramienta Rich Results Test para validar.
3. El layout se rompe en dispositivos móviles
Revisa que las clases de columna sumen 12 dentro de cada .row y que no haya anidamiento excesivo de .container. Utiliza .col-sm-12 como fallback.
Conclusión
Dominar la diferencia entre <article> y <section> no solo mejora la calidad del código, sino que también potencia la accesibilidad, la indexación SEO y el rendimiento de tu blog. Aplica las buenas prácticas y ejemplos mostrados y verás cómo tu contenido se vuelve más robusto y escalable.
Uso efectivo de los elementos HTML <article> y <section> en blogs modernos