Turismo · SEO
Casa Grande ResortSitio de resort con SEO local, guías propias y fotografía real
Sitio de 21 URLs para un resort familiar en Pedro Carbo, rehecho sobre fotografías reales del lugar: páginas por intención de búsqueda, un blog con guías largas, tarifas que salen de una sola fuente y consultas por WhatsApp medidas en GA4.
Tecnologías
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS v4
- JSON-LD
- Google Analytics 4
- Docker + Nginx
- Railway
21
URLs en el sitemap
43
fotos reales del resort
4
guías largas en el blog
5
eventos de contacto en GA4
Mi rol
Arquitectura de contenido, diseño UX/UI, desarrollo frontend, SEO técnico, medición con GA4 y despliegue.
El problema
Nadie busca un resort por su nombre si todavía no lo conoce: busca «pasadía cerca de Guayaquil», «piscinas cerca de Guayaquil» o «qué hacer en familia el fin de semana». Un sitio de una sola página no responde a ninguna de esas búsquedas, y uno ilustrado con fotos de stock tampoco convence a quien quiere ver el lugar antes de manejar hora y media. Hacía falta una página por cada intención, tarifas que una familia pudiera sumar por su cuenta y fotografías reales del resort.
Qué construí
- Once páginas del resort y sus servicios: inicio, full day, hospedaje, actividades, gastronomía, eventos familiares, bodas, galería, nosotros, contacto y el índice del blog.
- Seis guías por intención de búsqueda: qué hacer en familia, lugares para el fin de semana, complejos turísticos, piscinas, paseos a caballo y feriados cerca de Guayaquil.
- Un blog con cuatro guías largas (10 lugares turísticos de Guayas, 10 del Ecuador, el feriado del 9 de octubre de 2026 y el paseo de integración empresarial), cada una con índice, fuentes visibles, autor, fecha de revisión y migas de pan.
- Tablas de tarifas generadas desde la configuración: los cuatro paquetes de full day, el Plan Familiar con hospedaje y el paquete de bodas, más lo que paga una familia de cuatro por un full day, calculado con esas mismas tarifas.
- 43 fotografías reales del resort en lugar de las de stock: galería por secciones, mosaicos en la portada y fotos que rotan en el hero.
- Botones de WhatsApp con un mensaje distinto por página y por paquete, que ya trae los datos por completar (fecha, adultos, niños y sus edades) y funciona sin JavaScript.
- Medición en GA4 de cinco eventos de contacto: WhatsApp, teléfono, mapa, paquete elegido y clic desde una guía hacia una página comercial.
- Datos estructurados: Resort, WebSite, BlogPosting con su ImageObject y su autor, BreadcrumbList, CollectionPage con ItemList y FAQPage.
- Exportación estática servida por Nginx en Docker sobre Railway, con sitemap.xml, robots.txt y manifest generados desde la configuración del sitio.
Cómo está estructurado
Un sitio Next.js exportado como archivos estáticos. El contenido y los datos del negocio viven en módulos separados del diseño, así una página puede cambiar de aspecto sin tocar su texto SEO, y un precio se actualiza sin buscarlo página por página.
- site.ts: contacto, navegación, paquetes de full day, Plan Familiar y paquete de bodas. El menú, las tablas y el JSON-LD leen de aquí.
- seo-content.ts: títulos, descripciones, encabezados, contenido editorial, fuentes y enlaces relacionados de cada página y guía.
- photos.ts: una entrada por fotografía con su texto alternativo, para que ninguna imagen quede sin descripción.
- whatsapp.ts: el saludo, los datos por completar y el cierre salen del servicio; cada botón solo aporta su frase.
- Medición: un solo listener de clics delegado envía a GA4 los eventos de WhatsApp, teléfono, mapa, paquete y guía, sin datos personales.
- Despliegue: build en Docker con Node y runtime en Nginx sin privilegios, con gzip precomprimido, caché inmutable para los archivos con hash y revalidación para el HTML.
De fotos de stock a fotografía real
La primera versión se apoyaba en fotos de stock que no mostraban el lugar. El rediseño las reemplazó por las fotos del propio resort, entregadas por el cliente, sin que la portada ni la galería se volvieran pesadas.
- 43 archivos WebP, uno por fotografía, convertidos desde HEIC y JPG con la orientación corregida.
- Las fotos verticales que hacen de fondo del hero se recortaron a 3:2.
- Se retiraron siete archivos que repetían una misma foto con otro nombre.
- Un script de prebuild impide compilar si una imagen pasa de 400 KB, si falta una referencia o si una imagen pública no se usa.
- La galería se ordena por espacios: llegada y jardines, piscinas, bodas, caballos y deportes, y eventos y gastronomía.
Por dentro del sitio

Full day: los cuatro paquetes salen de la configuración del sitio, con un botón de WhatsApp por paquete. 
Galería por secciones con fotografías reales del resort. 
Índice del blog: cuatro guías para planificar salidas, feriados y eventos. 
Guía de Guayas: migas de pan, autor, fecha de publicación y fecha de revisión de fuentes.
Decisiones técnicas
- Una página por intención de búsqueda real, no una sola landing genérica: quien busca «paseos a caballo» y quien busca «bodas» no quieren la misma página, aunque sea el mismo resort. Bodas y eventos familiares van separadas, cada una con su propio mensaje de cotización.
- Tarifas, teléfonos, paquetes y rutas viven en un único módulo del que leen las tablas, el menú, los mensajes de WhatsApp, el sitemap, el pie y los datos estructurados. Si cambia un precio, se cambia en un solo lugar.
- Lo que el negocio todavía no confirmó no se publica: el schema de Resort sale sin coordenadas ni horarios exactos, no hay testimonios de ejemplo y la sección de reseñas solo aparece cuando hay reseñas reales.
- Las portadas del blog son ilustraciones y su texto alternativo lo dice: ninguna imagen generada se hace pasar por foto del resort.
- Exportación estática con Nginx en vez de un servidor Node: el sitio no tiene API ni base de datos, así que en producción solo quedan archivos precomprimidos, con caché larga para los que llevan hash y un 404 real para las rutas que no existen.
- Reglas de diseño escritas en el repositorio (sin degradados, sin separar las letras, sin estética genérica de IA) para que el sitio se vea como el lugar y no como una plantilla.
Retos
- Pasar de las fotos de stock a las del resort: convertir originales HEIC y JPG a WebP con la orientación corregida, recortar las verticales que hacen de fondo y descartar siete archivos que repetían la misma foto con otro nombre.
- Sostener una portada y una galería llenas de fotos sin frenar la carga: ninguna imagen supera los 400 KB, y el build se detiene si una se pasa, si falta una referencia o si queda una imagen sin usar.
- Construir 21 URLs alrededor de intenciones distintas sin que compitan entre sí: cada guía enlaza al servicio que le corresponde en vez de repetir el catálogo de precios.
- Medir la intención sin inflarla: un clic en un paquete registra un solo evento de WhatsApp y uno de paquete, y un clic no se cuenta como reserva.
Resultado
El sitio está en producción en casagranderesort.com con sus 21 URLs, sus guías y sus fotografías reales, servido como archivos estáticos desde Railway. Un verificador HTTP del repositorio revisa cada URL del sitemap: título y descripción únicos, un solo H1, canonical, enlaces internos, datos estructurados e imágenes.
