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 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
, availability
, and condition
to increase its accuracy. Learn more about how to Allow Merchant Center to update product information automatically
.
Product Data Attribute
Schema.org Property
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
Use the audience
property to specify a PeopleAudience
object which specifies the gender using its suggestedGender
property. Valid values are those defined by the gender
attribute:
male
female
unisex
AND
Number (in years)
Use the audience
property to specify a PeopleAudience
object which specifies the age group using its suggestedMinAge
(or suggestedAge.minValue)
and suggestedMaxAge
(or suggestedAge.maxValue)
properties.
Valid values are those defined by the age_group
attribute:
| Data spec | Schema.org value |
newborn
|
0
|
infant
|
0.25
|
toddler
|
1.0
|
kids
|
5.0
|
adult
|
13
|
| Data spec | Schema.org value |
suggestedMaxAge
OR suggestedAge.maxValue
|
|
newborn
|
0.25
|
infant
|
1.0
|
toddler
|
5.0
|
kids
|
13.0
|
adult
|
Not specified
|
Text
Use the size
property to specify a Text value or a SizeSpecification
object, which specifies the size through its name
property. The SizeSpecification
object should be used when specifying sizeGroup
and/or sizeSystem
.
Text
Use the size
property to specify a SizeSpecification
object which specifies the size type through its sizeGroup
property.
Valid values are from the WearableSizeGroupEnumeration
type. At most two values can be specified. They are mapped to feed values as follows:
| Data spec | Schema.org value |
|---|---|
big
|
|
maternity
|
|
petite
|
|
plus
|
|
regular
|
|
tall
|
|
Text
Use the size
property to specify a SizeSpecification
object which specifies the size system through its sizeSystem
property.
Valid values are from the WearableSizeSystemEnumeration type. They are mapped to feed values as follows:
| Data spec | Schema.org value |
AU
|
|
BR
|
|
CN
|
|
DE
|
|
EU
|
|
FR
|
|
IT
|
|
JP
|
|
MEX
|
|
UK
|
|
US
|
|
value
: Number
unitCode
/ unitText
: Text
Use the weight
property to specify a
QuantitativeValue
object which specifies the weight of the product using the value
property and the dimension using the unitCode
(UN/CEFACT code "LBR", "ONZ", "KGM", or "GRM") or unitText
("lb", "oz", "kg", or "g") properties.
The following schema.org properties are from the Offer type, which must be nested within a Product
using the offers
property (refer to examples below).
OR:
price : Number. Submitted without currency symbols, thousand separators, or spaces (for example, '1498.99').
priceCurrency : Text. Submitted in a three-letter ISO 4217 format (for example, USD, GBP, EUR), the currency should meet the language and currency requirements for 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 then price must be provided using a priceSpecification property with priceSpecification.priceType="StrikethroughPrice ".
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 ItemAvailability
type. They’re mapped to feed values as follows:
| Data spec | Schema.org value |
in_stock
|
|
out_of_stock
|
|
preorder
|
|
backorder
|
Valid values are from the OfferItemCondition
type. They’re mapped to feed values as follows:
| Data spec | Schema.org value |
|---|---|
new
|
|
refurbished
|
|
used
|
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://www.example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 39.99,
"priceCurrency": "USD" }
}
The following example illustrates how to specify size type and size system using schema.org. The example specifies US 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://www.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/WearableSizeSystemUS",
"sizeGroup": [
"https://schema.org/WearableSizeGroupBig",
"https://schema.org/WearableSizeGroupTall"
]
},
"audience": {
"@type": "PeopleAudience",
"suggestedGender": "male",
"suggestedMinAge": 13
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/tshirt",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 24.99,
"priceCurrency": "USD"
}
}
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's 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",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://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",
"gtin": "12345678901235",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/racket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 59.99,
"priceCurrency": "USD"
}
}
]
Bulk pricing
When applying bulk pricing to a product we recommend to put the total offer price directly in the schema annotation. The following example illustrates if a minimum of 3 units are sold for $2 USD each, then the total price would be $6 USD (the total price for the minimum purchasable quantity):
Example
{
"offers": {
"@type": "Offer",
"url": "https://www.example.com/Product/Detail/S-123",
"availability": "http://schema.org/InStock",
"priceCurrency": "USD",
"price": "6.00"
}
}
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://www.example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 10.00,
"priceCurrency": "USD",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"priceType": "https://schema.org/StrikethroughPrice",
"price": 15.00,
"priceCurrency": "USD"
}
}
}
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://www.example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"gtin": "12345678901234",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/trinket_offer",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 10.00,
"priceCurrency": "USD"
},
{
"@type": "UnitPriceSpecification",
"priceType": "https://schema.org/StrikethroughPrice",
"price": 15.00,
"priceCurrency": "USD"
}
]
}
}
Member price
The following examples illustrate encoding member prices. To indicate a member price, use validForMemberTier
in structured data.
[loyalty_program]
attribute in your product data feed. Learn more about loyalty programs
.Examples
In the first example, the active price is specified with the price property at the offer level, and the member price is given in a price specification marked with the validForMemberTier
property:
"offers": {
"@type": "Offer",
"url": "https://www.example.com/trinket_offer",
"price": 10.00,
"priceCurrency": "GBP",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": 8.00,
"priceCurrency": "GBP",
"validForMemberTier": {
"@type": "MemberProgramTier",
"@id": "https://www.example.com/com/members#tier_gold"
}
}
}
The second example shows both the active price and the member price encoded with price specifications:
"offers": {
"@type": "Offer",
"url": "https://www.example.com/trinket_offer",
"priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 10.00,
"priceCurrency": "GBP"
},
{
"@type": "UnitPriceSpecification",
"price": 8.00,
"priceCurrency": "GBP",
"validForMemberTier": {
"@type": "MemberProgramTier",
"@id": "https://www.example.com/com/members#tier_gold"
}
}
]
}
The third example demonstrates how to encode a sale price, a strikethrough price, and member prices for several loyalty program tiers in a single offer:
"offers": {
"@type": "Offer",
"url": "https://www.example.com/trinket_offer",
"priceSpecification": [
{
"@type": "UnitPriceSpecification",
"price": 9.00,
"priceCurrency": "GBP"
},
{
"@type": "UnitPriceSpecification",
"priceType": "https://schema.org/StrikethroughPrice",
"price": 10.00,
"priceCurrency": "GBP"
},
{
"@type": "UnitPriceSpecification",
"price": 8.00,
"priceCurrency": "GBP",
"validForMemberTier": {
"@type": "MemberProgramTier",
"@id": "https://www.example.com/com/members#tier_silver"
}
},
{
"@type": "UnitPriceSpecification",
"price": 7.00,
"priceCurrency": "GBP",
"validForMemberTier": [
{
"@type": "MemberProgramTier",
"@id": "https://www.example.com/com/members#tier_gold"
},
{
"@type": "MemberProgramTier",
"@id": "https://www.example.com/com/members#tier_platinum"
}
]
}
]
}
In the fourth example, the member price specification shows membership points instead of a member price:
"offers": {
"@type": "Offer",
"url": "https://www.example.com/trinket_offer",
"price": 10.00,
"priceCurrency": "GBP",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"membershipPointsEarned": 20,
"validForMemberTier": {
"@type": "MemberProgramTier",
"@id": "https://www.example.com/com/members#tier_gold"
}
}
}
Shipping
To specify shipping 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.
| Number (Non-negative, whole number) Specifies the minimum and maximum number of business 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 shipping carrier. Transit time specifies the time between when the product is handed off to a shipping carrier and when it's delivered to the customer. Use the |
|---|
Example
The following example illustrates how to specify shipping information using schema.org. The example specifies a shipping cost of USD 3.49 to the states of California, Nevada, and Arizona in the US. The handling time is between 0 and 1 business days and the transit time is between 1 and 5 business days.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"gtin": "12345678901234",
"image": "https://www.example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://www.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 return windows and cost for your product use the Schema.org MerchantReturnPolicy type, which must be nested within an Offer type using the hasMerchantReturnPolicy property.
While MerchantReturnPolicy
can only be applied to crawled offers and there is no corresponding attribute in the Product Data Specification, you must use the return policy label [return_policy_label]
attribute in your product feed if you upload your inventory manually. Learn how to set up the return policy label [return_policy_label]
attribute
.
| returnShippingFeesAmount |
Information about the cost of shipping for product returns. |
|---|
Example
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "trinket-12345",
"gtin": "12345678901234",
"image": "https://www.example.com/trinket.jpg",
"name": "Nice trinket",
"description": "Trinket with clean lines",
"brand": {
"@type": "Brand",
"name": "MyBrand"
},
"offers": {
"@type": "Offer",
"url": "https://www.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",
"shippingRate": {
"@type": "MonetaryAmount",
"value": 2.99,
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"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": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 60,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
}
Energy Efficiency
Schema.org supports energy efficiency labeling of products using the EnergyConsumptionDetails
type, which can be specified for a Product that uses the hasEnergyConsumptionDetails
property.
Product Data Attribute
- Schema.org Property
Valid values are from the schema.org EUEnergyEfficiencyEnumeration
type. Use the value mapping table below this table.
EnergyConsumptionDetails
data type. The value is determined using the standard mapping table for the energy_efficiency_class
attribute. If this value is omitted while energy_efficiency_class
is provided, it defaults to EUEnergyEfficiencyCategoryG
.EnergyConsumptionDetails
data type. The value is determined using the standard mapping table for the energy_efficiency_class
attribute. If this value is omitted while energy_efficiency_class
is provided, it defaults to EUEnergyEfficiencyCategoryA3Plus
.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 the EUEnergyEfficiencyEnumeration
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 "F" 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",
"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://www.example.com/hotwaterheater",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"price": 1799.00,
"priceCurrency": "EUR"
}
}
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).
| Specify the unit pricing base measure using a Use the |
|---|
Example
The following example illustrates a price of 3.99 Euro for a 5 KG bag of rice with a preferred standardized price per 1 KG. This means the product may show up to consumers with a unit price of .80 EUR / kilo.
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "basrice12345",
"image": "https://www.example.com/rice.jpg",
"name": "Basmati rice",
"description": "Large bag of Organic Basmati white rice, 5 Kilogram",
"gtin": "12345678901231",
"brand": {
"@type": "Brand",
"name": "ExampleRiceBrand"
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/basrice1kg",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": 3.99,
"priceCurrency": "EUR",
"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 Center 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.

