SEO & AI Engine Optimization Framework · May 2026

Ecommerce SEO: product schema, faceted navigation, inventory pages

A comprehensive installation and audit reference for e-commerce SEO — the discipline of optimizing online stores for product, category, and brand queries across organic search, Google Shopping,…

Product Schema, Faceted Navigation, Shopping Graph, Merchant Center, Category Architecture, and the Complete E-commerce Search Optimization Stack

A comprehensive installation and audit reference for e-commerce SEO — the discipline of optimizing online stores for product, category, and brand queries across organic search, Google Shopping, AI-powered shopping experiences, and emerging conversational commerce. Dual-purpose: installation manual and audit document.

Cross-stack implementation note: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see framework-cross-stack-implementation.md. For pure client-rendered SPAs (no SSR/SSG) see framework-react.md. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see framework-tailwind.md.


1. Document Purpose

E-commerce SEO has unique requirements distinct from content or service-business SEO. Product catalogs create scale problems (thousands to millions of pages). Faceted navigation creates infinite URL combinations. Out-of-stock products create indexing decisions. Reviews drive conversions but require careful handling. Shopping Graph integration via Merchant Center creates parallel paths. Schema requirements are exacting. AI-powered shopping is reshaping discovery.

In 2026, e-commerce SEO encompasses:

This framework specifies optimization across all dimensions.

1.1 Required Tools


2. Client Variables Intake

ecommerce_intake:
  
  platform: ""                          # shopify, woocommerce, magento, bigcommerce, custom
  total_products: 0
  total_categories: 0
  product_uniqueness: ""                # unique_products, dropshipping_catalog, mixed
  
  catalog_pattern:
    has_variants: false                  # color, size, etc. variations
    has_bundles: false
    has_subscriptions: false
    has_digital_products: false
    has_marketplace_sellers: false
  
  pricing:
    currency: ""
    international_pricing: false
    sales_and_promotions: false
  
  inventory:
    real_time_stock_tracking: false
    out_of_stock_handling: ""           # noindex, redirect, replacement, in_stock_alert
    backorders_supported: false
  
  reviews:
    has_reviews_system: false
    review_platform: ""
    average_review_rating: 0.0
    total_reviews: 0
    review_schema_implemented: false
  
  shopping_integrations:
    google_merchant_center: false
    bing_merchant_center: false
    facebook_shop: false
    instagram_shopping: false
    pinterest_shopping: false
    amazon: false                        # if also selling there
  
  faceted_navigation:
    facets: []                           # color, size, brand, price_range, rating, etc.
    facet_handling_strategy: ""          # selective_indexing, canonical_to_main, robots_block
  
  international:
    sells_internationally: false
    countries_served: []
    currencies_supported: []
    languages_supported: []

3. Product Page Optimization

Product pages are the foundation. Each must optimize for:

3.1 Product Page Structure

