Een tweetalige hotelsite die crawlers en AI-assistenten wél kunnen lezen
Een viersterrenhotel in Castilla-La Mancha had een site die zoekmachines als een lege container binnenkregen. Polargate bouwde die om tot 16 voorgerenderde tweetalige URL's en beheert hem nu met een maandelijkse Care-retainer en een terugkerende auditcyclus.

- 16
- indexeerbare URL's, Spaans en Engels
- 48
- auditbevindingen bevestigd, geen weerlegd
- 27
- gepubliceerde FAQ's met FAQPage-schema
- 20
- geautomatiseerde tests die de SEO-coherentie bewaken
- 0
- consolefouten met het security policy in enforce-modus
Het probleem
De site van het hotel was één pagina die pas in de browser werd opgebouwd. Zoekmachines en AI-assistenten kregen een vrijwel lege HTML-container, elke subroute gaf 404 terug en de taaltags verwezen naar zichzelf, waardoor de Engelse versie niet apart bestond. Security headers ontbraken. Het contactformulier schreef naar een tabel die elke anonieme bezoeker kon lezen en bezorgde niets bij de receptie. Kamertypes, prijzen, zalen en openingstijden bestonden pas nadat JavaScript had gedraaid, dus voor niemand behalve een browser.
Wat we bouwden
Polargate bouwde de site opnieuw op met Vite, React en TypeScript via vite-react-ssg, zodat elke route echte HTML uitlevert. De inhoud werd 16 indexeerbare URL's, zeven in het Spaans en zeven in het Engels plus een FAQ-pagina per taal, elk met een eigen title, description, canonical en hreflang met return tags. Eén TypeScript-bestand bevat de hotelgegevens en voedt de zichtbare pagina, de schema.org-graaf en de llms.txt-bestanden. Het contactformulier verhuisde naar een Supabase Edge Function met validatie op de server en een verzendlimiet, en mail vertrekt via Resend vanaf een eigen verzendsubdomein.
Het resultaat
Twintig URL's geven 200 terug in productie, het content security policy draait in enforce-modus zonder consolefouten en beide kamertypes staan met hun prijzen in de geserveerde HTML. Een adversarial audit met 55 agents leverde 48 bevindingen op, allemaal bevestigd en allemaal opgelost, waaronder een overervingsfout in robots.txt en Engelse pagina's met een Spaanse taaltag. Twintig geautomatiseerde tests bewaken nu de pariteit tussen Spaans en Engels, unieke metadata en de gestructureerde data tegenover de zichtbare tekst. Het effect op verkeer en boekingen is nog niet gemeten, dus Polargate claimt dat niet.
Stack
- Vite
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- React Router
- Vercel
- Supabase
- PostgreSQL
- Deno
- Resend
- GA4
- Search Console
- Google Maps
- Vitest
- GitHub
Wat we aantroffen
Een externe audit en een code review op dezelfde dag kwamen tot hetzelfde oordeel. De site was één pagina die pas in de browser werd opgebouwd, dus een crawler kreeg een container en verder niets. De Engelse versie had geen eigen URL's, subroutes gaven 404 terug en er werden geen security headers meegestuurd. Het contactformulier schreef naar een Supabase-tabel die elke anonieme bezoeker kon lezen, een lek van persoonsgegevens dat we dezelfde dag hebben gedicht.
- Inhoud in de geserveerde HTML: leeg
- Indexeerbare URL's: één
- Security headers: geen
- Contactformulier: bewaarde het bericht, bezorgde niets
Wat we hebben gebouwd
We hielden het ontwerp aan en bouwden de levering opnieuw. De site draait op Vite, React 18 en TypeScript met Tailwind en shadcn/ui, wordt tijdens de build voorgerenderd door vite-react-ssg en staat op Vercel. De taal zit in de route: Spaans op de root, Engels onder /en/, elke pagina voorgerenderd in de eigen taal met een eigen title, description, canonical en hreflang, inclusief return tags en x-default.
Eén bestand, src/lib/schema.ts, bevat de gegevens van het hotel. Daaruit komen de zichtbare pagina, de JSON-LD-graaf (Hotel, Organization, WebSite, HotelRoom, EventVenue, FAQPage, BreadcrumbList en een ReserveAction die naar de Paraty Tech-boekingsmotor van het hotel wijst) en de bestanden llms.txt en llms-full.txt. Zevenentwintig echte vragen van de receptie staan in zes groepen online, met native details-elementen, zodat een assistent ze leest zonder JavaScript uit te voeren.
Het formulier is een Deno Edge Function op Supabase: honeypot, timingcontrole, validatie op de server, een limiet per gehasht IP-adres, invoegen via de service role zonder rechten voor de anonieme rol, en bezorging via Resend vanaf een eigen verzendsubdomein, waardoor de Microsoft 365-mail van het hotel ongemoeid blijft. Analytics loopt via GA4 met Consent Mode v2 standaard geweigerd, en de kaart laadt pas na toestemming.
Hoe het nu draait
De site valt onder een maandelijkse Care-retainer, en die retainer bevat een auditcyclus, niet alleen losse pleisters. In augustus 2026 draaiden we een multi-agent audit over zes gebieden, waarbij een tweede agent elke bevinding probeerde te weerleggen voordat we die accepteerden: 48 bevindingen, 48 bevestigd, geen enkele weerlegd, waarvan 16 echte fouten in productie.
- Slechts één van de twee kamertypes stond in de voorgerenderde HTML
- Engelse pagina's werden geserveerd met lang="es"
- De hero-afbeelding bleef verborgen tot de hydratie, achter een gordijn van 4,5 seconden
- Een overervingsfout in de groepen van robots.txt
- Coördinaten die er ongeveer 430 meter naast lagen
Alles is hersteld en live geverifieerd van buiten het netwerk van de klant. Het content security policy ging van report-only naar enforce zonder één consolefout, 66 verweesde bestanden en 33 ongebruikte dependencies zijn verwijderd, en 20 vitest-tests laten de build falen als Spaans en Engels uit elkaar lopen, als twee pagina's dezelfde title krijgen of als de gestructureerde data niet meer overeenkomt met wat een bezoeker leest.
Vragen over dit project
Hoelang duurt zo'n herbouw?
Kunnen jullie dit doen met onze huidige boekingsmotor?
Komt ons hotel hierdoor in ChatGPT en in de AI-antwoorden van Google?
Wat dekt de maandelijkse Care-retainer eigenlijk?
Gerelateerd werk
Global Dynamic Security GroupMerk en tweetalige site voor Global Dynamic Security Group
Huisstijl, een handboek van 15 pagina's en een tweetalige bedrijfssite (Spaans en Engels) voor Global Dynamic Security Group (GDS), een beveiligingsgroep in de Dominicaanse Republiek, opgeleverd als één project met een vaste prijs.
2026Bekijk de case
Hotel MarienEen resortwebsite die Google, social media en AI-assistenten echt kunnen lezen
Polargate maakte van de tweetalige website van een Caribisch resort met 349 kamers een volledig statische, beveiligde site met gestructureerde data voor AI-zoekmachines, en houdt die bij met een maandelijkse retainer en een automatische audit op de eerste dag van elke maand.
2026Bekijk de case
Santo Domingo BayDe site van een Caribisch resort herbouwd als statische HTML, met een AI-conciërge erachter
Polargate herbouwde de tweetalige website van een Caribisch congresresort met casino op Vite, React en een eigen Supabase-project, prerenderde de 38 Spaanse en Engelse routes naar statische HTML en koppelde het hotel aan Estevano, waarvan de AI-conciërge echte gastverzoeken in zes talen afhandelt.
2026Bekijk de case
Start de motor
Vertel ons in een paar korte vragen wat je bouwt. Een senior engineer antwoordt binnen twee werkdagen schriftelijk met een eerste inschatting van scope, planning en prijs.