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
