Skip to Content

No Product schema on a product page

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 Is This Important

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 XeoPix Detects This

XeoPix follows these logical steps to detect missing Product schema:

  1. 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
  2. Extract structured data: The crawler looks for JSON-LD, Microdata, or RDFa blocks on the page

  3. Check for Product schema: The crawler verifies if any schema block has:

    • @type set to Product
    • Required properties: name, description, image, offers
  4. Validate schema completeness: If Product schema is found, the crawler checks for:

    • offers property with nested Offer schema
    • image property (required for Merchant Listings)
    • sku property (unique product identifier)
    • brand property (Brand schema)
    • aggregateRating property (review ratings)
  5. Trigger conditions: The issue is flagged when:

    • Product page doesn’t have Product schema
    • Product schema exists but offers is missing
    • Product schema exists but image is missing

How To Fix

  1. 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
  2. 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" } }
  3. Include required properties:

    • name: Product name
    • description: Product description
    • image: Product image URL(s)
    • offers: Pricing information (nest Offer schema)
  4. Add recommended properties:

    • sku: Unique product identifier
    • brand: Product brand (use Brand schema)
    • aggregateRating: Review ratings (nest AggregateRating schema)
    • availability: Product availability status
  5. Validate with Google’s Rich Results Test

What We Store

Storage Level

Page Level — This issue is evaluated for each individual URL that contains structured data.


Database Table / Prisma Model

PageStructuredData


Stored Fields

FieldTypeDescription
schemaTypeSchemaTypeThe type of schema (e.g., Organization, Person)
schemaFormatSchemaFormatThe format of the schema (JSON-LD, Microdata, RDFa)
schemaIdentifierString?Unique identifier for the schema
rawJsonJson?The raw JSON-LD or structured data content
schemaErrorsJson?Array of validation errors found in the schema
isValidSchemaBoolean?Whether the schema is valid according to validation
missingFieldsJson?Array of required fields that are missing

Detection Dependencies

  • The following data sources are required to evaluate this issue:
  • HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
  • Structured Data Validation — The extracted schema is validated against Schema.org definitions
  • Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed

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" } }

Unit Test

Test File

xeopix-crawling-v2/__tests__/seo-audit-checks/structuredDataRichResults/issue-231-product-schema-missing.test.js

Purpose

Validates that the crawler correctly validates Product JSON-LD schemas and does not report false positives when the schema is properly formed.

Tested Function

runStructuredDataRichResults()

Issue Information

  • Issue Number: 231
  • Issue Code: product_schema_missing
  • Toggle Group: structuredDataRichResults

Test Scenarios

Positive Test Cases

  • Valid Product schema: Page has a Product schema with name, image, and description — no issue reported.

Negative Test Cases

None — the test only validates that valid schemas pass.

Boundary Cases

None.

Edge Cases

  • Empty HTML: <html></html> — no crash.

Expected Outcome

Pass

Issue should not be reported when a valid Product schema with required properties is present.

Fail

No negative test cases are defined.

Validation

  • Correct pass-through of valid Product schemas
  • Graceful handling of empty HTML
  • xeopix-crawling-v2/toggleGroups/structuredDataRichResults.js
  • xeopix-crawling-v2/issueCodes.js
  • xeopix-crawling-v2/utils/context.js
  • xeopix-crawling-v2/utils/issues.js
  • xeopix-crawling-v2/utils/schema.js

Coverage Summary

  • Covers valid Product schema detection
  • Covers empty HTML resilience

References

Last updated on