Every generic playbook says the same thing: install a heatmap tool, turn on GA4, run some A/B tests. I use all of those. None of them is where the analysis starts.
It starts with a question about the visitor, not the site: what did this person type into Google, and did the page they landed on keep the promise that query made?
That is the whole framework. Navigation is a promise the site makes to search. When someone searches “cold hardy privacy trees” and lands on your site, they expect a path to cold hardy privacy trees. If the path they get is a 40-item catalog sorted the way you organize your greenhouses, the promise is broken before they scroll.
The owner blamed checkout. The data blamed the menu.
The nursery sits in Oregon’s high desert and runs on Shopify. It sells to two very different buyers. Retail gardeners with $42 carts, and commercial contractors and landscapers buying windbreaks, screening hedges and drought-tolerant ground cover by the pallet. Contractor orders averaged $3,800.
The owner’s theory was specific: “People add $1,500 in trees to the cart and abandon at checkout because of the shipping calculator.”
Search Console open in one window, GA4 in the other, the story was different. Of 14,200 monthly sessions, fewer than 180 ever started checkout. Whatever the shipping calculator was doing, it was doing it to a tiny fraction of visitors. The site was not failing at the last step. It was failing at the first one.
The main navigation was built around the nursery’s physical layout: Perennials, Trees, Shrubs, Custom Orders. Commercial buyers do not search by botanical category. They search by the job and the site conditions. “Wind resistant shade trees.” “Bulk drought tolerant ground cover.” “Cold hardy privacy trees.” Those queries carried the money, and none of them had a home in the menu.
What they searched
“wind resistant shade trees”
1,840 clicks a month. A contractor on a job site with a spec to meet.
What the menu offered
Shop All
What they needed
Windbreaks
One tap. Species, hardiness zone, container size, availability, request a bid.
Three layers of user behavior data, read in this order
I look at behavior data in a fixed order, because each layer only means something in light of the one before it. Path data without intent data tells you people wandered. It cannot tell you they were lost.
Search Console shows what visitors came for
One cluster, “wind resistant shade trees” and its variants, sent 1,840 clicks a month. Every one of them landed on /collections/trees. That is the gap in one line: a visitor with a precise need, delivered to a page with no idea what that need was.
GA4 shows where they went once they landed
Bounce rate on /collections/trees was 74.2 percent. Average engagement time was 14 seconds. Of the 1,840 visitors, 112 reached any product detail page. The rest left from the collection page, or bounced around the menu and then left.
Fourteen seconds is not a person reading. It is a person scanning for the thing they searched, not finding it, and leaving.
Clarity and Hotjar recordings show why they gave up
I watched 150 recordings, and I watched mobile first because 61 percent of the commercial traffic was on a phone.
The pattern repeated so often it got boring. Open the nav drawer. Tap Shrubs. Scroll past fifteen products that have nothing to do with wind. Back. Open the drawer again. Tap Trees. Scroll. Rage-click a category heading that looks like it should filter and does not. Exit. The average visitor opened the navigation drawer 3.2 times in a session. That is a person asking the menu the same question three times and getting the same wrong answer.
Recordings do not give you a number you can put in a report. They give you the thing the numbers cannot: what the 74 percent looked like while they were leaving.
| Layer | Tool | What it showed | What it cannot tell you |
|---|---|---|---|
| Intent | Search Console | 1,840 clicks a month for one job-specific cluster, all landing on a generic collection page | Whether the page failed them once they arrived |
| Path | GA4 path exploration | 74.2% bounce, 14 seconds, 112 of 1,840 reached a product | What they were looking for while they bounced |
| Friction | Clarity, Hotjar | Menu opened 3.2 times a visit, rage clicks on category headings | Why they never tried site search |
What behavior data cannot tell you, and who can
This is the section most write-ups skip, and it is the one an experienced reader looks for first.
Behavior data tells you where people went and where they stopped. It never tells you why. Clarity and GA4 showed that 88 percent of arriving commercial buyers never touched the site search bar. That is a fact. Here are two explanations for it, and the data cannot pick between them: contractors did not trust a basic Shopify search to handle trade specs, or they expected a curated catalog organized by planting zone and gave up when they did not see one.
Quantitative data earns you a hypothesis. It does not earn you a decision. So before anyone touched the navigation, we got on the phone with three of the nursery’s top commercial accounts. The answers were unanimous and they came fast.
They don’t browse, they spec. A contractor is standing on a job site with a phone, looking for species that meet a municipal or client requirement, something like “60 percent drought-tolerant native ground cover for a commercial HOA.” Nobody is looking for inspiration.
Internal search was a dead end. Typing “windbreak” into the default Shopify search returned individual product pages that happened to contain the word in a description, not a filtered list showing availability and container sizes. So they stopped using it. That is what the 88 percent was.
They had defaulted to calling. When the catalog made finding spec-compliant stock tedious, they gave up and phoned the front desk: “What do you have in stock for a privacy hedge?” The menu was not only losing online orders. It was clogging the farm’s phone line with sorting questions a menu should answer.
Was the lift just spring? Controlling for seasonality
Nursery buying is seasonal, and spring demand is not a bump, it is a cliff. Any 30-day before-and-after on a plant business carries the risk that the calendar moved the numbers, not the navigation. If you read a case study on a seasonal business that does not address this, close it.
We did not compare the post-launch window to the 30 days before it. We used two controls.
Same window, prior year. Organic traffic was up 12 percent year over year, which is about what seasonal lift and a year of SEO would predict. Commercial bid submissions were up 450 percent over the same window the year before, 4 to 22. Seasonality explains a marginal rise in foot traffic and seed orders. It does not explain a 4.5x jump in commercial bids.
Behavior within the same cohort. Seasonality adds visitors. It does not fix a landing page. The bounce rate drop and the 185 percent rise in product detail views happened inside the same organic-search cohort landing on the same collection pages. Those people were not arriving because it was spring. They were finally finding what they came for.
Build the tracking before you touch the design
The audit surfaced a problem that came before all of this. GA4 had zero key events. Fourteen thousand sessions a month, and the site was not recording a bid form submission, a phone tap or a spec-sheet download as anything more than a page view. The surgery clinic I audited earlier this month had the same hole, and it is the most common finding I make.
You cannot analyze a journey whose destination was never defined. Half of “analyzing user behavior” is admitting the tracking does not exist and building it before touching design.
So the first week of the project was not design. It was a clean Google Tag Manager container and three GA4 key events:
- Commercial bid form submissions, fired on the successful form submit and the trade-portal thank-you page.
- Phone taps, click-to-call on every
tel:link in the mobile header, footer and product pages. - Spec-sheet downloads, link-click triggers on plant care guides, zone suitability specs and wholesale availability PDFs.
Then we let it run and recorded the baseline before the new menu went live. Without that week, every number later in this article would be a guess dressed up as a result.
Rebuild navigation around the highest‑value journeys, not the biggest audience
Retail traffic was bigger. Retail carts were $42. A single contractor order for windbreak hedging averaged $3,800, and the highest-value query clusters carried average order values of $4,500 (privacy trees) and $2,200 (drought-tolerant ground cover). Commercial buyers were 80 percent of the farm’s revenue.
So the retail pages did not get the first pass. Every hour went to the commercial journey, because that is where a broken promise cost the most. It is the same logic I used to score the roofing audit: rank the problems by what each one costs the sale, not by how many people see it.
Before: built from the org chart
- Trees 40 products, alphabetical
- Shrubs
- Perennials
- Custom Orders
After: built from the queries
- By Project Need PrimaryPrivacy & Screening · Windbreaks · Low-Water & Drought Native
- Plant Finder by Zone
- Commercial & Wholesale Bids
Nothing else changed. Not the checkout, not the shipping calculator, not product titles, not pricing. If more than one thing changes, you cannot tell which one worked, and you have learned nothing you can use on the next site.
One navigation change, a 30‑day window, and the results
Thirty days. Three metrics, chosen before launch so we could not move the goalposts after: bounce rate on the target collection pages for organic landing traffic, with a goal of under 50 percent; click-through from the navigation menu to product detail pages; and commercial bid submissions.
Day 30 after launch. Eighteen additional bids at a $3,800 average is roughly $68,000 in bid pipeline in the first four weeks.
Bids, not closed revenue. I do not report closed revenue on a 30-day window because a commercial planting job closes on a longer cycle than that, and I would be guessing. I wrote about the difference between traffic and leads in an earlier article; the difference between bids and revenue deserves the same honesty.
The shipping calculator never got touched.
The seven-step loop for analyzing your own site’s user journeys
- Intent first. Search Console, non-branded, clustered by the job the searcher wants done. Note where each cluster lands.
- Path second. GA4 path exploration from those landing pages. Bounce, engagement time, and how many reach a product or service page.
- Friction third. Recordings, mobile first. Watch until the pattern bores you. That is when you have it.
- Write down what the data cannot prove. Then go find out from a human.
- Check the tracking exists. If the destination is not a key event, build it before anything else.
- Rank by the cost of the sale. Fix the journey that loses the most money per visitor, not the one with the most visitors.
- Change one thing. Set the metrics and the window before launch. Make the call at the end of the window.