Joshua Francis
Case Studies

Rebuilding the Website for Roatán's #1 Rated Dive Resort, Trilingual and Measured Line by Line

Roatán's #1 rated dive resort on TripAdvisor was selling $1,000 to $1,600 packages off a decade-old WordPress site that had quietly fallen behind the business: rates locked inside JPEGs, no structured data, and pages out of sync across its three languages. I rebuilt it as 232 pages across three languages on Next.js, recovered the content search engines couldn't read, and measured every result, including the ones that didn't flatter the new site.

In collaboration with

Rafa, Owner, Splash Inn Dive Resort

roatansplashinn.com
Rebuilding the Website for Roatán's #1 Rated Dive Resort, Trilingual and Measured Line by Line
0 → 100%
Pages with structured data, from none to every page
1 → 100%
Images with alt text, from almost none to all
181 URLs
Every link from the old site preserved, none broken
232 pages
Built across English, Spanish, and French

About

Splash Inn Dive Resort. The #1 rated dive resort in Roatán on TripAdvisor: a family-run, 25-room boutique hotel and five-star dive centre on the waterfront in West End, Honduras. Its guests fly in from North America and Europe and book $1,000 to $1,600 packages weeks in advance, almost entirely on the strength of the website.

Challenge

A decade-old WordPress site was the top of the funnel for a business whose products cost over $1,000 a person, but it had aged out: end-of-life software, rates locked inside images, and pages out of sync across its three languages.

Solution

A trilingual Next.js rebuild: 232 pages, every rate recovered into structured data, one clean URL per room in every language, and a full accessibility and privacy pass.

01

The challenge

For a resort like Splash Inn, the website is where the sale is won or lost. Guests commit to a $1,000 to $1,600 package weeks before they ever arrive, almost entirely on what they find online. So a site that undersells the experience doesn't just look dated, it quietly costs bookings and caps the prices a five-star operation should be able to charge. The old site was doing exactly that.

It simply hadn't kept pace with the business. It was slow to load, hard for Google to make sense of, and easy to mistake for a lesser resort, the opposite of the first impression a five-star operation needs. Underneath, it had run on the same decade-old WordPress install for years, still on PHP 7.4, which stopped receiving security patches in 2022, and had gathered the layers a busy site collects over a decade: 17 render-blocking stylesheets and 10 blocking scripts loading before anything appeared, and two of nearly everything, two WhatsApp buttons and two booking widgets from different plugins and vendors.

What a Search Engine Saw

The bigger issues weren't visible to a guest at all, but they were obvious to Google:

  • Every price was a picture. The all-inclusive rates, all four occupancy tiers, lived inside a single image file. Google can't read text inside an image, a screen reader can't announce it to a guest who's blind, and a prospective guest can't copy a number into an email to ask about it. The most important thing on the site, what it costs, was effectively invisible.
  • Nothing labelled the pages. Search engines look for labelled facts, this is a hotel, this is a room, it costs this much, this page is a diving course, and the old site carried that on 0% of its pages. To Google it was an unlabelled wall of text, with no way to know it was a resort with rooms and prices worth showing off in search.
  • The photography couldn't be found. Alt text is the short description attached to a photo that tells Google, and a blind visitor's screen reader, what the image shows. Only 1% of pages had it, so a dive resort's single strongest asset, its reef and room photography, was invisible to image search.
  • Google was writing their pitch for them. The one-line summary under a search result is a page's only chance to sell itself before a click. 61% of pages had none, so Google used whatever text it found first, rarely the words anyone would have chosen.

One Business, Three Disconnected Languages

The same room had three unrelated addresses in English, Spanish, and French, with nothing connecting them, so Google had no way to know they were translations, and no reason to serve the Spanish page to a Spanish-speaking searcher. And when Google shut off Universal Analytics in 2023, the site's analytics went dark, leaving three years with no data to work from.

02

The approach

Designing for the Experience

A resort website has a harder job than most. Booking a room isn't buying something you can return, it's handing over your whole vacation, weeks ahead, on trust. In hospitality the experience on the ground is the entire product, and it can make a trip or break it. So when someone is deciding whether to book, they're really deciding whether to trust you with their time off. The site's job is to earn that trust before a single email, to make a visitor feel the place and come away thinking: if I book here, I'm going to have a great trip.

That conviction shaped the biggest design decision on the project. The old site showed the resort in small, cramped images, its best assets shrunk down and easy to scroll past. I rebuilt it around full-scale, immersive photography, the water, the dock, the reef, and the rooms shown at the size they deserve, so the site feels less like a brochure and more like standing there. And I worked closely with the client to bring their strongest assets, the rooms and the setting, right to the front and early, where they do the most to turn a browser into a booking.

