Skip to content
ThemesCraft.

Ecommerce SEO Checklist: 6 Phases in the Right Order

Most ecommerce SEO checklists are a flat list of items with no order. This one runs in six phases, because index control and architecture decide whether any of the later work is worth doing at all.

Quick answer

An ecommerce SEO checklist should run in six phases: crawl and index control, site architecture, on-page at scale, structured data, performance, then content and links. Order matters because index bloat from filter URLs and duplicate variants dilutes every fix you make after it. Get control of what Google crawls and indexes first, then make those pages good.

Most ecommerce SEO checklists are flat. Forty-five items, one line each, nothing prioritised. You work down the list, tick the boxes, and six months later organic traffic looks roughly the way it did when you started.

The problem is sequencing. An ecommerce SEO checklist only pays out if you run it in order, because the first few items fix problems that make everything after them pointless. Rewriting 3,000 product descriptions on a store where each product spawns forty colourway URLs is not optimisation. It is 120,000 pages of the same slightly better text.

So this is the same work in six phases. Each one states what breaks if you skip it, and which symptom says it is your problem right now.

What an ecommerce SEO checklist should cover, and the order that matters

It should cover six things, in this order: crawl and index control, site architecture, on-page elements at scale, structured data, page performance, and finally content and links. The order is not a preference, it is dependency. Architecture decides which URLs exist. Index control decides which of those URLs Google will spend crawl budget on. On-page work only compounds once the surviving URL set is stable.

Run it backwards and you get the familiar outcome: a store with polished category copy, rich results markup, a fast template, and 400,000 indexed URLs of which 380,000 are sort orders and size filters. Google has crawled the store thoroughly and concluded it is mostly duplicates.

Phase 1: crawl and index control

Phase 1 is deciding which URLs on your store are allowed into Google’s index, and enforcing that with the right mechanism for each case. It is the foundation nobody sequences first, because it produces no visible win on the day you ship it. What it produces is a site where every later fix lands on a page that matters.

Faceted navigation and filter URLs

Faceted navigation is the largest single source of index bloat on ecommerce sites, because filters combine. Five filters with six values each do not produce 30 URLs. They produce every combination of every subset, in every order the filters can be clicked, multiplied again by sort parameters and page numbers. A mid-sized catalogue routinely generates more filter URLs than it has products.

Google’s faceted navigation guidance names two costs: overcrawling, where crawlers spend resources fetching faceted URLs before working out they are not useful, and slower discovery of the pages you want found. Their preferred prevention methods are a robots.txt disallow on the pattern, or holding filter state in a URL fragment such as #colour=navy, since Google generally does not crawl or index fragments. Canonical tags and nofollow on filter links they describe as less effective in the long term.

The decision is which facets deserve to rank. A handful usually do, because people search them: brand within a category, or a defined attribute like “waterproof hiking boots”. Those get a real, static, linkable URL with their own copy. The price sliders, sort orders and four-facet combinations get blocked before they are ever crawled.

# Allow one deliberate facet path, block the rest
User-agent: *
Disallow: /*?*sort=
Disallow: /*?*price_min=
Disallow: /*?*orderby=
Allow: /collections/*/brand-*

noindex vs robots.txt vs canonical: three tools, three jobs

These three are not interchangeable, and choosing wrong is the commonest technical error on ecommerce sites. Robots.txt controls crawling. Noindex controls indexing. Canonical consolidates signals between URLs that are genuinely near-duplicates.

The interaction is what bites. Google states that for the noindex rule to be effective, the page must not be blocked by robots.txt and has to be otherwise accessible to the crawler. Block a URL and add noindex to it and you have cancelled your own instruction: the crawler never fetches the page, never sees the tag, and the URL can still surface on the strength of links pointing at it.

