
Ecommerce Keyword Research - How to Map Queries to Categories, Filters and Products
You do ecommerce keyword research so that every group of queries has one landing page. The mapping rule: a broad query goes to a category, a specific model to a product page, a question to a guide, and a category with a brand or attribute gets its own indexable filter page only when it has demand (it appears in Google's autocomplete or has at least about 50 searches a month) and at least about 10 products. Size, price and sorting stay as filters without indexing. For a store with a few hundred products, free tools are enough: Search Console, Keyword Planner and Google autocomplete. Senuto, Ahrefs or Semrush pay off only with hundreds of categories or for competitor analysis.
How to do ecommerce keyword research and map queries to categories, filters, product pages and guides: a mapping rule with thresholds, a keyword map from 1,109 Google suggestions and real store product counts, Search Console, Keyword Planner, Senuto and Ahrefs with prices, a sheet template and a cannibalisation script.
/// THIS POST IN SHORT
This post covers the query types in a store and where to send them, when a filter deserves its own page, a keyword map for the "hiking boots" category built from 1,109 Google suggestions and product counts in a real store, a comparison with a second category (coffee machines), a tool comparison with prices, cost at two scales, a mapping sheet template and a script that detects cannibalisation in Search Console data. The data comes from the Polish market (queries in Polish, translated here), but the method works the same in any language.
Do you need a paid tool - the first decision
The most common question before research is: Senuto, Ahrefs or Semrush? Often none of them. If the store is already live, your most valuable queries are in Search Console (queries Google already shows you for) and in the store's internal search (what people ready to buy are looking for). A paid tool adds demand estimates for queries you do not appear for yet, plus competitor data.
| Tool | What it gives you | Demand (numbers) | Price (Oct 2026) | When it is enough |
|---|---|---|---|---|
| Google Search Console | Queries the store already appears for, with clicks and position | Your store's impressions, not the whole market | free | Always - the starting point |
| The store's internal search (GA4) | Queries buyers type into the store (the view_search_results event) | Number of searches in the store | free | For finding missing categories and filters |
| Google autocomplete | Current phrasing and modifiers (brand, attribute, gender) | No numbers, only order | free | For building the category and filter tree |
| Google Ads Keyword Planner | Monthly search estimates and keyword ideas | With low ad spend often only ranges | free (needs a Google Ads account with billing details) | For priorities, when ranges are enough |
| Senuto | Polish keyword database, competitor visibility, seasonality | Estimates for Poland | from PLN 107.50 net/month (Lite plan, annual billing) | Stores with hundreds of categories, Polish competitor analysis |
| Ahrefs | Global database, links, keyword gaps against competitors | Estimates, including Poland | from USD 129/month (Lite) | Competitor and link analysis, foreign markets |
| Semrush | Global database, keyword gaps, rank tracking | Estimates, including Poland | from USD 139/month (USD 117.33 with annual billing); free plan: 10 reports a day | As above, an alternative to Ahrefs |
I checked the prices on the vendors' sites on 12 October 2026. Search numbers from every tool are estimates, and tools can differ several times over for the same query, so I use them to set the order of work, not as a traffic forecast. I cover research for AI search and the queries no tool will show in the post on keyword research for AI.
Query types in a store and their landing page
Each query type has its place in the store structure. The share in the third column comes from my set of Google suggestions for the Polish query "buty trekkingowe" (hiking boots): 333 suggestions from queries without extra modifiers, method below. One suggestion can have several types, e.g. "women's Salomon hiking boots".
| Query type | Example | Share of suggestions | Landing page |
|---|---|---|---|
| Brand | salomon hiking boots | 39% | Indexable brand filter within the category |
| Gender or age | women's hiking boots | 35% | Subcategory |
| Attribute (height, membrane, colour) | high hiking boots, gore-tex | 23% | Subcategory (type) or indexable filter (attribute with demand) |
| Size | women's hiking boots size 38 | 13% | Usually a filter without indexing |
| Price, sale | cheap hiking boots, sale | 5% | One sale page, not a price filter |
| Pre-purchase question | how to choose hiking boot size | 5% | A guide linking to the category |
| Another store's name | decathlon hiking boots | 5% | None - a navigational query for a competitor |
| Use | hiking boots for the mountains | 5% | Category content or a guide |
| City | hiking boots łódź | 2% | Only if you have a physical store in that city |
| Specific model | salomon x ultra 5 gtx | outside this set | Product page |
The takeaway: in this category 59% of suggestions (197 of 333) contain a brand or a gender. A "category → gender → type" structure plus indexable brand filters covers most of the demand before you write any text.
When a filter deserves its own page
A filter gets its own indexable URL with a unique title and H1 when it meets three conditions at once. This is my rule from store audits:
- 1.Demand: the query appears in Google's autocomplete or has at least about 50 searches a month in Keyword Planner or another tool.
- 2.Range: the page has at least about 10 products. With fewer, the listing looks thin, and after a few models sell out the page becomes empty.
- 3.Uniqueness: the filter answers a different intent than the parent category and can have its own title and H1 (e.g. "Women's Salomon hiking boots"), not just a "- filter" suffix.
If any condition is not met, the filter works for the shopper but is not indexed and has no links in the HTML. I cover the technical side (noindex, canonical, robots.txt, filter URLs) in the post on ecommerce faceted navigation and SEO, and the order of all the work in the ecommerce SEO strategy.
A keyword map for the "hiking boots" category
How I collected the data: on 12 October 2026 a script pulled Google suggestions (Polish language, Poland) for 158 queries: the query itself, the query + every letter and digit, the query + "women's", "men's", "children's" with letters, and with questions ("which", "how", "should", "best"). That gave 1,109 unique suggestions. I calculated the shares of query types only on the 333 suggestions from "query + letter" requests, because requests with "women's" or "men's" would artificially inflate the gender share. I checked product counts the same day in the women's hiking boots category of eobuwie.pl, a large Polish footwear store (the "Produkty" counter on the page).
| Level | Page | Queries from suggestions | Products (eobuwie.pl, women's) | Decision |
|---|---|---|---|---|
| Category | Hiking boots | hiking boots, which hiking boots to choose | - | Main category |
| Subcategory | Women's / men's / children's | women's, men's, children's hiking boots | 480 women's, 804 men's | Subcategories |
| Subcategory | High / low / sandals | high, low, ankle hiking boots | 163 / 181 / 121 | Type subcategories |
| Brand filter | Salomon | women's salomon hiking boots (the most frequent brand in suggestions) | 57 | Index |
| Brand filter | CMP, Columbia, Keen | cmp, columbia, keen hiking boots | 74 / 36 / 34 | Index |
| Brand filter | The North Face, Salewa, Jack Wolfskin, Merrell | the north face, salewa, jack wolfskin hiking boots | 18 / 14 / 12 / 10 | Index, close to the threshold |
| Combined filter | High + Salomon | high salomon hiking boots | 21 | Index |
| Combined filter | Low + Salewa | low salewa hiking boots | 7 | Below the threshold: no indexing |
| Attribute filter | Membrane / gore-tex | gore-tex, waterproof, membrane hiking boots | not checked | Index if at least 10 products |
| Colour filter | Black | black women's hiking boots | 130 | Index black only; other colours are rare in suggestions |
| Size filter | 36-42 | women's hiking boots size 38 | changing | No indexing |
| Guide | How to choose hiking boots | how to choose the size, should hiking boots be bigger, how to break them in | - | A guide linking to subcategories |
What the store itself shows: eobuwie.pl indexes brand and colour filter pages with their own heading (e.g. "Women's Salomon hiking and trekking boots"), the canonical points to the filter itself, and an empty filter for a brand the category does not carry returns a 404 status in the raw HTML instead of an empty page. In the rendered category HTML, links pointed only to a few selected filter combinations, e.g. "Black women's hiking boots". That is a good model: selected filters are indexed, not every combination.
A second category for comparison: coffee machines
The same script for the Polish query "ekspres do kawy" (coffee machine) returned 581 unique suggestions (360 in the set without modifiers). The demand structure is completely different:
| Query type | Hiking boots | Coffee machines | What it means |
|---|---|---|---|
| Gender or age | 35% | 0% | Electronics has no gender subcategories |
| Brand | 39% | at least 28% | In both categories brand is the main filter to index |
| Machine type (capsule, espresso, bean-to-cup, with grinder) | - | 14% | Type is a subcategory, the equivalent of "high / low" for boots |
| Questions, rankings, reviews | 5% | 8% | Comparisons and rankings matter more in electronics |
| Another store's name | 5% | 8% | Media Expert, Euro RTV AGD - navigational queries |
The takeaway: do not copy the filter structure between categories. In boots the subcategories are gender and height, in coffee machines the machine type, and queries like "coffee machine ranking" or "which one to choose" need a comparison guide, because a category listing does not answer them.
The cost of research at two scales
Estimates from my quotes (October 2026), excluding the cost of building new categories in the store:
| Assumption | Store A: 500 products, 40 categories | Store B: 20,000 products, 600 categories |
|---|---|---|
| Tools | Search Console, GA4, Keyword Planner, autocomplete - free | Plus a paid tool, e.g. Senuto Basic (PLN 224.17 net/month with annual billing) or Ahrefs Standard (USD 249/month) |
| Collecting and grouping queries | 6-10 hours | 30-50 hours, mostly scripted |
| Mapping to the structure and filter decisions | 4-6 hours | 20-40 hours |
| Result | A map of 150-300 queries, 10-30 indexable filters | A map of several thousand queries, hundreds of indexable filters |
| Updates | Once a quarter, 2-3 hours | Monthly for seasonal categories |
The takeaway: in a small store a paid tool rarely pays back, because you will make most decisions from free data. In a large store the tool costs a fraction of the work it saves and spares dozens of hours of grouping queries.
A mapping sheet template
The sheet is one table in which every query has exactly one landing page. The columns I use, with example rows from the map above (the URLs are illustrative):
query;type;demand_source;demand;products;landing_page;page_type;index;noteshiking boots;category;autocomplete;seed query;1284;/hiking-boots;category;yes;womens hiking boots;gender;autocomplete;top 1;480;/hiking-boots/women;subcategory;yes;womens salomon hiking boots;brand;autocomplete;top 3;57;/hiking-boots/women/brand:salomon;filter;yes;H1 with brandlow salewa hiking boots;brand+attribute;autocomplete;-;7;/hiking-boots/low;filter;no;under 10 productswomens hiking boots size 38;size;autocomplete;-;changing;/hiking-boots/women;filter;no;size not indexedhow to choose hiking boot size;question;autocomplete;-;-;/guide/hiking-boot-size;guide;yes;link to subcategories
The rules: one query has one landing page, one page has one main query and a few secondary ones, and the "index" column follows the three-condition rule. The sheet is also a task list for the developer: every "yes" next to a filter means its own title, H1, an HTML link and a place in the sitemap.
Cannibalisation: how to detect it in Search Console data
Cannibalisation in a store is when Google alternates between the category, a filter and a product page for the same query, and none of them ranks high. The script below pulls query-page pairs for 90 days from the Search Console API, normalises URLs and lists queries where at least two pages get a significant share of impressions.
# pip install google-api-python-client google-auth pandasimport re, datetime as dtfrom urllib.parse import urlsplitimport pandas as pdfrom google.oauth2 import service_accountfrom googleapiclient.discovery import buildSITE = "sc-domain:yourstore.com"creds = service_account.Credentials.from_service_account_file( "sa.json", scopes=["https://www.googleapis.com/auth/webmasters.readonly"])gsc = build("searchconsole", "v1", credentials=creds)end = dt.date.today() - dt.timedelta(days=3)rows, start = [], 0while True: body = {"startDate": str(end - dt.timedelta(days=90)), "endDate": str(end), "dimensions": ["query", "page"], "rowLimit": 25000, "startRow": start} batch = gsc.searchanalytics().query(siteUrl=SITE, body=body).execute().get("rows", []) rows += batch if len(batch) < 25000: break start += 25000def norm(url): # drop sorting, tracking and pagination parameters and the trailing slash p = urlsplit(url) return (p.netloc + p.path).rstrip("/").lower()df = pd.DataFrame([{"query": r["keys"][0], "page": norm(r["keys"][1]), "impressions": r["impressions"], "clicks": r["clicks"], "position": r["position"]} for r in rows])df = df.groupby(["query", "page"], as_index=False).agg( impressions=("impressions", "sum"), clicks=("clicks", "sum"), position=("position", "mean"))df["share"] = df["impressions"] / df.groupby("query")["impressions"].transform("sum")total = df.groupby("query")["impressions"].transform("sum")cand = df[(total >= 200) & (df["share"] >= 0.2)]multi = cand.groupby("query").filter(lambda g: len(g) >= 2)print(multi.sort_values(["query", "share"], ascending=[True, False]).round(2).to_string())
How to read the output: if for "women's salomon hiking boots" the brand filter has 55% of impressions and a single Salomon product page has 40%, the filter is too weak (few products, a generic title) or the product page has the broad query in its title. The fix follows from the map: strengthen the landing page (title, H1, internal links) and remove the query from the other page's title and heading.
Production pitfall: false cannibalisation from parameter URLs
The most common mistake in this analysis is Search Console data without URL normalisation. The same category appears as /hiking-boots, /hiking-boots/, /hiking-boots?sort=price and /hiking-boots?page=2, so the report looks as if four pages are fighting over one query. Someone "fixes" it with redirects or rewritten content, while the problem exists only in the spreadsheet. That is why the norm() function in the script removes parameters and the trailing slash before calculating anything.
The opposite also happens: if after normalisation you still see parameter URLs with many impressions, that is not an analysis error but a sign that Google is indexing sorting or filters it should not. Then the problem is technical, not keyword selection.
What not to do
- Do not choose queries by search volume alone. A high-demand query with no products in your store brings traffic that will not buy.
- Do not create a page for every brand and every colour. Without demand and without 10 products, that means thousands of thin pages.
- Do not target queries with another store's name ("decathlon hiking boots"). They are navigational - the searcher wants a specific store.
- Do not point one query at both the category and a product page. The product page should rank for the model, the category for the broad query.
- Do not copy the filter structure from one category to another - as the boots vs coffee machines comparison shows, demand looks different in every category.
- Do not treat tool numbers as a traffic forecast. They are estimates for setting priorities.
FAQ
If you want me to prepare a keyword map and filter decisions for your store, see ecommerce SEO.
/// RELATED_SERVICES
Need these concepts implemented? Explore the services related to this topic.
Technical SEO
Technical SEO that makes your site fast, crawlable and easy to understand — for Google and for AI search engines. Audits, Core Web Vitals, Schema.org, migrations and link building.
View serviceServiceContent Marketing & SEO
Content marketing for SEO and GEO: content strategy, expert articles and blog management. Content that ranks in Google, gets cited in AI answers and turns readers into customers.
View service/// SOURCES
- 01Google Search Central - Help Google understand your ecommerce site structure
- 02Google Search Central - Managing crawling of faceted navigation URLs
- 03Google Ads Help - Use Keyword Planner
- 04Search Engine Land - Google throttling Keyword Planner data for low-spending accounts (2016)
- 05Google Analytics Help - Enhanced measurement events (site search)
- 06Google Search Console API - Search Analytics: query
- 07Senuto - cennik (pricing)
- 08Ahrefs - pricing
- 09Semrush - prices
/// RELATED_RECORDS
Ecommerce Faceted Navigation and SEO - Which Filters to Index and Which to Block (noindex, canonical, robots.txt)
Which ecommerce filters to index and which to block: a rule with thresholds, noindex vs canonical vs robots.txt vs nofollow in one table, a check of filters in 11 Polish stores, Shopify, WooCommerce, PrestaShop and IdoSell defaults, URL counts at two scales, robots.txt rules, a script and two pitfalls.
Ecommerce SEO Strategy - a 3, 6 and 12-Month Roadmap
How to build an ecommerce SEO strategy ranked by revenue: a one-day diagnosis from Search Console, a priority matrix, a 3, 6 and 12-month roadmap with KPIs, SEO vs Google Ads cost at two scales, an audit of product data in 26 Polish online stores and a quick-wins script.
Allegro and Amazon in the AI Era - How to Increase Product Visibility on Marketplaces
Allegro's AI Assistant has been open to everyone since 7 May 2026, more than 300 million customers used Amazon's Rufus in 2025, and Amazon blocks ChatGPT's bots. How Allegro relevance works, how to prepare listings for AI assistants, why to combine a marketplace with your own store and how to keep one source of product data.
Signal received?
Terminate
Silence
Initiate protocol. Establish connection. Let's build something loud.
