Link Product Schema to Gallery Content
On product detail pages (PDPs), you can link gallery product references to your existing Product schema using the canonical and productId parameters. This enables search engines and AI crawlers to merge your product details with gallery UGC into unified rich results.
ThecanonicalandproductIdparameters are only required for PDP pages. Homepage and category pages do not need these parameters.
How It Works
The canonical parameter acts as a unique identifier (@id) that connects your Product schema with gallery product references. When a gallery item's tagged product matches the productId, the API injects the @id field using your canonical URL.
Sample Request
curl --location 'https://edge.curalate.com/v1/structured-data/content?q={"galleries":[{"dataSourceId":"aBcDeFgHiJkLmNoP","filter":"productId:PRD-12345"}]}&locale=en_US&canonical=https://www.example.com/products/hydra-glow-moisturizer%23product&productId=PRD-12345' \
--header 'Accept: text/javascript' \
--header 'User-Agent: Java-http-client/17.0.7' \
--header 'Bv-Forwarded-User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.1; +https://openai.com/gptbot'Sample Response
The gallery response includes @id on matching products:
<script type="application/ld+json" id="bv-geo-jsonld-gallery-1-data">
{
"@context": "https://schema.org",
"@type": "ItemList",
"name": "Visual Gallery",
"numberOfItems": 10,
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "ImageObject",
"name": "Summer essential found",
"description": "Summer essential found. This lightweight moisturizer is perfect for hot days!",
"contentUrl": "https://edge.curalate.com/v1/img/MnOpQrStUvWxYz123456=",
"about": [
{
"@type": "Thing",
"@id": "https://www.example.com/products/hydra-glow-moisturizer#product",
"name": "Hydra Glow Lightweight Moisturizer SPF 30",
"url": "https://www.example.com/products/hydra-glow-moisturizer"
}
]
}
}
]
}
</script>Your Product Schema
Your existing Product schema on the same page should use the same @id:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "https://www.example.com/products/hydra-glow-moisturizer#product",
"name": "Hydra Glow Lightweight Moisturizer SPF 30",
"image": "https://www.example.com/images/hydra-glow.jpg",
"description": "Lightweight daily moisturizer with SPF 30 protection.",
"brand": {
"@type": "Brand",
"name": "Example Beauty"
},
"offers": {
"@type": "Offer",
"price": "42.00",
"priceCurrency": "USD"
}
}
</script>When both schemas share the same @id, search engines and AI crawlers merge them into a single entity — your product with its associated gallery UGC.
Updated 25 days ago
