Skip to main content
Back to AI Commerce Lab
SEO·February 2024·12 min read

SEO for E-Commerce: Boosting Visibility and Sales

E-commerce SEO is four separable problems, not one: can Google crawl the catalog, does it get indexed without duplicate-content collisions, is it eligible for rank and rich results through content and structured data, and does the traffic that arrives actually convert. Most audits fail because they treat all four as "SEO" and fix the wrong one.

The four stages, and where teams actually get stuck

Google's own e-commerce documentation is organized around exactly this separation: how ecommerce data can appear on Google, how to help Google understand your site structure, and which structured data is relevant to ecommerce specifically (Google Search Central — SEO best practices for ecommerce sites). That's the map worth following, because a catalog can fail at any one stage while looking fine at the others.

CRAWL sitemap + robots.txt INDEX canonical + render RANK & RICH RESULTS content + schema CONVERT speed + checkout UX PRODUCT STRUCTURED DATA on-page markup MERCHANT CENTER FEED Shopping surfaces

Crawl, index, and rank are sequential gates — a page that fails one never reaches the next. Structured data and the Merchant Center feed are separate inputs into the rank stage, governing different surfaces.

Crawl: can Google reach the catalog at all

A product Google can't find can't rank, and on a large catalog "can't find" is usually a structural problem, not a missing page.

Sitemaps carry the catalog's actual shape

An XML sitemap should list every canonical product and category URL, updated as the catalog changes, and submitted through Search Console (Google Search Central — Sitemaps overview). For a catalog with tens of thousands of SKUs, a stale sitemap generated once at launch and never touched again is a silent crawl-budget leak.

Robots.txt should block the right things, not the convenient things

Faceted navigation — filtering by size, color, price range — generates enormous numbers of parameterized URLs that add no unique content and burn crawl budget if left open (Google Search Central — Introduction to robots.txt). Blocking those paths deliberately, rather than letting every filter combination get crawled, is a bigger lever on a large catalog than almost any content change.

Navigation has to expose the hierarchy, not just link to it

Google explicitly recommends a category structure a crawler can traverse via links, not just a search box or JavaScript-driven filter UI, because Google still relies heavily on links to discover new and updated pages (Google Search Central — Help Google understand your ecommerce site structure). Breadcrumbs and a browsable category tree aren't just a UX nicety here; they're the crawl path.

Pagination and infinite scroll need a crawlable fallback

Each page in a paginated category — page 2, page 3, and on — needs its own unique, crawlable URL that Googlebot can reach via a real <a href> link, since crawlers don't execute a "load more" click (Google Search Central — Pagination best practices for Google).

Google deprecated the old rel="next"/rel="prev" signals in 2019. The current guidance is simpler: self-referencing canonicals on every paginated page, and don't force the first page to canonicalize the whole sequence.

On a catalog past roughly 10,000 pages, deep pagination with thin per-page content is a real crawl-budget cost. Audit how deep a category's pagination actually goes and consider noindex on pages past the depth that produces any measurable traffic.

Index: getting into the index without duplicating yourself out of it

React and SSR: the old problem is real, the fix is standard

A client-side-rendered React storefront that ships an empty <div id="root"> and populates it via JavaScript makes a crawler do extra work to see the content at all. Server-side rendering (or static generation) delivers a fully populated HTML response on first load, which removes that dependency entirely — this is table stakes for a Next.js commerce site, not an advanced optimization.

Canonical tags resolve the variant-duplication problem

A product available in five colors and three sizes can generate fifteen URLs for what is, from a search-intent standpoint, one product. Canonicalization tells Google which URL is the reference version so the other fourteen don't compete against it as near-duplicate content (Google Search Central — Consolidate duplicate URLs).

Product variant structured data is the more precise tool

Where variants genuinely deserve separate URLs — different colors with different photography, meaningfully different pricing — Google's ProductGroup markup lets you declare the relationship explicitly instead of relying on canonicalization to guess it (Google Search Central — Product variants structured data).

Canonicalization and variant structured data solve different problems. Canonical tags say "these are the same page." Product variant markup says "these are related but distinct products." Using the wrong tool for a given catalog structure is one of the most common e-commerce SEO mistakes.

