Issue #231 · important
Issue 231
What is this issue?
E-commerce product pages are missing Product schema, causing the site to lose eligibility for Google Shopping rich results, price snippets, and availability display in SERPs.
Without Product schema:
- Your products won't appear in Google Shopping rich results
- Price and availability won't show in search results
- Star ratings and review counts won't display
- Product rich snippets won't appear
- You'll lose eligibility for Google Merchant Listings
- AI search engines can't properly understand your products
A proper Product schema should include: @type (Product), name, description, image, offers, and optionally sku, brand, aggregateRating, availability.
Why does it matter?
Product schema is the most commercially important schema type:
- Google Shopping rich results: Enables products to appear in Google Shopping carousels
- Price snippets: Shows price and availability directly in search results
- Star ratings: Displays star ratings and review counts in search results
- Merchant Listings: Required for Google Merchant Center listings
- AI search readiness: AI engines use Product schema to understand and recommend products
- Conversion rates: Product rich results have significantly higher click-through rates
Resolving this issue improves your SEO health score by ensuring products are properly structured for maximum commercial visibility.
How to fix it
-
Identify product pages: Look for pages with:
- URL patterns (
/product/,/shop/,/item/,/p/) - Product name, price, and add-to-cart functionality
- Product images and descriptions
- URL patterns (
-
Add Product JSON-LD structured data to the page's
<head>or before</body>:{ "@context": "https://schema.org", "@type": "Product", "name": "Widget Pro", "image": ["https://example.com/img1.jpg", "https://example.com/img2.jpg"], "sku": "WGT-001", "brand": { "@type": "Brand", "name": "Example Corp" }, "offers": { "@type": "Offer", "price": "49.99", "priceCurrency": "USD", "availability": "https://schema.org/InStock" }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.7", "reviewCount": "342" } } -
Include required properties:
name: Product namedescription: Product descriptionimage: Product image URL(s)offers: Pricing information (nest Offer schema)
-
Add recommended properties:
sku: Unique product identifierbrand: Product brand (use Brand schema)aggregateRating: Review ratings (nest AggregateRating schema)availability: Product availability status
-
Validate with Google's Rich Results Test
Examples
Example 1: Missing Product Schema on Product Page
Problematic state:
<!-- Product page without Product schema -->
<html>
<head>
<title>Widget Pro - Example Store</title>
</head>
<body>
<h1>Widget Pro</h1>
<img src="https://example.com/img1.jpg" alt="Widget Pro" />
<p>High-quality widget for professional use.</p>
<p><strong>Price:</strong> $49.99</p>
<p><strong>Availability:</strong> In Stock</p>
<button>Add to Cart</button>
</body>
</html>
Corrected state:
<!-- Product page with Product schema -->
<html>
<head>
<title>Widget Pro - Example Store</title>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Widget Pro",
"image": [
"https://example.com/img1.jpg",
"https://example.com/img2.jpg"
],
"sku": "WGT-001",
"brand": { "@type": "Brand", "name": "Example Corp" },
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "342"
}
}
</script>
</head>
<body>
<h1>Widget Pro</h1>
<img src="https://example.com/img1.jpg" alt="Widget Pro" />
<p>High-quality widget for professional use.</p>
<p><strong>Price:</strong> $49.99</p>
<p><strong>Availability:</strong> In Stock</p>
<button>Add to Cart</button>
</body>
</html>
Example 2: Product Schema with Multiple Images
Corrected state:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Running Shoes",
"image": [
"https://example.com/shoes-front.jpg",
"https://example.com/shoes-side.jpg",
"https://example.com/shoes-back.jpg"
],
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
Example 3: Incomplete Product Schema
Problematic state:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Coffee Mug"
}
Missing required properties: description, image, offers
Corrected state:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Coffee Mug",
"description": "Ceramic coffee mug with ergonomic handle",
"image": "https://example.com/mug.jpg",
"offers": {
"@type": "Offer",
"price": "12.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
How PixyScan detects this
PixyScan follows these logical steps to detect missing Product schema:
-
Detect product pages: The crawler identifies pages with:
- URL patterns (
/product/,/shop/,/item/,/p/) - Product name, price, and add-to-cart functionality
- Product images and descriptions
- URL patterns (
-
Extract structured data: The crawler looks for JSON-LD, Microdata, or RDFa blocks on the page
-
Check for Product schema: The crawler verifies if any schema block has:
@typeset toProduct- Required properties:
name,description,image,offers
-
Validate schema completeness: If Product schema is found, the crawler checks for:
offersproperty with nested Offer schemaimageproperty (required for Merchant Listings)skuproperty (unique product identifier)brandproperty (Brand schema)aggregateRatingproperty (review ratings)
-
Trigger conditions: The issue is flagged when:
- Product page doesn't have Product schema
- Product schema exists but
offersis missing - Product schema exists but
imageis missing