# SEO for online stores: the technical checklist for WooCommerce and Shopify

> Technical SEO checklist for online stores on WooCommerce and Shopify: crawl budget, canonical on variants, product schema, Core Web Vitals and out-of-stock…

URL: https://thenichesociety.ro/en/blog-seo-magazin-online-checklist

An online store rarely loses rankings for a single reason — it’s usually the build-up of small technical issues, multiplied thousands of times across the catalogue: filters that generate infinite URLs, product variants with no clear canonical, product pages without correct structured data. **Most of these problems get fixed once, at template level, not product by product — but they have to be found first.** The checklist below covers the technical points with the biggest impact for a WooCommerce or Shopify catalogue.

## Why category filters (faceted navigation) eat into your crawl budget

Any combination of filters on a category page — size, colour, price, brand — can generate its own URL. On a small catalogue, a few dozen combinations don’t matter. On a catalogue with thousands of products and five or six filters available at once, the number of possible URLs explodes, and most of them have no search value of their own — they’re the same products, just reordered. Google’s documentation on faceted navigation describes exactly this pattern as one of the most common causes of crawling complaints: the search engine wastes time recrawling near-identical variations, instead of discovering new or updated pages.

The practical consequence isn’t a “penalty”, it’s something less visible: the pages that actually matter — new categories, new products — get discovered and reindexed more slowly, because the site’s crawl budget is going elsewhere.

- 01**Exclude filter combinations from crawlable internal links** tie filter navigation to JavaScript or blocked parameters, not to normal, indexable hrefs.
- 02**Keep a clean URL pattern for each filter** inconsistent parameters (different order, upper/lower case) create extra duplicates with no benefit at all.
- 03**Don’t blindly block everything in robots.txt** overly aggressive blocking can also hide filter combinations with real search volume, like “size 40 shoes”.

## Correct canonical for product variants (size, colour, packaging)

A distinct problem from filters is the product with variants — the same shirt in three colours, the same detergent in two sizes. Here the typical mistake runs the other way: either every variant has its own URL with no canonical link between them, or all the variants are forced onto a single “canonical” URL, even when people search for exactly “black bag”, not just “bag”. According to Google’s documentation on consolidating duplicate URLs, the strongest signals for choosing a canonical page are, in order, the redirect, then the rel=canonical tag, then inclusion in the sitemap — and the signals can be combined for a clearer result.

The practical rule: if a variant has its own search demand and different enough content (photo, description, price), it’s worth indexing separately, with its own canonical pointing to itself. If the variants are interchangeable from the buyer’s perspective, a canonical to the main variant avoids diluting the signal between near-identical pages. WooCommerce treats variants as sub-objects of a parent product; Shopify can expose them as separate URLs — check what your platform does by default before assuming it’s already correct.

## Category page copy: what content actually helps

A category page with no unique copy at all — just a grid of products — remains, from a search engine’s perspective, hard to tell apart from dozens of other similar pages on the market. It doesn’t need an essay above the products; it needs a few sentences that explain, in the buyer’s real words, what they’ll find on that page and how it differs from the neighbouring category. The WooCommerce documentation on organising products and the site architecture section in Shopify’s SEO guide point in the same direction: the category structure should reflect how the customer thinks, not how the warehouse is organised internally.

A simple test: if you can move the copy from one category page to another with no change at all, the copy isn’t saying anything specific. Mention concretely what sets the category apart — material, occasion of use, typical price range — not generic adjectives like “premium quality”, which help neither the reader nor the search engine tell one page apart from another.

## Structured data for Product, Offer and AggregateRating, filled in correctly

Product structured data is how you explicitly tell a search engine what a product costs, whether it’s in stock and what rating it has, instead of leaving that information to be inferred from the text. According to Google’s documentation on product structured data, rich results for products are only supported on pages focused on a single product (or on variants of the same product) — not on listing or generic category pages.

The three blocks that matter most are the product’s name and image, the offer (Offer, with price, currency and availability correctly updated) and, if there are real reviews, the aggregate rating (AggregateRating). The most common technical mistake isn’t a complete absence of schema, it’s it being out of sync: the price shown visually on the page differs from the one in the schema, or availability stays “in stock” after the product has sold out. A made-up or artificially inflated rating is a different problem, one of trust, not just a technical one — don’t fill in AggregateRating if you don’t have real reviews behind it.

## Core Web Vitals on the product page: what's measured, what's optimised

The product page (PDP) is usually the heaviest page in a store — image gallery, variant selector, reviews, recommended products. According to Google’s documentation on Core Web Vitals, the three metrics tracked are the loading time of the largest visible element (LCP, under 2.5 seconds), the response time to interaction (INP, under 200 milliseconds) and the visual stability of the page while it loads (CLS, under 0.1).

