XooCode(){

ProductModel

ProductModel is a Product subtype for the prototypical description of a product: the spec sheet, the manufacturer's model page, the datasheet. It has 3 properties of its own: isVariantOf (links to a parent ProductGroup or ProductModel), predecessorOf (the model this one replaced), and successorOf (the model that replaced this one). These create a product lineage chain.

The type hierarchy is Thing → Product → ProductModel. Use ProductModel when you are describing what a product IS (specifications, features, model number), not offering a specific unit for sale. A manufacturer's "2026 Camry" page is a ProductModel. A dealer's "2026 Camry, VIN 1234, $32,000" page is a Product or Car.

Full example of schema.org/ProductModel json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/ProductModel
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@id": "https://xoocode.com/products/xoostructured-ide/v3#model",
  "@type": "ProductModel",
  "name": "XooStructured IDE v3.0",
  "description": "Schema.org-aware code editor with built-in JSON-LD validation, autocomplete for all 911 schema.org types, and Google rich result preview. Version 3.0 adds AI-assisted markup generation and batch validation.",
  "url": "https://xoocode.com/products/xoostructured-ide/v3",
  "image": "https://xoocode.com/products/xoostructured-ide/v3/screenshot-16x9.jpg",
  "brand": { "@id": "https://xoocode.com#organization" },
  "model": "XooStructured IDE",
  "productID": "XOOSTRUCT-V3",
  "isVariantOf": {
    "@type": "ProductGroup",
    "name": "XooStructured IDE",
    "productGroupID": "XOOSTRUCT"
  },
  "predecessorOf": {
    "@type": "ProductModel",
    "@id": "https://xoocode.com/products/xoostructured-ide/v2#model",
    "name": "XooStructured IDE v2.0"
  },
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://xoocode.com/products/xoostructured-ide/v3/download"
  },
  "releaseDate": "2026-06-01"
}
</script>

isVariantOf

isVariantOf points from a ProductModel to its parent ProductGroup or parent ProductModel. This is the inverse of hasVariant. A ProductModel for "XooStructured IDE Professional" might be a variant of the ProductGroup "XooStructured IDE" (which also includes a Free tier). Google reads this to group related models together.

predecessorOf and successorOf

predecessorOf points from a current model to the model it replaced. successorOf points from a current model to the model that came after it. These create a timeline: v2.0 is the successorOf v1.0, and v1.0 is the predecessorOf v2.0. Google reads these to show "newer version available" signals in shopping results and to connect product knowledge graph entries across generations.

ProductModel vs Product vs ProductGroup

Product is a specific item for sale. ProductGroup is a set of variants (sizes, colors). ProductModel is the specification of what a product IS. On a manufacturer's site, the model page is a ProductModel. On a retailer's site, the listing page is a Product. They can reference each other: the Product can declare "isVariantOf" pointing to the ProductModel's @id.

Minimal valid version

The smallest markup that still produces a valid ProductModel entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/ProductModel (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProductModel",
  "name": "XooStructured IDE v3.0",
  "model": "XooStructured IDE",
  "image": "https://xoocode.com/products/xoostructured-ide/v3/screenshot-16x9.jpg",
  "description": "Schema.org-aware code editor with JSON-LD validation and autocomplete.",
  "offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD", "availability": "https://schema.org/InStock" }
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

Common ProductModel mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Using Product for a manufacturer spec page

    Wrong
    "@type": "Product" on a manufacturer's model specification page
    Right
    "@type": "ProductModel" for specs; Product for a specific unit for sale

    Product implies a specific item you can buy right now. ProductModel describes the prototypical specifications of a model. A manufacturer's "2026 Camry" page is a ProductModel. A dealer's inventory listing with VIN and price is a Product.

  2. 02

    predecessorOf pointing in the wrong direction

    Wrong
    v2.0 has "predecessorOf" pointing to v3.0
    Right
    v3.0 has "predecessorOf" pointing to v2.0 (v3 is the predecessor OF v2 being replaced)

    The naming is counterintuitive. predecessorOf means "this model is the predecessor of" the referenced model. So v2.0 sets predecessorOf pointing to v3.0 (v2 preceded v3). Alternatively, v3.0 sets successorOf pointing to v2.0. Read the property name as "[this] predecessor of [that]."

  3. 03

    Confusing ProductModel with ProductGroup

    Wrong
    "@type": "ProductGroup" for a manufacturer's model page
    Right
    ProductModel for specs; ProductGroup for variant sets (sizes, colors)

    ProductGroup is for products that vary by size, color, or configuration. ProductModel is for the model specification itself. A t-shirt in S/M/L is a ProductGroup. The specification sheet for a software version is a ProductModel. They serve different purposes.

About the example data

The XooStructured IDE v3.0 product specification. The predecessorOf links to v2.0, showing the product lineage. This is the model-level description, separate from the SoftwareApplication example which covers the app as an installable product.

Comments

Loading comments...

Leave a comment