Case study · 2026 · Tourism
mykonos-car-rental.gr — +40% mobile bookings since rebuild.
Heavy WordPress on a peak-season tourism site. Owner spending half his day fixing overbookings the website should have prevented. Three weeks of work later: 100/100 PSI mobile, +40% direct mobile bookings, zero overbookings since launch. This is what changed and why.
1. The starting state
Yannis K. owns a Mykonos rental fleet of forty-three vehicles spread between the airport, Mykonos town, Ornos, and Platis Gialos. Peak season (May to October) drives most of the year's revenue. Most of his bookings arrive through Google — branded searches and a long tail of "rent a car Mykonos [something]" queries.
His existing website was a five-year-old WordPress build on a shared European host. Twenty-seven plugins. A drag-and-drop page builder rendering ~410 KB of inline JavaScript before the visitor saw anything useful. A booking form that posted to a separate inbox the front-desk staff manually copied into a spreadsheet that the airport pickup driver checked every two hours from his phone.
The numbers, measured the week before kickoff:
Before
- Page weight
- 4.2 MB
- LCP (mobile)
- 5.8s
- Time to interactive
- 7.1s
- WP plugins
- 27
After
- Page weight
- 195 KB
- LCP (mobile)
- 0.6s
- Time to interactive
- 0.9s
- WP plugins
- 0
2. The diagnosis
The PSI report told one part of the story. The two-hour conversation with Yannis told the rest. There were three problems wearing the costume of one.
Problem A: the booking flow was a five-step obstacle course
Pickup location → return location → date range → vehicle category → vehicle selection → booking form. Five distinct page loads. On a 4G connection in Mykonos in August, that's 35 seconds of wait time for a tourist who already has a competing tab open. Mobile completion rate sat below 12%.
Problem B: there was no real-time availability
The "available vehicles" shown to the visitor were a static list, edited by hand once per day. When the airport-pickup driver got a same-day request from a client whose flight had moved, he had no way to mark the vehicle "out" before the website re-allocated it to someone else. Result: an average of 1.4 overbookings per peak-season week, each of which cost roughly €200 in operational scrambling and €0–€800 in lost goodwill.
Problem C: the search-engine surface was undifferentiated
A visitor searching "rent a car Mykonos airport" landed on the homepage, not on a page about airport pickup. Same for visitors looking for Ornos, Platis Gialos, or specific vehicle classes. The site was ranking for branded queries (where Yannis's name was already known) but not for the long-tail intent that should have been most of the new traffic.
3. The build — week by week
Week 1 — Audit, redirect map, content tree
Full crawl of the existing site. Every URL with a non-zero impression count in Google Search Console for the trailing twelve months went into a redirect map: 412 source URLs mapped to 38 destination URLs in the new structure. Sitemap regenerated. Content rewritten in English and Greek natively (not translated) by an outside editor on retainer.
Week 2 — Astro build, real-time availability layer, fleet imagery
Static site generated with Astro 5. Hosted on Cloudflare Pages with a Workers KV layer holding the live availability state. The booking submission posts to a Cloudflare Pages Function that writes to KV (instant) and to a Google Sheet the front desk uses (eventual). The airport-pickup driver got a tiny PWA on his phone that lets him mark a vehicle in or out from the road.
Fleet imagery — forty-three vehicles, four photos each — was reshot in Yannis's lot one Saturday morning and processed through a sharp pipeline that produces AVIF + WebP + JPG triplets at 1200 × 800. Hero photos averaged 22 KB; gallery thumbs averaged 9 KB.
Week 3 — Per-island landing, schema, launch
Four dedicated landing pages built — Mykonos Town, Ornos, Platis Gialos, Airport — each with its own meta title, FAQ schema, local pickup instructions, and a "request a quote for this location" CTA wired to the same booking engine. Sitemap re-submitted. Search Console URL inspection on every new page. Cut-over executed at 03:00 EET on a Tuesday in late April with the redirect map active from the same second the new DNS propagated.
4. The migration — what went right and what didn't
What went right: the redirect map was complete enough that within 14 days post-launch, the new site had reclaimed 96% of the indexed pages from the old site, with rankings on the top 50 keywords either holding or improving. No 404 errors above background noise in Search Console.
What didn't: the original Greek content had been written by a SEO contractor years earlier and was, in places, robotic. The new Greek copy by the outside editor was better — but it took three weeks longer than scheduled to land, which delayed the Greek-language landing pages until two weeks after the English launch. Lesson: scope content timeline at 2× whatever the writer estimates.
5. The results — measured at 30 / 60 / 90 days
30 days post-launch
- PSI mobile: 100/100 on the homepage and all four landing pages
- LCP mobile: 0.6s average across the top 10 most-visited URLs
- Mobile bookings (vs. same window prior year): +27%
- Overbookings: 0
- Indexed pages in Google: 96% of pre-launch URLs recovered
60 days post-launch
- Mobile bookings (vs. prior year): +33%
- Average session duration: +41%
- Top-10 keyword rankings on Search Console: 34 of 50 improved, 11 held, 5 dropped (long-tail variants we deliberately depriotized)
- Overbookings: 0
90 days post-launch
- Mobile bookings (vs. prior year): +40%
- Direct (organic + branded) bookings as a percentage of total: +18 percentage points (from agency-channel-heavy mix toward direct)
- Overbookings: 0
- Hours per week Yannis spent on phone fixing booking issues: ~8 → ~1
"Since the new site went live, bookings from Google are up 40%. The system works flawlessly and we haven't seen another overbooking. But the real change is that I'm not on the phone anymore. I'm back on the road, picking up clients myself when I want to. The website does the work I used to do."
6. What I'd do differently
- Schedule the photoshoot in week 1, not week 2. The week we shipped the build, two of the gallery photos still hadn't been processed because the original lot session had scheduling issues. Don't depend on a creative deliverable in the same sprint as the engineering.
- Build the staff PWA before the public site. The front-desk + driver tooling was the second-order problem the public site solved. In hindsight I should have shipped the staff side first so the operations team had two weeks to get used to the new flow before the public traffic hit it.
- Pre-launch SEO baseline two weeks earlier. I measured pre-launch keyword positions only one week before cut-over. Two weeks of baseline data would have given me a cleaner before/after read on ranking volatility.
7. What this would cost on your site
Mykonos Car Rental's project sat at the higher end of the standard €4,800 performance rebuild bracket — a marketing site this complex (booking engine, real-time availability sync, four landing pages, bilingual content, staff PWA) is normally quoted closer to the €7,800 re-platforming tier.
On a comparable Greek tourism site without the staff-tooling component, the standard €4,800 / 3 weeks / 95+ PSI guaranteed package applies. The free 15-minute audit tells us in real time which side of that line your site falls on.
Related
All case studies · Visit the live site ↗ · The manifesto · Re-platforming process · Book a 15-min audit
Last updated 2026-05-05.