On a product page, LCP is almost always the main image — compress it, serve it in a modern format (WebP or AVIF) and don’t lazy-load it, because it’s the first thing the visitor needs to see. CLS usually comes from promo banners that load late and push the content down, or from size selectors that change dimensions after loading. INP suffers the most when the “add to cart” button has to wait behind heavy third-party scripts — chat, recommendations, tracking — that block the main execution thread.

- 01**Secondary gallery images** unlike the main image, these can be lazy-loaded without affecting LCP.
- 02**Descriptive alt text, not a string of keywords** “waterproof men’s jacket, grey, size L” is useful; repeating the same keyword five times in different alt text doesn’t help and can be treated as spam.
- 03**Explicit dimensions for every image** missing width/height attributes is the typical cause of CLS on images that load later.

## Why the blog needs to link to categories, not just to the homepage

A blog post that compares “the best laptop bags for commuting” and doesn’t link, from the text, to the actual laptop bags category wastes exactly the type of internal link that matters most for a large catalogue: one that passes authority and topical context directly to a page that can sell. A link to the homepage doesn’t do that — the homepage is usually already the best-linked page on the site.

In practice, every new blog post should identify two or three relevant categories or products from the catalogue and link to them with descriptive anchor text, not generic text (“see here”). On a large catalogue, this is also a discovery mechanism: categories buried deep in the structure end up being recrawled more often if they get fresh links from new content, not just from the static navigation menu.

## Out-of-stock or discontinued product: 410, redirect or page kept

The two situations are handled differently, and confusing them produces most of the wrong decisions. A product that’s temporarily out of stock, and will come back, should stay on its page, with availability correctly updated in the product schema (out of stock or pre-order), not removed from the site. Deleting the page for a temporary stock gap throws away exactly the URL that already had history and, possibly, earned ranking.

A product permanently discontinued is a different matter. If there’s a clear replacement — same category, updated model — a redirect to that product is the strongest consolidation signal you can give, according to the signal hierarchy in Google’s documentation on canonical URLs. If there’s no real replacement, forcing a redirect to an unrelated page (often the homepage, by reflex) creates a poor experience and a confusing signal; a clear “product permanently unavailable” page, with real recommendations for similar products, is more useful than any forced redirect.

## What usually breaks during a platform migration

Many of the problems above become sharply visible at the moment of a migration — from one platform to another, or just from one URL pattern to another. The category structure changes, product variants get a different URL pattern, the product schema may be completely missing on the new theme until it’s set up again, and without a complete redirect map, all the link history and ranking built up on the old URLs is lost all at once, not gradually.

The topic is big enough to deserve its own treatment — the redirect plan, URL mapping, and the lessons from a real replatforming are detailed in the [dedicated guide to migrating an online store](https://thenichesociety.ro/en/blog-migrare-ecommerce-fara-pierdere-seo) without losing the SEO you've built up. If you want the list applied to your own store, see [SEO for online stores](https://thenichesociety.ro/en/ecommerce-seo).

## Sources and further reading.

- 01[Google Search Central — Crawling December: Faceted navigation](https://developers.google.com/search/blog/2024/12/crawling-december-faceted-nav)
- 02[Google Search Central — Consolidating duplicate URLs (rel=canonical)](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)
- 03[Google Search Central — Intro to Product Structured Data](https://developers.google.com/search/docs/appearance/structured-data/product)
- 04[Google Search Central — Understanding Core Web Vitals](https://developers.google.com/search/docs/appearance/core-web-vitals)
- 05[Shopify Help Center — Improving search engine optimization (SEO)](https://help.shopify.com/en/manual/promoting-marketing/seo)
- 06[WooCommerce Docs — Products](https://woocommerce.com/documentation/woocommerce/core-products/)

## Frequently asked questions

### What is faceted navigation, and why does it affect an online store's SEO?

It’s the filtering mechanism on category pages (size, colour, price), which can generate a very large number of URL combinations. Each combination uses up the site’s crawl budget, which means the pages that matter — new products and categories — get discovered and reindexed more slowly.

### Do I need to put rel=canonical on every product variant?

Not automatically. If a variant (colour, size) has its own search demand and different enough content, indexing it separately, with a canonical pointing to itself, can be correct. If the variants are essentially interchangeable, a canonical pointing to the main variant avoids diluting the signal between near-identical pages.

### Do I need real reviews to use AggregateRating in the product schema?

Yes. AggregateRating needs to reflect real reviews that exist on the page. Filling it in with made-up or artificially inflated values is a matter of trust, not just a technical issue, and it can affect eligibility for rich results.

### What do I do with an out-of-stock product so I don't lose the ranking it already earned?

If the stock-out is temporary, keep the page and update the availability in the product schema, without deleting it. If the product is permanently discontinued and there’s a clear replacement, a redirect to that product consolidates the signal better than deleting the page.

### Let's see what can be automated in your business.

A free 30-minute session: we'll tell you what can be automated, how long it takes and what it costs, with a fixed price after discovery.

We reply the same business day.
