How to sort search queries by intent, and explain every call
An intent breakdown is only as good as your answer to one question: why is this query in that bucket? If you can't answer it, nobody trusts the rest.
At a previous company I built an intent classifier for Search Console data. What made it trustworthy wasn't the model. It was the order things ran in and the paper trail they left. Here's the approach I'd use again.
Run the steps in a fixed order
Each query goes through a series of steps, and the first one that's sure wins. Later steps only see what earlier ones couldn't place.
- Your brand. Your company and product names, including common misspellings. Brand is checked first because it's the easiest to get right and the most expensive to get wrong.
- Rules. Plain patterns you write: "pricing", "plans", "vs", "alternative to" mean buying; "free", "template", "what is" usually don't. Rules are fast, cheap, and completely predictable.
- Manual fixes. Specific queries a person has moved by hand. These always beat the model.
- A model for the rest. Whatever your rules don't cover goes to a language model with your tier definitions. Only accept its answer above a confidence bar; below that, leave the query unplaced rather than guess.
- A fallback. Simple heuristics for leftovers, such as question words pointing to learning. Anything still unplaced is labelled as such, not quietly dumped into a tier.
The order is the important part. Rules and manual fixes are things you decided on purpose, so they should never be overruled by a model's guess.
Record why every query landed where it did
For every query, store three things alongside the tier: which step placed it, how confident that step was, and what matched (the rule, the brand term, or the model's one-line reason).
This sounds like overkill until someone points at a surprising number. Being able to say "that one matched our pricing rule" or "the model placed that, at low confidence, and we've since fixed it" is what turns a black box into a report people believe.
It also shows you where to work. If most of your traffic is placed by the model at middling confidence, write more rules. If one rule keeps catching the wrong queries, you'll see it.
Don't lose the queries Google hides
Search Console doesn't show every query by name. Low-volume searches are hidden for privacy, but their clicks still count in your totals. If you only add up the queries you can see, you'll undercount, and the gap changes from month to month.
I worked out the hidden amount as the property's total clicks minus the sum of the visible queries, and gave it its own line. I treated it as low intent: the searches that matter most to buyers, like your brand or "your product pricing", tend to have enough volume to show up by name.
Version your rules
Your rules will change. You'll add a competitor, catch a misspelling, move a phrase from one tier to another. That's healthy, but it breaks comparisons. If this month used new rules and last month used old ones, part of any change is just the rules.
Keep a version number on your rule set, and only compare periods sorted with the same version. When you update the rules, re-sort the earlier periods too, then compare. It's the difference between "high intent rose 3 points" and "high intent rose 3 points, or we changed a rule; we're not sure which."
Simple rules get you most of the way
Late in the project I rebuilt the core of it as plain pattern rules in a shared dashboard, with no model at all, so anyone could check it without logging into anything. It landed within a point or two of the full system on overall intent share.
The lesson: careful rules for your brand, your buying words, and your noise do most of the work. The model earns its place on the long tail, and on the channels where people write in full sentences, like chat and form messages, where patterns struggle.
The short version
- Brand first, then your rules, then manual fixes, then a model, then a fallback.
- Store which step placed each query, how sure it was, and why.
- Account for the queries Search Console hides.
- Version your rules, and only compare like with like.
- Start with rules. Add a model for what they miss.
Questions
Do I need machine learning to classify search intent?
No. Careful rules for your brand, buying words, and noise do most of the work. A language model earns its place on the long tail, and on channels like chat and forms where people write full sentences.
What are hidden queries in Google Search Console?
Search Console doesn't list low-volume queries by name, for privacy, but their clicks still count in the property's totals. Work out the hidden amount as total clicks minus the sum of visible queries, and report it as its own line.
How do I compare months after changing my intent rules?
Give your rule set a version number and only compare periods sorted with the same version. When you change the rules, re-sort the earlier periods with the new version before comparing.
Why record why each query was classified?
So you can answer “why is this query in that bucket?” when someone questions a number. It also shows where your rules are weak: lots of low-confidence model calls means you need more rules.