Classifying search queries by topic
The output: every Search Console query labelled with a topic, an intent and a confidence, with the uncertain ones in a review queue rather than in a report.
- Topics
- Based on
- Updated
- ·
Inputs
-
A Search Console query export: query, page, impressions and clicks. The source is never modified.
-
Term lists per topic: each topic's canonical terms, aliases and URL slugs, kept as files.
-
A modifier list: question words and informational phrases that mark informational intent without replacing the topic.
-
An exclusion list: generic modifiers, brand and navigational queries and single letters that are not reported as topics.
Procedure
Normalise the query
Lowercase, surplus spaces removed, the same handling of diacritics as in the term lists. The original query stays on the row.
Match each source separately
The query is compared with the canonical terms, the aliases and the URL slugs separately, and each match is recorded as its own evidence. An alias is not a term and a slug is not a term: the evidence does not mix.
Resolve the intent in a written order
When there are several matches, a written priority order picks the intent: a professional's page slug beats a professional title, for example. The modifier list adds informational intent beside the topic. Every rule is a test.
Assign a confidence and a review flag
The kind of match sets the confidence. An unclassified query with many impressions that is not brand goes to the review queue; so does a price query and a query on which two sources disagree.
Decide reportability separately
A second step turns the classified rows into report fields: reportable topic, exclusion reason and report layer. A high confidence does not make a row reportable, and an accepted classification is not a report. Only the main-summary layer marked reportable by default reaches the report.
Compare with the previous classifier before switching
The new classifier runs on the same sample as the old one, and every difference is classed: a defect, an acceptable semantic difference or a rule deferred. The acceptance is written down, and the classifier's version travels on every row.
Outputs and how to read them
-
A query row: topic, topic group, intent, modifier, matched term, confidence, reportability, exclusion reason, review bucket and classifier version. The row count is preserved unless a filter is explicit.
-
A review queue: the unclassified and conflicting queries with their reasons, for a person to decide. A candidate in the queue is not an accepted term until decided.
-
A main summary for reporting and the secondary observations kept apart: the report does not redefine the classification.
Failure modes
-
The query text is read as evidence of the topic: a term appearing in a query does not yet mean the page answers it.
-
Aliases leak into the term list, and a topic grows without new content.
-
Confidence and reportability are confused: a sure match on a brand query lands in the topic report.
-
The review queue is accepted whole: candidates become rules without a decision.
-
The classifier is replaced without the comparison, and the report's time series breaks unnoticed.
Where it is used
In the organic search reporting of a large healthcare website: the weekly and monthly reports read the main summary, the review queue feeds the term lists, and the same data always gives the same result. The classification is the core of the Searchint work.