Product schema for agentic commerce requires six schema types working together: Product, Offer, AggregateRating, Review, FAQPage, and ReturnPolicy. Standard implementations typically include only the first two. The missing four are what separate products that get recommended by AI agents from products that get ignored. This guide gives you the complete JSON-LD code for all six types, an attribute fill rate audit framework, and a validation workflow that confirms your implementation is citation-ready, not just technically valid.
If you already understand why agentic commerce schema matters and want the actual code, you are in the right place. This guide covers the exact implementation your developers or in-house SEO team needs to execute. For the strategy layer behind this work, read the companion piece on how to optimize product pages for AI agents first.
⚡ The Quick Take
| Standard Product Schema | Agentic-Ready Product Schema |
|---|---|
| 2 schema types: Product + Offer | 6 schema types: Product, Offer, AggregateRating, Review, FAQPage, ReturnPolicy |
| Basic attributes: name, price, availability | Full attribute set: GTIN, MPN, brand, category, dimensions, warranty, return policy |
| Static implementation: set and forget | Maintained schema: price, availability, and ratings updated continuously |
| Goal: Google Rich Results eligibility | Goal: AI agent recommendation eligibility across ChatGPT, Perplexity, and Google AIO |
| Attribute fill rate: typically 30-50% | Attribute fill rate: 95%+ required to avoid citation penalty |
Bottom line: AI agents need structured, machine-readable answers across six decision criteria before they recommend a product. If your schema only covers price and availability, you are handing the recommendation to a competitor who filled in the rest.
đź’ˇ Pro Tip: The 95% attribute fill rate threshold is not arbitrary. AI agents that pull product data for purchase recommendations evaluate completeness as a trust signal. Products that fall below 80% fill rate see a measurable penalty in recommendation frequency, regardless of how good the product actually is. You are not just filling in fields for Google. You are building the data layer that AI agents read to decide what to suggest to buyers.
đź“‘ Table of Contents
→ Standard vs. Agentic-Ready Schema: What Most Implementations Miss
→ The Complete Product Schema JSON-LD Code Block
→ Offer Schema: Price, Availability, and Seller Attributes
→ AggregateRating and Review Schema Code Blocks
→ FAQPage and ReturnPolicy Schema Code Blocks
→ The Complete Stacked JSON-LD Block
→ Attribute Fill Rate: Audit It, Fix It, Maintain It
→ Validation Workflow: From Valid to Citation-Ready
→ Platform-Specific Implementation: WordPress, Shopify, Custom
→ Schema Maintenance: What to Update and When
→ The Bottom Line on Product Schema for Agentic Commerce
→ FAQ: Common Questions
Standard vs. Agentic-Ready Schema: What Most Implementations Miss
Standard product schema passes Google validation but fails the agentic commerce test. Most implementations include a Product type with name, description, image, and an Offer with price and availability. That satisfies Rich Results requirements. It does not satisfy what AI agents need to make a confident purchase recommendation on behalf of a buyer.
AI agents operating in an agentic commerce context do not just check whether a product is available. They compare return policies before recommending to risk-averse buyers. They verify social proof through review counts before recommending to new-to-brand buyers. They cross-reference unique identifiers (GTIN, MPN) against multiple product databases to confirm the listing is legitimate. Every missing field is a gap in the agent’s confidence model.
| Schema Field | Why AI Agents Need It |
|---|---|
| GTIN / MPN | Cross-references listing against product databases for authenticity and pricing comparison |
| AggregateRating | Confirms social proof before recommending to buyers who ask for “well-reviewed” options |
| ReturnPolicy | Resolves buyer risk objections without requiring the agent to visit a separate policy page |
| FAQPage | Answers product questions without forcing a follow-up crawl, keeping the agent on your data |
| priceValidUntil | Signals price freshness so agents do not flag your listing as potentially stale |
đź’ˇ Pro Tip: The gap between attribute-rich schema and generic product schema is not a matter of degree. It is a matter of eligibility. Products with comprehensive schema appear in AI recommendations 3-5x more frequently than products with minimal schema. The citation rate difference between attribute-rich and generic schema runs to more than 20 percentage points. You can read the full breakdown in the attribute-rich vs. generic schema analysis.
The Complete Product Schema JSON-LD Code Block
The Product schema block carries the core identity layer for your product. Fill every field. Fields left empty or with placeholder values actively degrade your attribute fill rate score. The code below includes every recommended attribute for agentic commerce eligibility.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Your Product Name",
"description": "A complete, keyword-rich description of the product.
Write 2-3 sentences that describe what it does, who it is for,
and its primary benefit. Do not truncate this field.",
"image": [
"https://yourdomain.com/images/product-main.jpg",
"https://yourdomain.com/images/product-angle2.jpg",
"https://yourdomain.com/images/product-angle3.jpg"
],
"sku": "YOUR-SKU-12345",
"mpn": "MANUFACTURER-PART-NUMBER",
"gtin12": "012345678901",
"gtin13": "0012345678901",
"brand": {
"@type": "Brand",
"name": "Your Brand Name"
},
"category": "Primary Product Category > Subcategory",
"color": "Midnight Blue",
"material": "Premium Nylon",
"weight": {
"@type": "QuantitativeValue",
"value": "2.5",
"unitCode": "LBR"
},
"height": {
"@type": "QuantitativeValue",
"value": "12",
"unitCode": "INH"
},
"width": {
"@type": "QuantitativeValue",
"value": "8",
"unitCode": "INH"
},
"depth": {
"@type": "QuantitativeValue",
"value": "4",
"unitCode": "INH"
},
"inProductGroupWithID": "PRODUCT-GROUP-ID",
"isVariantOf": {
"@type": "ProductGroup",
"name": "Parent Product Name",
"productGroupID": "PRODUCT-GROUP-ID"
},
"manufacturer": {
"@type": "Organization",
"name": "Manufacturer Name"
},
"countryOfOrigin": {
"@type": "Country",
"name": "United States"
},
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "Warranty",
"value": "2-year limited warranty"
},
{
"@type": "PropertyValue",
"name": "Certification",
"value": "CE Certified"
}
]
}Product Schema Field Priorities
Not all Product fields carry equal weight for agentic recommendation eligibility. Tier 1 fields are required. Missing any Tier 1 field drops your fill rate below the threshold where AI agents apply a citation penalty. Tier 2 fields push you into the top-performing range. Tier 3 fields add depth that strengthens agent confidence without being penalized if absent.
| Tier | Fields |
|---|---|
| Tier 1 (Required) | name, description, image, sku, brand, category, Offer (nested) |
| Tier 2 (High Impact) | gtin12 or gtin13, mpn, AggregateRating (nested), color, material, weight, dimensions |
| Tier 3 (Authority Builders) | manufacturer, countryOfOrigin, additionalProperty (warranty, certifications), isVariantOf |
đź’ˇ Pro Tip: If you only have one GTIN type, use gtin14 as the universal container field. It accepts any GTIN length and avoids validation errors from using gtin12 with a 13-digit value. Always validate identifiers against the official GS1 registry before publishing.
🚀 Want Your Products Recommended by AI Agents?
AI Advantage Agency builds and maintains full agentic commerce schema stacks for e-commerce brands. We handle the implementation, the validation, and the ongoing maintenance so your product listings stay citation-ready as AI agents evolve.
Your competitors are already implementing this. Do not let schema be the reason they get the recommendation instead of you.
Offer Schema: Price, Availability, and Seller Attributes
Offer schema is where AI agents confirm a product is purchasable right now, at a known price, from a trusted seller. An Offer block with a stale price or missing priceValidUntil field signals to AI agents that your data may not be current. That kills recommendation eligibility faster than almost any other error.
{
"@type": "Offer",
"url": "https://yourdomain.com/products/your-product-slug/",
"priceCurrency": "USD",
"price": "149.00",
"priceValidUntil": "2025-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "Your Store Name",
"url": "https://yourdomain.com"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": "0",
"maxValue": "1",
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": "2",
"maxValue": "5",
"unitCode": "DAY"
}
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
}
},
"hasMerchantReturnPolicy": {
"@id": "#return-policy"
}
}Update priceValidUntil at minimum quarterly, and immediately after any pricing change. AI crawlers that find a priceValidUntil date in the past flag the entire Offer block as potentially unreliable. Many automated systems set this one year out and update it as part of a scheduled maintenance task. That works. What does not work is setting it once and forgetting it exists.
The availability field accepts only schema.org-defined values. Use https://schema.org/InStock, https://schema.org/OutOfStock, or https://schema.org/PreOrder. String values like “in stock” or “available” are not valid and generate Google Search Console warnings that roll into your overall structured data health score.
AggregateRating and Review Schema Code Blocks
AggregateRating is the social proof layer that AI agents check before recommending a product to a buyer who asks for “the best” or “most popular” option in a category. Without it, your product competes for those queries with one hand tied behind its back. Include both AggregateRating and at minimum one full Review block.
AggregateRating Schema
{
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "284",
"bestRating": "5",
"worstRating": "1"
}Both ratingValue and reviewCount are required for Google Rich Results eligibility. Many implementations include ratingValue but omit reviewCount, which produces a validation warning and reduces the rich result display. Include bestRating and worstRating even though they default to 5 and 1 respectively. Explicit values eliminate the ambiguity that AI agents apply when these fields are absent.
Individual Review Schema
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"name": "Review headline text goes here",
"reviewBody": "Full text of the review. Write at minimum 2-3 sentences
that describe the reviewer's experience with the product.
Do not abbreviate or truncate reviewBody.
AI agents read this field to assess sentiment and
product-use context.",
"datePublished": "2024-11-15",
"author": {
"@type": "Person",
"name": "Reviewer Name"
},
"publisher": {
"@type": "Organization",
"name": "Your Store Name"
}
}đź’ˇ Pro Tip: Include 3-5 individual Review blocks in your stacked schema, not just one. AI agents that process review sentiment look at the spread of individual reviews, not only the aggregate number. A product with 4.7 stars and five individual reviews visible in schema reads very differently than one with the aggregate only. Prioritize recent reviews (within 12 months) with detailed reviewBody text over older brief reviews.
FAQPage and ReturnPolicy Schema Code Blocks
FAQPage and ReturnPolicy are the two schema types most consistently missing from e-commerce implementations, and they handle two of the most common AI agent decision criteria: “Does this answer my buyer’s question?” and “What happens if the buyer needs to return it?”
FAQPage Schema for Product Pages
FAQPage schema on a product page differs from FAQPage schema on a blog post. Product FAQ questions focus on purchase decision criteria: sizing, compatibility, warranty, shipping, and use-case fit. Write at least 8 Q&A pairs. Each answer should run 2-4 sentences and start with the direct answer.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What sizes does this product come in?",
"acceptedAnswer": {
"@type": "Answer",
"text": "This product comes in Small, Medium, Large, and XL.
Size runs true to standard US sizing.
Refer to the size chart on the product page for exact measurements."
}
},
{
"@type": "Question",
"name": "Is this product compatible with [common accessory or platform]?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, this product is compatible with [specific version or model].
It works with [list compatible items].
It does not support [known incompatibilities] as of [year]."
}
},
{
"@type": "Question",
"name": "How long does shipping take?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Standard shipping takes 3-5 business days within the continental US.
Expedited 2-day shipping is available at checkout.
Orders placed before 2 PM EST ship same day on business days."
}
},
{
"@type": "Question",
"name": "What warranty does this product include?",
"acceptedAnswer": {
"@type": "Answer",
"text": "This product includes a 2-year limited manufacturer warranty
covering defects in materials and workmanship.
The warranty does not cover normal wear, accidental damage, or
modifications. Submit warranty claims through our support page."
}
},
{
"@type": "Question",
"name": "What is the return policy for this product?",
"acceptedAnswer": {
"@type": "Answer",
"text": "We accept returns within 30 days of delivery for any reason.
Items must be unused and in original packaging.
Return shipping is free on defective items.
Refunds process within 5 business days of receiving the return."
}
},
{
"@type": "Question",
"name": "Is this product suitable for [specific use case]?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, this product works well for [specific use case].
It was designed for [primary use context] and performs reliably under
[relevant conditions]. Customers in [buyer segment] use it frequently
for [specific application]."
}
},
{
"@type": "Question",
"name": "How do I care for or maintain this product?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Clean this product with [cleaning method].
Avoid [harmful substances or conditions].
Store in [recommended storage conditions] when not in use.
With proper care, this product lasts [expected lifespan]."
}
},
{
"@type": "Question",
"name": "Does this product include everything needed to get started?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, each purchase includes [list everything in the box].
You will also need [any separately purchased items, if applicable].
Everything required for initial setup is in the box."
}
}
]
}ReturnPolicy Schema
ReturnPolicy schema resolves the single most common AI agent purchase blocker: buyer uncertainty about what happens if the product does not meet expectations. Agents handling transactional queries for hesitant buyers actively look for this schema type before completing a recommendation. An absent ReturnPolicy block forces the agent to navigate to your policy page separately, which often breaks the recommendation flow.
{
"@context": "https://schema.org",
"@type": "MerchantReturnPolicy",
"@id": "#return-policy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn",
"refundType": "https://schema.org/FullRefund",
"returnPolicyCountry": "US",
"inStoreReturnsOffered": false,
"restockingFee": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
}
}The returnPolicyCategory field accepts three values: MerchantReturnFiniteReturnWindow (time-limited returns), MerchantReturnUnlimitedWindow (no-time-limit returns), and MerchantReturnNotPermitted (no returns). Use the value that accurately reflects your policy. Misrepresentation in schema damages trust signals if agents cross-reference with your policy page text and find a mismatch.
The Complete Stacked JSON-LD Block
Stacking all six schema types into a single JSON-LD script block is the correct implementation pattern for agentic commerce. Multiple separate script blocks work, but a single block with nested types is cleaner, reduces validation surface area, and is easier to maintain. Paste this into the <head> of your product page.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Product",
"@id": "https://yourdomain.com/products/your-product-slug/#product",
"name": "Your Product Name",
"description": "Complete product description. Write 2 to 3 sentences.",
"image": [
"https://yourdomain.com/images/product-main.jpg",
"https://yourdomain.com/images/product-angle2.jpg"
],
"sku": "YOUR-SKU-12345",
"mpn": "MPN-12345",
"gtin12": "012345678901",
"brand": {
"@type": "Brand",
"name": "Your Brand Name"
},
"category": "Product Category",
"color": "Color Name",
"material": "Material Name",
"weight": {
"@type": "QuantitativeValue",
"value": "2.5",
"unitCode": "LBR"
},
"manufacturer": {
"@type": "Organization",
"name": "Manufacturer Name"
},
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "Warranty",
"value": "2-year limited warranty"
}
],
"offers": {
"@type": "Offer",
"url": "https://yourdomain.com/products/your-product-slug/",
"priceCurrency": "USD",
"price": "149.00",
"priceValidUntil": "2025-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "Your Store Name"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": "0",
"maxValue": "1",
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": "2",
"maxValue": "5",
"unitCode": "DAY"
}
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
}
},
"hasMerchantReturnPolicy": {
"@id": "#return-policy"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "284",
"bestRating": "5",
"worstRating": "1"
},
"review": [
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"name": "Best purchase I've made this year",
"reviewBody": "Full review text here. Write a minimum of 2 sentences
describing the reviewer's actual experience.
Avoid one-word or placeholder review bodies.",
"datePublished": "2024-11-15",
"author": {
"@type": "Person",
"name": "Reviewer Name"
}
}
]
},
{
"@context": "https://schema.org",
"@type": "MerchantReturnPolicy",
"@id": "#return-policy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn",
"refundType": "https://schema.org/FullRefund",
"restockingFee": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
}
},
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Your first FAQ question here?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Full answer text matching visible FAQ on page."
}
}
]
}
]
}
</script>đź’ˇ Pro Tip: The @graph array pattern allows you to define cross-referenced nodes (like the @id: "#return-policy" link between Offer and MerchantReturnPolicy) without duplicating the full object. Use @id references throughout the graph rather than nesting full objects wherever a reference will do. This reduces file size and makes the schema easier to validate and maintain.
Attribute Fill Rate: Audit It, Fix It, Maintain It
Attribute fill rate measures the percentage of available schema fields you actually populate across your product catalog. A fill rate below 95% exposes you to citation penalties in AI recommendation systems. A fill rate below 80% actively reduces how often your products appear in AI-assisted purchase journeys. This is not a theoretical threshold. It reflects how AI engines weight product data completeness when ranking recommendation candidates.
How to Audit Your Current Fill Rate
Run a crawl of your product pages using Screaming Frog or a similar tool with schema extraction enabled. Export the structured data for all Product pages. Then map each extracted schema field against the full field list for the Product, Offer, AggregateRating, Review, FAQPage, and ReturnPolicy types. Calculate the percentage of expected fields that contain non-empty, non-placeholder values.
| Fill Rate Range | Agentic Commerce Impact |
|---|---|
| 95%+ | Full recommendation eligibility. Products compete at the top of AI recommendation queues. |
| 80-94% | Partial eligibility. Products appear in some recommendation contexts but miss query types that require the missing attributes. |
| Below 80% | Active citation penalty applies. AI recommendation frequency drops measurably compared to competing products above the threshold. |
| Below 50% | Effectively invisible to agentic commerce. The schema exists but does not meet the minimum trust threshold for AI agents processing purchase queries. |
The Most Common Fill Rate Gaps
Four fields account for the majority of fill rate deficits across e-commerce catalogs. Fix these four first before auditing less common fields. AggregateRating with both ratingValue and reviewCount populated sits empty on over 60% of product pages that have Product schema at all. The GTIN field (gtin12, gtin13, or gtin14) requires a GS1-registered barcode number and many teams skip it because they do not have the data ready. The priceValidUntil field in Offer is present on fewer than 40% of product pages. ReturnPolicy schema is absent on the vast majority of product pages outside enterprise retail.
Address each gap by sourcing the actual data rather than using placeholder values. A placeholder is worse than an empty field in some cases because AI engines that detect schema values that do not match page content flag the entire block as potentially manipulative. Fill rate only counts genuine, accurate field values.
Validation Workflow: From Valid to Citation-Ready
Technical validity and citation-readiness are not the same thing. A schema block can pass Google’s Rich Results Test with zero errors and still fail to generate AI citations because the content within the fields is thin, stale, or mismatched with visible page content. Your validation workflow needs to check for both.
Step 1: Google Rich Results Test
Run your product URL through the Google Rich Results Test. This tool confirms whether your Product schema qualifies for rich result display in Google Search. Fix any errors before proceeding. Warnings are lower priority but address them in the next maintenance pass. A clean Rich Results Test is the baseline, not the finish line.
Step 2: Schema Markup Validator
Run the same URL through the Schema Markup Validator at validator.schema.org. This tool checks your schema against the full schema.org specification, including fields that Google does not validate but that AI engines do read. Pay particular attention to any “Missing expected property” warnings. These often surface missing fields in the ReturnPolicy or FAQPage blocks that the Google tool does not flag.
Step 3: Content Consistency Check
Compare the values in your schema fields against the visible content on the product page. The price in your Offer schema must match the price a buyer sees on the page. The reviewCount in AggregateRating must match the visible review count. The FAQ answers in your FAQPage schema must match the visible FAQ text exactly. AI engines that crawl both the structured data and the page content flag mismatches as potential manipulation signals.
Step 4: Freshness Check
Verify that priceValidUntil is a future date. Verify that AggregateRating values match your current review data. Check that availability reflects actual inventory status. Set a calendar reminder to repeat this check monthly at minimum, and immediately following any price change, inventory update, or significant new review accumulation.
| Common Error | How to Fix It |
|---|---|
| Missing required field: offers | Nest the Offer block inside the Product block (not as a separate sibling type) |
| Invalid value for availability | Use full URL format: https://schema.org/InStock not just “InStock” |
| priceValidUntil is in the past | Update to a future date and add to your quarterly maintenance calendar |
| AggregateRating missing reviewCount | Always include ratingValue and reviewCount as a pair. Neither works without the other. |
| JSON syntax error (trailing comma) | Run the raw JSON through a linter like jsonlint.com before publishing |
💡 Pro Tip: “Citation-ready” means every field contains a value that an AI agent would find credible and useful in a real recommendation context. Ask yourself: if an AI agent read only my schema and nothing else on this page, would it have enough information to confidently recommend this product to a buyer asking for a specific use case? If the answer is no, keep filling in fields until it is yes.
Platform-Specific Implementation: WordPress, Shopify, Custom
Where and how you inject the JSON-LD block depends entirely on your platform. The schema itself does not change. The delivery mechanism does. Here is the correct approach for each major platform.
WordPress: Manual JSON-LD Wins for Agentic Commerce
RankMath Pro and Yoast SEO both generate Product schema. Neither generates the full six-type agentic commerce stack without significant customization. RankMath Pro gets closer because it supports custom schema blocks and lets you add additional schema types from the dashboard. Yoast requires a paid WooCommerce integration just for basic Product schema and does not support MerchantReturnPolicy or the full Offer shippingDetails block natively.
For agentic commerce, manual JSON-LD injected via a function in your child theme’s functions.php or through the Insert Headers and Footers plugin gives you full control over every field. The plugin approach works on any WordPress site and does not require developer access to the theme. Add the stacked JSON-LD block to the “Scripts in Header” field, wrapped in a conditional that only fires on product page templates (is_product() for WooCommerce, or your custom template conditional).
One important note if your site uses WPBakery: WPBakery Raw HTML blocks do not reliably render <script> tags. Do not inject schema through Raw HTML blocks. Always use the theme functions.php hook or the Insert Headers and Footers plugin for script delivery.
Shopify: Liquid Template Injection
In Shopify, inject your JSON-LD block into the product.json.liquid template or directly into the product template file (templates/product.liquid or sections/main-product.liquid depending on your theme). Wrap dynamic fields using Liquid object variables so the schema updates automatically when product data changes.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "{{ product.title | escape }}",
"description": "{{ product.description | strip_html | escape }}",
"sku": "{{ product.selected_or_first_available_variant.sku | escape }}",
"image": "{{ product.featured_image | img_url: 'master' }}",
"brand": {
"@type": "Brand",
"name": "{{ product.vendor | escape }}"
},
"offers": {
"@type": "Offer",
"price": "{{ product.price | money_without_currency }}",
"priceCurrency": "{{ shop.currency }}",
"priceValidUntil": "2025-12-31",
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "{{ shop.name | escape }}"
}
}
}
</script>Extend this base template with your static fields (ReturnPolicy, FAQPage, dimensions, etc.) directly in the Liquid file. Dynamic fields pull from Shopify product objects. Static fields you hard-code or pull from product metafields.
Custom Implementations: Head Injection
On custom-built sites, inject the JSON-LD block in the <head> section of your product page template. Place it after your <title> and meta tags but before any JavaScript files. Many development teams use server-side rendering to populate dynamic fields (price, availability, ratings) from the product database, then serialize the full schema object as a JSON-LD string on page build. This approach keeps schema always current without requiring manual updates.
Schema Maintenance: What to Update and When
Schema is not a set-and-forget implementation. Stale schema actively damages your citation eligibility because AI engines that detect outdated field values (expired priceValidUntil, incorrect stock status, review counts that do not match the page) flag the entire product listing as unreliable. Build a maintenance calendar at the same time you build the schema.
Offer Schema: Update Immediately on Change
Any price change requires an immediate schema update. Any availability change (in stock to out of stock, or pre-order to in stock) requires an immediate schema update. Set up an alert or automation that flags the schema file for review any time the product price or inventory status changes in your product management system. Manual processes fail here. Automate this wherever possible.
Update priceValidUntil quarterly at minimum. Set it one year out from today, then set a calendar reminder 30 days before expiration. A priceValidUntil date that has passed is one of the most common schema errors found during technical audits and one of the easiest to prevent.
AggregateRating: Update Monthly
AI engines that check AggregateRating cross-reference it against visible review data on the page. A schema field showing 284 reviews on a product page that visibly lists only 47 reviews creates a trust signal conflict. Update your AggregateRating block monthly, or connect it to a dynamic data source that pulls from your review platform directly. For high-volume products with rapid review accumulation, automate weekly updates.
ReturnPolicy: Update When Policy Changes
ReturnPolicy schema only needs updating when your actual return policy changes. Keep a note in your CMS or documentation that the schema must sync with any policy page update. This is the lowest-maintenance block in the stack, but it is also the most damaging if it drifts from the actual policy text because agents that detect inconsistencies between schema and page content treat it as a trust violation.
Re-Validation Schedule
Run the full four-step validation workflow (Rich Results Test, Schema Validator, content consistency check, freshness check) on the following schedule: monthly for high-priority products, quarterly for the full catalog, and immediately following any significant page change, platform migration, or template update. Plugin and theme updates on WordPress frequently overwrite custom schema injections. Verify after every major update.
🎯 The Bottom Line on Product Schema for Agentic Commerce
Most e-commerce sites implement 30-40% of the schema they need to compete in agentic commerce. The gap is not a technical problem. The code in this guide covers everything you need. The gap is a prioritization problem: teams implement basic Product and Offer schema for Google Rich Results eligibility and stop there, not realizing that AggregateRating, ReturnPolicy, FAQPage, and Review schema are exactly what AI agents look for when deciding whose product to recommend.
The implementation pattern here, six schema types stacked in a single @graph block, full attribute fill across every tier, and a maintenance calendar that keeps the data current, is what puts your products in front of buyers who arrive through AI recommendation channels. Agentic commerce conversion rates run 2-4x higher than traditional organic traffic because buyers who arrive through AI recommendations already trust the recommendation. The schema is what earns that recommendation in the first place.
Start with the stacked JSON-LD block, validate it through both tools, audit your fill rate against the 95% threshold, and build the maintenance workflow before you move on. Schema that you implement today and maintain consistently will compound in citation value as agentic commerce volume continues to grow.
🎯 Ready to Make Your Products Agentic-Commerce Ready?
AI Advantage Agency builds, validates, and maintains full six-type schema stacks for e-commerce brands that want their products recommended by AI agents at scale. Implementation, QA, and ongoing maintenance included.
→ Get Your Schema Implementation Done
Every month without complete schema is a month of AI recommendations going to your competitors.
âť“ Frequently Asked Questions About Product Schema for Agentic Commerce
What is product schema for agentic commerce?
Product schema for agentic commerce is a complete set of six structured data types, Product, Offer, AggregateRating, Review, FAQPage, and ReturnPolicy, implemented as JSON-LD on product pages. This implementation gives AI agents the data they need to evaluate, compare, and recommend products to buyers in autonomous purchase workflows. Standard product schema covers only Product and Offer. The additional four types are what qualify a product for AI recommendation eligibility.
How is agentic commerce schema different from standard product schema?
Standard product schema targets Google Rich Results eligibility with a Product type and nested Offer. Agentic commerce schema adds AggregateRating for social proof, individual Review blocks for sentiment data, FAQPage to answer buyer questions without requiring additional page crawls, and ReturnPolicy to resolve purchase risk objections. Agentic commerce schema also enforces a 95% attribute fill rate threshold and requires ongoing maintenance to keep price, availability, and rating data current.
What is attribute fill rate and why does it matter?
Attribute fill rate is the percentage of available schema fields that contain accurate, non-placeholder values across your product pages. A fill rate below 95% reduces AI recommendation eligibility. A fill rate below 80% triggers an active citation penalty where products appear measurably less often in AI recommendation outputs. Fill rate matters because AI agents use data completeness as a proxy for listing credibility when ranking products for recommendation.
Can I add all six schema types to one JSON-LD block?
Yes. Use the @graph pattern to combine all six types into a single script block. Nest Offer, AggregateRating, and Review inside the Product node. Define MerchantReturnPolicy as a separate node in the graph with an @id value, then reference that @id from the Offer block using hasMerchantReturnPolicy. Add FAQPage as a third node in the graph. A single, well-structured @graph block is easier to validate and maintain than multiple separate script blocks.
How often should I update my product schema?
Update Offer schema immediately whenever price or availability changes. Update AggregateRating monthly, or automate it to sync with your review platform. Update priceValidUntil quarterly and set a calendar reminder 30 days before expiration. Update ReturnPolicy only when your actual return policy changes. Run full four-step validation monthly for priority products and quarterly for your full catalog. Always re-validate after platform updates or template changes.
Does product schema affect how ChatGPT and Perplexity recommend products?
Yes. ChatGPT’s GPTBot and Perplexity both crawl and process structured data from product pages. Products with complete schema provide AI agents with machine-readable data that feeds directly into product comparison and recommendation responses. Products without structured data require the AI engine to parse unstructured page content, which is less reliable and less likely to produce accurate recommendations. Comprehensive schema gives AI engines a clean, authoritative signal rather than requiring inference from page copy.
Should I use RankMath or manual JSON-LD for agentic commerce schema on WordPress?
Manual JSON-LD gives you full control and is the recommended approach for complete agentic commerce schema on WordPress. RankMath Pro supports custom schema blocks and gets closer to full coverage than Yoast, but neither plugin natively generates the complete six-type stack including MerchantReturnPolicy with all required fields. For production e-commerce implementations, inject the custom JSON-LD block through the Insert Headers and Footers plugin or through a conditional hook in your child theme’s functions.php. Do not inject schema via WPBakery Raw HTML blocks as these do not reliably render script tags.
What tools do I use to validate product schema?
Use two tools in sequence. Run Google Rich Results Test first at search.google.com/test/rich-results to confirm Google eligibility and catch critical errors. Then run Schema Markup Validator at validator.schema.org for a full schema.org specification check that surfaces missing recommended fields the Google tool does not flag. After both tools return clean results, run a manual content consistency check comparing schema field values against visible page content to catch value mismatches that tools do not detect.
Is GTIN required for agentic commerce schema?
GTIN is not technically required for schema validation to pass, but it is a high-impact Tier 2 field for agentic commerce. AI agents use GTIN to cross-reference your listing against product databases, confirm product authenticity, and compare pricing across sellers. Products without GTIN are harder for agents to identify definitively when buyers ask for a specific product by model or UPC. If your products have registered barcodes, include gtin12, gtin13, or gtin14 in your schema. Use gtin14 as the universal container if you are unsure which format applies.
What happens if my schema values do not match the visible page content?
AI engines that detect mismatches between schema field values and visible page content flag the listing as a potential trust violation. Common mismatches include AggregateRating reviewCount that does not match the visible review total, prices in Offer that differ from the displayed price, and FAQ answers in FAQPage schema that contradict or differ from the visible FAQ text. These mismatches reduce citation eligibility and can trigger manual review in Google Search Console. Always keep schema values synchronized with visible page content.

