AI AEO SEO titles for woocommerce plugin

WooCommerce Product Schema: The Complete Guide for 2026

9 min read

Schema markup is one of those things that every SEO guide mentions and almost nobody implements properly. Most WooCommerce store owners either skip it entirely, rely on whatever their SEO plugin generates by default, or add it once and never revisit it.

In 2026, that approach is no longer good enough โ€” not because Google has changed its ranking algorithm, but because AI-powered search engines like ChatGPT, Perplexity, and Google’s AI Overviews have become a meaningful source of product discovery. And those systems rely almost entirely on structured data to understand and recommend products.

This guide covers every schema type that matters for WooCommerce products, what each field actually does, what most plugins get wrong, and how to verify your output is correct.


Why Product Schema Matters More Than Ever

Google’s standard search results still matter. But increasingly, buyers are asking conversational questions rather than typing keywords. “What’s a good waterproof jacket for hiking under ยฃ100?” is not a keyword search. It is a query to an AI assistant that reads structured product data, synthesizes it, and responds with specific product citations.

If your product schema is incomplete, those citations never include your store.

The gap between stores that get cited and stores that don’t usually comes down to three things:

  1. Missing alternateName fields (critical for multilingual matching)
  2. No FAQPage schema at the product level
  3. Incomplete offers data โ€” missing currency, availability, or condition

Fix those three things and your products become dramatically more citable.


The Six Schema Types WooCommerce Stores Need

1. Product Schema (Core)

This is the foundation. Every WooCommerce product page should emit a Product schema block with at minimum these fields:

json

{
  "@context": "https://schema.org",
  "@type": "Product",
  "@id": "https://yourstore.com/product/nike-air-zoom-pegasus-40",
  "name": "Nike Air Zoom Pegasus 40 Men Blue",
  "description": "The Nike Air Zoom Pegasus 40 delivers a smooth, responsive ride for daily training...",
  "sku": "NK-AZP40-M-BLU",
  "brand": {
    "@type": "Brand",
    "name": "Nike"
  },
  "image": ["https://yourstore.com/images/pegasus-40-1.jpg"],
  "url": "https://yourstore.com/product/nike-air-zoom-pegasus-40"
}

What most WooCommerce installs are missing:

  • @id โ€” a canonical URL identifier that links schema entities across pages
  • brand โ€” structured as a Brand object, not just a string
  • sku โ€” critical for product matching across AI knowledge graphs

WooCommerce outputs some of this by default but frequently omits @id and structures brand incorrectly.


2. alternateName (The Most Overlooked Field)

This is the field that almost no WooCommerce plugin generates โ€” and it is arguably the most important one for product discovery in 2026.

alternateName in Schema.org accepts language-tagged values. This means you can tell an AI engine that your product is known by different names in different languages, without creating separate pages or URLs.

json

"alternateName": [
  { "@value": "Nike Air Zoom Pegasus 40 Herren Blau", "@language": "de" },
  { "@value": "Nike Air Zoom Pegasus 40 Homme Bleu", "@language": "fr" },
  { "@value": "Nike Air Zoom Pegasus 40 Hombre Azul", "@language": "es" },
  { "@value": "ู†ุงูŠูƒ ุงูŠุฑ ุฒูˆูˆู… ุจูŠุบุงุณูˆุณ ูคู ", "@language": "ar" },
  { "@value": "Nike Air Zoom Pegasus 40 Rijali Azraq", "@language": "ar-Latn" }
]

When a French buyer asks Perplexity for running shoes, the AI reads alternateName fields across product pages and matches language. Without this field, your product simply does not exist in French-language queries โ€” regardless of whether you have a French version of your site.

Why translation plugins don’t solve this:

WPML and Weglot create duplicate pages at /fr/, /de/, and so on. Each language version is a separate URL. The English alternateName on your base product still has nothing in it. The French page has its own schema, but it only helps French-speaking crawlers that happen to index that specific URL.

alternateName is different because it lives on the canonical product URL. One page, all languages, readable by any crawler.


3. Offers Schema

Offers is where most stores lose points for precision. The bare minimum is price and currency. The full implementation adds availability, condition, and URL:

json

"offers": {
  "@type": "Offer",
  "price": "79.99",
  "priceCurrency": "EUR",
  "availability": "https://schema.org/InStock",
  "itemCondition": "https://schema.org/NewCondition",
  "url": "https://yourstore.com/product/nike-air-zoom-pegasus-40",
  "priceValidUntil": "2026-12-31"
}

Common mistakes:

  • price as a formatted string like “โ‚ฌ79.99” instead of a plain decimal โ€” this breaks parsing
  • Missing priceCurrency โ€” AI engines cannot interpret a price without knowing the currency
  • availability left empty โ€” products with no availability signal are treated as unknown stock status
  • Using text values for availability instead of Schema.org URIs

4. FAQPage Schema (Per Product)

This is the schema type that directly feeds AI assistant answers. When a buyer asks ChatGPT “is the Nike Pegasus 40 good for wide feet?”, the AI looks for FAQPage schema on product pages and cites the acceptedAnswer directly.

json

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is this product used for?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The Nike Air Zoom Pegasus 40 is designed for daily running and training. It features a React foam midsole for responsive cushioning and a mesh upper for breathability."
      }
    },
    {
      "@type": "Question",
      "name": "Is this product currently in stock?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "This product is currently in stock."
      }
    },
    {
      "@type": "Question",
      "name": "Where can I buy this product?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "This product is available for purchase directly from our store."
      }
    }
  ]
}

