Product Page Schema

2025-02-22 by Thomas

7 minutes reading time

Product Page Schema Blog

Product Page Schema Referrence and Overview

SEO On-Page, SEO Technical

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 usedWebPage, 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 of WebPage 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 the WebSite schema).
  • publisher: { "@type": "Organization", "@id": "[Homepage URL]#organization" }
  • mainEntity: { "@type": "Product", "@id": "[Product Page URL]#product" } (Crucially Important: This links the WebPage to the Product schema, indicating the page is about this product).
  • breadcrumb: (See BreadcrumbList 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 the WebPage description. Include key features, benefits, and specifications.
  • image: URL(s) of product images. Use an ImageObject (or an array of ImageObjects 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, or gtin14: (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 an Organization or Brand schema representing the brand. If it’s your own brand, you can link to your main Organization 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 one Offer. 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 individual Review schemas, nested within the Product schema. This is good if you display full reviews on the product page. However, if you have aggregateRating, 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

  1. 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).
  2. Link Organisation Ensure that publisher is correctly linked.
  3. WebPage Schema:
    • Ensure your WebPage schema is configured correctly, and its mainEntity property points to the @id of the Product 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.
  4. Breadcrumb
    • Ensure breadcrumb is correct and reflects the current page.

Related Posts

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.