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
Portada del sitio de Nulus, talleres y sesiones de breathwork en Guayaquil
  • 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

  • Nulus: Página del método: los cuatro pilares de la práctica
    Página del método: los cuatro pilares de la práctica.
  • Nulus: Landing de breathwork corporativo para empresas
    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.

¿Necesitas algo parecido?

Cuéntame qué estás construyendo y te respondo con alcance, stack y una fecha realista.