One fast site for every villa, story and language.
The old site was a JavaScript app with the blog on a separate platform. We rebuilt it on Astro with Sanity, so villas, stories and owner pages live in one place and every page arrives as real HTML.
- Client
- Private Villas Mexico
- Sector
- Luxury villa rentals
- What we did
- Astro build, Sanity CMS, Villa search, Multilingual SEO, Analytics
- Built to drive
- More direct bookings.
- Live site
- privatevillasmexico.com

The problem
The villas were online, but search engines could barely see them.
The main site ran as a client-rendered app, so crawlers received an empty shell until JavaScript loaded. Stories lived on a separate Webflow site, stitched into the domain through a proxy. The sitemap mixed both, carried login pages and told Google to cache it for a year. The team wanted fewer places to edit content, not more.
- Villa pages that crawlers saw as an empty shell.
- Stories on a second platform, joined to the domain by a proxy.
- A sitemap with broken language links and stale signals for Google.
The solution
One Astro site, one place to edit it.
We moved villas, stories and owner pages into a single Astro build with Sanity as the content source. Pages render as HTML first and only the search and booking parts run JavaScript, so the site stays fast and every language version can be indexed.






Our intervention
What we took on.
The rebuild covered the guest side and the owner side of the business.
- 01
Villa search
Search by destination, dates and group size, with filters, a map view and live availability before a guest books online.
- 02
Stories
Destination guides and travel features moved into Sanity and onto the main domain, with categories such as Tulum and family travel.
- 03
Three languages
English, Spanish and French versions with correct hreflang and an x-default, switched from a locale menu in the header.
- 04
Owner acquisition
A join the collection page that explains the service to villa owners and collects listing requests next to the guest contact form.




The Stega fix
Build for the crawler and the guest at the same time.
A villa site lives on search traffic and on trust. Both need pages that load fast and show real content from the first byte.
HTML first, JavaScript where it pays
Villa and story pages render as plain HTML. The search, map and date picker run as interactive islands on top.
One source of truth
Villas, stories and owner content sit in one Sanity project, so the team edits in one place instead of across two platforms.
Contact on the guest's terms
Email, phone and WhatsApp sit on every page, because a guest planning a group trip often wants to talk before booking.
Stega initiatives
What we keep improving.
With one site in place, the work turns to growth.
Destination content
Next we are planning guides for each destination, written to answer the questions guests type into search and AI assistants.
Search to enquiry funnel
We are setting up PostHog to follow a guest from villa search to booking or enquiry, so drop-off points show up in one report.
Index health
We are watching Search Console as the new pages replace the old app URLs, and fixing gaps language by language.
Toolstack
The tools behind it.
- AstroRenders villa, story and owner pages as fast static HTML.
- SanityOne content source for villas, stories and translations.
- PostHogProduct analytics across search, villa pages and enquiries.
- CloudflareServes the site at the edge on the main domain.
- Bunny CDNDelivers villa photography and video from a fast image CDN.
- Google Search ConsoleIndex and ranking checks for each language version.











