Ecommerce SEO: Categories, Filters and Product Pages
Catalogue structure, filter-generated duplicates, canonicals, Product markup, pagination and category copy. The technical calls that decide a store’s search fate.
A shop with 800 products will happily generate 400,000 URLs, and nearly all of them are empty. Colour, size, price and brand filters multiply against each other, every combination gets its own address, and Google burns its crawl budget on pages holding two products instead of the categories that could actually sell. This — not "thin copy" — is what breaks SEO for most stores. Below: how to lay out a catalogue, what to do with faceted navigation, how to mark up a product page, and where category copy genuinely belongs.
90%
of a store’s URLs should stay out of the index
5–15
facets worth opening per category
2.5s
target LCP for a category page
70%
of organic traffic lands on categories
Catalogue structure decides everything else
Before a single meta tag gets written, decide which pages are allowed to exist. A store has exactly three page types that bring organic traffic: the category, the subcategory, and specific facet pages built around real demand. Product pages contribute the long tail, but they are not the base.
| Page type | Example URL | Indexed | Target query |
|---|---|---|---|
| Category | /catalogue/running-shoes | Yes | running shoes buy |
| Subcategory | /catalogue/running-shoes/trail | Yes | trail running shoes |
| Facet with demand | /catalogue/running-shoes/nike | Yes | nike running shoes |
| Facet without demand | /catalogue/running-shoes?color=beige&size=39 | No | no demand |
| Product page | /product/nike-pegasus-41 | Yes | nike pegasus 41 price |
| Sorting, pages 2+ | /catalogue/running-shoes?sort=price&page=3 | No | no demand |
The structural rule: nothing deeper than three clicks from the homepage, and readable URLs with no numeric identifiers. An address like /catalog/index.php?cat=17&subcat=93 functions, but it signals nothing to either a user or a crawler. If you are still choosing a platform, read the guide to building an online store first — migrating from one structure to another costs several times more than getting it right at the start.
Filters: where stores lose their crawl budget
Faceted navigation causes about 90% of technical problems in ecommerce. Six filters with five values each produce over 15,000 combinations for one category. Google does not forbid them from existing, but it has no intention of crawling that volume — it simply stops reaching new products and updated prices.
The working answer is to split facets into three groups and handle each differently.
- 1Facets with real demand (5–15 per category). Brand, gender, type, sometimes one key specification. These get static readable URLs, their own title, H1 and a short intro. They are full landing pages, and in competitive niches they carry most of the traffic.
- 2Facets with no demand but real utility. Colour, size, price band. Keep them as query parameters, canonical to the parent category, and set
noindex,follow. Shoppers filter, the index stays clean. - 3Combinations of two or more filters. Close them entirely:
noindex,followplus a robots.txt pattern block where crawling gains nothing. "Blue running shoes size 39 under $60" will never be a landing page.
<!-- Facet with genuine demand: a real landing page -->
<!-- /catalogue/running-shoes/nike -->
<link rel="canonical" href="https://shop.example/catalogue/running-shoes/nike">
<meta name="robots" content="index,follow">
<!-- Utility filter: not wanted in search results -->
<!-- /catalogue/running-shoes?color=blue&size=39 -->
<link rel="canonical" href="https://shop.example/catalogue/running-shoes">
<meta name="robots" content="noindex,follow">Pagination and sorting without duplicates
Google stopped using rel="next" and rel="prev" back in 2019, so most of the older advice on this is obsolete. The current approach is simpler than it looks.
How to configure listing pages
- Every paginated page carries a self-referencing canonical, not one pointing at page 1
- Pages 2 and beyond stay indexable but carry no category copy and no unique description
- Titles on pages 2+ append "— page 3" so headings are never identical
- Page one lives at the parameterless URL: /catalogue/running-shoes, not ?page=1
- Sort orders (
?sort=price) getnoindex,followwith a canonical to the unsorted version - Infinite scroll is mirrored by real paginated links present in the HTML
- Only first pages of categories and all product URLs go into sitemap.xml
On "view all" pages: if a category holds up to 200 products and the page still renders inside 2.5 seconds, a full listing often outperforms pagination. Above 200 items it is not worth it — mobile LCP falls apart.
Product pages: uniqueness and markup
The manufacturer description sits on 300 sites simultaneously. A store that simply imported a supplier feed does not exist in search results. The minimum that genuinely moves rankings: 80–150 words of your own text, a complete specification table, and at least one photo that did not come from the supplier catalogue.
- Specifications beat prose. People search for "running shoes with cushioning for pavement", not marketing adjectives. A fully populated attribute table produces more long-tail entries than any copywriting.
- Reviews are the cheapest unique content there is. Even three to five reviews per product remove the duplicate-description problem and unlock rating markup.
- Do not delete out-of-stock products. Keep the page live with a clear availability notice and a block of alternatives. Deletion destroys accumulated rankings, and a 404 on a popular product is traffic lost permanently.
- Variants of one product. If the only difference is colour, use one page with a switcher. If the difference is model, sizing system or purpose, use separate pages.
Product markup is not decoration: without it the search result shows no price, no availability and no stars, which hits click-through rate directly. The minimum working field set is below; the full breakdown of types is in our guide to structured data and schema.org.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Nike Pegasus 41",
"sku": "NP41-BLK-42",
"brand": { "@type": "Brand", "name": "Nike" },
"image": ["https://shop.example/img/np41-1.jpg"],
"offers": {
"@type": "Offer",
"price": "129.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://shop.example/product/nike-pegasus-41",
"priceValidUntil": "2026-12-31"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "38"
}
}Category copy: how much, and where
Seven hundred words about "the benefits of running shoes" under a product grid goes unread, and it works less well than most people assume. Google judges a category page primarily by its assortment and filters. Copy still matters — but in a different format and a different place.
- 1
A short block above the grid — 40–70 words
One or two sentences on what is here, with a price range and item count. Not advertising, orientation: "Over 240 trail and road models from $45 to $220, dispatched within one working day."
- 2
A "how to choose" block below the grid — 200–400 words
Three or four practical criteria with specifics. This copy captures informational queries and genuinely helps people decide, so it lifts conversion rather than only rankings.
- 3
An FAQ of 4–6 questions
Sizing, returns, delivery windows, warranty. Add FAQPage markup and you have a shot at occupying more space in the result.
- 4
Links to adjacent categories
A "related categories" block with 5–8 links to sibling sections and top facets. It is navigation and authority distribution into the depth of the catalogue at the same time.
Internal linking does more for a store than any copy: it is what tells Google which pages matter. A product reachable from three category and "related items" blocks gets indexed faster than one that only exists on page five of a paginated grid. The systematic version is in our internal linking strategy guide.
In a store, the catalogue structure is the SEO. Copy supports a structure that is already right; it never rescues one that is wrong.
Frequently asked questions about ecommerce SEO
What should happen to discontinued products?
If there is a direct successor, 301 redirect to the new model. If there is no replacement but the page has traffic and links, keep it reachable with a clear availability notice and a block of alternatives. Only pages with no traffic, no links and no sales history should be removed with a 404, otherwise accumulated rankings are lost for good.
Does every product need a unique description?
For the items that generate most of the revenue, yes — 80–150 words of original text plus a complete specification table. For a long tail of thousands of low-value items, structured attributes and customer reviews are enough, because they create page uniqueness on their own. Mechanically rewriting the manufacturer blurb across an entire catalogue is not economically sensible.
How do you decide which filters to open for indexing?
Look at search volume for the combination of category plus filter value. If "nike running shoes" gets several thousand searches a month, that page should exist as a proper landing page with its own heading and copy. If the combined query gets under 50 searches a month, the filter stays a utility control and is kept out of the index.
Why does a store have many indexed pages but little traffic?
Almost always because filter, sorting and internal-search URLs made it into the index instead of categories. The crawler spends its budget on endless parameter combinations and never gets around to refreshing the pages that matter. The indexing report in Search Console shows this clearly: if known URLs outnumber products by tens of times, that is the cause.
How much does speed affect a store’s rankings?
Speed rarely pushes a page to the top on its own, but a slow category page loses shoppers before they see the first product. Our working target is an LCP under 2.5 seconds on mobile over an ordinary 4G connection. In ecommerce the usual culprits are uncompressed product photography and third-party scripts, not the platform itself.
In short
- Categories and demand-backed facets carry the traffic, not individual product pages.
- Close no-demand filters with
noindex,followand a canonical to the category — never with nofollow. - Every paginated page needs a self-referencing canonical; sort orders do not belong in the index.
- A product page without original text, specifications and Product markup does not compete in search results.
- Internal linking decides which pages Google treats as important — more than any category copy does.
Related reading
Building an Online Store: Platforms, Payments and Delivery
A store is not a catalogue with a button. Here is every moving part, from checkout to stock sync.
Schema.org Structured Data: How to Earn Rich Results
Structured data is the cheapest way to make a snippet stand out. Here is what still works in 2026.
Internal Linking: The Cheapest Way to Move Rankings
You already have the authority you need. The only question is where it flows inside the site.