OfferShippingDetails Schema

How to implement schema.org/OfferShippingDetails — shippingRate, shippingDestination, and deliveryTime — after Google's November 2025 restructure that made it the per-product override of an org-level ShippingService default. Includes the precedence stack, the silent-failure trap, and working JSON-LD.

First published: Jul 2, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #36 in Structured Data#66 in On-Page#285 in Technical SEO#381 on the site

OfferShippingDetails (schema.org/OfferShippingDetails) is structured data nested inside an Offer that tells Google what a product costs to ship (shippingRate, a MonetaryAmount), where it ships (shippingDestination, a DefinedRegion), and how long delivery takes (deliveryTime, which is handlingTime + transitTime). As of November 2025 it's one half of a two-tier system: Google now recommends declaring a catalog-wide default once at the organization level with ShippingService (Organization.hasShippingService), and using OfferShippingDetails under a specific Offer only as the per-product override — the same org-level/offer-level split it already used for MerchantReturnPolicy. Two things trip people up. First, 'author your default at the org level' and 'product-level markup outranks org-level markup in a conflict' are both true — they're different questions. Second, the silent-failure trap: markup can validate perfectly in the Rich Results Test while being fully overridden by a Merchant Center feed value or a Search Console shipping setting, with no error until an eventual listing rejection. shippingDetails is recommended, not required, for Product rich results, but shipping info of some form is required for free listings in ~30 countries. And like all structured data, it's eligibility, not a ranking factor.

Evidence for this claim Schema.org defines OfferShippingDetails for representing shipping destinations, rates, and delivery-time information associated with an offer. Scope: Schema.org vocabulary semantics. Confidence: high · Verified: Schema.org: OfferShippingDetails Evidence for this claim Google supports shipping details in Product merchant-listing structured data but does not guarantee a rich result. Scope: Google merchant-listing eligibility and precedence rules. Confidence: high · Verified: Google Search Central: Merchant listing shipping

TL;DR — OfferShippingDetails is the 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. type nested under Offer (via shippingDetails) that declares shippingRate (a MonetaryAmount), shippingDestination (a DefinedRegion), and deliveryTime (handlingTime + transitTime). As of November 2025 it’s the offer-level override half of a two-tier system: Google now recommends declaring a catalog-wide default once at the organization level with ShippingService (Organization.hasShippingService), and reserving OfferShippingDetails for products that differ — the same org-level/offer-level split it used for MerchantReturnPolicy. Two things confuse everyone. (1) “Author your default at the org level” and “product-level markup outranks org-level markup in a conflict” are both true — different axes. (2) The silent-failure trap: markup validates in 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 but gets fully overridden by a 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. feed value or a Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. setting, with no error until a listing rejection. shippingDetails is recommended, not required; it’s eligibility, not a ranking factor.

What OfferShippingDetails actually is

schema.org’s own one-liner is terse: “OfferShippingDetails represents information about shipping destinations.” In practice it’s the object you nest inside an Offer through the shippingDetails property — schema.org describes that property as indicating “information about the shipping policies and options associated with an Offer.” It sits right alongside price, priceCurrency, and availability in the same Offer that powers your 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..

You can declare multiple OfferShippingDetails instances on one product — that’s expected, not an error — because a product can ship at different rates to different places, or at different rate/speed tiers to the same place.

The November 2025 restructure: OfferShippingDetails vs. ShippingService

This is the part almost no existing guide has folded in, so it’s worth doing carefully. On November 12, 2025 Google announced two expanded ways to share shipping and returns policies (Google Search Central blog, covered the same day by Search Engine Journal): you can now configure shipping directly in Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. settings (opened up to any site Google’s classifiers identify as a merchant, not just those with a linked Merchant Center account), and you can declare an organization-level ShippingService in 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..

ShippingService is a new schema.org type — declared via Organization.hasShippingService — that lets you state a standard shipping policy once, on a single page describing your business’s shipping, instead of repeating it on every product. Google’s own ShippingService documentation frames the relationship from that side: “If you need to override your standard shipping policy for a specific product, specify one or more instances of the OfferShippingDetails type,” nested under Offer — and notes that product-level policies support “a more limited set of properties than those described here for shipping policies specified under Organization.”

So the authoring guidance is:

  • Org level (ShippingService) — the recommended default. Declare your standard policy once. Google’s merchant-listing docs say it directly: “We recommend you provide a global shipping policy for your business under Organization markup instead… Only if some of your products have specific shipping policies for which you need to override your global shipping policy, or if you don’t provide a standard shipping policy for your business, use this property under Offer.”
  • Offer level (OfferShippingDetails) — the override. Use it for the products that genuinely ship differently, or as the fallback if you never declared an org-level default.