<main itemscope itemtype="https://schema.org/Product">
  <!-- Breadcrumb -->
  <nav aria-label="Breadcrumb">
    <ol>
      <li><a href="/">Home</a></li>
      <li><a href="/category/">Category</a></li>
      <li>Product Name</li>
    </ol>
  </nav>
  
  <!-- Main product info -->
  <header>
    <h1 itemprop="name">Product Name</h1>
    <div class="price" itemprop="offers" itemscope itemtype="https://schema.org/Offer">
      <span itemprop="price">29.99</span>
      <meta itemprop="priceCurrency" content="USD">
      <link itemprop="availability" href="https://schema.org/InStock">
    </div>
    <div class="rating" itemprop="aggregateRating" itemscope itemtype="https://schema.org/AggregateRating">
      <span itemprop="ratingValue">4.7</span>
      ★ (<span itemprop="reviewCount">127</span> reviews)
    </div>
  </header>
  
  <!-- Product imagery -->
  <section class="product-images">
    <img itemprop="image" src="/products/main-1200.webp" 
         alt="Product Name in primary color from main angle"
         srcset="/products/main-400.webp 400w, /products/main-800.webp 800w, /products/main-1200.webp 1200w"
         sizes="(max-width: 768px) 100vw, 50vw">
    <!-- Additional angle images -->
  </section>
  
  <!-- Product description -->
  <section itemprop="description">
    <h2>About this product</h2>
    <p>Substantive description with specifications, use cases, materials, and benefits.</p>
  </section>
  
  <!-- Product specifications -->
  <section class="specifications">
    <h2>Specifications</h2>
    <dl>
      <dt>Brand</dt>
      <dd itemprop="brand">Brand Name</dd>
      <dt>SKU</dt>
      <dd itemprop="sku">SKU-001</dd>
      <dt>MPN</dt>
      <dd itemprop="mpn">MFG-001</dd>
      <dt>Material</dt>
      <dd>Specific material</dd>
    </dl>
  </section>
  
  <!-- Variants -->
  <section class="variants">
    <h2>Choose options</h2>
    <!-- Size, color, etc. selectors -->
  </section>
  
  <!-- Reviews -->
  <section class="reviews">
    <h2>Customer Reviews (127)</h2>
    <!-- Individual review listings with Review schema -->
  </section>
  
  <!-- Related products -->
  <section class="related">
    <h2>You might also like</h2>
    <!-- Related product listings -->
  </section>
  
  <!-- Q&A -->
  <section class="qa">
    <h2>Questions and Answers</h2>
    <!-- Q&A with Question/Answer schema -->
  </section>
</main>

3.2 Product Schema (Comprehensive)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "@id": "https://example.com/products/widget/#product",
  "name": "Premium Widget",
  "description": "Comprehensive 500-1000 character description focusing on what the product is, what it's for, and key differentiators.",
  "image": [
    "https://example.com/products/widget-1x1.jpg",
    "https://example.com/products/widget-4x3.jpg",
    "https://example.com/products/widget-16x9.jpg"
  ],
  "brand": {
    "@type": "Brand",
    "name": "BrandName",
    "logo": "https://example.com/brand-logo.png"
  },
  "manufacturer": {
    "@type": "Organization",
    "name": "Manufacturer Name"
  },
  "sku": "WID-001",
  "mpn": "MFG-WID-001",
  "gtin13": "1234567890123",
  "color": "Blue",
  "material": "Stainless Steel",
  "size": "Large",
  "weight": {
    "@type": "QuantitativeValue",
    "value": 1.5,
    "unitCode": "KGM"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/widget/",
    "priceCurrency": "USD",
    "price": "29.99",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": {"@id": "https://example.com/#organization"},
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": 5.00,
        "currency": "USD"
      },
      "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "US"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": {
          "@type": "QuantitativeValue",
          "minValue": 0,
          "maxValue": 1,
          "unitCode": "DAY"
        },
        "transitTime": {
          "@type": "QuantitativeValue",
          "minValue": 2,
          "maxValue": 5,
          "unitCode": "DAY"
        }
      }
    },
    "hasMerchantReturnPolicy": {
      "@type": "MerchantReturnPolicy",
      "applicableCountry": "US",
      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
      "merchantReturnDays": 30,
      "returnMethod": "https://schema.org/ReturnByMail",
      "returnFees": "https://schema.org/FreeReturn"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "127",
    "bestRating": "5",
    "worstRating": "1"
  },
  "review": [
    {
      "@type": "Review",
      "author": {"@type": "Person", "name": "Customer Name"},
      "datePublished": "2026-04-15",
      "reviewBody": "Detailed review text from actual customer.",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5"
      }
    }
  ]
}
</script>

3.3 Product Variants

For products with variants (color, size, etc.):

Pattern A: Single page with variant selectors

Pattern B: Variant-specific URLs

Pattern C: Hybrid

For Pattern B/C, use hasVariant/isVariantOf:

{
  "@type": "Product",
  "@id": "https://example.com/products/widget-blue-large/",
  "name": "Widget — Blue, Large",
  "isVariantOf": {
    "@type": "ProductGroup",
    "@id": "https://example.com/products/widget/",
    "productGroupID": "WIDGET-FAMILY"
  },
  "color": "Blue",
  "size": "Large"
}

