Commerce Schema

Commerce schema is my catch-all for the schema.org listing types — Product, ProductGroup, and JobPosting — that Google turns into Shopping-style and Jobs-style rich results. Here's how they relate and when to use which.

First published: Jun 28, 2026 · Last updated: Jul 17, 2026 · Advanced
demand #36 in Structured Data#66 in On-Page#285 in Technical SEO#381 on the site
1 evidence signal on this page

"Commerce schema" is my practitioner label — not a Google or schema.org category — for the schema.org listing types that power transactional rich results: Product (a single sellable item), ProductGroup (a parent that groups variants), and JobPosting (one open job). Google splits them across two doc families (Product/Variants under "Shopping," Job posting in the general feature guides), and schema.org doesn't unify them either — Product/ProductGroup are parent/child, JobPosting sits in a totally different branch. What ties them together is purely the SEO use case: structured listings Google turns into specialized SERP treatment (Merchant listings, Google for Jobs). None of it is a ranking factor — it earns eligibility, not rank, and it's not a CTR, display, or AI-citation guarantee either. Review stars run on their own separate eligibility profile (not every product page qualifies), and Organization-level return policy vs. Offer-level shipping exceptions are two separate records to keep current. The lifecycle stakes differ sharply too: a stale product mostly loses eligibility, but a stale, unremoved job posting can earn you a manual action. This hub routes; the property tables live in the type-specific deep dives.

TL;DR —Commerce schema\"Commerce schema\" is a practitioner label — not an official Google or schema.org category — for the schema.org listing types that power transactional rich results: Product, ProductGroup, and JobPosting.” is my practitioner grouping, not a Google or schema.orgSchema markup is code that uses the schema.org vocabulary to label what your content means so search engines can understand it and show rich results. It's most often written in JSON-LD, and it's not a direct ranking factor. category, for the listing types that earn transactional rich resultsRich results (formerly 'rich snippets') are enhanced search listings — stars, images, prices, breadcrumbs, video thumbnails, and more — that Google and Bing build from structured data. They're a display feature, not a ranking factor, and eligibility never guarantees they'll show.: Product, ProductGroup, and JobPosting. Google actually splits them — Product/Variants live under “Shopping,” Job posting sits in the general feature guides list. schema.org doesn’t unify them either: Product → ProductGroup is a real parent/child (Thing > Product > ProductGroup), while JobPosting is off in the Intangible branch (Thing > Intangible > JobPosting), unrelated to Product. The only thing binding all three is the SEO use case — structured listings Google turns into specialized SERP treatment (Merchant listings, Google for JobsJobPosting schema is the schema.org/JSON-LD vocabulary you add to a single job-listing page so Google (and Bing) can read the role, employer, location, salary, and dates — making the page eligible for Google for Jobs. It requires title, description, datePosted, hiringOrganization, and jobLocation (or applicantLocationRequirements for fully remote roles).). None of it is a ranking factor; it buys eligibility — not a guaranteed display, a CTR lift, or an AI citationAn AI citation is the visible source link an AI answer engine shows next to its generated text — the clickable reference that credits the web page it used. A citation's presence is a separate thing from whether the cited page actually supports the statement, and from being retrieved (read behind the scenes) or merely mentioned (named without a link); citation is driven more by brand mentions and being retrievable than by traditional ranking., which are three separate, unguaranteed outcomes. Review/AggregateRating eligibility runs on its own separate profile, and return/shipping data splits into an Organization-level policy plus Offer-level exceptions — two more contracts this hub only routes to. And the lifecycle risk differs across the three: a stale Product mostly loses eligibility, but a stale, un-expired JobPosting can trigger a manual action.

First, an honest framing: this is my grouping, not Google’s

The grouping in this article combines several related vocabularies and search features for convenience. Evidence for this claim Commerce schema is an editorial grouping rather than a single Schema.org type or Google feature. Scope: This article's taxonomy; Schema.org and Google document individual types and search experiences. Confidence: high · Verified: Schema.org: Product Each Google experience has its own required and recommended properties, and valid markup does not guarantee display. Evidence for this claim Google documents distinct structured-data requirements for product snippets and merchant listings, and valid markup does not guarantee display. Scope: Google Product structured data and merchant-listing experiences. Confidence: high · Verified: Google: Product structured data