Google built this to reduce per-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. maintenance for large catalogs that all share one policy. If you know the MerchantReturnPolicy\"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. pattern — a default at Organization.hasMerchantReturnPolicy, an override under the Offer — this is the same architecture applied to shipping. Google has been actively tightening this whole property cluster: it made returnPolicyCountry an explicitly required field on the return-policy sibling in March 2025, then added the entire ShippingService layer in November 2025.

The schema.org proposal behind the change (GitHub issue #3617, initiated by Google Shopping engineer Irina Tuduce) is explicit that it “introduces a new type, ShippingService, that groups shipping constraints,” and that “redundant fields from ShippingRateSettings are therefore… deprecated.” Note what that does and doesn’t mean: OfferShippingDetails itself was not deprecated — it was repositioned. Only certain redundant fields inside the related ShippingRateSettings type were dropped.

The properties, one by one

Inside an OfferShippingDetails object:

  • shippingRate — a MonetaryAmount (or ShippingRateSettings). schema.org: “The shipping rate is the cost of shipping to the specified destination.” This is where a value of 0 marks free shipping. ShippingRateSettings is what the 2025 restructure extended to support percentage-of-order-value and percentage-of-weight rates.
  • shippingDestination — a DefinedRegion. schema.org: it “indicates (possibly multiple) shipping destinations. These can be defined in several ways, e.g. postalCode ranges.” You express it as a country (addressCountry), a region, or a postal-code range — which is why one product can carry several OfferShippingDetails entries for different regions.
  • shippingOrigin — also a DefinedRegion: “Indicates the origin of a shipment, i.e. where it should be coming from.”
  • deliveryTime — a ShippingDeliveryTime object. schema.org calls it “The total delay between the receipt of the order and the goods reaching the final customer.” Crucially, it’s not one number — it’s the sum of two sub-properties (below).
  • doesNotShip — a Boolean: “Indicates when shipping to a particular shippingDestination is not available.”
  • hasShippingService — a ShippingService (the new org-level type; this is the link between the two tiers).
  • validForMemberTier — ties a shipping option to a loyalty/membership tier (e.g. free shipping for members).
  • weight / height / width / depth — package dimensions used for rate-matching.

deliveryTime = handlingTime + transitTime

The single most-missed detail. deliveryTime (a ShippingDeliveryTime) is made of:

  • handlingTime — schema.org: “The typical delay between the receipt of the order and the goods either leaving the warehouse or being prepared for pickup.” This is your processing delay before anything ships.
  • transitTime“The typical delay the order has been sent for delivery and the goods reach the final customer.” This is the carrier’s delay after it ships.
  • cutoffTime“Order cutoff time allows merchants to describe the time after which they will no longer process orders received on that day. For orders processed after cutoff time, one day gets added to the delivery time estimate.”
  • businessDays — the days of the week you actually process orders.

If a buyer sees “arrives in 4–7 business days,” that’s handling (say 1–2 days) plus transit (3–5 days), with cutoffTime bumping the estimate a day for late orders. Collapsing the two into a single made-up transit number is a common mistake.

Is it required?

No — and this is a persistent myth. shippingDetails is a recommended, not required, property for merchant-listing structured data. The only required merchant-listing properties are price (which for merchant listings must be “greater than zero”) and priceCurrency (ISO 4217). You can earn a valid Product rich result with no shipping markup at all.

There’s a separate requirement people conflate with this one: shipping information of some form — markup, a Merchant Center feed value, or a Search Console setting — is required for eligibility in Google’s free product listingsFree product listings (originally launched as \"Surfaces across Google\" in 2020) are unpaid, organic product placements Google generates from your Merchant Center feed or on-page Product structured data. There's no bid and no CPC — Google matches your product data to a query and decides whether and where to show it — across the Shopping tab, Google Search (Popular Products grids), Images, Lens, Maps/Business Profile, YouTube, and Gemini; AI Mode and AI Overviews aren't on Google's official surfaces list, though practitioner reporting links them to the same eligibility pool. They're enabled by default in most cases for new Merchant Center accounts. across roughly 30 countries (per Google Merchant Center Help; the list spans Australia, Brazil, Canada, most of Western Europe, India, Japan, South Korea, the UK, the US, and more). That’s “you must supply shipping info somehow,” not “the shippingDetails schema property is mandatory.” Two different requirements.

Multiple options and Google’s tie-break logic

Because you can (and often should) list several rate/speed combos — say $5 for 5–7 days and $15 for 1–2 days — Google needs a rule for which one to surface. Per its ShippingService docs and SEJ’s coverage: when several entries could apply to the same buyer and destination, Google shows the lowest-cost option and its associated speed, breaking cost ties by the fastest speed. So listing a cheap-but-slow option means Google may show that one — worth knowing before you list it.

Precedence: what wins when sources conflict

Author the normal default once at the organization level, but debug conflicts from the strongest source downward.

Merchant API or Content API values are strongest. Merchant Center or Search Console shipping settings come next. Product-level OfferShippingDetails overrides organization markup. Organization-level ShippingService is the recommended place to author the default but is the weakest source when values conflict.

Here’s the confusion that trips up nearly everyone, and it’s worth stating as two separate questions:

Question A — where should I author my default? At the org level (ShippingService). That’s the authoring recommendation above.

Question B — when several sources declare shipping for the same product, which value does Google actually use? A different question with a different answer. Google’s own Merchant Center documentation establishes two links in this chain directly: item-level shipping settings can override account-level settings, and updates pushed through the Content API for Shopping or Merchant API can overwrite manual Merchant Center edits. The full four-tier stack below — which folds in structured data too — is magstags’ practitioner synthesis, consistent with those two documented links but not itself a single official Google source, strongest to weakest:

  1. Content API for Shopping / Merchant API (account-level settings) — strongest.
  2. Merchant Center or Search Console shipping settings.
  3. Product-level OfferShippingDetails markup.
  4. Org-level ShippingService markup — weakest.

Notice the apparent inversion: ShippingService is the recommended thing to author, but in a conflict, product-level OfferShippingDetails outranks it. Both are true. “Where should my default live” and “what wins in a fight” are different axes, and conflating them is the top practitioner error here. As magstags puts it: “Stronger sources override weaker ones completely. There is no blending.”

The silent-failure trap

This is the single most valuable pattern to internalize — but it’s worth being precise about what Google documents directly versus what’s a well-corroborated practitioner observation. Google’s own docs confirm the underlying mechanism: item- and account-level settings can silently override your markup (the precedence stack above), and Merchant Center can disapprove a listing for inaccurate or missing shipping information. What Google’s docs don’t spell out end-to-end is the exact failure sequence magstags reports: your OfferShippingDetails markup validates perfectly in the Rich Results Test, then gets completely overridden by a Merchant Center feed value or a Search Console shipping setting sitting higher in that precedence stack — with no error surfaced anywhere. The only symptom is an eventual listing rejection if the displayed shipping cost doesn’t match what a buyer sees at checkout. Treat that sequence as a strong practitioner pattern to check for, not an official Google guarantee. magstags also flags the related gotcha that shipping/returns policies edited in Merchant Center become read-only in Search Console for 30 days. If your markup “isn’t showing,” check the higher tiers of the stack before you touch the markup.

Google vs. Bing

The asymmetry is stark. Bing has no dedicated shipping-schema documentation paralleling Google’s merchant-listing / ShippingService docs, no OfferShippingDetails or ShippingService required-property tables, and no equivalent to Google’s free-listings shipping requirement. Bing Webmaster ToolsMicrosoft's free portal for monitoring and improving how a site appears in Bing search — the peer to Google Search Console, plus IndexNow instant indexing, richer backlink data, and keyword volumes. Because Bing's index also feeds Microsoft Copilot, it doubles as a window into AI-search visibility. validates schema.org markup generically, but doesn’t publish a bespoke shipping feature. This is the same pattern the 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. hub already documents for ProductGroup — treat Bing as “generic schema.org support, no bespoke shipping feature” until a Bing rep says otherwise, rather than assuming parity with Google.

Does it help rankings?

No — same caveat as all 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.. It buys eligibility for the shipping line in a merchant listing or knowledge panelThe Knowledge Graph is Google's database of entities — people, places, organizations, and things — and the factual relationships between them. It's separate from any single website's structured data: your schema markup is one of many possible inputs to the graph, not the graph itself.; it is not a ranking signal. John Mueller has been blunt on the general point: “Structured data won’t make your site rank better,” and that using it for other purposes “won’t cause problems, but you’re unlikely to see any visible change from it in Google Search” (relayed via Search Engine Roundtable).

”Is schema dying?” — a quick disambiguation

You may have seen late-2025 coverage that Google would “remove support for [certain] structured data types in Search Console and its API” starting January 2026 (per SEJ). That is a small set of unrelated, underused types — it has nothing to do with shipping schema. The opposite happened here: shipping schema was expanded (ShippingService added) in November 2025, the same season the “schema is dying” narrative was circulating. Mueller’s framing that week — “markup types come and go, but a precious few you should hold on to” (SER) — is the right lens: don’t strip valid shipping markup on a false alarm.

Where this sits

OfferShippingDetails is a property-level type in the 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. sub-cluster, nested under the 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. hub alongside Product and ProductGroup. Its closest sibling is MerchantReturnPolicy — the same org-level-default / offer-level-override architecture applied to returns instead of shipping. For the broader vocabulary, deprecation cycles, and how to choose a type, see 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.; for the format itself, 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..

Add an expert note

Pin an expert quote

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