1. The situation
A mid-sized boutique resort in Phuket province (average rate THB 2,800-4,500/night) contacted us in early 2025 after the GM and owner felt the business was “running into a wall”. Occupancy ran 75-80% through every high season, but margin was thinning every year because over 90% of bookings came from OTAs like Booking.com, Agoda and Expedia at 15-20% commission per booking — meaning millions of THB per year were flowing out of the business and into foreign platforms unnecessarily.
Before coming to us, the client had tried everything they could think of. Google Ads in 2023, burning THB 80,000/month for 4 months — ROI was negative because keywords like “Phuket hotel” had high CPC and couldn’t outbid OTA brand bidding. They hired a freelancer to do SEO at THB 25,000/month for 6 months but didn’t get a single keyword on page one. Facebook Ads delivered conversion below 0.3% because the landing page loaded in 5.2 seconds — people clicked away before they even saw the booking form.
The goal set at kickoff: reduce OTA dependency from 90% to 60% within 12 months without reducing total booking volume — meaning we had to build an organic-traffic direct booking channel large enough to replace receding OTA revenue.
2. Why off-the-shelf solutions don’t work
The Phuket hotel market is one of Thailand’s most brutally competitive niches — over 500 competing resorts in the province, and they’re all trying to do SEO the same way. Installing WordPress + Yoast and hoping to rank doesn’t work at this level of competition — the average WordPress theme’s Core Web Vitals sit at LCP 3-5s, losing to OTAs optimised at enterprise scale.
Running ads burns money — what the client experienced was Google Ads CPC at THB 35-50 per click, conversion rate 1-2%, putting CAC at THB 1,500-2,500/booking, which consumes the margin on a THB 3,000/night room. Facebook Ads to a cold audience of Asian tourists still in their home countries delivered very low intent.
More importantly, the client had no content strategy that captured real tourist search intent — people searching “Phuket beach guide” are top-of-funnel travellers planning a trip, not buyers ready to book. Not having content for that stage means losing the chance to build brand awareness ahead of competitors.
3. Our approach
After a 90-minute discovery with the owner and GM mapping guest personas (60% Chinese, Korean and Australian tourists aged 28-45 booking 2-4 weeks ahead), we built four pillars:
1) Technical foundation. Chose Astro over WordPress for measurable reasons — Astro ships static HTML + zero JS by default, so LCP stays below 1.5s vs typical WordPress themes at 4+ seconds; no plugin attack surface (WordPress is regularly hacked via plugins in hospitality); hosted on Cloudflare Pages free with unlimited bandwidth and a 300+ city edge network close to Asian tourists, giving very low latency.
2) Local SEO + GBP. Phuket is a geo-niche where Google Maps + GBP impact is significant — optimise NAP consistency, review velocity, and weekly GBP posts.
3) Phuket content hub. Build topical authority via cluster content on travel intent (beaches, food, transport, itineraries) to capture top-of-funnel traffic and funnel it into the booking page.
4) Direct booking funnel. Integrate a booking engine that actually works — not just an email form — with real-time availability + payment + automatic confirmation.
4. Week-by-week
Week 1-2: Audit + research. Screaming Frog crawl found 340 issues (broken links, missing alt text, duplicate meta); pulled 16 months of GSC query data to find keywords ranking just outside the first page; PageSpeed Insights baseline LCP 5.2s / CLS 0.31 / INP 480ms. Keyword research on 200+ keywords split across 3 clusters (direct booking intent, location intent, travel research intent). Competitor analysis on 10 nearby resorts via Ahrefs covering backlink profile, content depth, schema usage.
Week 3-4: Migration + redesign. Migrated WordPress → Astro, 28 main pages; redesigned the landing page on conversion-first principles (hero contains availability checker, social proof from reviews, sticky booking bar); set up Cloudflare Pages + R2 to host imagery (the resort has 200+ room/spa/pool images, R2 saves egress cost).
Week 5-6: Phuket content hub. Wrote the 12 researched articles, e.g. “10 beaches in Phuket worth visiting”, “Best airport-to-hotel transport in Phuket — value comparison”, “Phuket high season vs low season”. Every article carries internal links back to the booking page and Schema FAQPage.
Week 7-8: GBP + citations + booking engine. Full GBP rebuild (categories, attributes, services, products); 40+ local citations (TripAdvisor, Trustpilot, Tiqets, Klook); Schema markup Hotel + FAQPage + LocalBusiness; replaced the unusable legacy booking engine with Cloudbeds.
After launch the 6-month retainer began: 4 articles/month, backlink outreach to Thai + international travel blogs, monitoring + monthly reporting.
5. Obstacles along the way
Obstacle 1: no in-house content team. The owner had one marketing person but only doing social media — no SEO writing capability. We had to take all writing in-house, costing 30% more time than estimated. Fixed by proposing the long-term retainer covering monthly content rather than a one-shot delivery. It’s now a strong recurring revenue line for us.
Obstacle 2: legacy booking engine had no good API. The previous system was from a small Thai vendor with no channel manager integration, leaving direct + OTA inventory out of sync and risking overbooking. We proposed switching to Cloudbeds (channel manager + API + multi-currency), adding THB 60,000 to budget. The client agreed once they saw the legacy system was the bottleneck.
Obstacle 3: month-3 traffic drop of 22%. Coincided with the November 2025 Google core update — Google had downgraded the booking page for weak E-E-A-T signals. Fixed by adding author bios (owner + GM, real names, LinkedIn links), business credentials (commercial registration, hotel licence), replacing stock with 80+ real resort photos, and embedding Google + TripAdvisor reviews. Two weeks after deploying, traffic recovered and surpassed the previous level.
6. Post-launch and ongoing
Within the first 4 months post-launch: organic traffic from 150 to 4,800 visits/month (+3,100%), direct bookings +280%, OTA dependency from 90% to 65% (target 60% likely hit in Year 2), CAC down 65% vs the previous Ads spend.
Lessons learned: Thai hospitality clients respond to visual proof more than numbers — we switched monthly reporting from spreadsheets to dashboard screenshots with side-by-side before/after, and communication became much smoother. The owner now forwards the dashboard directly to investors without our involvement.
The client is in month 14 of retainer and has signed to extend across additional hotels in the group (a resort in Krabi province + a boutique hotel in Phuket province), using the same playbook adapted per property’s guest persona.