SituationRight toolWhy
Infinite filter and sort combinationsrobots.txt disallow, or fragmentsYou want to stop the crawl cost, not just the indexing
Internal search results pagesrobots.txt disallowUnbounded URL space generated by users, zero ranking value
Cart, checkout, account, wishlistnoindex, kept crawlableFew URLs, and the tag must be fetchable to work
One product, forty colour variantsCanonical to the parent productNear-duplicates whose link and relevance signals should merge
Thin tag or archive pagesnoindex, followRemoves the page, keeps equity flowing to products
Page 2 of a categorySelf-referencing canonicalDistinct products, so not a duplicate of page 1
Tool selection per case, from Google Search Central documentation, checked August 2026.

Out-of-stock and discontinued products

Temporarily out of stock and permanently discontinued need opposite treatment, and stores routinely apply one rule to both. A temporarily unavailable product keeps its URL, keeps returning 200, keeps its markup with availability set to OutOfStock, and offers a restock alert. It has earned rankings and links you will not get back.

A discontinued product with no successor is different, but the answer is still not deletion. Redirect it to the closest replacement, or failing that to its parent category. A 301 preserves the accumulated signals and a 404 discards them. Deleting a few hundred seasonal SKUs a year is how stores quietly bleed authority.

Watch out

Redirecting every discontinued product to the homepage gets treated as a soft 404. If there is no genuinely relevant destination, the category page is the last sensible stop. Below that, let it 410 and move on.

Paginated category pages each need their own canonical, pointing at themselves. Google’s ecommerce pagination documentation is explicit that you should not use the first page of a sequence as the canonical for the rest of it, because pages 2 onward hold different products. Link the sequence with real anchor tags so it can be crawled, and never put page numbers after a hash.

Internal search results are the other unbounded space. Every query a user or a bot types creates a URL, and once a few get linked from anywhere, the crawler starts exploring a set with no end. Disallow the search path. There is no version of this where indexed internal search results help you.

Phase 2: site architecture and click depth

Phase 2 is making sure every product that matters sits within three clicks of the homepage, and that the category layer is built to rank rather than to mirror your warehouse. Depth is a proxy for importance. A product five levels down, reachable only through a filter, is one Google crawls rarely and ranks badly.

The structure that works is shallow and wide: home, category, subcategory, product. Where a catalogue is genuinely large, the fix is better hub pages and crawlable pagination, not more nesting. If your bestsellers are only reachable via a “sort by popularity” URL you have just disallowed, you have made them invisible.

Breadcrumbs do two jobs. They create a consistent upward link from every product to its category, often the largest single source of internal links a category page has, and they feed the BreadcrumbList markup that replaces the raw URL in the result. Both matter. The internal linking matters more.

Why the category page is your money page

For head terms, the category page is what Google wants to rank, not the product page. Someone searching “running shoes” or “standing desk” is comparing, not buying a specific SKU. A page showing sixty filtered options matches that intent and a page selling one model does not. Check the results for any broad commercial term and count the single-product pages.

Product pages win on model numbers, brand plus model, and long specific queries. Real volume, but not head-term volume. Point links and copy at product pages for head terms and you are competing for a slot the SERP does not have. Category structure is also a platform decision, worth settling before you build rather than after, whether you are staying put or weighing Shopify alternatives.

Phase 3: on-page at scale

Phase 3 is producing titles, descriptions and product copy across thousands of SKUs without hand-writing them all or shipping something that reads like a mail merge. The method is a pattern with enough variable slots that outputs differ meaningfully, plus manual overrides on the two hundred URLs carrying the revenue.

Product:  {brand} {model} {key_attribute} | {store}
Category: {category} - {count}+ {qualifier} | {store}

Merrell Moab 3 Waterproof Hiking Boots | Store
Hiking Boots - 240+ Waterproof & GTX Styles | Store

Where the pattern produces something clumsy, override it. Patterns are a floor, not a ceiling.

Manufacturer descriptions are the other half. Every retailer selling that SKU has the same paragraph, so the text carries no differentiating signal. You do not need to rewrite the catalogue. Add one original block per product covering what the manufacturer will not say: who it suits and who it does not, sizing behaviour, what it is bought alongside, and the drawback. Prioritise by revenue.

