Use structured data markup on your product landing pages to help Google retrieve up-to-date information about your products and offers directly from your website. Any structured data markup that is supported by Merchant Center will have corresponding attributes and accepted values, as listed in the product data specification. Your structured data must be matched to the corresponding values and attributes.
Attributes and schema.org annotations
Attributes are one of the ways that the product data you submit to Merchant Center is organized. Each attribute contains a single piece of information about a product, such as the product's title or description. Accurately matching the schema.org value to the corresponding product data specification attributes will lead to fewer errors when validating your feed.
Note: If you’re using automatic item updates, make sure to specify the schema.org properties price
, priceCurrency
, and availability
to increase its accuracy. Learn more about automatic item updates
Product Data Attribute | Schema.org Property | Type and Description | ||||||||||||||||||||||||||||
The following attributes are from the schema.org Product type |
||||||||||||||||||||||||||||||
title |
name |
Text | ||||||||||||||||||||||||||||
description |
description |
Text | ||||||||||||||||||||||||||||
image_link |
image |
A valid image URL | ||||||||||||||||||||||||||||
item_group_id |
inProductGroupWithID |
Text A parent SKU, required to group all variant products belonging to the same product group together. |
||||||||||||||||||||||||||||
gtin |
gtin8 , gtin12 , gtin13 , gtin14 , isbn |
Text The GTIN that uniquely identifies your product. Specify only one of these schema.org properties. If you use GTIN values, they must be the correct length and contain the correct check digit. |
||||||||||||||||||||||||||||
material |
material |
Text | ||||||||||||||||||||||||||||
pattern |
pattern |
Text | ||||||||||||||||||||||||||||
mpn |
mpn |
Text | ||||||||||||||||||||||||||||
brand |
brand |
Text | ||||||||||||||||||||||||||||
gender |
audience.suggestedGender |
Text Use the
|
||||||||||||||||||||||||||||
age_group |
audience.suggestedMinAge , audience.suggestedMaxAge |
Number (in years) Use the Valid values are those defined by the
|
||||||||||||||||||||||||||||
color |
color |
Text | ||||||||||||||||||||||||||||
size |
size |
Text | ||||||||||||||||||||||||||||
|
|
Text Valid values are from the
|
||||||||||||||||||||||||||||
|
size.sizeSystem |
Text Valid values are from the
|
||||||||||||||||||||||||||||
The following schema.org properties are from the Offer_type , which must be nested within a product using the offers property (see examples below). |
||||||||||||||||||||||||||||||
link |
url |
A valid URL to your product. | ||||||||||||||||||||||||||||
price |
or: |
Note: |
||||||||||||||||||||||||||||
availability |
availability |
Valid values are from the
|
||||||||||||||||||||||||||||
condition |
itemCondition |
Valid values are from the
|
Examples using JSON-LD
Single Product
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"image": "https://www.example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin14": "12345678901234",
"brand": {
"@type": "Thing",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "http://www.example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": "39.99",
"priceCurrency": "USD"
}
}
Variants grouped using "inProductGroupWithID"
Certain products may contain multiple variants, such as color or price. To show the variants, you need to add additional structured data to show that there are multiple products on one page. This example has one product that varies in color and size. One of the colors is only available in one size. The other color is available in two sizes. The inProductGroupWithID property is required to show that all 3 variants belong to the same product group.
Example
[
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "44E01-M11000",
"gtin14": "98766051104218",
"inProductGroupWithID": "44E01",
"image": "https://www.example.com/coat_small_green.jpg",
"name": "Small green coat",
"description": "Small wool green coat for winter",
"brand": {
"@type": "Brand",
"name": "Good brand"
},
"audience": {
"@type": "PeopleAudience",
"suggestedGender": "unisex",
"suggestedMinAge": 13
},
"color": "green",
"size": "small",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/coat?s=s&c=g",
"priceCurrency": "USD",
"price": 39.99,
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock"
}
},
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "44E01-K11000",
"gtin14": "98766051104201",
"inProductGroupWithID": "44E01",
"image": "https://www.example.com/coat_small_darkblue.jpg",
"name": "Small dark blue coat",
"description": "Small dark blue coat for winter",
"brand": {
"@type": "Brand",
"name": "Good brand"
},
"audience": {
"@type": "PeopleAudience",
"suggestedGender": "unisex",
"suggestedMinAge": 13
},
"color": "light blue",
"size": "small",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/coat?s=s&c=lb",
"priceCurrency": "USD",
"price": 39.99,
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock"
}
},
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "44E01-X1100000",
"gtin14": "98766051104391",
"inProductGroupWithID": "44E01",
"image": "https://www.example.com/coat_large_darkblue.jpg",
"name": "Large dark blue coat",
"description": "Large dark blue coat for winter",
"brand": {
"@type": "Brand",
"name": "Good brand"
},
"audience": {
"@type": "PeopleAudience",
"suggestedGender": "unisex",
"suggestedMinAge": 13
},
"color": "light blue",
"size": "large",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/coat?s=l&c=lb",
"priceCurrency": "USD",
"price": 49.99,
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock"
}
}
]
Multiple unrelated products on one landing page
When your page contains multiple unrelated products and each product has its own structured data annotation, each annotation must contain information that identifies which product it is referring to.
For example, it’s recommended to provide the SKU (ID [id]
attribute) or the GTIN ([gtin]
attribute) in each annotation. If you don’t provide this information, the products on your landing page may not be matched to your structured product data. Learn more about setting up structured data on landing pages
Example
[
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"image": "https://www.example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin14": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "http://www.example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": "39.99",
"priceCurrency": "USD"
}
},
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "racket-12345",
"image": "https://www.example.com/racket.jpg",
"name": "Nice racket",
"description": "Racket for Tennis",
"gtin14": "12345678901235",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "http://www.example.com/racket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": "59.99",
"priceCurrency": "USD"
}
}
]
Energy Efficiency
Schema.org supports energy efficiency labeling of products using the EnergyConsumptionDetails
type, which can be specified for a Product that uses the EnergyConsumptionDetails
property.
Product Data Attribute | Schema.org Property | Type and Description |
The following attributes are from the schema.org EnergyConsumptionDetails type. |
||
energy_efficiency_class |
energyEfficiencyScale |
Valid values are from the schema.org |
min_energy_efficiency_class |
energyEfficiencyScaleMin |
Add under the instance of EnergyConsumptionDetails that was used to specify the energy_efficiency_class attribute and use the same mapping table to select the value. Required when max_energy_efficiency_class is specified. |
max_energy_efficiency_class |
energyEfficiencyScaleMax |
Add under the instance of EnergyConsumptionDetails that was used to specify the energy_efficiency_class attribute and use the same mapping table to select the value. Required when min_energy_efficiency_class is specified. |
Values for energyEfficiencyScale
, energyEfficiencyScaleMin
, and energyEfficiencyScaleMax
are from the schema.org EUEnergyEfficiencyEnumeration
enumeration type and are mapped to values for the 3 energy efficiency attributes in the product data specification as follows.
Product data specification value | Schema.org enumeration value from theEUEnergyEfficiencyEnumeration type |
A+++ |
EUEnergyEfficiencyCategoryA3Plus |
A++ |
EUEnergyEfficiencyCategoryA2Plus |
A+ |
EUEnergyEfficiencyCategoryA1Plus |
A |
EUEnergyEfficiencyCategoryA |
B |
EUEnergyEfficiencyCategoryB |
C |
EUEnergyEfficiencyCategoryC |
D |
EUEnergyEfficiencyCategoryD |
E |
EUEnergyEfficiencyCategoryE |
F |
EUEnergyEfficiencyCategoryF |
G |
EUEnergyEfficiencyCategoryG |
Example
The following example illustrates how to specify energy efficiency information using schema.org. The example specifies the EU energy efficiency class "C" with scale "A+" to "G" for a water heater.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "1234-5678",
"image": "https://www.example.com/waterheater.jpg",
"name": "Water heater",
"description": "Large capacity water heater",
"gtin14": "12345678901231",
"mpn": "WH1234",
"brand": {
"@type": "Brand",
"name": "ExampleWaterHeaterBrand"
},
"offers": {
"@type": "Offer",
"url": "http://www.example.com/hotwaterheater",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 1799.00,
"priceCurrency": "EUR",
"hasEnergyConsumptionDetails": {
"energyEffiencyScale": "https://schema.org/EUEnergyEfficiencyCategoryC",
"energyEffiencyScaleMin": "https://schema.org/EUEnergyEfficiencyCategoryA1Plus",
"energyEffiencyScaleMax": "https://schema.org/EUEnergyEfficiencyCategoryF"
}
}
}
Example
The following example illustrates how to specify size type and size system using schema.org. The example specifies the size "XL" in the US size system with size groups "big" and "tall" for a t-shirt.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "12345",
"image": "https://www.example.com/tshirt.jpg",
"name": "Classic T-Shirt",
"description": "All-cotton t-shirt in classic cut",
"gtin14": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"size": {
"@type": "SizeSpecification",
"name": "XL",
"sizeSystem": "US",
"sizeGroup": [ "big", "tall" ]
},
"offers": {
"@type": "Offer",
"url": "http://www.example.com/tshirt",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": "24.99",
"priceCurrency": "USD"
}
}
Test your markup
Test your schema.org implementation with the Rich Results tool. Visit the Google Search Console Help Center to learn more about using the tool, debugging any issues, and interpreting your results in the tool.
Requirements for structured data markup
- Structured data markup must be present in the HTML returned from the web server. The structured data markup can’t be generated with JavaScript after the page has loaded.
- Your landing page cannot change based on information about the customer, such as if you adapt prices based on a customer’s IP address or browser type.
- Structured data must match the values that are shown to the customer. Providing incorrect data on your product landing pages is a violation of our web developer guidelines.
- Google recommends the use of JSON-LD for your structured data.