Five filters, eight values each, and a crawl problem
Faceted navigation is the single most expensive SEO fault in Indian ecommerce, and it never shows up in a pitch deck because you can't see it from the front end. Do the arithmetic once and it stops being abstract.
Take one category with five filters — size, colour, brand, price band, discount — carrying roughly eight values each, plus three sort orders. Every combination that produces its own URL is a page Googlebot can discover and try to fetch. From that one category the combinations run into the hundreds of thousands.
Now multiply by your category count. A 4,000-SKU store routinely exposes several million crawlable URLs. Googlebot doesn't crawl them all — it crawls some, spends its allocation on ?colour=blue&sort=price_asc, and never reaches the 600 product pages you launched last month. That's why catalogue owners so often find a few thousand URLs indexed and most of them junk. It's a crawl budget problem wearing a UX costume.
Write the facet policy down once
Every facet needs one of three decisions: indexable, crawlable but not indexable, or blocked. Deciding template by template, six months apart, by different people, is how a store ends up with both duplicate content and de-indexed money pages.
- Never `noindex` and `disallow` the same URL. Google can't read a
noindexon a page it isn't allowed to fetch, so the page stays in the index as a URL-only result. Pick one. - Clean the internal link graph, don't patch it.
rel=nofollowon facet links is a hint Google may ignore. Links that only exist behind JavaScript-driven filter state are a far more reliable control. - Keep pagination crawlable. Sequential
?page=2URLs with self-referencing canonicals and real links are how deep products get discovered. Infinite scroll with no paginated fallback hides most of a large catalogue.
| Facet type | Do this | Why |
|---|---|---|
| Category plus one high-demand attribute — 'running shoes for men', 'cotton kurta sets' | Static, indexable URL with its own title, H1 and copy | People search this exact phrase. It deserves a landing page, not a filter state. |
| Colour, size, multi-select combinations | Crawlable, noindex, follow, canonical to the parent category | Genuine user value, near-zero search demand, effectively infinite combinations. |
| Sort order, view toggles, session IDs, tracking parameters | Disallow in robots.txt and strip from internal links | Pure crawl waste. Nothing here can ever rank for anything. |
| Price bands and discount filters | Block unless there's real demand — 'sarees under 1000' occasionally is | Sometimes a genuine query. Usually a trap that generates thousands of near-duplicates. |
Category copy that beats a marketplace listing
You will not quickly outrank Amazon or Flipkart for your own product name if they also sell it. Accept that and stop budgeting for it — we've written separately about selling through marketplaces versus owning search.
What you can win is the category, because marketplace category pages are generated. They're identical in structure across a million SKUs, they carry no buying guidance, and nobody at Amazon is writing 400 considered words about how to pick a cotton kurta for a Chennai summer.
That advantage disappears the moment your category page is also forty words of stuffed copy behind a 'Read more' toggle at the bottom. Category pages that rank do a job: they help someone choose.
- 150–300 words that genuinely narrow the choice — what to look for, what the price bands mean, what's worth paying more for, what isn't.
- India-specific detail marketplaces won't write — sizing mapped to Indian sizes, fabrics that survive humidity, GST-inclusive pricing, COD availability, return windows.
- A real FAQ block answering what your support inbox is already asked twenty times a week.
- Internal links out to sub-categories and two or three best sellers, so the page distributes authority as well as receiving it.
- Zero duplication across siblings. If your 'kurta' and 'kurti' pages share paragraphs, you haven't built two pages, you've built a cannibalisation problem and a thin-content risk at the same time.
Product schema: price, rating, availability — and the parts that get you penalised
Product markup is the cheapest rich-result win in ecommerce and the easiest place to break Google's structured data policies. Both halves of that sentence matter.
- Required in practice:
name,image,offers.price,offers.priceCurrencyset to INR, andoffers.availability. Availability has to update when stock does — a staleInStockon a sold-out SKU degrades your merchant listings and irritates buyers who click through. - `aggregateRating` only from reviews you actually collected on your own site. Marking up invented ratings, or borrowing the manufacturer's, is squarely covered by the structured data spam policies. A manual action here strips rich results across the entire domain, not just the offending page.
- Handle variants deliberately. One shirt in eight sizes should not become eight indexable URLs sharing a description. Either canonical variants to a parent product or serve one URL with in-page selection — but choose, because platform defaults rarely do.
- Shipping and returns markup feeds the price-comparison surfaces, and for Indian buyers COD and return windows are frequently the deciding factor between two identical listings.
A retirement policy for out-of-stock and seasonal URLs
The default reflex — 404 the page, or redirect everything to the homepage — throws away rankings and links you spent money earning. Stock is temporary. URLs shouldn't be.
| Situation | Do this | Don't do this |
|---|---|---|
| Temporarily out of stock | Keep the URL live and indexed, set availability: OutOfStock, show alternatives and a back-in-stock alert | 404 it and lose every link and ranking it had |
| Discontinued, close replacement exists | 301 to the nearest equivalent product | 301 everything to the homepage — Google treats bulk irrelevant redirects as soft 404s |
| Discontinued, nothing comparable | 301 to the parent category, or keep the page with a clear notice if it still earns links | Leave it returning 200 with an empty template |
| Seasonal collection — Diwali, wedding season, back to school | Keep one permanent URL and refresh it each year | Publish /diwali-sale-2025 and /diwali-sale-2026 and orphan both by February |
Point your content at collections, not at other posts
Most ecommerce blogs link to other blog posts. That's why they rank and sell nothing. The blog's job is to earn links and rankings that it then hands to pages with a buy button on them.
- Every article links to at least one collection page with descriptive anchor text — 'linen shirts for summer', never 'shop now'.
- Every collection links up to its parent and across to two or three siblings, so authority circulates instead of pooling on the homepage.
- Product pages link back to the collections they belong to in body content, not only through breadcrumbs.
- Audit orphan products quarterly. A product reachable only via site search and a filter state is invisible to Google and nearly invisible to customers.