Rank and rich results: content plus two separate structured data systems

Once a page is crawled and indexed, two independent structured data systems govern whether it's eligible for anything beyond a plain blue link, and conflating them is the single most common architecture mistake on this list.

SystemWhat it governsWhere it lives
On-page Product structured dataEligibility for a product snippet in organic Search results — price, availability, rating shown under a normal blue linkJSON-LD embedded directly in the product page's HTML (Google Search Central — Product snippet structured data)
Merchant Center product feedEligibility for Shopping-specific surfaces — the Shopping tab, shopping ads, free product listingsA separate feed submitted to Merchant Center, following its own data specification (Google Merchant Center Help — Product data specification)

A store can have flawless Product markup and zero Merchant Center presence, or a perfect Merchant Center feed and no organic rich results — they're both necessary, and neither substitutes for the other. Google's ecommerce structured data guidance walks through the specific types relevant here: Product, Offer, and AggregateRating among them (Google Search Central — Include structured data relevant to ecommerce).

A minimal Product snippet in JSON-LD looks like this, embedded directly in the page's <head> or body, not injected only after client-side hydration:

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Walnut Dining Chair",
  "image": "https://example.com/chair.jpg",
  "sku": "CHR-1029",
  "offers": {
    "@type": "Offer",
    "priceCurrency": "USD",
    "price": "249.00",
    "availability": "https://schema.org/InStock"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "reviewCount": "212"
  }
}

Every field in that block has to match what a shopper actually sees on the page — Google's structured data guidelines are explicit that markup describing information not visible to the user is a policy violation, not a growth hack (Google Search Central — Intro to how structured data markup works).

Content still has to answer the actual query

Structured data makes a good result eligible to look better in the results page. It doesn't make a thin product description rank. Query research grounded in your own Search Console data, not a generic keyword list, is still the starting point for knowing what a product page actually needs to say — see the evolution of keyword research in the age of AI search for the full approach.

Reviews are a separate, well-documented signal — with real limits

Customer reviews feed both the AggregateRating markup that can show star ratings in results and, more broadly, into how Google evaluates page quality. What Google has and hasn't confirmed about reviews and rankings — including the strict ban on fake or incentivized reviews — is covered in the link between customer reviews and SEO rankings.

AI Overviews changed the click, not the crawl

AI-generated summaries in Search results can answer a query before a shopper ever reaches a product page, which changes click-through economics without touching any of the crawl or index mechanics above. How AI summarizers change CTR for search listings covers that shift directly.

Paid and organic don't share a ranking mechanism, but they share data

Ad spend has no direct effect on organic ranking, and Quality Score isn't an organic signal either — but the keyword and landing-page data both channels generate is worth pooling. The intersection of paid ads and organic SEO goes into where the channels actually connect.

Convert: the stage SEO audits usually skip

Traffic that arrives and bounces at checkout isn't an SEO failure in the crawl/index/rank sense, but it's the stage the other three exist to feed, and Google increasingly treats page experience as part of the same evaluation.

  • Core Web Vitals — Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift are Google's documented, measurable page-experience signals (web.dev — Web Vitals). A product page with a slow LCP because of an unoptimized hero image is losing both search visibility and conversions from the same root cause.
  • HTTPS is a baseline expectation for any commerce site handling payment information, not an SEO trick.
  • Mobile rendering has to hold up under Google's mobile-first indexing, since the mobile version of a page is what gets evaluated, not the desktop one.

A deeper technical treatment of shaving LCP specifically on product pages is here: reducing Largest Contentful Paint on product pages.

Out-of-stock and discontinued products: don't just delete the page

A product that sells out is not a 404. Google's own guidance is direct on this: keep the page live and mark it out of stock rather than removing it, because shoppers and Google both still need first-hand information about a product they might search for by name (Google Search Central — Share your product data with Google).

The availability field carries the actual state: InStock, OutOfStock, BackOrder, PreOrder, or Discontinued, in both the on-page structured data and the Merchant Center feed, and the two need to agree — Google flags a page where the feed and the landing page disagree on availability as an active data-quality issue (Google Merchant Center Help — Availability attribute).

