Below is a practical, SEO-safe checklist for PrestaShop Product Schema (JSON-LD), aligned with Google Rich Results and schema.org best practices. This also fits well with your earlier preference of using ImageObject for the image property ๐
โ 1. Use JSON-LD Only (Best Practice)
โ Always use JSON-LD, not Microdata
โ Place schema in:
- Product page footer, or
<head>via theme override or module
โ One Product schema per product page
โ 2. Mandatory Properties (Google)
Your Product schema must include:
"@type": "Product",
"name": "Product Name",
"image": [...],
"description": "Short product description",
"sku": "SKU123",
"offers": { }
โ Missing required fields = no rich result
โ 3. Image Best Practices (Very Important)
Since you prefer ImageObject, use:
"image": [{
"@type": "ImageObject",
"url": "https://example.com/img/product.webp",
"width": 800,
"height": 800
}]
โ Use absolute URLs
โ Minimum 1200px width recommended
โ Use WebP if possible
โ Match product image exactly
โ Avoid thumbnail or lazy-loaded placeholders
โ 4. Offers (Pricing & Availability)
Use Offer or AggregateOffer:
Single Price
"offers": {
"@type": "Offer",
"url": "https://example.com/product-url",
"priceCurrency": "INR",
"price": "1499",
"priceValidUntil": "2025-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
โ Always include:
pricepriceCurrencyavailability
Multiple Variants (Size / Color)
"offers": {
"@type": "AggregateOffer",
"lowPrice": "1299",
"highPrice": "1799",
"priceCurrency": "INR",
"offerCount": "4"
}
โ 5. Brand & Identifiers
"brand": {
"@type": "Brand",
"name": "Nike"
}
โ Add GTIN when available:
"gtin13": "8901234567890"
โ OR use:
mpnsku
โ Never fake GTINs
โ 6. Reviews & Ratings (High CTR)
Only show if real reviews exist:
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "128"
}
โ Rating must match frontend
โ No self-generated fake reviews
โ Update dynamically
โ 7. Variant Handling (PrestaShop Specific)
Best practice:
- One Product schema
- Use AggregateOffer
- Do NOT generate separate Product schema per combination
โ 8. Availability Sync (Critical)
Availability must match:
โ Stock status
โ Delivery message
โ Cart availability
Common values:
InStockOutOfStockPreOrderBackOrder
โ 9. Description Rules
โ Use short product description
โ Plain text only (no HTML)
โ No marketing keywords stuffing
โ 10. Avoid Common Mistakes
โ Multiple Product schemas on one page
โ Mismatch price / stock
โ Missing currency
โ Using relative URLs
โ Fake reviews
โ Schema inside iframe
โ 11. PrestaShop Implementation Tips
โ Use override or custom module
โ Hook into:
displayFooterdisplayHeader
โ Clear cache after changes
โ Regenerate schema on:
- Price update
- Stock update
- Review update
โ 12. Validation & Monitoring
Tools:
โ Google Rich Results Test
โ Schema Markup Validator
โ Google Search Console โ Enhancements
Fix:
- โMissing field โoffersโโ
- โInvalid price formatโ
- โAvailability mismatchโ
๐ฅ Ideal Product JSON-LD (PrestaShop Example)
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Running Shoes",
"image": [{
"@type": "ImageObject",
"url": "https://example.com/img/shoes.webp",
"width": 1200,
"height": 1200
}],
"description": "Lightweight running shoes for daily training.",
"sku": "RUN123",
"brand": {
"@type": "Brand",
"name": "Nike"
},
"offers": {
"@type": "Offer",
"price": "3499",
"priceCurrency": "INR",
"availability": "https://schema.org/InStock",
"url": "https://example.com/running-shoes"
}
}
๐ SEO Bonus Tips
โ Add BreadcrumbList schema
โ Add Organisation schema globally
โ Add FAQ schema on product pages
โ Use canonical URL in schema
