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.
On this page:
Attributes and schema.org annotations
Attributes are one of the ways in which the product data that you submit to Merchant Center is organised. 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 that you specify the schema.org properties price
, priceCurrency
, availability
and condition
to increase its accuracy. Learn more about Automatic item updates.
Product data attribute
|
Type and description | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The following attributes are from the schema.org product type |
|||||||||||||||||||||||||||||
Text | |||||||||||||||||||||||||||||
Text | |||||||||||||||||||||||||||||
Text | |||||||||||||||||||||||||||||
URL | |||||||||||||||||||||||||||||
Text A parent SKU, required to group all variant products belonging to the same product group together. |
|||||||||||||||||||||||||||||
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. |
|||||||||||||||||||||||||||||
Text | |||||||||||||||||||||||||||||
Text | |||||||||||||||||||||||||||||
Text | |||||||||||||||||||||||||||||
Text Use the |
|||||||||||||||||||||||||||||
Text Use the
|
|||||||||||||||||||||||||||||
AND |
Number (in years) Use the Valid values are those defined by the
|
||||||||||||||||||||||||||||
Text | |||||||||||||||||||||||||||||
OR |
Text Use the |
||||||||||||||||||||||||||||
Text Use the Valid values are from the
|
|||||||||||||||||||||||||||||
Text Use the Valid values are from the WearableSizeSystemEnumeration type. They are mapped to feed values as follows:
|
|||||||||||||||||||||||||||||
Use the |
|||||||||||||||||||||||||||||
Use the |
|||||||||||||||||||||||||||||
Use the |
|||||||||||||||||||||||||||||
Use the |
|||||||||||||||||||||||||||||
The following schema.org properties are from the Offer type, which must be nested within a |
|||||||||||||||||||||||||||||
A valid URL to your product. | |||||||||||||||||||||||||||||
OR: |
Price: Number. Submitted without currency symbols, thousand separators or spaces (e.g. '1498.99'). priceCurrency: Text. Submitted in a three-letter ISO 4217 format (e.g. USD, GBP, EUR), the currency should meet the language and currency requirements of your target country. Note: Price and priceCurrency can be provided directly under the offer instance or indirectly via a priceSpecification property of type UnitPriceSpecification. When sale_price is specified, the price must be provided using a priceSpecification property with priceSpecification.priceType="ListPrice". sale_price can be specified directly under the offer or via a priceSpecification property of type UnitPriceSpecification without a priceSpecification.priceType. |
||||||||||||||||||||||||||||
Valid values are from the
|
|||||||||||||||||||||||||||||
Valid values are from the
|
|||||||||||||||||||||||||||||
A valid checkout URL to your product. |
Examples using JSON-LD
Single product
Example
The following example illustrates a basic product with a minimum set of properties.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"image": "https://example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 39.99,
"priceCurrency": "GBP"
}
}
The following example illustrates how to specify size type and size system using schema.org. The example specifies UK size 'XL' for a blue T-shirt intended for adults (13+ age group) in the male 'Big&Tall' fashion department.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "12345",
"image": "https://example.com/tshirt.jpg",
"name": "Classic T-Shirt",
"description": "All-cotton t-shirt in classic cut",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"material": "cotton",
"color": "blue",
"size": {
"@type": "SizeSpecification",
"name": "XL",
"sizeSystem": "https://schema.org/WearableSizeSystemUK",
"sizeGroup": [
"https://schema.org/WearableSizeGroupBig",
"https://schema.org/WearableSizeGroupTall"
]
},
"audience": {
"@type": "PeopleAudience",
"suggestedGender": "male",
"suggestedMinAge": 13
},
"offers": {
"@type": "Offer",
"url": "https://example.com/tshirt",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 24.99,
"priceCurrency": "GBP"
}
}
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://example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 39.99,
"priceCurrency": "GBP"
}
},
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "racket-12345",
"image": "https://example.com/racket.jpg",
"name": "Nice racket",
"description": "Racket for Tennis",
"gtin": "12345678901235",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/racket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 59.99,
"priceCurrency": "GBP"
}
}
]
Sale price
The following example illustrates a basic product with a sale price. To indicate a sale price, also specify the original list price, which is specified with the /priceType property.
Example
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"image": "https://example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 10.00,
"priceCurrency": "GBP",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"priceType": "https://schema.org/ListPrice",
"price": 15.00,
"priceCurrency": "GBP"
}
}
}
If a /UnitPriceSpecification is also used for the non-sale price, the encoding simply contains two /UnitPriceSpecifications:
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"image": "https://example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 10.00,
"priceCurrency": "GBP"
},
{
"@type": "UnitPriceSpecification",
"priceType": "https://schema.org/ListPrice",
"price": 15.00,
"priceCurrency": "GBP"
}
]
}
}
Delivery
To specify delivery costs (recommended) for your product, use the schema.org OfferShippingDetails
type, which must be nested within an offer using the shippingDetails
property and which maps on the shipping
attribute in the product data specification. Multiple shippingDetails
properties can be provided.
Product data attribute
|
Type and description |
---|---|
The following attributes are from the schema.org OfferShippingDetails type. |
|
|
Text Two-digit ISO 3166-1 country code Use the |
Text Two or three-digit ISO 3166-2 subdivision code, without country prefix. Supported for US, AU or JP only. Examples: 'NY', 'NSW' or '03'. Use the |
|
Use the |
|
Number (non-negative, whole number) Specifies the minimum and maximum number of working days for handling and transit of an order. Handling time specifies the time between when an order is placed and when it's handed off to a delivery carrier. Transit time specifies the time between when the product is handed off to a delivery carrier and when it's delivered to the customer. Use the |
Example
The following example illustrates how to specify delivery information using schema.org. The example specifies a delivery cost of USD 3.49 to the states of California, Nevada and Arizona in the US. The handling time is between zero and one working days and the transit time is between one and five working days.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"gtin": "12345678901234",
"image": "https://example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": 39.99,
"priceCurrency": "USD"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US",
"addressRegion": [ "CA", "NV", "AZ" ]
},
"shippingRate": {
"@type": "MonetaryAmount",
"value": 3.49,
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
}
}
Returns
To specify the return window and cost for your product use the schema.org MerchantReturnPolicy type, which must be nested within an offer type using the hasMerchantReturnPolicy property.
Product data attribute
|
Type and description |
---|---|
The following schema.org properties are from the MerchantReturnPolicy, which must be nested within a product using the offers property (refer to the examples below). | |
applicableCountry |
Two-letter ISO 3166-1 alpha-2 country code (e.g. 'US') Three-letter ISO 3166-1 alpha-3 country code (e.g. 'USA') A country to which a particular merchant return policy applies. This can be different from the country from which the product was dispatched. Up to 50 countries can be specified. |
Valid values are from the MerchantReturnEnumeration type. If specified as MerchantReturnFiniteReturnWindow or MerchantReturnUnlimitedWindow, returnMethod and returnShippingFeesAmount are recommended. In addition, if specified as MerchantReturnFiniteReturnWindow, merchantReturnDays is required. |
|
merchantReturnDays |
The number of days (from the delivery date) that a product can be returned. |
returnMethod |
Valid values are from the ReturnMethodEnumeration type:
|
returnFees | Valid value is FreeReturn from the ReturnFeesEnumeration type. |
returnShippingFeesAmount |
Information about the cost of delivery for product returns. |
Example
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"gtin": "12345678901234",
"image": "https://example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": 39.99,
"priceCurrency": "GBP"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": 2.99,
"currency": "GBP"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "UK"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 5,
"unitCode": "DAY"
}
}
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "UK",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 60,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
}
Energy efficiency
Schema.org supports energy efficiency labelling of products using the EnergyConsumptionDetails
type, which can be specified for a Product that uses the EnergyConsumptionDetails
property.
Product data attribute
|
Type and description |
---|---|
The following schema.org properties are from the EnergyConsumptionDetails type. |
|
Valid values are from the schema.org |
|
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. If not provided and energy_efficiency_class is specified, then value EUEnergyEfficiencyCategoryG is assumed. |
|
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. If not provided and energy_efficiency_class is specified, then value EUEnergyEfficiencyCategoryA3Plus is assumed. |
Values for energyEfficiencyScale
, energyEfficiencyScaleMin
and energyEfficiencyScaleMax
are from the schema.org. EUEnergyEfficiencyEnumeration
enumeration type is mapped to values for the three 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 the scale 'A+' to 'F' for a water heater.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "1234-5678",
"image": "https://example.com/waterheater.jpg",
"name": "Water heater",
"description": "Large-capacity water heater",
"gtin": "12345678901231",
"mpn": "WH1234",
"brand": {
"@type": "Brand",
"name": "ExampleWaterHeaterBrand"
},
"hasEnergyConsumptionDetails": {
"hasEnergyEffiencyCategory": "https://schema.org/EUEnergyEfficiencyCategoryC",
"energyEffiencyScaleMax":
"https://schema.org/EUEnergyEfficiencyCategoryA1Plus",
"energyEffiencyScaleMin": "https://schema.org/EUEnergyEfficiencyCategoryF"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/hotwaterheater",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 1,799.00,
"priceCurrency": "GBP"
}
}
Unit pricing
Schema.org supports unit pricing of products using the referenceQuantity
property under the UnitPriceSpecification
type, provided using the priceSpecification
property on Offer. When specifying unit pricing, also specify the price and currency of the product using the priceSpecification
property (instead of directly using the price
and priceCurrency
properties on Offer).
Product data attribute
|
Type and description |
---|---|
The following schema.org properties are from the UnitPriceSpecification type. |
|
Specify the unit pricing measure using a Use the |
|
Specify the unit pricing base measure using a Use the |
Example
The following example illustrates a price of GBP 3.99 for a 5 kg bag of rice with a preferred standardised price per 1 kg. This means that the product may show up to consumers with a unit price of GBP 0.80/kilo.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "basrice12345",
"image": "https://example.com/rice.jpg",
"name": "Basmati rice",
"description": "Large bag of Organic Basmati white rice, 5 kilograms",
"gtin": "12345678901231",
"brand": {
"@type": "Brand",
"name": "ExampleRiceBrand"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/basrice1kg",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": 3.99,
"priceCurrency": "GBP",
"referenceQuantity": {
"@type": "QuantitativeValue",
"value": 5,
"unitCode": "KGM",
"valueReference": {
"value": 1,
"unitCode": "KGM"
}
}
}
}
}
Test your markup
Test your schema.org implementation with the rich results tool (by reviewing the reporting for 'Merchant listings' structured data). Visit the Google Search Console Help Centre to learn more about using the tool, debugging any issues and interpreting your results in the tool. Learn more about product structured data.
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 can't 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.