3.4 Out-of-Stock Handling

Critical decision: what happens to product pages when out of stock?

Option A: Keep page indexed with availability change

"availability": "https://schema.org/OutOfStock"

Best for: Products coming back in stock soon. Allows Google to surface alternatives via "similar items."

Option B: Replace with similar product redirect

301 to most similar in-stock product. Best for: Permanently discontinued products.

Option C: Show "out of stock" with notify-when-available

Maintain page with email signup. Schema shows OutOfStock. Best for: Seasonal or restocking products.

Option D: 404 / 410

Best for: Truly retired products with no replacement. Use sparingly to avoid link equity loss.

Anti-pattern: Showing 404 for temporarily out-of-stock products. Loses long-term equity.


4. Category Page Optimization

Category pages often have higher commercial intent than product pages and rank for higher-volume queries.

4.1 Category Page Structure

<main>
  <header>
    <h1>Running Shoes</h1>
    <p class="category-intro">{{200-400 word substantive introduction to the category}}</p>
  </header>
  
  <!-- Faceted navigation -->
  <aside class="filters">
    <!-- Brand, size, price, color, etc. filters -->
  </aside>
  
  <!-- Product grid -->
  <section class="products">
    <!-- Product cards with brief schema each -->
  </section>
  
  <!-- Pagination -->
  <nav class="pagination">
    <!-- Page links -->
  </nav>
  
  <!-- Buying guide / supporting content -->
  <section class="buying-guide">
    <h2>How to choose running shoes</h2>
    <p>{{Substantial content helping users decide}}</p>
  </section>
  
  <!-- Related categories -->
  <section class="related-categories">
    <h2>Related Categories</h2>
    <ul>
      <li><a href="/trail-running-shoes/">Trail Running Shoes</a></li>
      <li><a href="/running-apparel/">Running Apparel</a></li>
    </ul>
  </section>
  
  <!-- FAQ -->
  <section class="faq">
    <h2>Frequently Asked Questions</h2>
    <!-- FAQ schema markup -->
  </section>
</main>

4.2 Category Schema

{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "Running Shoes",
  "description": "Browse running shoes from top brands.",
  "url": "https://example.com/running-shoes/",
  "mainEntity": {
    "@type": "ItemList",
    "numberOfItems": 247,
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "url": "https://example.com/products/runner-pro/"
      }
      // ... more items
    ]
  },
  "breadcrumb": {
    "@type": "BreadcrumbList",
    "itemListElement": [...]
  }
}

4.3 Category Content Strategy

Category pages often compete with editorial content for category-level queries. To win:


5. Faceted Navigation

The hardest e-commerce SEO problem. See framework-technicalseo.md Section 11 for foundations.

5.1 The Problem

A category with 5 facets × 5 values each = 5^5 = 3,125 URL combinations per category. With 100 categories, that's 312,500 URLs. Most have:

5.2 Faceted Navigation Strategy Tiers

Tier 1: Selectively indexed combinations

High-value facet combinations get their own indexed pages:

These pages have:

Tier 2: Canonical to base category

Combinations without significant search demand:

Tier 3: Robots-blocked combinations

Truly long-tail with crawl budget concerns:

5.3 Implementation

<!-- On selectively-indexed page /running-shoes/red/ -->
<link rel="canonical" href="https://example.com/running-shoes/red/">