The questions do not need to be clever. They need to be the questions buyers actually ask. Availability, usage, materials, variations, and suitability are the most commonly cited FAQ categories in AI product answers.

Important: Generate FAQ schema per product, not per category or site-wide. A generic FAQ about your store is not useful to AI engines trying to answer questions about a specific product.


5. AggregateRating and Review Schema

AI assistants treat reviews as trust signals. A product with 300 reviews at 4.6 stars is cited far more confidently than one with no rating data, even if the unreviewed product is objectively better.

WooCommerce has all this data. The question is whether it is structured correctly in your schema.

json

"aggregateRating": {
  "@type": "AggregateRating",
  "ratingValue": "4.6",
  "reviewCount": "312",
  "bestRating": "5",
  "worstRating": "1"
},
"review": [
  {
    "@type": "Review",
    "author": { "@type": "Person", "name": "Sarah M." },
    "reviewRating": {
      "@type": "Rating",
      "ratingValue": "5",
      "bestRating": "5",
      "worstRating": "1"
    },
    "reviewBody": "Great fit for wide feet, very comfortable for long runs.",
    "datePublished": "2026-02-14"
  }
]

What to check: Make sure reviewCount is an integer, not a string with formatting. Make sure ratingValue is a decimal, not a fraction or a formatted display string. These are the most common parsing failures.


6. BreadcrumbList Schema

Breadcrumb schema tells AI crawlers where a product sits within your store’s hierarchy. It helps answer category-level queries โ€” “show me waterproof hiking jackets” โ€” by giving AI engines a structured map of your catalog.

json

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Running",
      "item": "https://yourstore.com/category/running"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Running Shoes",
      "item": "https://yourstore.com/category/running-shoes"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Nike Air Zoom Pegasus 40 Men Blue",
      "item": "https://yourstore.com/product/nike-air-zoom-pegasus-40"
    }
  ]
}

This is typically generated correctly by WooCommerce and most SEO plugins. It is worth verifying but rarely the critical gap.


How to Validate Your WooCommerce Schema

Google Rich Results Test

Go to search.google.com/test/rich-results and enter any product URL. It shows you exactly which schema types Google detected, which fields are present, and which are missing or invalid.

Look specifically for:

  • Is Product detected?
  • Is offers complete โ€” price, currency, availability?
  • Are there any warnings on aggregateRating?
  • Is FAQPage present?

If FAQPage does not appear, your products have no FAQ schema. That is the highest-priority fix.

Schema.org Validator

Go to validator.schema.org. This gives a more detailed view than Google’s tool โ€” it shows exactly which properties are recognized, which are deprecated, and which are missing from the expected schema definition.

View Source Check

The fastest manual check: open any product page, view source, and search for application/ld+json. Every JSON-LD block on the page will appear. Count them and check what types are present.

A well-optimized WooCommerce product should have at minimum three blocks: Product, FAQPage, and BreadcrumbList.


What the Default WooCommerce + Yoast Setup Gets Right and Wrong

Gets right:

  • Basic Product schema with name, price, currency
  • AggregateRating if reviews exist
  • BreadcrumbList

Gets wrong or omits:

  • alternateName โ€” completely absent
  • FAQPage at the product level โ€” not generated
  • @id canonical identifier โ€” inconsistent
  • brand as a structured Brand object โ€” often missing
  • Language-tagged schema for multilingual stores โ€” not supported

This is not a criticism of Yoast โ€” it was built for a different era of search. The gap is structural, not a quality issue.


The Practical Fix: What to Prioritize

If you have limited time, fix in this order:

Priority 1 โ€” FAQPage schema on your top 20 products. This has the highest impact on AI assistant citations. Even basic FAQ schema โ€” five questions per product โ€” dramatically increases how often your products appear in AI-generated answers.

Priority 2 โ€” alternateName for every active language. If you sell in more than one language, or plan to, this is the field that determines whether your products exist in multilingual AI search. It requires automation to do at scale โ€” manually writing native-language aliases for 200 products in 10 languages is not realistic.

Priority 3 โ€” Complete your offers data. Check every product for missing priceCurrency, missing availability, and malformed price values. These are quick fixes with immediate impact.

Priority 4 โ€” Structured brand fields. Make sure brand is a Brand object with a name property, not a plain string or missing entirely.


A Note on Automation

Generating alternateName fields manually is not practical at any real catalog size. Writing native-language aliases for 50 products in 10 languages means 500 individual alias strings โ€” before you start on FAQ schema.

This is why we built GutenLab AI SEO Titles for WooCommerce. It uses Google Gemini to generate language-tagged alternateName aliases and per-product FAQ schema automatically, from your existing product data. Free on WordPress.org, requires your own Gemini API key (free tier sufficient for most stores).

The schema validation, brand-name locking, and human review workflow are all built in. Nothing publishes without your approval.


Summary Checklist

Use this to audit any WooCommerce product page:

  • Product schema present with @id, name, brand, sku, description
  • offers includes price, priceCurrency, availability, itemCondition
  • alternateName populated with language-tagged aliases for every active language
  • FAQPage schema present with at least 3โ€“5 product-specific questions
  • AggregateRating present if the product has reviews
  • BreadcrumbList reflects correct category hierarchy
  • No validation errors in Google Rich Results Test
  • At least 3 JSON-LD blocks in page source

wpTruss covers WooCommerce performance, structured data, and AI search optimization for store owners and developers. Find our free tools at wptruss.com/plugins.


Tags: WooCommerce Schema, Product Schema, Schema.org, Structured Data, AEO, alternateName, FAQPage, WooCommerce SEO, JSON-LD