Your Search Logs Are the Best Product Doc You're Not Reading
A client asked: "What are our customers actually searching for?" I pulled up Elasticsearch and exported the top 40 zero-results queries from the past week. Three of them were exact product names. In stock. Just written differently than the catalog.
We'd spent three hours discussing a homepage redesign. Then I opened that list.
Ecommerce teams pour money into GA4, heatmaps, session recordings. They build funnels and look for where users "drop off." Meanwhile, the most direct signal from customers sits in your logs: what they actually typed into the search bar. Unread.
Site search logs are the only product document your customers write themselves. No UX filter, no marketing polish. Just: what they wanted, how they named it, whether they found it.
I've worked with catalogs ranging from 10,000 to 30,000 SKUs. Every time I open ecommerce site search analytics on a new project, I find the same things: products in stock that can't be found, terms customers use that the catalog doesn't, queries that return results nobody clicks.
Those are three different failure types — and each one needs a different fix.
Zero-results queries: the product is there, search doesn't know it
Zero results don't usually mean "we don't carry this." They mean "we carry it but it's named differently."
On a 28,000-SKU project, we pulled all unique zero-results queries over 30 days: 340 of them. About a third were product names that existed in the catalog — just in a different format. "iphone 14 pro max" vs "Apple iPhone 14 Pro Max 256GB." A known brand abbreviation that didn't match the full name in the index.
Zero-results queries are losses you can quantify. If search drives 15–20% of sessions and a zero-result page converts at 10× worse than a normal search result, then 300 zero-results queries a month is real money sitting on the floor.
But zero-results are only the most visible failure type. There are two less obvious ones.
Low-engagement results: search answered but nobody clicked
These are queries where Elasticsearch returned something — but click-through is near zero.
This happens for a few reasons. The search returns irrelevant matches (searching "black iPhone case," getting a green one because "iPhone" appears in the description). The first page is full of out-of-stock products. Or the customer is searching a category ("laptops under $700") but getting individual product listings with no price filter in sight.
These queries don't show up in zero-results reports. Technically, search worked. Behaviorally, it's broken.
Finding them is straightforward: pull queries with click-through rate below 5% and at least 20 occurrences per month. In Elasticsearch that's an aggregation on the query field combined with a click event from your analytics. If you don't have click tracking on search yet — that's the first thing to add. Without it, your search analytics is half-blind.
Repeated searches in a session: the clearest failure signal
A user searches "office chair," browses results, goes back, searches again: "office chair ergonomic." Then again: "standing desk chair."
Three searches on the same topic in one session is a search failure. Not a complete one (they didn't leave immediately), but search didn't answer on the first try.
You find these via sessionId. If more than two searches with semantically similar queries happen in one session, that's a candidate for investigation. Usually the cause is missing facets (no price filter, no category refinement) or search not understanding attributes ("under $700" as a price intent, not a keyword match).
This is a signal for whoever designs search UX and facets — not just the developer who maintains the index.
How to pull this in five minutes
The quickest method: export from Kibana or query the index directly. In Elasticsearch, query logging via index.search.slowlog.threshold.query.warn: 0s writes every query to the slowlog regardless of response time.
A cleaner approach is logging search events to a dedicated index via middleware: query text, result count, userId, sessionId, timestamp. That's about 20 lines of PHP and gives you full control over what you capture.
Minimum viable starting point:
top-50 queries with 0 results, last 30 days
top-50 queries with >0 results and click-through below 5%
queries appearing more than 2× in the same session
The first export takes five minutes. The analysis takes an hour. That hour is worth more than a week of redesigning the category page.
What we changed and what happened
On the 28k-SKU project, we took the top-100 zero-results queries and worked through them in three passes.
First pass: queries containing product codes. 23 codes that customers knew but the catalog didn't have indexed. We added them to the article field and reindexed. Zero-results on product codes dropped from 18% to 3% in a week.
Second pass: brand name variants. We added 45 brand synonyms — not rebuilding the Elasticsearch config, just adding to the synonym dictionary that was already in place. (More on the synonyms strategy for ecommerce search.) Zero-results dropped another 6%.
Third pass: category queries with low click-through. The problem wasn't in search at all — "laptops under $700" had no price facet on the results page. We added quick budget filters.
Total after four weeks: zero-results rate from 22% to 13%, search-to-cart conversion up 1.7 percentage points. No architecture rewrite. Just reading logs and making targeted fixes.
Who should read the search logs
It's not only an engineering task.
A merchandiser who knows the product catalog will read the logs and immediately spot things like: "We have this but it's in the wrong category" or "Customers call this a thing we've never used in product copy." Faster than any algorithm.
A content writer will see terms customers use that don't appear anywhere in descriptions. That's both an SEO signal and a content brief.
The developer sees technical failures: slow queries, patterns that stress the cluster, cases where fuzzy matching returns garbage.
One document, three audiences. The problem is that typically only developers ever see it — and only when something breaks.
Five metrics to watch continuously
If you're building a search monitoring setup from scratch, start here:
- Zero-results rate. Percentage of queries returning no results. A well-tuned search: ≤5%.
- Click-through rate. Share of queries that result in at least one product click. Below 40% suggests relevance or ranking issues.
- Search refinement rate. Share of sessions with repeated searches. Above 15% means search isn't answering on the first try.
- Search-to-cart conversion. Conversion from search to add-to-cart. The primary metric for search as a revenue driver.
- Top-10 zero-results queries, weekly. Not a metric — a live list. Review weekly, decide: synonym, rename, or create.
Search analytics isn't a quarterly audit. The logs write themselves constantly. Customers keep bringing new terms. The catalog changes. An hour per week on these five signals is worth more than a seasonal search architecture review.
The most honest product document in your ecommerce isn't the customer journey map your designer drew. It's what customers type into the search bar right now.