Sitio corporativo · Bienestar
NulusSitio de breathwork con agenda de eventos, SEO local y datos estructurados desde una sola fuente
Sitio de breathwork en Guayaquil: 35 URLs entre servicios, ciudades, industrias y una agenda de eventos, en Astro estático y con SEO local.
Tecnologías
- Astro 7
- TypeScript
- CSS con tokens de diseño
- Fontsource (Newsreader, Inter, Geist Mono)
- sharp
- JSON-LD
- Docker + nginx
- Railway
- Google Analytics 4
- Microsoft Clarity

35
URLs en el sitemap
8
fichas de evento
6
landings de industria
5
páginas locales
Mi rol
Desarrollo del sitio en Azirgo SAS a partir del diseño y de los briefs SEO, más la implementación del SEO técnico, los datos estructurados y la medición.
El problema
El breathwork roza temas de salud - sistema nervioso, ansiedad, contraindicaciones -, así que quien llega necesita entender qué es, en qué se diferencia de la meditación o de la terapia, quién lo guía y cuándo es la próxima fecha. Además hay dos compradores distintos: la persona que busca un taller en su ciudad y la empresa que busca un programa para su equipo. Un sitio de una sola página no puede responder a ninguno de los dos con el detalle que piden.
Qué construí
- Home y cinco páginas de servicio: talleres grupales, sesiones individuales, retiros, formación de facilitadores y breathwork corporativo.
- Cinco páginas locales: Guayaquil como sede y página madre del SEO local, con su mapa, más Samborondón, Quito, Cuenca y la modalidad online.
- Seis landings de industria para la venta corporativa - tecnología y startups, banca y seguros, salud y clínicas, educación, call centers y ventas, deportistas y alto rendimiento -, cada una con los problemas propios de su sector.
- Dos comparativas con la respuesta directa bajo el H1: breathwork frente a meditación y breathwork frente a terapia psicológica.
- Agenda de eventos con ocho fichas propias, cada una con fecha, sede, precio, cupos, facilitador y FAQ.
- Método, precios, historias y «sobre nosotros», con el equipo marcado como personas enlazadas a la organización.
- Contacto con un formulario que redacta el mensaje y abre WhatsApp, mapa de carga diferida, términos y política de privacidad.
- Datos estructurados generados desde funciones compartidas - Organization, LocalBusiness, Service, Offer, Event, Course, FAQPage, Article, BreadcrumbList, ContactPage y AboutPage -, más sitemap, llms.txt y manifest como endpoints.
Cómo está estructurado
Astro 7 con salida estática y sin framework de interfaz: no hay ninguna isla que hidratar, y el JavaScript se limita a scripts pequeños en línea para el menú, el formulario y el mapa, más la medición. Los datos del negocio viven en módulos de src/data, los constructores de JSON-LD en src/lib/schema.ts y cada ruta es un archivo .astro. El build se sirve con nginx dentro de Docker en Railway.
- Servicios: /servicios/talleres-de-breathwork, sesiones individuales, retiros, formación de facilitadores y breathwork corporativo.
- SEO local: /breathwork/guayaquil (la sede, con mapa y LocalBusiness), Samborondón, Quito, Cuenca y online.
- Industrias: seis landings bajo /industrias/ para tecnología, banca, salud, educación, call centers y deporte.
- Decisión: /metodo, dos comparativas bajo /comparativas/, /precios e /historias.
- Agenda: /eventos y una ficha por evento en /eventos/[slug], la única ruta dinámica del sitio.
- Confianza y contacto: /sobre-nosotros, /contacto, términos y privacidad.
- Fuentes únicas: site.ts (NAP, redes, menús e identificadores de medición), eventos.ts, precios.ts y equipo.ts.
- Endpoints generados en el build: /sitemap.xml, /llms.txt y /site.webmanifest, leídos de los mismos datos.
Una agenda que alimenta todo el sitio
Los eventos no están escritos en cada página: viven en un solo módulo tipado que /eventos, las páginas de ciudad, las de servicio, /metodo y el JSON-LD filtran. Una fecha o un cupo se cambia en un solo sitio.
- Cada evento tiene su propia URL, con fecha, sede, precio, facilitador, cupos y un FAQ generado de sus propios datos.
- El tipo obliga a fechas con el huso de Ecuador (-05:00) y a cupos disponibles reales.
- Event en JSON-LD con Offer, InStock o SoldOut según los cupos, y VirtualLocation para las sesiones online.
- Un campo de detalle propio por fecha, para que dos talleres con la misma sede, precio y facilitador no publiquen fichas casi idénticas.
- El botón «Reservar» de la página de Guayaquil lleva a la ficha del evento y no al listado, y /metodo enlaza las ocho fichas de su tema.
- Los precios salen de un módulo aparte: lo que se muestra y lo que viaja en Offer.price son el mismo dato.
- En el sitemap, la agenda declara la fecha del build porque se regenera en cada despliegue; el resto de páginas, la fecha del último commit que las tocó.
Por dentro del sitio

Página del método: los cuatro pilares de la práctica. 
Landing de breathwork corporativo para empresas.
Decisiones técnicas
- Astro sin framework de interfaz y CSS siempre en línea: sin islas que hidratar, el primer pintado no espera ninguna hoja de estilos. El precio - el CSS no se cachea entre páginas - se asumió a conciencia, porque en un negocio local la mayoría de visitas son primeras visitas.
- Los datos del negocio viven en fuentes únicas: el NAP es idéntico carácter por carácter en el pie, en el JSON-LD y en la página de Guayaquil, y precios y agenda se cambian en un solo archivo del que heredan las páginas y el marcado.
- Un formulario de contacto que entrega en WhatsApp: el sitio es estático y no tiene backend, así que el formulario redacta el mensaje y abre el chat, funciona incluso sin JavaScript y dispara generate_lead en GA4.
- LocalBusiness solo donde hay negocio físico del que hablar - home, Guayaquil y contacto -. Samborondón, Quito y Cuenca se declaran como Service con su zona de servicio, para no inventar sedes que no existen.
- GA4 y Clarity cargan con el primer gesto del visitante, así quedan fuera de la carga que mide PageSpeed. El costo quedó escrito en el código: una visita que no toca nada no se registra.
- Nada inventado en el marcado: sameAs solo con perfiles que existen, sin twitter:site mientras no haya cuenta, y los cupos disponibles de cada evento son un dato real, nunca escasez fabricada.
Retos
- El contenido no se estaba extrayendo: sin un elemento <article>, los extractores elegían un bloque al azar y en la página de Cuenca leían 60 de 1.248 palabras. Envolver el contenido arregló de un golpe el contenido «thin», las FAQ «invisibles» y la autoría que no se veía.
- Dos fichas de taller con la misma sede, precio y facilitador salían idénticas al 96 %; un campo de detalle propio por fecha las bajó al 61 %.
- Los briefs de diseño enlazaban a 35 destinos que nunca se publicaron: 161 enlaces en 25 archivos se reasignaron uno a uno a la página que de verdad cubre cada tema.
- La política de seguridad de contenido recién añadida bloqueaba en silencio el mapa y el envío del formulario a WhatsApp; se abrió solo lo necesario para Google Maps y wa.me.
Resultado
El sitio está en producción con 35 URLs en el sitemap - servicios, ciudades, industrias, comparativas y ocho fichas de evento -, datos estructurados construidos desde los mismos datos que se ven en pantalla y la medición de GA4 y Clarity en marcha.