Ecommerce SEO: category pages, product pages and filters
Ecommerce SEO for web shops: what category and product pages should rank for, how to tame filter URLs, fix duplicate supplier texts and mark up products.
Ecommerce SEO means making a web shop’s category and product pages rank, while keeping the thousands of URLs a shop generates by itself (filters, sorting, variants) from drowning them. Category pages win broad searches, product pages win exact ones, and everything else should either earn its place in the index or stay out.
For speed, headings and www duplicates, see our technical SEO mistakes guide; this post covers only shop-specific SEO.
Quick answer
- Category pages target broad, high-volume searches (“men’s running shoes”). Give them a unique title, a short intro and plain links to subcategories.
- Product pages target exact searches (model, code, brand + model). They need your own description and Product structured data.
- Filters create thousands of URLs. Index only the few combinations people actually search for; keep the rest out of the crawl.
- Copied supplier descriptions make your page identical to dozens of others. Rewrite the products that matter most first.
What should a category page rank for, and what should a product page?
A category page answers a choice: “running shoes”, “office chairs”, “dog food for puppies”. The searcher wants to compare, so the page lists products, links to subcategories and carries 2-4 sentences of intro using the category’s real search phrase, not a wall of SEO text at the bottom.
A product page answers a decision: “Nike Pegasus 41 size 44”, a part number, an EAN. The title carries brand, model and the one attribute people type (size, capacity, colour), never just a supplier code.
Why do filters create so many URLs?
Every filter value that changes the URL creates a new page for Google to crawl. Take an illustrative shop with 40 categories and 5 filters per category (brand, size, colour, price range, material), each with 4 values, where a shopper can pick one value per filter.
Each filter has 5 states (not used, or one of 4 values), so one category has 5^5 = 3,125 combinations. Minus the unfiltered page, that is 3,124 filter URLs per category:
| Filters combined | Combinations per category |
|---|---|
| 1 filter | 5 × 4 = 20 |
| 2 filters | 10 pairs × 16 = 160 |
| 3 filters | 10 × 64 = 640 |
| 4 filters | 5 × 256 = 1,280 |
| 5 filters | 1 × 1,024 = 1,024 |
| Total | 3,124 |
Across 40 categories that is 124,960 filter URLs, before sorting (4 sort orders multiply it to almost 500,000) and pagination. If shoppers can tick several values in one filter, each filter has 16 states and one category reaches 16^5 - 1 = 1,048,575 URLs.
Search demand sits in a handful of these. People search “nike running shoes” or “white sneakers”, rarely “nike white size 44 under €100 leather”. If about 5 filter pages per category have real searches (usually brand and sometimes colour or type), the shop needs 200 indexable filter pages out of 124,960, about 0.16 %. Check demand in Search Console, autocomplete or site search first.
Google calls faceted navigation “by far the most common source of overcrawl issues” that site owners report (Google Search Central blog, December 2024).
What to do with each type of shop URL
The rules below follow Google’s faceted navigation guidance, pagination guidance and canonicalisation guide.
| URL type | Example | What to do |
|---|---|---|
| Category | /running-shoes/ | Index, self-canonical, in the sitemap |
| Filter with search demand | /running-shoes/nike/ | Turn it into a real page: clean URL, own title, H1 and intro, self-canonical, linked from the category |
| Filter without demand | ?size=44, ?price=50-100 | Keep it out of the crawl: disallow the parameter in robots.txt, or keep filters in a # fragment |
| Combinations of filters | ?brand=nike&colour=white&size=44 | Same as above; Google says canonical and nofollow are “generally less effective in the long term” for this |
| Empty combination | a filter with 0 products | Return 404, not a redirect |
| Sort order | ?sort=price-asc | Noindex or block in robots.txt |
| Pagination | ?page=2 | Index, each page canonical to itself, not to page 1 |
| Tracking parameters | ?utm_source=... | Canonical to the clean URL |
Pick one method per URL type: a URL blocked in robots.txt is never fetched, so Google never sees its noindex or canonical. Filter URLs that stay crawlable should use & between parameters and a fixed filter order.
What about supplier descriptions, variants and duplicates?
Supplier texts. Many Croatian shops import the same distributor feed, so dozens of sites carry the identical product description. Your page then offers nothing the others don’t, and Google has no reason to show yours first. Rewrite best sellers and products with search impressions first, adding what only you know (fit, real use, delivery in Croatia).
Variants. When colour and size live on one page, Google’s product variants guide asks for one canonical URL for the product group and a distinct URL that preselects each variant (for example ?colour=green&size=s), with the right price, image and availability. Mark them up with ProductGroup, hasVariant, variesBy and a unique sku or gtin per variant. A product listed in two categories keeps one URL, linked from both.
Which structured data does a product page need?
For a product you sell, Google’s merchant listing documentation requires name, image and offers on the Product, and a price and priceCurrency on the Offer. Recommended: availability, shippingDetails, hasMerchantReturnPolicy, brand, gtin and sku. Category pages and filter pages get BreadcrumbList, not Product.
| Page type | Index? | Title pattern | Structured data |
|---|---|---|---|
| Category | Yes | {Category} - {Shop} | BreadcrumbList |
| Filter with demand | Yes | {Brand or attribute} {category} - {Shop} | BreadcrumbList |
| Product | Yes | {Brand} {model} {key attribute} | Product + Offer, BreadcrumbList |
| Variant URL | No, canonical to the product | Same as product | ProductGroup + hasVariant |
| Sort, other filters, internal search | No | - | None |
| Cart, checkout, account | No | - | None |
How should categories link to the rest of the shop?
Google “can only crawl your link if it’s an <a> HTML element” with an href. Filters built as buttons or scripts suit the URLs you want hidden, but demand pages need plain links with descriptive anchor text (“Nike running shoes”). Link each category to its subcategories and demand pages, and products back through breadcrumbs.
Platform choice changes how much of this you control; our Shopify vs WooCommerce vs custom comparison covers that. In a custom web shop we build the URL rules, canonicals and Product markup into the shop itself, and our SEO services cover the category and product work on an existing shop.
Frequently Asked Questions
Should filter pages be indexed? Only the few with real search demand, such as brand within a category, built as proper pages with their own title and intro. Keep the rest out of the crawl with robots.txt or URL fragments.
Is a duplicate supplier description a penalty? It is not a penalty, but it gives Google no reason to prefer your page over every other shop with the same text. Rewrite your best sellers and products with search impressions first.
Should page 2 of a category point its canonical to page 1? No. Google says not to use the first page of a paginated sequence as the canonical; each page should be canonical to itself.
Related Articles
- Shopify vs WooCommerce vs custom web shop in Croatia
- How much does a web shop cost in Croatia?
- B2B web shop: a wholesale ordering portal
Is your web shop invisible on Google?
Send us the shop’s address; we will tell you which category, filter and product pages hold it back. The first call is free.
Reach us at [email protected] or via the form on our homepage.