VritantAI
All articles
GEO2 July 2026 · 5 min read · 890 words

JSON-LD for Product Pages: A Copy-Paste Schema Library for Shopify and WooCommerce

Complete, accurate JSON-LD is the highest-leverage change a product page can make for AI citation accuracy. This is a copy-paste schema library covering the types that actually matter.

Structured data is the primary signal AI answer engines use when constructing factual claims about your products. If your product pages are missing JSON-LD or have it partially filled, the model fills the gaps with inferences, and those inferences are where hallucinations start. This is a copy-paste schema library for Shopify and WooCommerce product pages, covering the types that actually matter for AI citation.

Why JSON-LD matters more for AI search than for Google

Google has supported structured data for over a decade, but the stakes were always about rich snippets: stars, prices, availability in the SERP. For AI answer engines like Perplexity and ChatGPT, the stakes are different. These engines are trying to synthesise a factual answer from your page, and structured data is the clearest, most parseable signal you can give them. A page with complete Product JSON-LD is far less likely to have its price fabricated, its features misattributed, or its availability misreported.

The GEO scoring model VritantAI Discover uses weights structured data at 50% of the overall score precisely because it is the highest-leverage single change a product page can make for AI citation accuracy.

The four schema types that matter for product pages

Product schema

This is the core. Every product page should have a Product entity with at minimum: name, description, brand, image, and a nested offers block. Without offers, no engine can reliably extract pricing without inferring it from page copy.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Your Product Name",
  "description": "One factual sentence about what this product does.",
  "brand": {
    "@type": "Brand",
    "name": "Your Brand Name"
  },
  "image": "https://yourstore.com/product-image.jpg",
  "sku": "SKU-001",
  "offers": {
    "@type": "Offer",
    "url": "https://yourstore.com/products/your-product",
    "priceCurrency": "INR",
    "price": "1299",
    "availability": "https://schema.org/InStock",
    "priceValidUntil": "2027-01-01",
    "seller": {
      "@type": "Organization",
      "name": "Your Store Name"
    }
  }
}

The priceValidUntil field is worth adding even if you set it a year out. It tells the model your price is intentionally current, not a stale cache.

AggregateRating schema

If your product has reviews, this signals social proof to AI engines in a parseable format. It also reduces the chance the model invents a rating from mentions in review copy.

"aggregateRating": {
  "@type": "AggregateRating",
  "ratingValue": "4.6",
  "reviewCount": "128",
  "bestRating": "5",
  "worstRating": "1"
}

Add this as a nested field inside your Product block. Do not add it as a standalone type or AI engines may not associate it with the product.

BreadcrumbList schema

Breadcrumb schema helps AI engines understand where the product sits in your catalog hierarchy. This matters for category-level queries: if someone asks Perplexity for the best wireless earbuds under ₹3,000, a product with a clean breadcrumb path from root to category to product is easier to surface correctly.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://yourstore.com"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Electronics",
      "item": "https://yourstore.com/electronics"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Wireless Earbuds",
      "item": "https://yourstore.com/electronics/wireless-earbuds"
    }
  ]
}

Organization schema on your homepage

This belongs on your homepage or about page, not on product pages. It establishes your brand as a named entity with consistent properties. AI engines use this to associate your products with your brand correctly, especially when your brand name is generic or close to another company.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Brand Name",
  "url": "https://yourstore.com",
  "logo": "https://yourstore.com/logo.png",
  "sameAs": [
    "https://www.linkedin.com/company/your-brand",
    "https://twitter.com/yourbrand",
    "https://www.instagram.com/yourbrand"
  ]
}

The sameAs array is what connects your schema to your entity graph across platforms. Include every social profile and authoritative listing where your brand appears.

How to add JSON-LD in Shopify

In Shopify, add JSON-LD blocks to your product.liquid or product.json template inside a <script type=“application/ld+json”> tag in the page <head>. Use Liquid variables to populate dynamic fields like price and availability so the schema updates automatically when your store data changes. Avoid hardcoding price values in schema; they will go stale.

How to add JSON-LD in WooCommerce

WooCommerce generates basic Product schema out of the box, but it is often incomplete. Plugins like Rank Math or Yoast SEO let you extend the schema with additional fields through their UI. For full control, add a custom schema block via the wpseo_schema_graph filter or a lightweight custom plugin that outputs your JSON-LD in the page head using wp_head.

Three mistakes that break schema silently

  • Hardcoded prices. If your schema price does not match your actual page price, AI engines distrust the schema and fall back to parsing copy. Keep prices dynamic.
  • Availability set to InStock unconditionally. If your schema always says InStock but the product goes out of stock, the model will cite wrong availability and buyers will be misled. Tie the availability field to your actual stock status.
  • Missing the seller field inside Offer. Without a seller field, the model may attribute the offer to a third party or leave the seller unknown. Always include it.

Audit your product schema and fix it automatically

VritantAI Discover crawls your Shopify or WooCommerce product pages, scores your JSON-LD completeness and accuracy, generates patch diffs, and deploys approved fixes directly to your store.

Run a free schema audit with Discover →

Frequently asked questions

Does JSON-LD schema directly improve my AI citation rate?

It is the highest-leverage single change for accuracy. Complete, accurate structured data gives AI engines a parseable ground truth for your product facts, which reduces the likelihood of hallucinated prices, features, or availability. It does not guarantee citation, but it dramatically improves the accuracy of citations that do occur.

Do I need separate schema for each product variant?

For variants with meaningfully different prices or availability, yes. A product with a 100-rupee price range between the cheapest and most expensive variant should either have per-variant offers or use the lowPrice and highPrice fields in an AggregateOffer block rather than a single price that represents only one variant.

What validation tool should I use to check my schema?

Google's Rich Results Test and Schema.org's validator both check for structural errors. Neither tells you whether your schema values match your actual page content, which is the more important check for AI citation accuracy. For that, you need a tool that compares schema values against live product data.

How often should I update product schema?

Any time you change a price, a product name, availability status, or a core feature. Treating schema as a one-time setup and then ignoring it is how stale schema becomes a hallucination source.