DEV Community

Chris Hodge
Chris Hodge

Posted on

How I Built a Travel Booking Landing Page That Actually Converts (Real Project Breakdown)

Most landing page tutorials use fictional examples. This one doesn't.

A few months ago, a small backwater boating business in coastal Karnataka asked me to build them a proper landing page. They were taking bookings entirely through word of mouth, had no online presence, and were losing potential customers to competitors who'd simply figured out how to show up on Google.

The result is [visithonnavar.com] — a lean, fast, conversion-focused page for Honnavar backwater boating. This article breaks down exactly how I built it, what decisions I made and why, and what I'd do differently.


The Brief

The client ran private boat rides through the Sharavathi backwaters in Honnavar, Karnataka. Their entire booking flow was: tourist finds number somehow → calls → maybe books. No tracking, no discoverability, no trust signals for someone who'd never heard of them.

Goals:

  • Show up for "Honnavar boating" searches
  • Build trust fast for a first-time visitor
  • Make booking as frictionless as possible (WhatsApp-first, not form-first)
  • Load fast on mobile, on patchy rural connections

That last point shaped almost every technical decision.


Stack and Why

I went with WordPress + Elementor for this one, which I know will raise eyebrows among some readers. Here's the honest reasoning:

The client needed to update pricing, photos, and packages without calling me every time. A custom React site would have meant either a CMS integration overhead or locking them into dependency on me forever. Neither was acceptable for a small local business.

Elementor gave them a visual editor they could actually use. For a marketing page with no complex app logic, the tradeoff was worth it.

What I was careful about:

  • Disabled every Elementor feature they didn't need (cut bloat significantly)
  • Served images in WebP, lazy loaded below the fold
  • Used a lightweight theme (Hello Elementor — basically zero CSS overhead)
  • Hosted on a server with a data center close to the target audience (India)

Result: Lighthouse mobile score above 85 on first audit. Acceptable for the use case.


Information Architecture

Before writing a line of code or touching a page builder, I mapped the conversion journey:

Visitor lands → Understands what this is (3 seconds) 
→ Sees social proof → Understands pricing 
→ Has zero friction path to book → Books
Enter fullscreen mode Exit fullscreen mode

Everything on the page is in service of moving someone along that path. If an element didn't serve one of those steps, it didn't make it onto the page.

The sections in order:

  1. Hero — What it is, where it is, primary CTA
  2. Trust bar — "No middlemen. No hidden charges. Boat ready before you arrive."
  3. Packages — Clear pricing, what's included, WhatsApp CTA per package
  4. How to book — 4-step visual flow (Select → WhatsApp → Confirm → Enjoy)
  5. Gallery — Real photos, not stock
  6. Location — Embedded Google Map + directions
  7. Reviews — Real Google reviews pulled via widget
  8. FAQ — Handles objections before they become drop-offs

The Hero Section

The hero had one job: make someone immediately understand what they're looking at and want it.

What I avoided:

  • A rotating carousel (kills load speed, distracts from CTA)
  • Vague taglines like "Experience the beauty of Karnataka"
  • Multiple competing CTAs

What I went with:

  • Single full-width image of the actual backwaters (real photo, not stock)
  • Headline: direct and specific — what it is, where it is
  • Two CTAs side by side: WhatsApp (primary) and Call Now (secondary)
  • A one-line trust signal beneath the CTAs

The WhatsApp CTA uses a pre-filled message link so the user doesn't have to type anything:

https://wa.me/918073019049?text=Hi%20I%20want%20to%20book%20Honnavar%20Backwater%20Boating
Enter fullscreen mode Exit fullscreen mode

That small detail — pre-filling the message — reduces friction at the exact moment someone decides to act. Drop-off between "I want to book" and "I sent the first message" is real, and it's where a lot of conversion dies.


Pricing Section Design

Pricing pages are where most small business websites go wrong. They either hide the price entirely (kills trust) or show it without context (kills perceived value).

I structured each package card as:

[Package name]
[Duration + key details]
[Original price crossed out] → [Current price]  
[What's included — bullet list, max 5 items]
[WhatsApp CTA]
Enter fullscreen mode Exit fullscreen mode

The crossed-out original price isn't dishonest — it reflects the actual weekday discount they offer. But visually it anchors the value before the real price lands, which matters.

One card gets a "Most Booked" badge. This is social proof through defaults — people take cues from what others choose. It also quietly steers toward the package with better margins.


Location and the Map Embed

For a local business, the map embed is not a nice-to-have. It's a trust signal, a conversion element, and an SEO element simultaneously.

Visitors from outside the area have a specific anxiety: can I actually find this place? Showing the exact location on an embedded map, with a direct link to Google Maps for navigation, dissolves that concern before it becomes a reason not to book.

The embedded map points directly to the boating location:

📍 Sharavathi Backwater Boating Point, Honnavar

Implementation was a standard Google Maps embed iframe. I added a "Get Directions" button that opens the maps link directly — better on mobile than waiting for the iframe to be interactive.

<a href="https://maps.app.goo.gl/EHe2sg5BJVdsECae8" target="_blank" rel="noopener">
  Get Directions →
</a>
Enter fullscreen mode Exit fullscreen mode

For local SEO, this also reinforces geographic relevance on the page — the embed signals to Google that this business is physically located where it claims to be.


WhatsApp as the Primary Booking Channel

This deserves its own section because it was a deliberate structural decision, not an afterthought.

A contact form would have been the "standard" approach. I didn't use one. Here's why:

Form problems for this use case:

  • Adds latency (form → email → manual reply → back and forth)
  • Higher perceived friction for mobile users
  • Email goes to spam more often than you'd expect for new domains
  • The client checked WhatsApp 40x more often than email

WhatsApp advantages:

  • Instant, conversational — feels like texting a friend
  • Client already lived on WhatsApp for business
  • Customers in India overwhelmingly prefer it for inquiries
  • Easy to share the location pin, photos, and confirmation in one thread

The booking flow ended up being: message → instant reply with map pin → show up → ride. That's a better UX than most SaaS onboarding flows I've seen.

Every CTA on the page points to the same WhatsApp link. Consistency matters. Don't make users wonder which button does what.


Performance Optimizations

A few specific things that made the biggest difference:

Images: Every photo converted to WebP. Hero image compressed to under 150KB without visible quality loss. Used loading="lazy" on everything below the fold.

Google Maps: Loaded the embed only on user interaction (click to load) rather than on page load. Saved ~500ms on initial load time.

Fonts: Used system fonts for body text. Loaded only the weights needed for headings from Google Fonts. One font family, two weights — that's it.

Third-party scripts: Google Analytics (lightweight GA4), the review widget, and nothing else. Every third-party script is a latency tax. Pay only for what earns its keep.


Local SEO Decisions

A few things built into the page specifically for local search:

  • Title tag: "Honnavar Backwater Boating | Best Prices & Easy Booking" — keyword first, value prop second
  • Meta description: Written to answer the user's actual question, not to stuff keywords
  • Schema markup: LocalBusiness schema with coordinates, phone, opening hours
  • NAP consistency: Name, address, phone number consistent across the page, Google Business Profile, and any directory listings
  • Location-specific content: The page mentions Sharavathi River, Uttara Kannada, Karnataka, Kerala Spot, Lotus Point — real local landmarks that match how people actually search

The map embed and the explicit address on the page also contribute to Local Pack eligibility in Google Search.


What I'd Do Differently

Add a sticky mobile CTA bar. On mobile, once you scroll past the hero, the primary CTA disappears. A sticky bottom bar with "Book on WhatsApp" would recover some of that drop-off. I know it needs doing. I just haven't gotten back to it yet.

Better review integration. Right now reviews are pulled via a third-party widget that adds some load overhead. A static HTML review section with screenshot fallbacks would be faster.

A/B test the hero CTA copy. "Book Now" vs "Check Availability" vs "Message Us" — I went with instinct. Should have tested.

Add video. A 30-second clip of the actual boat ride would outperform even the best photo. The footage exists. Getting it properly compressed and embedded without tanking load time is a to-do item.


Results (Where Things Stand)

The site is ranking on the first page for "Honnavar boating" and related terms. WhatsApp inquiries come in daily. The client handles all the conversations themselves — exactly what was supposed to happen.

The whole build took about two weeks including the back-and-forth on copy, sourcing real photos, and getting the Google Business Profile set up properly.

For a small local business with zero prior web presence, that's a workable timeline.


Takeaways

If you're building something similar — a local service business, a small tourism operator, anything where a single page needs to drive real-world bookings — a few things from this project worth carrying forward:

Map the conversion journey before you open a design tool. Every section should have a job. Friction lives in the gaps between what a visitor wonders and what the page answers. WhatsApp (or whatever the client actually uses) beats a contact form when it's the right fit for the audience. Speed matters more on mobile, for local audiences, than almost any other factor. Real photos and real reviews beat good design every time.

Building something similar? Happy to talk through decisions in the comments.

Top comments (0)