<!-- On long-tail combination /running-shoes/?color=red&size=10&brand=nike -->
<link rel="canonical" href="https://example.com/running-shoes/">
<meta name="robots" content="noindex,follow">
# robots.txt — block deep facet combinations
User-agent: *
Disallow: /*?*facet1=*&*facet2=*&*facet3=*

5.4 Pagination Within Categories

For paginated category pages:


6. Google Merchant Center

Merchant Center provides the data feed enabling Google Shopping (free and paid listings).

6.1 Setup

merchant_center_setup:
  - Create Merchant Center account at merchants.google.com
  - Verify business
  - Verify website ownership (HTML upload, meta tag, GA4, GTM, or DNS)
  - Set up tax and shipping settings
  - Submit product feed
  - Wait for product approval
  - Connect to Google Ads if running paid Shopping

6.2 Product Feed

The product feed provides product data to Google. Methods:

Method A: Manual file upload

Method B: Scheduled fetch

Method C: Content API

Method D: Platform integration

6.3 Required Feed Attributes

required_feed_fields:
  id: "Unique product identifier"
  title: "Product title (matches site)"
  description: "Product description"
  link: "Product page URL"
  image_link: "Main product image URL"
  availability: "in stock | out of stock | preorder | backorder"
  price: "29.99 USD"
  brand: "Brand name"
  
required_for_eligibility:
  gtin: "Global Trade Item Number (UPC, EAN, etc.) — required for branded products"
  mpn: "Manufacturer Part Number — required if no GTIN"
  
recommended:
  product_type: "Category hierarchy"
  google_product_category: "Google's category taxonomy"
  condition: "new | refurbished | used"
  shipping: "Shipping cost details"
  shipping_weight: "Weight for shipping calculation"
  size: "If applicable"
  color: "If applicable"
  material: "If applicable"
  pattern: "If applicable"
  age_group: "newborn | infant | toddler | kids | adult"
  gender: "If applicable"
  custom_label_0 through custom_label_4: "For Shopping campaign segmentation"

6.4 Free vs Paid Listings

Free listings: Products approved in Merchant Center appear in Shopping tab and other surfaces organically.

Paid listings (Shopping ads): Products in Google Ads Shopping campaigns appear in main SERP and Shopping with promoted positioning.

Both benefit from:


7. Product Reviews

Reviews drive conversions and rankings. Implementation matters.

7.1 Review Acquisition

See framework-localseo.md Section 6 for review system fundamentals (FTC compliance, review gating prohibition, etc.). Same principles apply with e-commerce specifics:

7.2 Review Schema

<script type="application/ld+json">
{
  "@type": "Product",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "127"
  },
  "review": [
    {
      "@type": "Review",
      "author": {"@type": "Person", "name": "Customer Name"},
      "datePublished": "2026-04-15",
      "reviewBody": "Genuine review text.",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5",
        "bestRating": "5",
        "worstRating": "1"
      }
    }
  ]
}
</script>

Critical: Review schema must reflect actual visible reviews on the page. Fabricated review schema is a manual action trigger.

7.3 Review Display

7.4 Review Aggregation Across Variants

For products with variants, decisions:


8. Stack-Specific Implementation

8.1 Shopify

shopify_ecommerce_seo:
  
  built_in_features:
    - Auto-generated XML sitemap
    - Auto-generated product schema (basic)
    - Mobile-responsive themes
    - HTTPS by default
  
  optimizations_to_implement:
    - Custom theme schema (more comprehensive than default)
    - SEO apps: Smart SEO, JSON-LD for SEO, SEO Manager
    - Image optimization apps (Plug in SEO, Crush.pics)
    - Review apps: Yotpo, Judge.me, Stamped.io
    - URL structure: avoid /products/ prefix where possible (Shopify limitation)
  
  faceted_navigation:
    shopify_pattern: "Filter pages have ?filter=value parameters"
    optimization: "Use selective indexing via Shopify Search & Discovery app"
    or: "Custom theme with curated facet pages"
  
  google_merchant_center:
    method: "Google Channel app (official integration)"
    or: "Third-party feed apps (Simprosys, Feed for Google Shopping)"
  
  performance:
    common_issues: "App bloat, theme bloat, image weight"
    solutions: "Audit installed apps, optimize theme, use Shopify image transformations"

8.2 WooCommerce

woocommerce_ecommerce_seo:
  
  recommended_plugins:
    - "Rank Math Pro (e-commerce module)"
    - "Yoast SEO Premium with WooCommerce SEO add-on"
    - "Schema Pro for advanced schema"
    - "Yotpo or Judge.me for reviews"
  
  schema_implementation:
    - Rank Math/Yoast handle Product schema
    - May need custom code for shipping schema additions
    - Review schema via review plugin
  
  faceted_navigation:
    common_pattern: "WooCommerce filtering creates ?filter_attribute=value URLs"
    plugins: "WooCommerce Filter, Product Filters, Aelia"
    seo_handling: "Selective indexing strategy required"
  
  performance:
    issues: "WooCommerce + heavy theme + many plugins = slow"
    solutions: "Lightweight theme (Astra Pro, GeneratePress), object cache (Redis), CDN"
  
  google_merchant_center:
    plugins: "Google Listings & Ads (official), CTX Feed, Product Feed Pro"

8.3 BigCommerce / Magento / Custom

bigcommerce:
  - Built-in schema generally good
  - Native Google Shopping integration
  - Performance generally solid
  - Custom theme work for advanced SEO

magento:
  - Powerful but complex
  - Requires extension for comprehensive SEO (Mageplaza, Yotpo, etc.)
  - Performance optimization critical
  - Multi-site complexity

custom:
  - Full control over SEO implementation
  - Build comprehensive schema from scratch
  - Implement faceted navigation strategy
  - Manage feed for Merchant Center

9. International E-commerce

For e-commerce serving multiple countries:

9.1 URL Structure

See framework-international.md Section 2 for foundations. E-commerce specifics:

9.2 Currency and Pricing

<!-- Per region/locale -->
<span class="price" itemprop="price">29.99</span>
<meta itemprop="priceCurrency" content="USD">

<!-- For UK version -->
<span class="price" itemprop="price">23.99</span>
<meta itemprop="priceCurrency" content="GBP">

Each locale should have its own product schema with appropriate currency.

9.3 International Shipping in Schema

"shippingDetails": {
  "@type": "OfferShippingDetails",
  "shippingDestination": [
    {"@type": "DefinedRegion", "addressCountry": "US"},
    {"@type": "DefinedRegion", "addressCountry": "CA"}
  ]
}

10. Audit Mode

# Criterion Pass/Fail
EC1 Product schema implemented across catalog
EC2 All required Product fields populated
EC3 GTIN/MPN provided for branded products
EC4 Shipping and returns schema present
EC5 Aggregate rating reflects actual reviews
EC6 Out-of-stock handling defined and consistent
EC7 Product variants handled correctly
EC8 Category pages have substantive content
EC9 Faceted navigation strategy implemented
EC10 Faceted URL canonicalization correct
EC11 Pagination handled with self-canonicals
EC12 Google Merchant Center connected with feed
EC13 Bing Merchant Center connected (optional)
EC14 Review system FTC compliant
EC15 Review schema validated
EC16 Image optimization (modern formats, responsive)
EC17 International SEO implemented (if applicable)
EC18 Performance optimized for product pages
EC19 Mobile-friendly verified
EC20 Internal linking surfaces top products

Score: 20. World-class e-commerce SEO: 18+/20.


11. Common Mistakes

  1. Auto-generated thin product descriptions — manufacturer content duplicated across thousands of sites
  2. Ignoring out-of-stock — pages return 404 or have stale OutOfStock with no recovery
  3. Faceted navigation explosion — every facet combination indexed, crawl budget destroyed
  4. No GTIN in feed — products rejected from Merchant Center
  5. Review schema without actual reviews — manual action trigger
  6. Variant strategy mismatch with search demand — missing or capturing wrong queries
  7. Category pages with no content — just product grid, no introductory or buying guide content
  8. Heavy product page — too many images, scripts, third-parties slowing page
  9. Inconsistent pricing across schema and page — Merchant Center disapproval
  10. No internationalization — selling globally with single-region SEO

End of Framework Document

Document version: 1.0

Companion documents:

Want this framework implemented on your site?

ThatDevPro ships these frameworks as productized services. SDVOSB-certified veteran owned. Cassville, Missouri.

See Engine Optimization service ›