agentic‑readiness docs
/
Build one › Run a scan ›

DocsCommerceProduct / Offer schema

Product / Offer schema

Price, availability and identifiers an agent can quote.

adoption Web baselinetrend ► flatchecked on every pagechecks 6verified 2026-08-12
Set up Product / Offer schema on your site The fields an agent needs before it can quote a price, and the ones that are most often missing.
Free Add Product and Offer markup

Why an agent cares

It is the only machine-readable statement of what a product costs and whether it is in stock, so a wrong currency or an unrecognised availability value makes an agent quote something false. Several of these are Google profile requirements rather than schema.org requirements, and the reference says which.

Adoption

Web baseline. Standard equipment on the web. Its absence is the exception rather than its presence.

Direction of travel: ► flat, as at .

Mature and measured: 0.77% of pages via JSON-LD and 1.50% via microdata (Web Almanac 2024), concentrated on product pages. Note that OpenAI chose a product feed spec over crawled markup.

What we check

Absence is never a finding. Every check below runs only once productSchemaPresent is true, so a site that has not adopted this is not assessed on it and appears in no report. 6 of these 6 can fail it. In a Lumar crawl these land on the page's own row.
CheckSeverityRaisesOn whose authority
productSchemaMissingPricehighusabilityGoogle Search profile
productSchemaNonNumericPricehighusabilityGoogle Search profile
productSchemaMissingCurrencyhighusabilityGoogle Search profile
productSchemaInvalidCurrencymediumusabilityGoogle Search profile
productSchemaMissingAvailabilitymediumusabilityLumar readiness profile
productSchemaInvalidAvailabilityEnummediumusabilitySchema.org profile

Examples

Both of these are fixtures the test suite runs through the real collector, not snippets written for a document: the first is a shape we score as valid, the second is one we flag.

correcthtmltest/e2e/test-pages/commerce/correct.html (excerpt)
<!-- productSchemaPresent + correct: Product with a complete Offer
         (price, priceCurrency, availability, itemCondition). -->
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "Product",
        "name": "Wireless Headphones",
        "sku": "WH-1000",
        "image": "https://example.com/img/wh-1000.jpg",
        "brand": { "@type": "Brand", "name": "Example" },
        "offers": {
          "@type": "Offer",
          "price": "199.00",
          "priceCurrency": "USD",
          "availability": "https://schema.org/InStock",
          "itemCondition": "https://schema.org/NewCondition",
          "url": "https://example.com/commerce/correct.html"
        }
      }
    </script>
present but wronghtmltest/e2e/test-pages/commerce/issues.html (excerpt)
<!-- productSchemaPresent: yes (Product + Offer exist). productSchemaNonNumericPrice +
         productSchemaMissingCurrency + productSchemaMissingAvailability: price is
         non-numeric and priceCurrency/availability are absent. -->
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "Product",
        "name": "Wireless Headphones",
        "offers": {
          "@type": "Offer",
          "price": "cheap"
        }
      }
    </script>

Specifications

DocumentRevisionKind
Schema.org Productv30.0specification
Schema.org Offerv30.0specification
Google Search: product structured dataupdated 2025-12-10vendor profile

Last re-read against the published documents: .

On pinning it. availability is Recommended rather than Required in both Google profiles, which is why a missing one is attributed to the Lumar readiness profile and not to Google.