[[{"@type":["BlogPosting"],"@id":"https:\/\/www.schemaapp.com\/schema-markup\/schema-org-variable-products-productmodels-offers\/#BlogPosting","@context":{"@vocab":"http:\/\/schema.org\/","kg":"http:\/\/g.co\/kg"},"url":"https:\/\/www.schemaapp.com\/schema-markup\/schema-org-variable-products-productmodels-offers\/","publisher":[{"@id":"https:\/\/www.schemaapp.com\/#Organization"}],"audience":"https:\/\/schema.org\/PeopleAudience","inLanguage":[{"@type":"Language","@id":"https:\/\/www.schemaapp.com\/schema-markup\/schema-org-variable-products-productmodels-offers\/#BlogPosting_inLanguage_Language","name":"English"}],"dateModified":"2022-10-28T16:28:44+00:00","headline":"Schema Markup for Product Models","datePublished":"2020-06-08T14:42:03+00:00","image":[{"@type":"ImageObject","@id":"https:\/\/www.schemaapp.com\/schema-markup\/schema-org-variable-products-productmodels-offers\/#BlogPosting_image_ImageObject","url":"https:\/\/www.schemaapp.com\/wp-content\/uploads\/2021\/03\/Schema-Markup-for-Product-Models.png"}],"mainEntityOfPage":"https:\/\/www.schemaapp.com\/schema-markup\/schema-org-variable-products-productmodels-offers\/","name":"Schema Markup for Product Models","articleBody":"Creating schema markup for a single product is straightforward and well documented. But things get more complicated when you\u2019re creating markup for many variations of a product. There are several ways to create schema markup for complex products. This article will describe three common strategies for modeling product variations so you can optimize your markup for search engines.\nThese strategies are: 1. Simplified and Aggregate Product Offers 2. Each Variant as an Individual Offer and 3. Each Variant as a Product Model.\nWhat is a Product Variant?\nGenerally, variants are identified as having their own Store Keeping Units (SKUs) which are unique to the Product group and used for eCommerce and Supply Chain information systems. Below is what WooCommerce and Shopify, two popular eCommerce platforms, say about Product Variants.\nWooCommerce Variable Products are a product type that lets you offer a set of variations on a particular product such as price, stock, size and more. For example, they may be used on a shirt that\u2019s offered in large, medium and small sizes and in different colours.\nShopify Product Variants are used on products that come with more than one option, such as color or size. Each combination of options is a variant of that product. For example, you might sell a t-shirt with two options, such as size and color. The size option might have three option values: small, medium, or large. The color option might have two option values: blue or green. A variant of these options could be a small, blue t-shirt.\n1. Simplified and Aggregate Product Offers\nFor situations where you don\u2019t have all the data readily available, or want to start off with something basic, you can simplify the product models. With this approach, your Product markup would only use the properties that are shared across all variants such as, name, image, and description. The Product type would then use the offers property to connect to either an Offer, if no variation in pricing was present, or an AggregateOffer if pricing changed among the product variants.\nFor example, if you\u2019re selling shoes, there may be variations in sizing and colour, but all of them are the same price. You could create markup for a single Product, excluding all sizing and colour information, and connect it to an Offer data item with the price shared across all product models. This is what the markup would look like:\n{\n \"@context\": \"http:\/\/schema.org\/\",\n \"@type\": \"Product\",\n \"name\": \"Clarks Falalala Shoes for Men\",\n \"image\": \"https:\/\/example.net\/shoes\/clarks-falalala.jpeg\",\n \"description\": \"A great comfortable walking shoe, carried in sizes 9-11, but you wouldn\u2019t really know that unless you applied fancy NLP to this string\",\n \"offers\": {\n \"@type\": \"Offer\",\n \"price\": 45.99,\n \"priceCurrency\": \"EUR\",\n \"availability\": \"InStock\"\n }\n}\nIf you were selling something that varied in price\u2014for instance, Soap that comes in 250ml, 500ml and 1000ml bottles\u2014then you could call out the lowest price and highest price using AggregateOffer:\n{\n \"@context\": \"http:\/\/schema.org\/\",\n \"@type\": \"Product\",\n \"name\": \"Super Suds\",\n \"image\": \"https:\/\/example.net\/soap\/super-suds.jpeg\",\n \"offers\": {\n \"@type\": \"AggregateOffer\",\n \"lowPrice\": 5.99,\n \"highPrice\": 17.99,\n \"priceCurrency\": \"EUR\",\n \"availability\": \"InStock\"\n }\n}\n2. Each Variant as an Individual Offer\nThis first option doesn\u2019t tell the machine-channel anything about the variation of products you carry, nor does it provide the granularity of stock information by individual SKU. The next level of detail would be to include each variant\u2019s price and availability as a separate Offer. Each Offer should have (as recommended by Google) a sku to differentiate it from other variants, along with its price and availability. Using the same example as before, we might generate:\n{\n \"@context\": \"http:\/\/schema.org\/\",\n \"@type\": \"Product\",\n \"name\": \"Clarks Falalala Shoes for Men\",\n \"image\": \"https:\/\/example.net\/shoes\/clarks-falalala.jpeg\",\n \"description\": \"A great comfortable walking shoe, carried in sizes 9-11, but now size 11 isn\u2019t in stock\",\n \"offers\": [ {\n \"@type\": \"Offer\",\n \"sku\": \"QWERTYSHOE-9\",\n \"price\": 45.99,\n \"priceCurrency\": \"EUR\",\n \"availability\": \"InStock\"\n },{\n \"@type\": \"Offer\",\n \"sku\": \"QWERTYSHOE-10\",\n \"price\": 45.99,\n \"priceCurrency\": \"EUR\",\n \"availability\": \"InStock\"\n },{\n \"@type\": \"Offer\",\n \"sku\": \"QWERTYSHOE-11\",\n \"price\": 45.99,\n \"priceCurrency\": \"EUR\",\n \"availability\": \"OutOfStock\"\n } ]\n}\nThe Soap Suds example shows varying Offer properties sku, name, price, priceCurrency (in ISO 4217 currency format) and availability;\n{\n \"@context\": \"http:\/\/schema.org\/\",\n \"@type\": \"Product\",\n \"name\": \"Super Suds\",\n \"image\": \"https:\/\/example.net\/soap\/super-suds.jpeg\",\n \"offers\": [{\n \"@type\": \"Offer\",\n \"sku\": \"egsoapsuds-250\",\n \"name\": \"Soap Suds 250 ml\",\n \"price\": 5.99,\n \"priceCurrency\": \"EUR\",\n \"availability\": \"InStock\"\n },{\n \"@type\": \"Offer\",\n \"sku\": \"egsoapsuds-500\",\n \"name\": \"Soap Suds 500 ml\",\n \"price\": 10.99,\n \"priceCurrency\": \"EUR\",\n \"availability\": \"OutOfStock\"\n },{\n \"@type\": \"Offer\",\n \"sku\": \"egsoapsuds-1000\",\n \"name\": \"Soap Suds 1000 ml\",\n \"price\": 17.99,\n \"priceCurrency\": \"EUR\",\n \"availability\": \"InStock\"\n }]\n}\n3. Each Variant as a Product Model\nIf your products have significant variations among their critical properties, you may want to use the Product Model approach. Essentially, you define a schema.org\/Product as the base product, adding properties that are common across all variations. Then, to express properties that are variable, use the ProductModel type. For example, the iPhone 11 is a Product with certain consistent characteristics, but there are different options for GB of memory, colour, and pricing. Each combination of these properties would be a different instance of ProductModel:\n{\n \"@context\": \"http:\/\/schema.org\/\",\n \"@type\": \"Product\",\n \"name\": \"iPhone 11\",\n \"description\": \"A great device, loads of memory, 1 million different apps preloaded, outstanding camera, and even makes phone calls!\",\n \"image\": \"https:\/\/example.net\/phones\/apple-iphone11-jpeg\",\n \"offers\": {\n \"@type\": \"AggregateOffer\",\n \"lowPrice\": 599.00,\n \"highPrice\": 899.00,\n \"priceCurrency\": \"USD\",\n \"availability\": \"InStock\"\n },\n \"additionalProperty\": {\n \"@type\": \"PropertyValue\",\n \"name\": \"Memory\",\n \"unitCode\": \"E34\", \n \"unitText\": \"GB\",\n \"value\": \"64\"\n },\n \"model\": [ {\n \"@type\": \"ProductModel\",\n \"name\": \"iPhone 11 with 64GB\",\n \"color\": \"White\",\n \"offers\": {\n \"@type\": \"Offer\",\n \"price\": 599.00,\n \"name\": \"White iPhone 11\",\n \"availability\": \"InStock\"\n }\n },{\n \"@type\": \"ProductModel\",\n \"name\": \"iPhone 11 with 64GB\",\n \"color\": \"Red\",\n \"offers\": {\n \"@type\": \"Offer\",\n \"price\": 649.00,\n \"name\": \"red usually costs slightly more because it's faster\",\n \"availability\": \"InStock\"\n }\n },{\n \"@type\": \"ProductModel\",\n \"name\": \"iPhone 11 with 128GB\",\n \"color\": \"White\",\n \"offers\": {\n \"@type\": \"Offer\",\n \"price\": 899.00,\n \"name\": \"White iPhone 11\",\n \"availability\": \"InStock\"\n },\n \"additionalProperty\": {\n \"@type\": \"PropertyValue\",\n \"name\": \"Memory\",\n \"unitCode\": \"E34\",\n \"unitText\": \"GB\",\n \"value\": \"128\"\n }\n }]\n}\nNote that ProductModels themselves may contain other ProductModels. This relationship can be defined using the isVariantOf property.\nProductModel Examples in the Wild\nIf you\u2019d like to see more ProductModel examples in the wild, you can use PublicWWW to search for any schema class: see example.\nunitCode Lookup Values\nIf you\u2019re wondering where the unitCode \u201cE34\u201d comes from, then you\u2019ll want to look up UN\/CEFACT Common Codes for specifying the unit of measurement. Here are some common codes for various units of measurement. A spreadsheet is available to download here.\n\n\n\nUN\/CEFACT Common Code\nUnit of Measurement\n\n\n28\nkg\/m\u00b2\n\n\n2N\ndB\n\n\n4H\n\u00b5m\n\n\n4K\nmA\n\n\n4P\nN\/m\n\n\nA24\ncd\/m\u00b2\n\n\nA86\nGHz\n\n\nA94\ng\/mol\n\n\nB22\nkA\n\n\nB32\nkg \u2022 m2\n\n\nB43\nkJ\/(kg.K)\n\n\nB49\nk\u2126\n\n\nB61\nlm\/W\n\n\nBAR\nbar\n\n\nC16\nmm\/s\n\n\nC24\nmPa.s\n\n\nC26\nms\n\n\nC45\nnm\n\n\nC62\n1\n\n\nC65\nPa.s\n\n\nC91\n1\/K\n\n\nC94\nmin-1\n\n\nCDL\ncd\n\n\nCEL\n\u00b0C\n\n\nCMQ\ncm\u00b3\n\n\nCMT\ncm\n\n\nD33\nT\n\n\nD52\nW\/K\n\n\nD74\nkg\/mol\n\n\nDAY\nd\n\n\nDD\n\u00b0\n\n\nE01\nN\/cm\u00b2\n\n\nE32\nl\/h\n\n\nFAR\nF\n\n\nGM\ng\/m\u00b2\n\n\nGRM\ng\n\n\nHTZ\nHz\n\n\nHUR\nh\n\n\nKEL\nK\n\n\nKGM\nkg\n\n\nKGS\nkg\/s\n\n\nKHZ\nkHz\n\n\nKL\nkg\/m\n\n\nKMQ\nkg\/m\u00b3\n\n\nKVT\nkV\n\n\nKWT\nkW\n\n\nL2\nl\/min\n\n\nLTR\nl\n\n\nLUM\nlm\n\n\nLUX\nlx\n\n\nMBR\nmbar\n\n\nMHZ\nMHz\n\n\nMIN\nmin\n\n\nMMK\nmm\u00b2\n\n\nMMQ\nmm\u00b3\n\n\nMMT\nmm\n\n\nMPA\nMPa\n\n\nMQH\nm3\/h\n\n\nMQS\nm\u00b3\/s\n\n\nMTK\nm\u00b2\n\n\nMTQ\nm\u00b3\n\n\nMTR\nm\n\n\nMTS\nm\/s\n\n\nNEW\nN\n\n\nNU\nN \u2022 m\n\n\nNU\nN.m\n\n\nOHM\n\u2126\n\n\nP1\n %\n\n\nPAL\nPa\n\n\nSEC\ns\n\n\nVLT\nV\n\n\nWTT\nW\n\n\n\nWe want your schema markup to be successful! Schema markup can be time-consuming and complicated. That\u2019s why we\u2019re always looking for ways to make things easier for customers through our comprehensive solutions. Book a strategy call with our technical experts today!\nStart reaching your online business goals with structured data.Let\u2019s Talk\n ","description":"Creating schema markup for a single product is straightforward but things get more complicated when you\u2019re creating markup for many variations of a product."},{"@context":"http:\/\/schema.org","@type":"Organization","address":{"@type":"PostalAddress","streetAddress":"201 - 412 Laird Road","postalCode":"N1G 3X7","addressRegion":"Ontario","addressLocality":"Guelph","addressCountry":"https:\/\/www.schemaapp.com\/#Country","name":"Schema App Address","@id":"https:\/\/www.schemaapp.com\/#PostalAddress"},"logo":{"@type":"ImageObject","width":"290","height":"93","url":"https:\/\/ezk8caoodod.exactdn.com\/wp-content\/uploads\/2020\/07\/SA_Logo_Main_Orange_w300-1.png?strip=all&lossy=1&ssl=1","@id":"https:\/\/ezk8caoodod.exactdn.com\/wp-content\/uploads\/2020\/07\/SA_Logo_Main_Orange_w300-1.png?strip=all&lossy=1&ssl=1"},"potentialAction":{"@type":"ScheduleAction","name":"Schedule a Demo","url":"https:\/\/www.schemaapp.com\/book-a-demo\/","@id":"https:\/\/www.schemaapp.com\/#ScheduleAction"},"image":{"@type":"ImageObject","width":"1350","height":"650","url":"https:\/\/ezk8caoodod.exactdn.com\/wp-content\/uploads\/2021\/04\/Schema-App-Featured-Image.png?strip=all&lossy=1&ssl=1","@id":"https:\/\/ezk8caoodod.exactdn.com\/wp-content\/uploads\/2021\/04\/Schema-App-Featured-Image.png?strip=all&lossy=1&ssl=1"},"description":"Schema App is an end-to-end Schema Markup solution that helps enterprise SEO teams develop a knowledge graph and drive search performance.","knowsAbout":["http:\/\/www.wikidata.org\/entity\/Q1891170","https:\/\/www.wikidata.org\/wiki\/Q6108942","https:\/\/www.wikidata.org\/wiki\/Q26813700","https:\/\/www.wikidata.org\/wiki\/Q180711","http:\/\/www.wikidata.org\/entity\/Q33002955"],"keywords":["Structured Data","Knowledge Graph","Rich Results","Semantic Search","Search Engine Optimization","Schema Markup","Semantic Technology"],"location":"http:\/\/www.wikidata.org\/entity\/Q504114","sameAs":["https:\/\/www.instagram.com\/lifeatschemaapp\/","https:\/\/www.linkedin.com\/company\/2480720\/","https:\/\/twitter.com\/schemaapptool","https:\/\/www.youtube.com\/channel\/UCqVBXnwZ3YNf2BVP1jXcp6Q"],"legalName":"Hunch Manifest Inc","name":"Schema App","telephone":"+18554448624","url":"https:\/\/www.schemaapp.com\/","email":"support@schemaapp.com","knowsLanguage":"http:\/\/www.wikidata.org\/entity\/Q1860","areaServed":"http:\/\/www.wikidata.org\/entity\/Q13780930","@id":"https:\/\/www.schemaapp.com\/#Organization"}],{"@context":"https:\/\/schema.org\/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Schema Markup","item":"https:\/\/www.schemaapp.com\/schema-markup\/#breadcrumbitem"},{"@type":"ListItem","position":2,"name":"Schema Markup for Product Models","item":"https:\/\/www.schemaapp.com\/schema-markup\/schema-org-variable-products-productmodels-offers\/#breadcrumbitem"}]}]