I have a confession that most agencies will never make to you: a huge amount of the blog content hotels publish is worthless. Not “needs improvement” worthless. Worthless. It pulls traffic that never books, sits in a dashboard looking like a win, and quietly justifies someone’s monthly retainer.
So when a hotelier asks me “is our content actually working?” I do not answer with a traffic chart. Traffic is the easiest number to fake yourself out with. I answer with a model that traces individual articles to actual reservations and actual margin. This post is that model, the way I genuinely run it, warts and all.
Why traffic is the most dangerous number in your dashboard
Here is the trap. You publish “12 Best Hidden Beaches Near [Your Town].” It ranks. It pulls 4,000 visits a month. Everyone high-fives.
Then you look at what those 4,000 people do. They read, they screenshot the beach photos, and they leave to go book a campervan. Zero of them were ever going to book your $340-a-night boutique room. The article is a content-marketing peacock: gorgeous, loud, and reproductively useless to your business.
Meanwhile a dull little page called “Late Checkout and Early Arrival Policy at [Hotel]” gets 180 visits a month and sits next to a disproportionate share of your direct bookings, because the people reading it are mid-decision and reassuring themselves before they commit.
The size of a page’s audience tells you almost nothing about its contribution to revenue. Intent does. A small, high-intent page can out-earn a viral one by an order of magnitude, and last-click reporting will tell you neither.
That is the whole reason this model exists. I am not trying to find the popular content. I am trying to find the content that moves money, which is a completely different hunt.
Step one: split your content into two jobs before you measure anything
You cannot judge a page until you know what job you hired it to do. I sort every piece into one of two buckets, and I do this before I look at a single number, because the numbers mean different things in each bucket.
- Revenue pages. Hired to directly nudge a booking. Room-type explainers, “things to do” guides that lead to a stay, neighborhood guides, your direct-booking perks page, seasonal offers. I judge these on assisted bookings and revenue, full stop.
- Authority pages. Hired to make your whole site more credible and more visible, including to AI answer engines. Deep local expertise, founder story, sustainability practices, detailed FAQ content. These rarely book a room on their own. They earn their keep by lifting everything around them and by getting you cited when someone asks ChatGPT for a hotel recommendation.
If you skip this split, you will kill authority pages for “not converting” when converting was never their assignment. I have watched hotels delete the exact pages that were getting them mentioned in AI answers because a last-click report called them dead weight. If you want the why behind that, I wrote about it in is your hotel invisible to ChatGPT, and the discipline of building brand mentions for LLMs is its own measurement problem.
Step two: stop using last-click, it is lying to you
Last-click attribution gives 100% of the credit to whatever the guest touched immediately before booking. For hotels that is almost always a branded search (“[Hotel name] book”) or a direct visit. So last-click reporting credits your brand and credits nothing else, which makes every piece of content on your site look like a freeloader.
That is mechanically wrong. The guest discovered you through that neighborhood guide three weeks ago, came back twice, and only then searched your name. The content did the discovery work. The brand search just collected the booking.
So the foundational move is switching how you look at conversions:
- In Google Analytics 4, I stop staring at “Conversions” by last-click and start using the assisted conversions lens (Advertising → Attribution, plus path exploration).
- I tag every meaningful content URL so I can filter the booking-engine confirmation events by which pages appeared earlier in the path.
- I treat a booking as “content-assisted” if any revenue page appeared in the session path or in a prior session within the lookback window.
This one change reframes the entire question from “did this page get the last click?” to “was this page in the room when the decision got made?” That second question is the honest one.
Step three: the assisted-booking attribution model I actually use
Here is the model in plain terms. For every revenue page, over a rolling 90-day window, I pull four things:
- Entrances — how many guest journeys started on this page.
- Assisted bookings — confirmed direct reservations where this page appeared earlier in the path.
- Assisted revenue — the booking-engine value of those reservations.
- Assist rate — assisted bookings divided by entrances, so I can compare a small page and a big page fairly.
Then I weight it. A last-click booking gets full credit. An assist gets partial credit, and I use a simple position-based split because it is honest about uncertainty: I give 40% of a booking’s credit to the first content touch, 40% to the last touch before the brand search, and spread the remaining 20% across the middle. You can argue the exact percentages forever. Do not. The point is not surgical precision, it is killing the lie that says only the final click mattered.
The goal of an attribution model is not to be perfectly accurate. It is to be less wrong than last-click in a consistent, repeatable way, so that this quarter’s numbers are comparable to last quarter’s. Consistency beats false precision every single time.
To make this concrete, here is an illustrative table for one hotel’s revenue pages over a quarter. These numbers are hypothetical and only here to show the shape of the decision, not real results:
| Page | Monthly visits | Assisted bookings (qtr) | Assisted revenue (qtr) | Verdict |
|---|---|---|---|---|
| Neighborhood guide | 320 | 22 | $7,040 | Scale it |
| Room-type explainer | 140 | 31 | $11,160 | Protect it |
| ”Best beaches” listicle | 4,100 | 1 | $290 | Re-purpose |
| Late checkout policy | 180 | 14 | $4,480 | Protect it |
| Founder story | 90 | 0 | $0 | Authority page, do not judge on revenue |
Look at the “best beaches” row. Twenty-eight times the traffic of the neighborhood guide and one-twenty-fourth of the revenue. If you measured by visits you would pour budget into the listicle. By assisted revenue, the quiet room-type explainer is your franchise player and you would never have known.
Step four: separate vanity traffic from contributing articles
Once the table exists, the sorting almost does itself. I run every revenue page against two cutoffs over the rolling window: did it assist any bookings, and did its assisted revenue clear the cost of keeping it alive (the proportional cost of producing and maintaining it)?
- Contributors: clear both bars. Get more of these. Build internal links to them, refresh them, expand the cluster around them.
- Vanity traffic: high visits, near-zero assisted bookings. These are not worthless to your brand necessarily, but they are not paying rent as revenue pages. I either re-angle them toward your offer or quietly retire them from the “content is working” story.
- Sleepers: low visits, strong assist rate. These are gold. A page booking rooms on 180 visits a month will book a lot more on 1,800. That is where I aim the hotel SEO effort next, because the intent is already proven.
The re-angling part matters. A vanity listicle is not always a delete. Sometimes I add a genuine reason-to-stay, a comparison that favors booking direct, and an internal link to your offers page, and it crosses from peacock to contributor. The traffic was real. The intent just needed a path to your booking engine.
Step five: tie it back to margin, not just bookings
Bookings are not the finish line. Margin is. A direct booking is worth materially more than the same booking through an OTA, because OTA commissions run roughly 15 to 25 percent off the top. So when I report content ROI, I do not just count direct bookings, I count the commission those bookings did not have to pay.
That reframes content as a margin instrument, not a traffic toy. Every content-assisted direct booking is a reservation that did not surrender 15 to 25 percent to an intermediary. I do the arithmetic in detail in the book-direct math on OTA commission cost, and the broader pattern of how the OTAs intercept your demand is in how OTAs steal search. None of this is about escaping the OTAs, that is a fantasy and anyone selling it to you is lying. It is about a healthier mix: clawing back enough direct demand that the channel split stops eating your margin alive.
So the final ROI line for a content program reads something like: assisted direct revenue, multiplied by the share that genuinely shifted from OTA to direct, multiplied by your commission rate, equals real margin defended. That is the number a GM actually feels.
A realistic word on timelines
I will not pretend any of this happens fast. A new revenue page typically needs three to six months to rank, gather enough path data to be trustworthy, and prove its assist rate. Before that, you are reading noise. I have seen pages look dead at month two and become top contributors by month five. So I judge content on rolling quarters, not weeks, and I never let anyone, including me, declare a page a failure before it has had a fair chance to do its job. Nobody can promise you a number-one ranking or a guaranteed booking lift on a schedule, and you should be deeply suspicious of anyone who does. What we can do is stack the odds and measure honestly.
The supporting infrastructure matters too. Your Google Business Profile and local SEO feed branded discovery, your book-direct conversion work decides whether the assisted traffic actually completes, and your content and reputation program keeps the whole engine fed. Content ROI is never one page in isolation. It is the system.
Want me to run this on your content?
If you have a pile of articles and no idea which ones touch a booking, that is exactly the audit I love doing. I will build the assisted-booking model on your real data, separate the contributors from the peacocks, and hand you a prioritized list of what to scale, what to re-angle, and what to quietly let go. Book a free intro call and bring your messiest content library. The messy ones are the most fun to untangle.