Una web de hotel bilingüe que los rastreadores y los asistentes de IA sí leen
Un hotel de 4 estrellas en Castilla-La Mancha tenía una web que los buscadores recibían como un contenedor vacío. Polargate la reconstruyó como 16 URLs bilingües prerenderizadas y hoy la mantiene con una cuota mensual de Care y un ciclo de auditoría.

- 16
- URLs indexables, español e inglés
- 48
- hallazgos de auditoría confirmados, ninguno refutado
- 27
- preguntas frecuentes publicadas con schema FAQPage
- 20
- tests automáticos que vigilan la coherencia SEO
- 0
- errores en consola con la política de seguridad en modo enforce
El problema
La web del hotel era una sola página renderizada en el navegador. Los buscadores y los asistentes de IA recibían un contenedor HTML casi vacío, las subrutas devolvían 404 y las etiquetas de idioma se apuntaban a sí mismas, así que la versión en inglés no existía por separado. No había cabeceras de seguridad. El formulario de contacto escribía en una tabla que cualquier visitante anónimo podía leer y no entregaba nada a recepción. Las habitaciones, los precios, los salones y los horarios solo aparecían después de ejecutar JavaScript, es decir, para nadie que no fuera un navegador.
Qué construimos
Polargate reconstruyó la web con Vite, React y TypeScript sobre vite-react-ssg, de modo que cada ruta se sirve como HTML real. El contenido pasó a 16 URLs indexables, siete en español y siete en inglés más una página de preguntas frecuentes en cada idioma, cada una con su título, su descripción, su canonical y su hreflang con etiquetas de retorno. Un único fichero TypeScript guarda los datos del hotel y alimenta la página visible, el grafo schema.org y los ficheros llms.txt. El formulario pasó a una Edge Function de Supabase con validación en servidor y límite de envíos, y el correo sale por Resend desde un subdominio propio.
El resultado
Veinte URLs responden 200 en producción, la política de seguridad de contenido corre en modo enforce sin errores en consola y las dos habitaciones, con sus precios, se leen en el HTML servido. Una auditoría adversarial con 55 agentes dejó 48 hallazgos, todos confirmados y todos corregidos, entre ellos un fallo de herencia de grupos en robots.txt y páginas en inglés servidas con la etiqueta de idioma español. Veinte tests automáticos vigilan la paridad español-inglés, los metadatos únicos y la coherencia entre datos estructurados y texto visible. El efecto en tráfico y reservas todavía no está medido, así que Polargate no lo afirma.
Stack
- Vite
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- React Router
- Vercel
- Supabase
- PostgreSQL
- Deno
- Resend
- GA4
- Search Console
- Google Maps
- Vitest
- GitHub
Qué encontramos
Una auditoría externa y una revisión del código, el mismo día, dieron el mismo diagnóstico. La web era una sola página renderizada en el navegador, así que un rastreador recibía un contenedor y nada más. La versión en inglés no tenía URLs propias, las subrutas devolvían 404 y no se enviaba ninguna cabecera de seguridad. El formulario de contacto escribía en una tabla de Supabase que cualquier visitante anónimo podía leer, una exposición de datos personales que cerramos ese mismo día.
- Contenido en el HTML servido: vacío
- URLs indexables: una
- Cabeceras de seguridad: ninguna
- Formulario de contacto: guardaba el mensaje, no entregaba nada
Qué construimos
Mantuvimos el diseño y reconstruimos la entrega. La web funciona con Vite, React 18 y TypeScript, con Tailwind y shadcn/ui, prerenderizada en el build por vite-react-ssg y desplegada en Vercel. El idioma va en la ruta: español en la raíz, inglés bajo /en/, cada página prerenderizada en su idioma con su título, su descripción, su canonical y su hreflang, con etiquetas de retorno y x-default.
Un único fichero, src/lib/schema.ts, guarda los datos del hotel. De ahí salen la página visible, el grafo JSON-LD (Hotel, Organization, WebSite, HotelRoom, EventVenue, FAQPage, BreadcrumbList y un ReserveAction que apunta al motor de reservas Paraty Tech del hotel) y los ficheros llms.txt y llms-full.txt. Publicamos 27 preguntas reales de recepción en seis grupos, con elementos details nativos, para que un asistente las lea sin ejecutar JavaScript.
El formulario es una Edge Function en Deno sobre Supabase: honeypot, control de tiempo, validación en servidor, límite de envíos por IP hasheada, inserción con la clave de servicio y sin permisos para el rol anónimo, y entrega con Resend desde un subdominio de envío propio, que no toca el correo Microsoft 365 del hotel. La analítica es GA4 con Consent Mode v2 denegado por defecto y el mapa solo carga tras el consentimiento.
Cómo se mantiene hoy
La web está bajo una cuota mensual de Care, y esa cuota incluye un ciclo de auditoría, no solo parches. En agosto de 2026 lanzamos una auditoría multiagente en seis áreas, con un segundo agente intentando refutar cada hallazgo antes de aceptarlo: 48 hallazgos, 48 confirmados, ninguno refutado, 16 de ellos errores reales en producción.
- Solo una de las dos habitaciones llegaba al HTML prerenderizado
- Las páginas en inglés se servían con lang="es"
- La imagen principal quedaba oculta hasta la hidratación, tras una cortina de 4,5 segundos
- Un fallo de herencia de grupos en robots.txt
- Coordenadas del hotel desviadas unos 430 metros
Se corrigió todo y se verificó en vivo desde fuera de la red del cliente. La política de seguridad de contenido pasó de report-only a enforce sin un solo error en consola, se eliminaron 66 ficheros huérfanos y 33 dependencias sin uso, y 20 tests de vitest tumban el build si el español y el inglés se separan, si dos páginas comparten título o si los datos estructurados dejan de coincidir con lo que lee una persona.
Preguntas sobre este proyecto
¿Cuánto tarda una reconstrucción como esta?
¿Se puede hacer esto con nuestro motor de reservas actual?
¿Esto hará que nuestro hotel salga en ChatGPT y en las respuestas de IA de Google?
¿Qué cubre en realidad la cuota mensual de Care?
Proyectos relacionados
Global Dynamic Security GroupMarca y web bilingüe para Global Dynamic Security Group
Identidad de marca, manual de identidad de 15 páginas y web corporativa bilingüe (español e inglés) para Global Dynamic Security Group (GDS), un grupo de seguridad privada en República Dominicana, entregado como proyecto cerrado a precio fijo.
2026Ver el caso
Hotel MarienUna web de resort que Google, las redes sociales y los asistentes de IA sí pueden leer
Polargate convirtió la web bilingüe de un resort caribeño de 349 habitaciones en un sitio totalmente estático y blindado, con datos estructurados para la búsqueda con IA, y lo mantiene con una cuota mensual y una auditoría automática el día 1 de cada mes.
2026Ver el caso
Santo Domingo BayLa web de un resort caribeño rehecha en HTML estático, con un conserje de IA detrás
Polargate rehízo la web bilingüe de un resort de convenciones y casino del Caribe sobre Vite, React y un Supabase propio, prerenderizó sus 38 rutas en español e inglés a HTML estático y conectó el hotel con Estevano, cuyo conserje de IA atiende peticiones reales de huéspedes en seis idiomas.
2026Ver el caso
Arranca el motor
Cuéntanos qué estás construyendo en unas pocas preguntas cortas. Un ingeniero senior responde por escrito en 48 horas laborables con una primera lectura de alcance, plazos y precio.