What an agent-readable product page actually looks like
The JSON-LD patterns top-decile D2C brands use to win citations from ChatGPT, Perplexity and Google AI Mode — broken down piece by piece, ready to paste.
The PDP is now an agent-facing surface
When ChatGPT or Perplexity picks which brand to name, the PDP is the page they parse hardest. Schema is the language. A clean Product + Offer + AggregateRating + Review stack on every PDP is the single highest-leverage move a D2C brand can make in 2026 — whether you sell through Shopify, WooCommerce, BigCommerce or Magento.
“recommend a sustainable hoodie under $120 with great reviews”
A few brands stand out for sustainable hoodies under $120 with strong reviews: Pact, Outerknown, and Tentree. Pact's mid-weight version (4.7★, 1.2K reviews) ships with a clear 30-day free-return policy.
What agents check before naming you
Product JSON-LD
Every PDP must emit a Product node. Without it, agents fall back to fragile DOM parsing.
Offer clarity
Current price + currency + availability inside an Offer. Sale state needs explicit Offer.priceValidUntil.
AggregateRating
Without AggregateRating, you compete on price alone in shopping answers. Schema-emitting reviews apps are the cheapest unlock.
Image schema
image[] with absolute URLs. Agents use it for the answer card thumbnail.
BreadcrumbList
Categorical signal — agents use it to resolve queries that name a category, not a product.
FAQPage
Powers the long-tail "does X work with Y" questions agents answer directly from your page.
Returns policy
Linked from the Offer or surfaced as a structured snippet. Agents weight returns risk into recommendations.
Missing → Minimum → Ideal
Three states every D2C PDP passes through. Click between tabs to see what each looks like. Click the copy icon to paste the Ideal into your theme.
Product JSON-LD
Wrap in <script type='application/ld+json'><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Pact Hemp Hoodie — Charcoal",
"sku": "PACT-HOO-CHA-M",
"mpn": "PACT-HOO-CHA-M",
"brand": { "@type": "Brand", "name": "Pact" },
"image": [
"https://cdn.example.com/pact-hemp-hoodie-charcoal-1.jpg",
"https://cdn.example.com/pact-hemp-hoodie-charcoal-2.jpg",
"https://cdn.example.com/pact-hemp-hoodie-charcoal-3.jpg"
],
"description": "Mid-weight 380gsm hoodie in charcoal, cotton-poly fleece.",
"material": "Cotton-poly fleece",
"color": "Charcoal",
"size": "M",
"offers": {
"@type": "Offer",
"price": "98.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"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": "1284"
}
}
</script>The #1 ranking signal in shopping answers
AggregateRating gets you filtered in. Review array gets you quoted. Most reviews apps emit the first; only some emit the second cleanly. Which reviews apps emit clean Review schema →
Review nodes in Product
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "1284"
},
"review": [
{
"@type": "Review",
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"author": { "@type": "Person", "name": "Maya R." },
"datePublished": "2026-05-12",
"reviewBody": "Stays warm without the bulk. Sizing runs true."
},
{
"@type": "Review",
"reviewRating": { "@type": "Rating", "ratingValue": "4" },
"author": { "@type": "Person", "name": "Daniel S." },
"datePublished": "2026-05-08",
"reviewBody": "Great fleece. Wish the hood drawstring were sturdier."
}
]Ambiguous pricing kills agent recommendations
Offer node
"offers": {
"@type": "Offer",
"price": "78.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"priceValidUntil": "2026-06-15",
"url": "https://wearpact.com/products/pact-hemp-hoodie-charcoal-m",
"seller": { "@type": "Organization", "name": "Pact" }
}Quiet wins: categorical signal + long-tail answers
Categorical + Q&A schema
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://wearpact.com/" },
{ "@type": "ListItem", "position": 2, "name": "Men", "item": "https://wearpact.com/men/" },
{ "@type": "ListItem", "position": 3, "name": "Hoodies", "item": "https://wearpact.com/men/hoodies/" }
]
}Five patterns that quietly hurt PDP scores
Schema behind JS
Reviews apps that inject JSON-LD via post-load JS lose half their value — many agent crawlers snapshot static HTML.
Variant offers missing
A single Offer on a Product with 12 variants confuses extraction. Use offers[] with one Offer per variant or an AggregateOffer.
Sale price without priceValidUntil
Agents downweight "always-on-sale" patterns. priceValidUntil signals real urgency.
Image array of one
One image is unusual for D2C. Agents that need a gallery (style queries, fit queries) won't recommend.
Duplicate Product nodes
Some themes emit two Product nodes (theme + reviews app). Pick one source of truth.
Twelve items that take your PDPs to agent-ready
Tick as you ship — your progress saves locally as you go.
0 of 12 complete
Six PDPs worth studying
Top-scoring brands from our cohort. Click any card for the full 7-dimension breakdown.