The homepage, before and after
After
Before
BeforeAfter
The rooms: small thumbnails, then full-scale imagery
After
Before
BeforeAfter

Brand & Logo

The rebuild started with the brand itself. I designed the Splash Inn wordmark, a hand-worked script paired with a clean, spaced DIVE RESORT lockup, so the identity finally looked like the five-star operation behind it. It runs through the whole site and down into the favicon, rebuilt as crisp SVG so the mark holds up at every size.

The Splash Inn Dive Resort wordmark.
The Splash Inn Dive Resort wordmark.

Rebuilt for Speed and Scale

With the look settled, I rebuilt the site from the ground up on Next.js with React Server Components, TypeScript, and Tailwind: 232 pages, 73 in each of the three languages, served from Vercel instead of an aging WordPress host. On the homepage, 17 render-blocking stylesheets became 1, and 10 blocking scripts became 1, so all that full-scale imagery still loads fast.

Trilingual By Design

The three languages are first-class, not a translation plugin. Every page in every language is a real static page under a shared path, so the English, Spanish, and French versions of a room live at the same address. That single decision is what makes hreflang meaningful, and it is the biggest search improvement in the project: Google can finally tell the translations apart and serve the right one.

The Spanish homepage, before and after
After
Before
BeforeAfter

The Spanish site grew from 28 pages to 73, the French from 23 to 73, each now a full mirror of the 109-page English site rather than a thin afterthought.

Recovering Content Nobody Could Read

Every rate was transcribed out of the JPEGs into structured data and rendered as real text with Product and Offer schema, all occupancy tiers, per package. Non-diver companion rates were published for the first time. An entire upgrade price list, standard-plus, ocean view, nitrox, night and shark dives, had never appeared on the site in any form.

The rates and packages page, before and after
After
Before
BeforeAfter

Moving Without Breaking Anything

The new site changed the address of nearly every page, so every one of the old site's 181 links was mapped to a live page on the new one, with none left behind. Nothing a guest had bookmarked, and nothing Google had already indexed, was lost in the move.

Accessibility & Privacy

Skip links, one H1 per page, alt text on 100% of images, focus management, and all animation behind prefers-reduced-motion. Contrast was measured by compositing the actual pixels rather than eyeballed. Analytics is GA4, the first working measurement in three years, and it does not load at all until a visitor in the EEA, UK, or Switzerland consents, on a card where Accept and Decline are identical in size and weight.

03

The result

Every problem from the challenge now has a number against it. The invisible prices, the unlabelled pages, the buried photography, the slow load, each was measured on the live old site the same day, then again on the new one, so the before-and-after below is like-for-like rather than a guess.

Foundation

  • Structured data: 0% → 100% of pages, valid JSON-LD across Resort, HotelRoom, Course, Product, Restaurant, and FAQ types.
  • Image alt text: 1% → 100% of pages.
  • Meta descriptions: 39% → 100%, all unique.
  • hreflang: 44% → 100%, with x-default.
  • Render-blocking resources: 17 stylesheets → 1, and 10 scripts → 1.
  • Third-party origins: 22 → 7, with no trackers among the seven.

Content & Structure

  • Median words per page: 162 → 335. Pages under 200 words: 95 → 9.
  • All 181 of the old site's links still resolve, with no broken links.
  • Spanish pages 28 → 73, French 23 → 73, each a full mirror of the English site.
  • Reader-mode linearisation issues: 357 → 80.

Reported honestly, including against us

  • The new HTML document is larger, 244 KB vs 70 KB. That is the React Server Components payload inlined: one bigger document against a smaller one that then blocked on 27 more files across 22 hosts. A real trade, stated rather than hidden.
  • Small tap targets on the homepage went from 7 to 18, the language switcher and carousel controls are compact by design. That metric goes against the new site, so it belongs in the record.
  • There is no before-and-after traffic data, and won't be for months: there was no Search Console property and analytics had been dead since 2023. Any launch-day traffic claim would be invented. What this rebuild delivered is the measurement baseline that never existed.

The numbers, before and after.

Every number measured against the live old site on the same day.

0%from 0%
Structured data
1%from 1%
Image alt text
39%from 39%
Meta descriptions
44%from 44%
hreflang
Render-blocking stylesheets17× fewer
Before
17
After
1
Render-blocking scripts10× fewer
Before
10
After
1
Third-party origins3.1× fewer
Before
22
After
7
Reader-mode issues4.5× fewer
Before
357
After
80

Let's get you results like these.

A free 30-minute call. I'll tell you straight what I'd do and whether I can help, no pitch deck.