The thin-variant problem

One product in forty colourways should be one indexable URL, not forty. Variant URLs are the purest near-duplicate: identical description, identical specifications, identical images bar one, differing by a swatch name. Indexed separately they split link equity forty ways and force Google to pick a winner from forty weak candidates.

Consolidate to a parent product page with variants selectable on-page, and canonical every variant URL to the parent. The exception is a variant with genuine independent search demand, where people search the colour by name. Those get their own page and their own copy. You will usually find you have three, not forty.

Phase 4: structured data that earns a rich result

Phase 4 is four schema types, each unlocking a different piece of SERP real estate: Product and Offer drive the price, availability and shipping detail under a product result, AggregateRating adds the star rating and review count, BreadcrumbList replaces the URL string with a readable category path.

Google’s merchant listing documentation sets the floor: Product needs name, image and offers, and the Offer needs a price greater than zero plus priceCurrency as a three-letter ISO 4217 code. The recommended properties do most of the visible work: availability, shippingDetails, hasMerchantReturnPolicy, itemCondition, brand, sku and gtin.

Suppression usually has a mundane cause. The commonest are markup describing something not visible on the page, a schema price that no longer matches the rendered price, aggregateRating with no visible reviews anywhere on the page, and review markup where the reviewer name is not a plausible person. Google’s guidance on that last one is blunt: the reviewer name must be a valid name for a person or a team, not a discount percentage.

Pro tip

Structured data describes the page, it does not decorate it. If the schema and the rendered HTML disagree on price, stock or rating, the mismatch is what gets you dropped. Generate the markup from the same data source that renders the page and the problem cannot occur.

Phase 5: performance, and what actually makes a store slow

Ecommerce templates are rarely slow because of the platform. They are slow because of what has been bolted on: an uncompressed hero image, a review widget that loads its own framework, a live chat script, a tag manager firing synchronously in the head, and four remarketing pixels. Each was added by someone not thinking about page speed, and collectively they are the whole problem.

The current Core Web Vitals thresholds, per web.dev, are measured at the 75th percentile of page loads, segmented across mobile and desktop. That percentile is the part people skip past: your median visitor being fine is irrelevant if a quarter are not.

MetricGoodWhat breaks it on a store template
Largest Contentful Paint (LCP)2.5 seconds or lessUnoptimised hero or first product image, lazy-loaded above the fold, render-blocking fonts
Interaction to Next Paint (INP)200 milliseconds or lessFilter and variant selectors that re-render the entire grid on every click
Cumulative Layout Shift (CLS)0.1 or lessReview stars, promo banners and cookie bars injected after paint with no reserved space
Thresholds from web.dev Core Web Vitals documentation, checked August 2026, all at the 75th percentile.

The fixes are unglamorous, in this order: set explicit width and height on every image, stop lazy-loading anything above the fold, defer every third-party script not needed for first paint, and audit what your tag manager is actually loading. On WordPress, a periodic pass with the WordPress health check tool surfaces plugin conflicts and server-side delays that no front-end tuning will fix.

Phase 6 is where most stores under-invest, and it is where the compounding lives once phases 1 to 5 are done. Two pieces: category copy that helps someone choose, and non-transactional content that catches people before the moment of purchase.

Category copy has a bad reputation because of how it is usually done, which is 300 words of keyword repetition dumped below the grid where nobody reads it. Written properly it sits above or beside the grid, is short, and answers what the filters cannot: the meaningful differences between these options, what to buy for which use case, and what each price tier gets you. That is useful, and it happens to contain the vocabulary the query uses.

Buying guides catch the searches that happen before anyone types a product name. How to choose, X versus Y, best for, sizing and care guides. They rarely convert on the visit and they are why someone later arrives already knowing what they want. It is ordinary content marketing applied to a catalogue, and the same discipline applies, including settling on a small set of content marketing tools you keep using rather than a new one each quarter.