I want to be transparent up front, because most content that talks about “commerce” or “ecommerce” schema quietly implies these types are an official family. They’re not.

  • Google’s own docs split them. In the structured data gallery, “Job posting” sits in the flat, general Feature guides list — right alongside unrelated types like Article, Local business, and Organization. Meanwhile “Product snippet,” “Merchant listing,” and “Variants” live under a separate Shopping sub-heading. Two different documentation families.
  • schema.org doesn’t unify them. Its own type hierarchy has a dedicated “Product, Offer, and AggregateOffer” group — and JobPosting appears in no top-level grouping alongside it.

So why put them in one article? Because in practice — the way an SEO actually works — they’re the same kind of problem: structured, listing-style content you mark up to unlock a specialized search experience. That shared use case is real and useful. The shared taxonomy is not. I’d rather say that plainly than pretend Google drew this box.

The three types at a glance

  • Product (schema.org/Product) — a single sellable item. Google turns valid Product markupProduct schema (schema.org/Product) is structured data that tells search engines a page's product name, price, availability, and reviews so it can appear in Shopping-style rich results. It's separate from a Google Merchant Center feed, though Google reconciles the two. into two experiences: product snippets (review stars and price on non-purchase pages) and merchant listings (fuller Shopping-style results on pages where you can buy the item). Bare minimum for a rich result: name plus at least one of offers, review, or aggregateRating — but the review/ aggregateRating route rides on Google’s separate Review snippetReview schema (schema.org/Review) is structured data for a single critic's or user's evaluation of one specific thing — one author, one itemReviewed, one reviewRating — distinct from AggregateRating, which summarizes many reviews into an average. rules (its own eligibility profile, including the self-serving-reviews restriction), not a blanket “any product page can show stars.” Not every Product or merchant page automatically qualifies for review stars; see the Review schemaReview schema (schema.org/Review) is structured data for a single critic's or user's evaluation of one specific thing — one author, one itemReviewed, one reviewRating — distinct from AggregateRating, which summarizes many reviews into an average. deep dive for that profile.
  • ProductGroup (schema.org/ProductGroup) — a parent that groups the variants of one conceptual item (a t-shirt in several sizes and colors) so Google understands they’re options of the same product, not unrelated listings. It ties variants together with hasVariant, variesBy, and productGroupID. Crucially, it doesn’t replace Product — every variant is still its own full Product; the ProductGroup sits above them.
  • JobPosting (schema.org/JobPosting) — a single open job, marked up so it’s eligible for the Google for Jobs experience (the card/carousel of listings in Search). Baseline required properties are title, description, datePosted, hiringOrganization, and jobLocation (or applicantLocationRequirements for fully remote roles).

I keep this hub deliberately shallow on each type’s property tables — the deep dives live in the three child articles I point to at the end.

Where they sit in the schema.org hierarchy

This is the part almost nobody cites correctly, and it’s the difference between a guess and a fact:

  • ProductThing > Product.
  • ProductGroupThing > Product > ProductGroup. It’s a genuine subtype of Product, inheriting all of Product’s properties and adding hasVariant, productGroupID, and variesBy. So “Product vs ProductGroup” isn’t a real either/or — ProductGroup is a specialized Product, purpose-built for the variant case.
  • JobPostingThing > Intangible > JobPosting. A completely separate branch. The JobPosting definition makes no reference to Product, Offer, or any commerce type.

Conclusion: Product and ProductGroup are taxonomically related (parent/child, verifiable, citable); JobPosting is taxonomically unrelated. The connective tissue across all three is the SEO use case, not type inheritance. Say that, and you’re on solid ground.

Product vs. ProductGroup: when to use which

Simple rule:

  • One purchasable configuration → plain Product. A single SKU, one price, one page-that-can-be-bought.
  • One conceptual item, multiple purchasable variantsProductGroup wrapping its Product members. The shirt-in-five-colors case. A ProductGroup itself isn’t offered for sale — its hasVariant members are, each with its own sku/gtin, price, and availability.

Google also documents ProductGroup differently: it lives on the Variants page, not as a standalone top-level feature guide — reinforcing that Google treats it as an extension of Product rather than a wholly separate rich-result type. Full property tables, the variesBy full-URL gotcha, and Merchant CenterGoogle Merchant Center (GMC) is a free platform where retailers upload and manage product data so their products can appear across Google — Shopping, organic Search product grids, Images, Lens, and AI surfaces. Since 2020 it powers free (organic) product listings, not just paid Shopping ads. item_group_id reconciliation belong in the ProductGroup deep dive, not here.

JobPosting: the odd one out

