
Product Page Schema Referrence and Overview
A product page is primarily about a specific product. Therefore, the core schema type is Product
. You’ll also use WebPage
to describe the page itself, and you’ll link to the Organization
that offers the product. Offer
schema is needed for pricing and availability.
Types of schema used –
WebPage
,Product
,BreadcrumbList
,Offer
If you have product reviews, you can also add aggregateRating
, and Review
. Offer
is essential for providing price and availability information.
Schema Types to Include in your Product Schema
WebPage Schema
Describes the product page as a page.
@type
:WebPage
(or, even better,ItemPage
if your schema plugin supports it.ItemPage
is a subtype ofWebPage
specifically for pages about a single item, like a product).@id
:[Product Page URL]#webpage
(e.g.,https://www.example.com/products/widget-x/#webpage
)url
:[Product Page URL]
(e.g.,https://www.example.com/products/widget-x/
)name
:[Product Name] - [Website Name]
(e.g., “Widget X – Example Company”)description
: The product page’s meta description (should be a concise summary of the product and the page content).isPartOf
:{ "@type": "WebSite", "@id": "[Homepage URL]#website" }
(Links to theWebSite
schema).publisher
:{ "@type": "Organization", "@id": "[Homepage URL]#organization" }
mainEntity
:{ "@type": "Product", "@id": "[Product Page URL]#product" }
(Crucially Important: This links theWebPage
to theProduct
schema, indicating the page is about this product).breadcrumb
: (SeeBreadcrumbList
below)
Product Schema
Describes the product itself. This is the primary schema type for this page.
@type
:Product
@id
:[Product Page URL]#product
(e.g.,https://www.example.com/products/widget-x/#product
)name
:[Product Name]
(The exact name of the product)description
: A detailed description of the product. This can be longer than theWebPage
description. Include key features, benefits, and specifications.image
: URL(s) of product images. Use anImageObject
(or an array ofImageObject
s for multiple images): JSON"image": [ { "@type": "ImageObject", "url": "[Product Image URL 1]", "width": [Width in Pixels], "height": [Height in Pixels], "caption": "photo" }, { "@type": "ImageObject", "url": "[Product Image URL 2]", "width": [Width in Pixels], "height": [Height in Pixels], "caption": "photo" } // ... more images ... ]
sku
: (Stock Keeping Unit) – A unique identifier for your product within your inventory system. Highly recommended if you have SKUs.mpn
: (Manufacturer Part Number) – If you have an MPN, include it.gtin
,gtin8
,gtin12
,gtin13
, orgtin14
: (Global Trade Item Number) – Highly recommended, especially for products sold by multiple retailers. Use the most specific GTIN type that applies (e.g.,gtin13
for a 13-digit EAN).brand
: The brand of the product. This should ideally link to anOrganization
orBrand
schema representing the brand. If it’s your own brand, you can link to your mainOrganization
schema: JSON"brand": { "@type": "Brand", "name": "[Your Brand Name]" }
offers
: (Crucially Important) This describes the offer to sell the product. It includes price, availability, and other key details. You must have at least oneOffer
. JSON"offers": { "@type": "Offer", "url": "[Product Page URL]", // URL where the product can be purchased "priceCurrency": "[Currency Code]", // e.g., "USD", "AUD", "EUR" "price": "[Price]", // e.g., "19.99" (use a decimal, not a comma) "priceValidUntil": "[YYYY-MM-DD]", // If the price is valid for a limited time "availability": "https://schema.org/InStock", // Or other availability values (see below) "itemCondition": "https://schema.org/NewCondition" // Or other condition values (see below) }
aggregateRating
: (Optional, but highly recommended if you have reviews) The overall rating of the product, based on multiple reviews. JSON"aggregateRating": { "@type": "AggregateRating", "ratingValue": "[Average Rating]", // e.g., "4.5" "reviewCount": "[Number of Reviews]" }
review
: (Optional) You can include individualReview
schemas, nested within theProduct
schema. This is good if you display full reviews on the product page. However, if you haveaggregateRating
, Google generally prefers to show the aggregate rating in search results.description
As well as the product description, you can also add more details.
Offer Schema (Nested within the Product)
@type
:Offer
url
: The URL of the product page (where the offer can be redeemed).priceCurrency
: The currency code (e.g., “USD”, “AUD”, “EUR”). Must be a valid ISO 4217 currency code.price
: The price without currency symbols (e.g., “19.99”). Use a period as the decimal separator, not a comma.priceValidUntil
: (Optional) The date until which the price is valid (YYYY-MM-DD format).availability
: Use one of the following predefined values (these are URLs, not just text):https://schema.org/InStock
https://schema.org/OutOfStock
https://schema.org/PreOrder
https://schema.org/Discontinued
https://schema.org/BackOrder
https://schema.org/LimitedAvailability
https://schema.org/OnlineOnly
https://schema.org/PreSale
https://schema.org/SoldOut
itemCondition
: Use one of the following:https://schema.org/NewCondition
https://schema.org/UsedCondition
https://schema.org/DamagedCondition
https://schema.org/RefurbishedCondition
Organization
Schema
Describes the business/organization that sells the product. The organization schema should exist on the home page.
BreadcrumbList Schema
Describes the navigational breadcrumb trail for the product page.
Structure should reflect the hierarchy (e.g., Home > Category > Subcategory > Product Name).
Website Schema
Describes the website the page is on.
Conceptual JSON-LD Example (Generic Product Page)
HTML
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebPage",
"@id": "[Product Page URL]#webpage",
"url": "[Product Page URL]",
"name": "[Product Name] - [Website Name]",
"description": "[Product Page Meta Description]",
"isPartOf": {
"@type": "WebSite",
"@id": "[Homepage URL]#website"
},
"publisher": {
"@type": "Organization",
"@id": "[Homepage URL]#organization"
},
"breadcrumb": {
"@type": "BreadcrumbList",
"@id": "[Product Page URL]#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "[Homepage URL]"
},
{
"@type": "ListItem",
"position": 2,
"name": "[Category Name]",
"item": "[Category URL]"
},
{
"@type": "ListItem",
"position": 3,
"name": "[Product Name]",
"item": "[Product Page URL]"
}
]
},
"mainEntity": { // <-- Points to the Product
"@type": "Product",
"@id": "[Product Page URL]#product"
}
},
{
"@type": "WebSite",
"@id": "[Homepage URL]#website",
"url": "[Homepage URL]",
"name": "[Website Name]",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "[Homepage URL]/?s={search_term_string}"
},
"query-input": "required name=search_term_string"
}
},
{
"@type": "Product",
"@id": "[Product Page URL]#product",
"name": "[Product Name]",
"description": "[Detailed Product Description]",
"image": [
{
"@type": "ImageObject",
"url": "[Product Image URL 1]",
"width": [Image Width],
"height": [Image Height],
"caption": "[Image Caption/Alt Text]"
},
{
"@type": "ImageObject",
"url": "[Product Image URL 2]",
"width": [Image Width],
"height": [Image Height],
"caption": "[Image Caption/Alt Text]"
}
// ... more ImageObjects if you have multiple images ...
],
"sku": "[Your Product SKU]",
"mpn": "[Your Product MPN]",
"gtin13": "[Your Product GTIN]", // Or gtin8, gtin12, gtin14
"brand": {
"@type": "Brand", // Or Organization, if the brand is an organization
"name": "[Brand Name]"
},
"offers": {
"@type": "Offer",
"url": "[Product Page URL]",
"priceCurrency": "[Currency Code]", // e.g., "USD", "AUD"
"price": "[Price]", // e.g., "19.99"
"priceValidUntil": "[YYYY-MM-DD]", // Optional
"availability": "https://schema.org/InStock", // Or other availability value
"itemCondition": "https://schema.org/NewCondition" // Or other condition value
},
"aggregateRating": { // ONLY if you have aggregate ratings
"@type": "AggregateRating",
"ratingValue": "[Average Rating]",
"reviewCount": "[Number of Reviews]"
},
"publisher": {
"@type": "Organization",
"@id": "[Homepage URL]#organization"
}
// ... other Product properties (e.g., "review" if you have individual reviews) ...
},
{
"@type": "Organization",
"@id": "[Homepage URL]#organization",
// Organisation details
}
]
}
</script>
Generic Placeholders to Replace
[Product Page URL]
: The full URL of the specific product page.[Homepage URL]
: The full URL of your website’s homepage.[Website Name]
: The name of your website.[Product Name]
: The name of the product.[Product Image URL 1]
,[Product Image URL 2]
, etc.: URLs of product images.[Image Width]
and[Image Height]
: Dimensions of the product images (in pixels).[Image Caption]
: Alternative text.[Your Business Name]
: The official name of your business.[Your Street Address]
,[Your City]
, etc.: Your business address.[Your Phone Number]
: Your business phone number.[Your Email Address]
: Your business email address.[Your Latitude]
and[Your Longitude]
: Geographic coordinates of your business.[Your Facebook URL]
, etc.: URLs of your business’s social media profiles.[Your Rating]
and[Number of Reviews]
: Only if you have a verifiable aggregate rating.[Price Range]
: (Optional) $, $$, $$$, or $$$$.[Category URL]
: The URL of the category page.[Currency Code]
: e.g., “USD”, “AUD”[Price]
: The price of the product.[Your Brand Name]
: Your Brand Name
Implementation Steps
Product
Schema:- Configure a
Product
schema type within your schema software. - Targeting: Target this schema to your individual product pages. You might need to use a “Post Type” of “Product” (if you’re using WooCommerce or a similar e-commerce plugin), or you might need to target specific pages individually.
- Placeholders: Use the appropriate Slim SEO placeholders for the dynamic fields (name, description, image, price, etc.). However, based on past experience, be very skeptical of the placeholders and always check the rendered JSON-LD. If placeholders aren’t working, you might need to use custom code (see below).
- Hardcode Where Necessary: If placeholders aren’t working reliably, hardcode values where possible (e.g.,
priceCurrency
,availability
,itemCondition
).
- Configure a
- Link Organisation Ensure that publisher is correctly linked.
WebPage
Schema:- Ensure your
WebPage
schema is configured correctly, and itsmainEntity
property points to the@id
of theProduct
schema. You might be able to use a placeholder like{{ schemas.product }}
if it works correctly. If not, you’ll have to construct the@id
manually.
- Ensure your
- Breadcrumb
- Ensure breadcrumb is correct and reflects the current page.
Related Posts
- This is the end of the road. Click the Read Our Blogs button below to get back to the main blogs section.
Frequently Asked Questions about Product Page Schema
Listed below are some of the main areas you should have an understanding on about Product Page Schema.