SituationRight move
Temporarily out of stock, restockingKeep the page live, set availability to OutOfStock or BackOrder, show a restock estimate if you have one
Permanently discontinued, similar product exists301 redirect to the closest matching live product, not a 404
Permanently discontinued, no replacementKeep the page live with Discontinued availability and clear on-page messaging, or serve a genuine 410 if the product line is gone entirely

International catalogs: hreflang, not duplicated content per region

A catalog selling into multiple countries or languages needs Google to serve the right regional URL to the right searcher, and the mechanism for that is hreflang annotation, not separately optimized duplicate content per region (Google Search Central — Managing multi-regional and multilingual sites).

Two details teams get wrong here. First, Google determines a page's language from its visible content, not from a lang attribute or the URL structure alone — the annotation tells Google which version is which, it doesn't substitute for actually writing the page in that language. Second, hreflang has to be reciprocal: if the US page links to the UK version, the UK version has to link back, or the annotation is ignored.

Measuring whether any of this is working

Search Console's Performance report, filtered by page or query, is the direct signal for whether crawl and index fixes actually moved impressions and clicks — compare the weeks before and after a fix, not a single post-launch snapshot. Merchant Center's own diagnostics surface feed-level issues (disapproved products, availability mismatches) separately from anything Search Console reports, because they're governing a different surface.

Treat the two dashboards as covering different halves of the funnel in the figure above: Search Console for crawl, index, and organic rank; Merchant Center for the Shopping-surface half of the rank stage. A team watching only one will misread the other half of the picture entirely.

Failure modes worth auditing for directly

  • A sitemap generated once at launch and never regenerated as SKUs are added or discontinued.
  • Faceted navigation left fully crawlable, generating thousands of near-duplicate filtered URLs that dilute crawl budget.
  • Client-side-only rendering on a React storefront with no server-side rendering or static generation fallback.
  • Product structured data present without a Merchant Center feed, or the reverse — treating one as a substitute for the other.
  • Canonical tags pointing to the wrong variant, or missing entirely on a catalog with color/size URL variants.
  • 404s and redirect chains from discontinued products left unmonitored, quietly bleeding both crawl budget and inbound link equity.

An audit checklist

  1. Confirm the XML sitemap reflects the current catalog and is submitted in Search Console.
  2. Verify robots.txt blocks faceted-navigation URL patterns without blocking category or product pages themselves.
  3. Check that category and product pages are reachable via crawlable links, not only through search or client-side filters.
  4. Confirm SSR or static generation delivers fully populated HTML on first response.
  5. Audit canonical tags across every variant URL for a sample of multi-variant products.
  6. Validate Product structured data with Google's Rich Results Test, separately from validating the Merchant Center feed against its own specification.
  7. Measure Core Web Vitals on actual product pages, not just the homepage.

FAQ

Do I need both Product structured data and a Merchant Center feed?

Yes, if you want both organic rich results and Shopping surface presence — they're separate systems governing separate surfaces, and neither one populates the other.

Does React hurt e-commerce SEO?

Not with server-side rendering or static generation. The historical "React is bad for SEO" concern was really a "client-side-only rendering with no HTML fallback" problem, and Next.js and similar frameworks solved it years ago.

How should I handle color and size variants in URLs?

Canonicalize near-identical variants to one reference URL, and use Product variant structured data (ProductGroup) where variants genuinely warrant separate, distinctly indexed pages.

Do AI Overviews mean e-commerce SEO matters less?

It changes where the click happens, not whether crawl, index, and structured data fundamentals matter. A page that isn't indexed and structured correctly can't be cited by an AI Overview either.

Where should a team start if the catalog has never had an SEO audit?

Crawl and index first. Rich results and content work are wasted effort on pages Google isn't reaching or is splitting into duplicate-content competitors with itself.

Should an out-of-stock product page be removed?

No, in most cases. Keep it live with an accurate availability value in both the on-page markup and the Merchant Center feed, and redirect only when the product is permanently gone and a genuine replacement exists.

References

From the Destm engineering archive. For current work on this topic, start at Solutions or the blog.