JobPosting shares nothing taxonomically with Product — but it’s the same shape of problem, so it earns its place in this hub. Two things set it apart operationally:

  1. One job per page, always. Google’s rule: “The JobPosting markup must only be used on pages that contain a single job posting.” Never on a listing or search-results page. Product/ProductGroup has no equivalent single-item-per-page restriction — in fact ProductGroup exists precisely to handle several variants on one page.
  2. Expired postings are a compliance obligation, not a set-and-forget. More on the risk below — this is where the stakes diverge hardest from Product.

Shared ground rules across all three

Even though the types don’t share a taxonomy, they share Google’s general structured-data guidelines, and it’s worth stating the rules once:

  • Required properties are the eligibility gate. Miss a required property and the page isn’t eligible for that rich result. Recommended properties raise quality — Google literally uses job-posting salary as its own example: users prefer postings with stated salaries over those without. The same “more complete is better” logic applies to Product.
  • Eligibility ≠ guaranteed display. Valid markup gets you into the pool; Google’s systems still separately decide whether to show the enhancement.
  • Only mark up visible, accurate content. No invisible markup, no fake reviews, no misleading data — Google’s spam and content-quality policies apply across all three, plus each type carries its own feature-specific policy (JobPosting’s content policy, for instance).
  • JSON-LDJSON-LD (JavaScript Object Notation for Linked Data) is a script-based structured data format, typically paired with the schema.org vocabulary to describe page content for search engines and AI systems. Google recommends it over Microdata and RDFa because it's the easiest format to implement and maintain at scale — but all three work, and structured data isn't a ranking signal. is the recommended format for all of them — easier to maintain at scale than inline Microdata/RDFa.

Where each connects beyond on-page markup

The real unifying value isn’t taxonomy — it’s that Google gives listing-style content its own product-line treatment:

  • Product / ProductGroup ↔ Google Merchant CenterGoogle Merchant Center (GMC) is a free platform where retailers upload and manage product data so their products can appear across Google — Shopping, organic Search product grids, Images, Lens, and AI surfaces. Since 2020 it powers free (organic) product listings, not just paid Shopping ads.. You can provide product data as on-page structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding., as a Merchant Center feed, or both. Google recommends both to maximize eligibility, and it reconciles the two — they’re separate systems that are validated separately, not one submission. Passing the Rich ResultsRich results (formerly 'rich snippets') are enhanced search listings — stars, images, prices, breadcrumbs, video thumbnails, and more — that Google and Bing build from structured data. They're a display feature, not a ranking factor, and eligibility never guarantees they'll show. Test doesn’t mean your feed is valid, and vice versa. Price and availability need to match across the on-page markup, the feed, and checkout.
  • JobPosting ↔ Google for Jobs. Valid JobPosting markup makes a single-job page eligible for the Jobs experience — a distinct vertical, not the Shopping surface.
  • Returns and shipping split the same way, at a finer grain. MerchantReturnPolicy usually lives at the Organization level — your standard, site-wide return window and terms. OfferShippingDetails works at the Offer level, and exists specifically to override the org-level default for one item (a heavier product, a region with different rates). Treat those as two separate records that can each drift stale on their own, not one blob you set once — the org-level policy and any offer-level exceptions both need their own upkeep. Full precedence rules live in the MerchantReturnPolicy and OfferShippingDetails deep dives.
  • On-page structured data, a Merchant Center feed, and what Google’s Search features or an AI answer actually surface are three separate contracts, not one pipeline — valid markup earns eligibility in the first, doesn’t automatically populate the second, and doesn’t guarantee anything in the third. Passing one doesn’t prove parity with the others.

The Bing asymmetry is worth stating plainly: Bing validates all three types generically against the schema.org shape, but it publishes no bespoke required/recommended property tables or content policies for any of them, and it has no equivalent to Merchant listings or Google for Jobs. On ProductGroup specifically, Bing’s own Fabrice Canel said (September 2024) it doesn’t yet consume ProductGroup markup in its shopping captions, though it’s “on their radar.” So: same base vocabulary, but only Google has built dedicated, documented rich-result experiences on top of it.

Risk and lifecycle differences

Here’s the contrast I most want people to internalize, because no one else frames it: stale listings need lifecycle hygiene across all three types — but the stakes differ sharply.

  • A stale or out-of-stock Product mostly just loses rich-result eligibility, or shows a “sold out”/“out of stock” label. Annoying, not catastrophic.
  • A stale, unremoved JobPosting is a different animal. Google: “We don’t allow expired job postings,” and failure to expire or remove closed jobs “may result in a manual action.” That’s a materially worse outcome than ordinary ineligibility. The three accepted ways to expire a job: set validThrough in the past, return a 404/410, or strip the markup.

