The gallery page was doing its job — visitors arrived, scrolled the rooms and the pool and the KTV room — and then left without a single way to act on what they’d just seen. For one recent week the page pulled a healthy stream of views and produced almost no direct contact. The photos were working. The page wasn’t.
The gallery had no CTA — not because anyone missed it. There was no requirement for one when the site was built, and no design called for it. What surfaced the gap was this week’s analytics report. The analysis agent monitoring conversion performance flagged the gallery as a high-traffic, near-zero-contact page and marked it as the highest-value optimization of the week. That’s where the requirement came from. The page rendered fine, the images were optimized, the layout was clean. But a B&B website exists for exactly one reason: to turn a stranger looking at a pool photo into someone who picks up the phone. A gallery that only displays photos is a brochure. A gallery that converts is a sales channel.
This B&B’s site is part of a larger system I’ve been building for a small group of Hengchun operators: a site that owns its own bookings, GA4 wired as infrastructure, and a Google Ads engine that optimizes spend against real high-intent contact events rather than raw clicks. Every page on the site is supposed to be a node in that signal path. The gallery page was a dead end in it.
Two placements, because the page is read two different ways
The obvious move is a CTA at the bottom of the page. I built that first: a contact strip after the last photo group — phone, LINE with a pre-filled booking message, and WhatsApp. It catches the people who scroll all the way through and reach the end with intent already formed.
But a photo-heavy page has a particular failure mode: most people never reach the bottom. They scroll a few groups, see enough, and either act or leave somewhere in the middle. A bottom CTA serves the minority who finish; it does nothing for the majority who bail at 40%.
So the second placement is a floating pill bar that slides up from the bottom-center after the visitor passes 30% of page height. It carries the same three contact buttons plus a dismiss button. The trigger point matters: fire too early and it feels like a pop-up nag before the visitor has seen anything worth contacting about; fire too late and you’ve missed the people who decide mid-scroll. Thirty percent is roughly “they’ve seen enough to be interested but haven’t committed to finishing.”
The floating bar is desktop-only, on purpose
Mobile doesn’t get the floating bar, and that’s not an oversight. The site already has a persistent bottom bar on mobile — phone, LINE, and a book button pinned at all times. Adding a second floating element on a small screen would mean two competing sticky UI layers fighting over the same scarce vertical space, on the device where space is most scarce. The desktop floating bar exists precisely because desktop has no equivalent persistent contact layer. Each platform gets exactly one always-reachable contact path, placed where that platform’s users expect it.
There’s a second-order detail here that’s easy to miss: the floating bar has to know when to get out of the way. When a visitor opens a photo in the lightbox, the bar would otherwise sit on top of the image. So a small observer watches for the lightbox’s open state and hides the bar while it’s up, then restores it on close. And the dismiss button doesn’t just hide the bar for the session — it removes it permanently, because someone who actively closed it has told you they don’t want it, and re-showing it on the next scroll is the kind of thing that makes people leave.
The part that took zero new wiring
Here’s the decision that mattered most and is the least visible. Every contact button on the new CTAs uses href values that already match the selectors in the site’s analytics layer. Phone taps, LINE clicks, WhatsApp clicks — they all fire the existing GA4 events and the existing Google Ads conversions the moment they’re clicked. I didn’t add a single line of tracking code for the new buttons.
This is what it means for a site to be designed as a system instead of a pile of pages. The conversion events — the four high-intent contact channels — were defined once, months earlier, as the things the ad engine optimizes toward. They’re on-site CTA interactions: someone tapping the phone number, tapping LINE, tapping WhatsApp, after they’ve arrived at the site. Not ad clicks, which Google already counts before the visitor lands. These are the signals that say a human actually reached out.
Because those conversion definitions live at the analytics layer keyed on href patterns, any new button that points at tel: or the LINE booking URL inherits the tracking for free. The new gallery CTAs don’t just give visitors a way to contact the B&B — they extend the conversion surface the ad budget is being optimized against. More places to convert means more signal feeding back into bidding, and that signal is clean because it’s the same four channels, not a new ad-hoc event invented for this page.
The alternative — bolting on page-specific tracking for the gallery buttons — would have worked and would have been wrong. It would have created a parallel set of events to reconcile, a second place to maintain when the conversion strategy changes, and a real chance of the gallery’s numbers drifting from the rest of the site’s. The boring choice, making the new buttons indistinguishable from the existing ones at the href level, is what keeps the whole signal path coherent.
Whether it worked is an open question
I want to be honest about what this is: a hypothesis with good odds, not a proven win. Adding contact entry points where attention actually is should lift the contact rate on a page that was producing almost none. But “should” is doing work in that sentence. The real test is the next few weeks of data — whether the gallery starts contributing contact events instead of just views, and whether the ad engine, now seeing those events, shifts spend toward the traffic that lands on this page.
The thing I’m confident about is the structure. The page is no longer a dead end in the signal path. Whatever the conversion lift turns out to be, the gallery now reports the same way every other page does, and the budget optimizes against the same real signal.
A brochure shows you the rooms. The job was to make the page ask for the call.