Sidebar
La columna lateral que enlaza categorías, temas y el resto del sitio: el motor de enlazado interno del blog.
Ver complementoEl blog no es una sola página: es un conjunto de piezas que trabajan juntas —la columna lateral, la paginación, el artículo—. Aquí están todas, cada una con su página de detalle.
Esta página es el mapa del blog por dentro. Cada complemento se abre y se explica a la misma profundidad —qué problema resuelve, de qué piezas se compone, cómo se comporta en el teléfono, dónde encaja y cómo está construido—, igual que la serie de Módulos del sitio.
Y todos descansan en el mismo principio: el contenido (Markdown) va separado del diseño (la plantilla). Publicar un artículo es agregar un archivo; el listado, la paginación y el detalle se generan solos. Una sola fuente de verdad, cero trabajo repetido.
Concepto
Una pieza con una función clara dentro del blog: navegar entre artículos, partir el listado o renderizar el artículo en sí. Cada una se construye una vez y se reutiliza.
Si un módulo es un ladrillo del sitio entero, un complemento del blog es un ladrillo de su sección de contenido. El sidebar reparte hacia categorías y temas; la paginación ordena el listado cuando crece; el artículo es la pieza central que convierte un archivo Markdown en una página completa con su SEO resuelto.
Pensar el blog en complementos —y no como una página suelta— es lo que lo mantiene coherente y fácil de mantener. Un cambio en una pieza se refleja en todo el blog a la vez. En esta serie, cada complemento tiene su página: qué es, para qué sirve, qué lleva, dónde va y cómo está construido.
El índice
Los 7 complementos publicados, cada uno como tarjeta: foto, nombre, qué hace y las piezas que lo componen. Entra a cualquiera para verlo a fondo.
Cada tarjeta es una pieza real del blog: foto, nombre, qué hace y los elementos que lo componen. Es el MISMO card del catálogo —no inventamos un diseño aparte—, porque la coherencia es justo lo que esta serie enseña.
Son los siete complementos del blog: sidebar, paginación, artículos, tarjeta de artículo, archivo de categoría, archivo de etiqueta y artículos relacionados. Cada uno con su página de detalle y el molde de 10 secciones.
La columna lateral que enlaza categorías, temas y el resto del sitio: el motor de enlazado interno del blog.
Ver complementoCómo se parte el listado en páginas navegables cuando hay muchos artículos, sin perder SEO.
Ver complementoLa pieza central: el artículo en Markdown (.mdx) y su página de detalle generada sola.
Ver complementoLa card del listado: imagen, badge de categoría, título, resumen y «Leer artículo».
Ver complementoLa página que agrupa los artículos de una categoría (/blog/categoria/<cat>).
Ver complementoLa página que agrupa los artículos de un tema o etiqueta (/blog/tag/<tag>).
Ver complementoEl bloque «sigue leyendo» que conecta cada artículo con otros del blog.
Ver complementoPor dentro
La vitrina de arriba te dice qué es cada pieza; aquí la abrimos. Mismo formato para todas: qué resuelve, de qué partes se compone y en qué te fijas al construirla.
Es el MISMO bloque «a fondo» del catálogo —información a la izquierda, galería a la derecha, idéntico para cada pieza—. Reusar el patrón es, otra vez, la lección: el blog se arma con componentes que ya existen en el sitio.
Son los mismos complementos que ves arriba como tarjetas, abiertos uno por uno con la misma estructura. El copy y la galería salen de una sola fuente (ANATOMIA_AFONDO en lib/blogAnatomia.ts). El botón «Ver complemento» solo aparece en los que ya tienen su página.
El complemento a fondo
El sidebar es la columna de apoyo que acompaña al contenido del blog. No es decoración: es el motor de enlazado interno. Reúne categorías y temas (con su conteo), lecturas recomendadas y puentes al resto del sitio, y cierra con una acción. Convierte cada artículo —que de otro modo terminaría en un callejón— en un cruce de caminos hacia el resto del blog y del negocio.
Y no se escribe a mano: sus listas se calculan desde la colección de artículos, así que publicar un .mdx las actualiza solas. El componente (BlogSidebar.astro) es presentacional —solo pinta lo que recibe—; el cálculo de datos vive en la página del listado. Sticky en escritorio para acompañar la lectura, debajo del contenido en móvil.
El complemento a fondo
La paginación parte el listado del blog en páginas navegables cuando los artículos crecen: en vez de una sola página interminable, /blog, /blog/2, /blog/3… con controles «anterior / siguiente». Mantiene el peso de cada página bajo control, acelera la carga y le da al lector una sensación clara de avance por el archivo.
Bien hecha es también una decisión de SEO: cada página listada es indexable, los enlaces de paginación son <a href> reales (no JavaScript) y se cuida la señal de continuidad entre páginas. En Astro se resuelve con la API de paginate() en una ruta dinámica —sin librerías— para generar todas las páginas en build.
El complemento a fondo
El artículo es la pieza central del blog: un archivo Markdown (.mdx) con frontmatter tipado —título, descripción, fecha, categoría, tags— y el cuerpo del texto. El autor se concentra en escribir; la estructura, el SEO y los datos estructurados (Article JSON-LD) ya están resueltos por la plantilla. Contenido y diseño van separados a propósito.
Cada .mdx es una entrada de una Content Collection validada por Zod: si falta un campo o tiene mal tipo, el build avisa. Una sola ruta dinámica los renderiza todos con el mismo layout, así que publicar es agregar un archivo —el listado, la paginación y la página de detalle se generan solas, sin tocar código—.
El complemento a fondo
La tarjeta de artículo es la cara de cada entrada en el listado: imagen de cabecera, badge con la categoría, título, un resumen breve y el enlace «Leer artículo». Convierte la lista del blog en una vitrina escaneable —el lector decide de un vistazo qué abrir— en vez de un muro de títulos.
No es un componente aparte: reutiliza la misma CategoryCard del catálogo, alimentada con los datos del artículo (título, descripción, categoría e imagen). Reusar la card es la lección de siempre —una sola pieza, coherente en todo el sitio— y mantiene alturas iguales y carga de imagen optimizada sin trabajo extra.
El complemento a fondo
El archivo de categoría es la página que agrupa todos los artículos de una categoría —/blog/categoria/<cat>—. Le da al lector (y al buscador) una vista temática del blog: «todo lo de Guías», «todo lo de Novedades». Es una ruta dinámica que se genera sola por cada categoría con artículos.
Funciona como puerta de entrada SEO: una página por tema, con su título y su listado, enlazada desde el badge de cada tarjeta y desde el sidebar. Comparte la misma tarjeta y la misma rejilla del listado principal, así que se ve idéntica sin escribir layout nuevo.
El complemento a fondo
El archivo de etiqueta agrupa los artículos por tema transversal —/blog/tag/<tag>—. A diferencia de la categoría (una por artículo), las etiquetas son varias y cruzan secciones: conectan piezas que comparten un concepto aunque vivan en categorías distintas. Es la red fina del descubrimiento.
Como el archivo de categoría, es una ruta dinámica generada por cada etiqueta usada, enlazada desde la nube de temas del sidebar y desde los tags del artículo. Mismo listado, misma tarjeta: el patrón se reutiliza y la coherencia sale gratis.
El complemento a fondo
El bloque de relacionados —«sigue leyendo»— cierra cada artículo con un puñado de enlaces a otros del blog. Es lo que evita el callejón sin salida al final de la lectura: en vez de cerrar la pestaña, el lector encadena otra entrada. Sube las páginas por sesión y reparte autoridad interna entre artículos.
Vive en el ArticleLayout y se alimenta de la colección: hoy toma artículos hermanos; el patrón ideal es priorizar los de la misma categoría o que comparten etiquetas. Usa anchor text real (el título del artículo) hacia /blog/<slug>, así sirve al lector y al SEO a la vez.
Responsive y móvil
El sidebar no desaparece: baja debajo del artículo. La paginación se simplifica. Las cards son cómodas de tocar. Cada pieza del blog tiene su regla móvil clara.
El blog tiene tres zonas que cambian en el teléfono: el sidebar pasa de columna derecha a bloque bajo el artículo (el contenido siempre va primero); la paginación colapsa los números y deja solo Anterior/Siguiente para no desbordar; y las cards del listado crecen al área táctil de 44 px para evitar taps fallidos.
Ninguna de estas reglas requiere JS: son CSS puros vía mobile.css y el grid del ArticleLayout. Lo que el teléfono elimina —los números de paginación, el sidebar lateral— no se pierde: cambia de lugar o de forma. El contenido siempre está accesible.
En escritorio el sidebar va a la derecha en una segunda columna. En el teléfono la rejilla colapsa a una columna: el artículo sube (order: 1) y el sidebar baja (order: 2). Los links de categorías siguen accesibles, pero el contenido va primero.
/* mobile.css · el sidebar baja DEBAJO del artículo en pantallas angostas.
No desaparece: los enlaces de categorías siguen accesibles, solo cambian de lugar. */
.article-grid { display: grid; grid-template-columns: 1fr 300px; gap: var(--sp-6); }
@media (max-width: 900px) {
.article-grid { grid-template-columns: 1fr; } /* 1 columna */
.sidebar { order: 2; } /* sidebar al final */
.article-body { order: 1; } /* artículo primero */
} La imagen ocupa el ancho completo en el teléfono; el botón «Leer artículo» crece al área táctil mínima de 44 px. En el teléfono se toca con el dedo —el cursor no existe— y un área pequeña genera abandono.
/* mobile.css · la card de artículo se toca cómodo en el teléfono. */
@media (max-width: 1024px) {
a, button, [role="button"] {
-webkit-tap-highlight-color: rgba(91, 61, 245, .15); /* feedback al tap */
}
}
@media (max-width: 768px) {
/* imagen de la card ocupa el ancho completo */
.acard__img { width: 100%; aspect-ratio: 16/9; object-fit: cover; }
/* botón «Leer artículo» con área táctil mínima de 44 px */
.acard__cta { min-height: 44px; display: inline-flex; align-items: center; }
} En pantallas muy estrechas los números de página se ocultan; quedan solo «Anterior» y «Siguiente» a todo el ancho. El visitante siempre sabe cómo navegar sin que los botones queden diminutos o desborden.
/* La paginación del listado es mobile-first: botones apilados en móvil.
El link «Anterior» y «Siguiente» tienen área táctil de 44px. */
.pagination { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--sp-2); }
@media (max-width: 480px) {
/* en pantallas muy estrechas, solo Anterior/Siguiente (los números se ocultan) */
.pagination__num { display: none; }
.pagination__prev, .pagination__next { flex: 1; justify-content: center; }
}
/* área táctil de 44 px en cualquier botón de paginación */
.pagination a, .pagination button { min-height: 44px; display: inline-flex; align-items: center; } Siete: sidebar (columna lateral con links), paginación (partir el listado), artículos (el contenido en Markdown), tarjeta de artículo (la card del listado), archivo de categoría, archivo de etiqueta y bloque de artículos relacionados. Todas están en estado "listo" y cada una tiene su página de detalle con el molde de 10 secciones.
Crea un archivo .mdx en src/content/blog/ con su frontmatter (título, descripción, categoría, imagen, fecha). El artículo aparece automáticamente en el listado /blog, en el archivo de categoría y en la paginación. No tocas ningún .astro: el contenido va en Markdown, el diseño ya está.
El sidebar es la columna lateral del blog: lista las categorías, las etiquetas más usadas y artículos recientes. Aparece en el layout ArticleLayout (cada artículo individual). En móvil se apila debajo del artículo para no robarle espacio al contenido. Es el motor de enlazado interno del blog: distribuye PageRank hacia todas las secciones.
Sí. El archivo src/pages/blog/pagina/[page].astro usa getStaticPaths() con paginate() de Astro. Solo tienes que definir PAGE_SIZE en lib/blog.ts (por defecto 9 artículos por página). Si publicas el artículo número 10, la página /blog/pagina/2 se crea sola en el siguiente build.
Cada artículo puede declarar un array relatedSlugs en su frontmatter apuntando a slugs de otros artículos. El ArticleLayout lee esos slugs, obtiene los artículos de la colección y renderiza el bloque "Sigue leyendo" con sus tarjetas. Si relatedSlugs está vacío, el bloque no aparece. Sin inventar relaciones falsas.