Same lesson — structured listings need a lifecycle process — but if you only build one cleanup pipeline, build it for jobs.

Does commerce schema help SEO?

No, not rankings. John Mueller has been direct: “Structured data won’t make your site rank better.” What it does is earn eligibility for rich results and specialized experiences, and separately help Google understand your pages. Conflating “I added schema” with “I’ll rank better” is the single most common myth across all three types.

And it’s not just rankings. Eligibility, an actually-displayed rich result, a CTR lift, and revenue are four separate claims — don’t collapse them into one. Valid markup doesn’t guarantee your listing shows up in Shopping or the Jobs experience (eligibility isn’t display), doesn’t guarantee more clicks, and — since none of this hub’s schema types are documented AI-visibility signals — it isn’t a lever for showing up or getting cited in AI OverviewsAI Overviews are the AI-generated summary box Google shows above or within its regular search results, written by Gemini models from pages retrieved out of Google's normal Search index. It's a Search feature, not a separate platform or index. or AI Mode either. Measure each of those outcomes on its own; a schema rollout is worth doing for the search feature it can earn, not as a proxy for any of the rest.

My own take echoes Mueller’s: know what schema is actually for before you spend dev time on it. It’s here to stay — Mueller has also said Google isn’t killing schema — but you implement it to win a search feature, not to move up the results, guarantee a click, or move an AI answer.

Where to go next

This hub is the map; each of these is its own deep dive nested under it:

  • Product schemaProduct schema (schema.org/Product) is structured data that tells search engines a page's product name, price, availability, and reviews so it can appear in Shopping-style rich results. It's separate from a Google Merchant Center feed, though Google reconciles the two. — the two Google experiences (product snippets vs. merchant listings), the required/recommended property split, the availability enum, and the feed-vs-markup confusion untangled. Start here if your page sells one item.
  • ProductGroup schemaProductGroup schema is structured data that groups product variants — like a shirt's sizes and colors — under one parent so Google understands they're options of the same item, not separate products. It wraps individual Product markup via hasVariant/variesBy/productGroupID; it doesn't replace it. — grouping variants with hasVariant/variesBy/ productGroupID, the single-page vs. multi-page patterns, the full-schema.org-URL gotcha, and reconciling with Merchant Center’s item_group_id. Start here if your item comes in sizes/colors/materials.
  • JobPosting schemaJobPosting schema is the schema.org/JSON-LD vocabulary you add to a single job-listing page so Google (and Bing) can read the role, employer, location, salary, and dates — making the page eligible for Google for Jobs. It requires title, description, datePosted, hiringOrganization, and jobLocation (or applicantLocationRequirements for fully remote roles). — required vs. recommended properties, remote/hybrid handling, the single-job-per-page rule, expiration hygiene, and the 2024–2025 IndexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. API access changes for job boards. Start here for a careers page or job board.
  • MerchantReturnPolicy schemaMerchantReturnPolicy (schema.org/MerchantReturnPolicy) is the structured-data type that describes a return policy — window, fees, methods, refund type, and conditions — nested under Organization (site-wide default) or Offer (per-product override) via the hasMerchantReturnPolicy property, so Google can show return details in product rich results and knowledge panels. — the nested, property-level type for your return policy: the precedence order between markup and Merchant Center settings, and the applicableCountry vs. returnPolicyCountry mix-up.
  • OfferShippingDetails schemaOfferShippingDetails (schema.org/OfferShippingDetails) is structured data nested inside an Offer that tells Google what a product costs to ship, where it ships to, and how long delivery takes. As of November 2025, Google positions it as the per-product override of an organization-wide ShippingService default. — the shipping-rate/destination/delivery-time companion property, and when Google actually requires it for free listings.
  • Review schema — the separate eligibility profile behind the review/ aggregateRating route into a Product rich result: single-review vs. aggregate rules, the self-serving-reviews restriction, and why not every product page automatically qualifies for stars. Start here once you’re past “which of the three do I use” and into “can this page actually show review stars.”

For the wider picture, this hub nests under the broader structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding. subcluster — see also the sibling schema markupSchema markup is code that uses the schema.org vocabulary to label what your content means so search engines can understand it and show rich results. It's most often written in JSON-LD, and it's not a direct ranking factor. article there for the vocabulary, formats, and deprecation cycle. And it all lives in the on-page cluster, where structured data sits alongside the rest of on-page technical SEOTechnical SEO is the practice of making a site easy for search engines to crawl, render, index, and (now) be eligible for AI answers. It's the foundation that lets your content and links rank — not a ranking trick of its own..

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.