Links follow content, not products. Nobody links to a product page for a mid-range kettle. They link to the comparison that saved them an hour. Internal linking from those guides down into the relevant categories is what turns editorial links into category rankings.

Which phase is your problem right now

Work out which phase you are stuck in before you start, because doing phase 6 work on a phase 1 problem is the default failure mode and it is expensive. Each phase has a symptom that identifies it from the outside.

PhaseSymptom that says this is your problemEffortWhat it unblocks
1. Crawl and index controlIndexed page count is many multiples of SKU count; large duplicate or crawled-not-indexed bucketsMedium, mostly configEverything. Crawl budget reaches real pages and signals stop splitting
2. ArchitectureProducts four or more clicks deep; category pages with almost no internal linksHigh if navigation must be rebuiltCategory pages become rankable for head terms
3. On-page at scaleDuplicate title warnings; product copy identical to the manufacturer feedMedium, template plus a prioritised manual passLong-tail product queries and better click-through
4. Structured dataNo stars, price or availability showing on your resultsLow once the data source is rightSERP real estate and clicks at existing rankings
5. PerformanceCore Web Vitals failing at the 75th percentile on mobileMedium, mostly removing thingsConversion rate, and a tiebreak in close SERPs
6. Content and linksYou rank for product names and nothing else; no page answers a non-buying questionHigh, ongoingNon-transactional demand, editorial links, category authority
Phase priority and symptoms. Effort ratings are relative, not hours.

Disclosure: This article contains affiliate links. If you buy through one of them, ThemesCraft may earn a commission at no extra cost to you.

The diagnostics take an afternoon. Most are free, and three of the most useful involve nothing but looking at the live results for your own terms. For paid keyword, competitor, and content-gap research around ecommerce categories, Semrush is the tool I would compare alongside your free Search Console checks.

CheckWhere to run itWhat a bad result looks like
Index bloatSearch Console, Pages reportIndexed count far above SKU count; large duplicate and not-indexed buckets
Filter URLs being crawledServer log sample, or Search Console crawl statsBot requests dominated by URLs with sort, orderby or several parameters
Click depthSite crawl (Screaming Frog, Sitebulb or similar)A large share of products at depth 4 or greater
Orphaned productsSite crawl compared against the XML sitemapSitemap URLs with zero internal inlinks
Duplicate titlesSite crawl, duplicates reportHundreds of identical titles, usually variant URLs
Rich result eligibilityRich Results Test, Search Console enhancement reportsErrors on price, availability or aggregateRating
Core Web VitalsSearch Console CWV report, PageSpeed InsightsMobile URLs outside the good bucket at the 75th percentile
Page type mismatchThe SERP itself, for your top ten head termsGoogle ranking category pages while you push product pages
Variant duplicationA site: query for one product nameSeveral near-identical URLs returned for the same product
Diagnostic checks and where to run them. Search Console reports are free; crawlers have usable free tiers at small URL counts.

Mistakes that undo the whole checklist

Four mistakes turn up on almost every store audit, and each quietly neutralises work done elsewhere on the list. All are reversible, and all come from applying a correct-sounding rule to the wrong case.

  • Blocking faceted URLs in robots.txt while relying on their canonical tags. The canonical lives inside the page. If the page is disallowed, Googlebot never fetches it and never reads the tag. Pick one mechanism per pattern: block it and forget it, or leave it crawlable and let the canonical work.
  • Canonicalising a paginated series back to page one. Pages 2 onward hold different products, so the canonical is a false claim of duplication. Those products lose their internal links and fall out of the index. Use self-referencing canonicals across the sequence.
  • Deleting discontinued products instead of redirecting them. Every deleted URL that had links or rankings is authority thrown away. Redirect to the nearest replacement or the parent category, and keep a record so you are not guessing next year.
  • Chasing head terms with product pages. If page one for your target term is entirely category and listing pages, a product page cannot win it however good the copy is. Move that effort to the category page and let the product page own model-number queries.

