---
name: product-schema-markup
description: Validate and generate Product schema against Google's actual required and recommended fields, plus UCP readiness.
---

# Product Schema Markup

## Use this when

product schema, product json-ld, merchant schema, shopping schema.

## Process

Google's actual confirmed required properties for Product/Merchant listings are just three: `name`, `image`, and `offers` — and `offers` must be an `Offer`, never `AggregateOffer`, for a merchant listing. Everything else is recommended, not required; don't overstate the requirement bar.

Recommended properties, roughly in order of scoring impact: `sku`, `description`, `brand`, `offers.seller`, global trade identifiers (`gtin13`/`gtin14`/`mpn`), `aggregateRating` (star rating + review count), at least one individual `review`, variant attributes (`color`/`material`/`size`), `shippingDetails` as a `ShippingDetails` object with rate and delivery time, `hasMerchantReturnPolicy` as a `MerchantReturnPolicy` with type and days, and `category` (accepts plain text, a `CategoryCode`, or an array mixing both).

For adult-oriented products specifically, `hasAdultConsideration` is required (added 2026-05-20), and Google Search supports only the value `https://schema.org/SexualContentConsideration` — flag its absence on any product that needs it as a compliance gap, not just a scoring one.

Validation rules to enforce: `price` is a bare number string, never prefixed with a currency symbol; `availability` uses the full Schema.org URL enum; `image` is an array with at least one high-resolution URL; `priceCurrency` is a real ISO 4217 code; if `brand` is present, `brand.name` must be a real value, never empty or "N/A"; sale periods use `validFrom` plus `validThrough` or `priceValidUntil` in ISO 8601; if `aggregateRating` is present, both `ratingValue` and `reviewCount` are required; never mark up a fake or undisclosed incentivized review.

Scoring ladder for completeness: all required fields alone = 50/100; + aggregateRating = 65; + sku/gtin/mpn = 75; + shippingDetails = 85; + merchantReturnPolicy = 90; + 3 or more real reviews = 100.

Separately, note Universal Commerce Protocol (UCP) readiness as an emerging, optional signal: a merchant with clean Product schema can declare a UCP profile at `/.well-known/ucp` listing checkout/fulfillment/discount capabilities for AI shopping agents. This is genuinely live infrastructure (Google, Shopify, Etsy, Wayfair, Target, Walmart), but broad adoption is still early — report its absence as an opportunity, not a defect, and never claim to have probed the live endpoint (that needs the source project's own script, not something this team can run).

Output the complete JSON-LD block plus the completeness score and what would move it to the next tier.
