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.
Where does your PDP land?
Frontlane for ChatGPT Ads
Fixed the schema? See whether AI assistants notice.
Install the free Shopify app or WooCommerce plugin. It counts visits from AI assistants and the orders they bring, so you can tell whether the work paid off.