A fifth is platform-specific: shipping on a stack whose URL generation you cannot control. Some plugin and theme combinations emit parameterised URLs with no clean way to suppress them. URL and taxonomy decisions are far cheaper to get right at setup, which is the part of building a WordPress ecommerce site that repays the most attention. The platform detail, including how WooCommerce handles product attributes and archive URLs, sits in the companion piece on WooCommerce SEO.

Verdict: what to do with one day, one week, one month

With one day, run the diagnostics and fix index control only. Open the Search Console Pages report, compare indexed URLs against SKU count, identify the parameter patterns causing the gap, and disallow them. Then confirm nothing you blocked was relying on a noindex or canonical tag being read. That day is worth more than a month of content on a bloated store.

With one week, add phase 2 and the variant consolidation from phase 3. Crawl the site, find every product deeper than three clicks, fix the navigation and breadcrumbs that put it there, and canonical variant URLs to their parents. This is the week that changes which pages Google thinks your site is made of.

With a month, finish phases 3 and 4, do the performance pass, and start phase 6 with two things: real copy on your ten highest-revenue category pages, and one buying guide per major category linking down into it. After that, phase 6 is the only phase that never finishes, and it is what separates stores that grow from stores that plateau.

One caveat. None of this is a ranking guarantee, and no phase here pays out on the timescale of a sprint. Index control changes take weeks to appear in Search Console because Google has to recrawl to notice. Plan for that, and do not undo a correct fix because it did not move traffic in nine days.

Frequently asked questions

How many pages should an ecommerce site have indexed?

Roughly your product count plus your category, subcategory and content pages, with a margin for paginated series. If Search Console reports several times that figure, the extra URLs are almost certainly filter, sort and internal search combinations. The gap between indexed count and SKU count is the fastest single diagnostic for index bloat on any store.

Should I noindex or block filter URLs in robots.txt?

Block them in robots.txt when the URL space is effectively unbounded, because you want to stop the crawl cost rather than just the indexing. Use noindex only on a small, defined set such as cart, checkout and account pages, and keep those crawlable. Google cannot act on a noindex rule it is not allowed to fetch.

Do out-of-stock product pages hurt rankings?

Not if you handle them correctly. Keep the URL live, return a 200 status, set availability to OutOfStock in your structured data, and offer a restock alert or a link to alternatives. What hurts is deleting the page, which throws away the links and rankings it accumulated, or leaving it live with no signal that the item is unavailable.

Should product variants have their own URLs?

Usually not. Forty colourways of one product are near-identical pages that split link equity and force Google to choose between weak candidates. Consolidate to a parent page with on-page variant selection and canonical each variant URL to the parent. The exception is a variant with genuine independent search demand, where people search that colour or size by name.

Why is my category page not ranking for its main keyword?

Check the results page first. If Google is ranking category and listing pages and you are pushing a product page, the mismatch is the problem. If your category page is the right page type, the usual causes are too few internal links pointing at it, no unique copy that answers what the filters cannot, or a filtered version of it competing with it.

How long does it take to see results from technical ecommerce SEO?

Weeks rather than days, because Google has to recrawl the affected URLs before it notices anything changed. Index control fixes on a large catalogue can take a month or more to show fully in the Search Console Pages report. Ship the change, verify it is implemented correctly, and resist reversing it because traffic has not moved yet.

Is structured data worth adding if I already rank well?

Yes, because it changes what your result looks like rather than where it sits. Product and Offer markup surfaces price and availability, AggregateRating adds stars, and BreadcrumbList replaces the raw URL with a readable path. That is extra click-through at rankings you already hold, which is usually the cheapest gain available on a store.

Do I need buying guides if I sell well-known products?

They matter more, not less, because well-known products attract the most competition on transactional terms. Guides catch people earlier, before anyone types a product name, and they are what other sites actually link to. Internal links from those guides into your category pages are the mechanism that converts editorial links into category rankings.

Leave a response

Your email address will not be published. Required fields are marked *