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.
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.
TL;DR — OfferShippingDetails is a small block of code you add to a product’s markup that tells Google three things: what it costs to ship, where it ships to, and how long it takes. Google can then show that shipping line right in the search result. As of late 2025 there are two places to put shipping info — one at the store level (a single default for your whole catalog) and one at the product level (this type, for products that differ) — and OfferShippingDetails is the product-level one.
What OfferShippingDetails is
When someone looks at a product page, they can read the shipping cost and the “arrives in 3–5 days” line just by looking. A search engine sees plain text and has to guess. OfferShippingDetails is code you add — usually as 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. — that spells it out using the shared schema.org vocabulary: “shipping costs $5,” “it ships to the US,” “it takes 3–5 business days.”
It lives inside the Offer on a product page — the same Offer that already holds
the price and availability (see 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.).
Google reads it and can show a shipping-cost or delivery-estimate line in your
search listing, especially in Shopping-style results.
The three things it describes
OfferShippingDetails bundles three ideas:
- How much — the shipping cost (
shippingRate). - Where to — the destination it applies to, like a country or a postal-code
range (
shippingDestination). - How long — the delivery time (
deliveryTime), which is really two numbers added together: how long your warehouse takes to send it out (handling time) plus how long the carrier takes to deliver it (transit time).
The big change in late 2025
Until recently, this product-level markup was the main way to declare shipping 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.. In November 2025 Google added a second, store-level option: you
can now declare one shipping policy for your whole business once (a type called
ShippingService), instead of repeating it on every product. Google now recommends
doing that as your default, and using OfferShippingDetails only for products whose
shipping is different from the default.
So the simple version:
- One shipping policy for everything? Declare it once at the store level with ShippingService.
- A specific product ships differently? Override it on that product with OfferShippingDetails.
Two honest cautions
- It’s not required, and it won’t lift your rankings. Adding shipping markup makes you eligible for the shipping line in search — it doesn’t move you up the results. Structured data never does that.
- Adding it doesn’t guarantee it shows. If you also have a Google Merchant Center feed or a shipping setting in 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., those can quietly win over your markup — with no error to warn you. More on that trap in the Advanced tab.
Want the full version — every property, the November 2025 restructure, which source wins when several disagree, the silent-failure trap, and working 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.? Switch to the Advanced tab.
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(viashippingDetails) that declaresshippingRate(aMonetaryAmount),shippingDestination(aDefinedRegion), anddeliveryTime(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 withShippingService(Organization.hasShippingService), and reservingOfferShippingDetailsfor products that differ — the same org-level/offer-level split it used forMerchantReturnPolicy. 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.shippingDetailsis 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 underOrganizationmarkup 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 underOffer.” - 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— aMonetaryAmount(orShippingRateSettings). schema.org: “The shipping rate is the cost of shipping to the specified destination.” This is where avalueof0marks free shipping.ShippingRateSettingsis what the 2025 restructure extended to support percentage-of-order-value and percentage-of-weight rates.shippingDestination— aDefinedRegion. 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 severalOfferShippingDetailsentries for different regions.shippingOrigin— also aDefinedRegion: “Indicates the origin of a shipment, i.e. where it should be coming from.”deliveryTime— aShippingDeliveryTimeobject. 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— aShippingService(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
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:
- Content API for Shopping / Merchant API (account-level settings) — strongest.
- Merchant Center or Search Console shipping settings.
- Product-level
OfferShippingDetailsmarkup. - Org-level
ShippingServicemarkup — 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..
AI summary
A condensed take on the Advanced version:
- What it is.
OfferShippingDetails(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.) is 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. nested under anOfferviashippingDetails. It declaresshippingRate(aMonetaryAmount),shippingDestination(aDefinedRegion), anddeliveryTime. You can list multiple instances per product (different regions or rate/speed tiers). - The Nov 2025 two-tier system. Google now recommends declaring a catalog-wide
default once at the org level with
ShippingService(Organization.hasShippingService), and usingOfferShippingDetailsonly as the per-product override — the same split it uses forMerchantReturnPolicy.OfferShippingDetailswas repositioned, not deprecated; only redundant fields inShippingRateSettingswere dropped. - deliveryTime = handlingTime + transitTime. Handling is your warehouse delay
before shipping; transit is the carrier delay after.
cutoffTimeadds a day for late orders. It’s not a single number. - Recommended, not required. Only
price(>0 for merchant listings) andpriceCurrencyare required for a merchant listing. Separately, shipping info of some form is required for 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. in ~30 countries — a different requirement. - Two axes people conflate. (A) Where to author your default → org level. (B)
What wins in a conflict → precedence is Content/Merchant API → Merchant
Center/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. settings → product-level
OfferShippingDetails→ org-levelShippingService. So the offer-level override outranks the org-level default in a fight, even though the default is what you’re told to author. - The silent-failure trap. Markup can validate 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 yet be fully overridden by a feed value or Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. setting with no error — only a later listing rejection if the shown cost mismatches checkout. Policies edited in 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. go read-only in Search Console for 30 days.
- Tie-break. With multiple options, Google shows the lowest cost (fastest speed breaks ties).
- Not a ranking factor; Bing has no bespoke shipping feature. Eligibility only (Mueller). The Jan 2026 Search Console type sunset is unrelated — shipping schema was expanded, not cut.
Official documentation
Primary-source documentation from Google and 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..
schema.org
- OfferShippingDetails — the type itself and its full property table.
- shippingDetails — the
Offerproperty that nests it. - ShippingDeliveryTime —
handlingTime,transitTime,cutoffTime,businessDays. - ShippingService — the org-level type added in the November 2025 restructure.
- Merchant listing (product) structured data — required vs. recommended properties, and the “provide a global shipping policy under Organization instead” callout.
- Shipping policy (ShippingService) structured data — the November 2025 org-level doc, the override relationship, and
ShippingConditions. - Return policy (MerchantReturnPolicy) structured data — the architecturally parallel sibling type.
- Product structured data (overview) — where
OfferandshippingDetailsfit in a Product. - Free listings — country requirements (Merchant Center Help) — the ~30-country shipping-info requirement.
- Supported structured data attributes and values (Merchant Center Help) — how feed attributes map to schema.
Google — blog announcements
- More ways to share your shipping and returns policies (Nov 12, 2025) — the current-state announcement (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. settings + org-level
ShippingService). - New Schema.org support for retailer shipping data (Sept 2020) — the original
shippingDetailsannouncement.
schema.org project
- Issue #3617 — org-level shipping proposal — Irina Tuduce’s proposal that introduced
ShippingService.
developers.google.com/search/blog/* posts (including the Sept
2020 and Nov 2025 announcements) render via JavaScript and resisted direct fetching;
the claims drawn from them are corroborated across dated, bylined secondary coverage
(SEJ, ppc.land, Etavrian, Pemavor) and should be confirmed against the live pages
before treating any wording as verbatim. The schema.org type pages and the three
/structured-data/* reference docs rendered cleanly and are quoted directly. Quotes from the source
On-the-record statements from 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. and Google. Where a page exposes the text, the link is a deep link that jumps to the quoted passage.
schema.org — the type and its properties
- “OfferShippingDetails represents information about shipping destinations.” Jump to quote
- On
shippingDetails: “Indicates information about the shipping policies and options associated with an Offer.” Jump to quote - On
deliveryTime: “The total delay between the receipt of the order and the goods reaching the final customer.” Jump to quote - On
handlingTime: “The typical delay between the receipt of the order and the goods either leaving the warehouse or being prepared for pickup.” Jump to quote - On
transitTime: “The typical delay the order has been sent for delivery and the goods reach the final customer.” Jump to quote
Google — the org-level recommendation (the 2025 repositioning)
- “We recommend you provide a global shipping policy for your business under
Organizationmarkup 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 underOffer.” — Google Search Central, merchant-listing docs. Jump to quote Relayed via the fetch tool’s text extraction of the live page this session; confirm the exact#:~:text=fragment in-browser before treating as final.
Google — the override relationship (from the ShippingService side)
- “If you need to override your standard shipping policy for a specific product, specify one or more instances of the
OfferShippingDetailstype.” — Google Search Central, shipping-policy docs. Jump to quote - “Many merchants have shipping policies that outline the process of shipping purchased products for customers. When you add
ShippingServicestructured 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. to your site, Google Search can use this information to display shipping information alongside your products.” Jump to quote
John Mueller, Google — it’s not a ranking factor
- “Structured data won’t make your site rank better.” Read the coverage
- “Exactly. Understand that markup types come and go, but a precious few you should hold on to (like title, and meta robotsThe robots meta tag is an HTML element in a page's head — <meta name=\"robots\" content=\"noindex\"> — that tells search engines how to index and serve that page. It's crawl-then-obey: a page blocked in robots.txt is never fetched, so the tag is never seen.).” Read the coverage
schema.org GitHub proposal (#3617) — the restructure rationale
- “This change introduces a new type, ShippingService, that groups shipping constraints… Redundant fields from ShippingRateSettings are therefore… deprecated.” Read the proposal
Which shipping type should I use?
The whole “OfferShippingDetails vs. ShippingService vs. do nothing” question in one path. Remember: this is the authoring question (“where do I put it”), which is separate from precedence (“what wins in a conflict”) — see the Cheat Sheet for that.
Where should your shipping info live?
OfferShippingDetails — cheat sheet
Two tiers, two jobs
| Tier | Type | Declared via | Use it for |
|---|---|---|---|
| Organization | ShippingService | Organization.hasShippingService | Your recommended default — one catalog-wide policy, stated once |
| Offer (product) | OfferShippingDetails | Offer.shippingDetails | The override — products that ship differently, or the fallback if no default exists |
The core properties (inside OfferShippingDetails)
| Property | Type | What it says |
|---|---|---|
shippingRate | MonetaryAmount | Cost of shipping (value: 0 = free) |
shippingDestination | DefinedRegion | Country / region / postal-code range it applies to |
shippingOrigin | DefinedRegion | Where the shipment comes from |
deliveryTime | ShippingDeliveryTime | Total delay = handlingTime + transitTime |
doesNotShip | Boolean | This destination isn’t served |
deliveryTime breakdown
| Sub-property | Meaning |
|---|---|
handlingTime | Your warehouse delay before it ships |
transitTime | The carrier delay after it ships |
cutoffTime | Late orders (after this time) add a day |
businessDays | Days you actually process orders |
Precedence — what wins in a conflict (strongest → weakest)
- Content API for Shopping / Merchant API
- 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. / 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. settings
- Product-level
OfferShippingDetails - Org-level
ShippingService
Two different questions: where to author your default (org level) vs. what wins in a fight (offer level outranks org level). Both true. “Stronger sources override weaker ones completely. There is no blending.”
Fast facts
shippingDetailsis recommended, not required — onlyprice(>0) andpriceCurrencyare required for a merchant listing.- Shipping info of some form is required for free 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. in ~30 countries — a separate requirement.
- Multiple entries welcome; Google shows the lowest cost (fastest speed breaks ties).
- Not a ranking factor — eligibility only.
- Silent-failure trap: 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, still overridden by a feed / Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. setting with no error. Policies edited in Merchant Center are read-only in Search Console for 30 days.
OfferShippingDetailswas repositioned, not deprecated, in Nov 2025.
Working JSON-LD
Illustrative examples — validate your own in the Rich Results Test and the schema.org validator before shipping, and make sure the values match your feed and checkout exactly.
1. Offer-level OfferShippingDetails (the per-product override)
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Merino Wool Beanie",
"offers": {
"@type": "Offer",
"price": 29.00,
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": 5.00,
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 2,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
}
}That advertises $5 US shipping with a 0–1 day handling window plus 2–5 days in transit — i.e. “arrives in about 2–6 business days.”
2. Multiple shipping options (standard vs. expedited)
shippingDetails takes an array — list every tier and let Google apply its tie-break
(lowest cost, fastest speed breaks ties):
"shippingDetails": [
{
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": 5.00, "currency": "USD" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" },
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"transitTime": { "@type": "QuantitativeValue", "minValue": 5, "maxValue": 7, "unitCode": "DAY" }
}
},
{
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": 15.00, "currency": "USD" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" },
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "DAY" }
}
}
]3. Free shipping
Free shipping is just a shippingRate with a value of 0:
"shippingRate": { "@type": "MonetaryAmount", "value": 0, "currency": "USD" }4. Doesn’t ship to a region
{
"@type": "OfferShippingDetails",
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "AU" },
"doesNotShip": true
}The org-level ShippingService (declared under Organization.hasShippingService) is
the recommended default to author when your whole catalog shares one policy — reserve
the offer-level blocks above for the products that genuinely differ.
Mistakes and myths
The recurring ways OfferShippingDetails goes wrong:
- “
shippingDetailsis required for Product 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..” It isn’t — it’s a recommended property for the shipping-details enhancement. Onlyprice(>0 for merchant listings) andpriceCurrencyare required. (Separately, shipping info of some form is required for free 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. in ~30 countries — a different thing.) - “Adding OfferShippingDetails guarantees my shipping cost shows.” No. A Merchant Center 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 sits higher in the precedence stack and can silently override valid markup — with no error until an eventual listing rejection. Check the higher tiers before you touch the markup.
- “
ShippingServicereplaces / deprecatesOfferShippingDetails.” No.OfferShippingDetailsis the ongoing override underOffer. Only certain redundant fields insideShippingRateSettingswere deprecated — not the type. - Conflating the two axes. “Author your default at the org level” (authoring) and “product-level markup outranks org-level in a conflict” (precedence) are both true and answer different questions. Don’t reason as if one contradicts the other.
- Collapsing
deliveryTimeinto one number. It’shandlingTime(your processing delay) plustransitTime(the carrier’s delay). Publishing a single made-up “shipping time” misstates both — and if it disagrees with checkout, risks rejection. - Markup that disagrees with the feed or checkout. Because stronger sources override completely, a shipping cost in your markup that doesn’t match your feed or actual checkout is a rejection risk, not a harmless duplicate. Keep them identical.
- “Schema is dying, so skip shipping markup.” This conflates the January 2026 Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. sunset of a few unrelated, underused types with shipping schema — which was expanded in November 2025, not cut.
- “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. like this will help rankings.” No — it earns rich-result eligibility, never a ranking boost (Mueller, repeatedly).
Common shipping-markup issues
Validator accepts the JSON-LD but shipping data is wrong
Cause: valid syntax can still contain stale regions, rates, or timing. Fix: reconcile markup with checkout and feed/business-policy data.
Shipping details appear for the wrong destination
Cause: destination constraints are missing or modeled at the wrong level. Fix: map each service and destination explicitly and test representative addresses.
Multiple shipping sources disagree
Cause: page markup, 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., and account settings are maintained separately. Fix: choose an operational source of truth and synchronize every surface.
Validation tests
Test published shipping markup
Test to run — validate representative product pages and compare parsed destinations, rates, handling, and transit values with checkout. Expected result — eligible markup matches what a user receives. Failure interpretation — mapping or source data is incomplete. Monitoring window — immediate. Rollback trigger — remove the rollout if it publishes materially wrong shipping promises.
Test source consistency
Test to run — compare page 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., feed/account shipping settings, and checkout for the same products and destinations. Expected result — no unexplained conflict. Failure interpretation — separate systems have drifted. Monitoring window — after each policy change. Rollback trigger — restore the last consistent configuration if a change creates mismatches.
Test yourself: OfferShippingDetails Schema
Five quick questions on how OfferShippingDetails works and where it fits after the November 2025 restructure. Pick an answer for each, then check.
Resources worth your time
My related writing
- Structured Data: What It Is and How to Use It — my Ahrefs guide to schema typesSchema 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., implementation, validation, and the
sameAsrisk; the broader context this shipping type sits inside. - The Beginner’s Guide to Technical SEO — where 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. fits in the wider technical picture.
My speaking
- How Search Works (SlideShare) — my walkthrough of crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor., renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., 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., and how markup is consumed. (My standing disclaimer applies: “This is my understanding of systems… not going to be 100% complete or accurate.”)
Official
- Google — Merchant listing structured data and Shipping policy (ShippingService) — the two reference docs that define required/recommended properties and the org-level/offer-level relationship.
- Google — More ways to share your shipping and returns policies (Nov 12, 2025) — the announcement of 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. settings + org-level
ShippingService. - schema.org — OfferShippingDetails · ShippingDeliveryTime · ShippingService — the vocabulary itself.
- schema.org proposal #3617 — the GitHub issue (Irina Tuduce, Google) behind the restructure.
From around the industry
- Google Launches Structured Data For Merchant Shipping Policies (Search Engine Journal, Matt G. Southern, Nov 12 2025) — the clearest bylined write-up of the November 2025 launch and the tie-break logic.
- Google Is Not Diminishing The Use Of Structured Data In 2026 (Search Engine Journal, Roger Montti, Nov 11 2025) — disambiguates the January 2026 Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. type sunset from the shipping-schema expansion.
- Google Updates Structured Data Requirements For Return Policies (Search Engine Journal, Mar 14 2025) — the March 2025
returnPolicyCountrytightening on the sibling return-policy type. - Google shipping and returns policies in Search Console or using new markup (Search Engine Land) — the Search Console-vs-markup options laid out.
- Google Shipping & Return Settings (magstags) — the strongest practitioner piece on the precedence stack (“there is no blending”) and the silent-failure trap.
- Google expands shipping policy options for online merchants (ppc.land) — corroborating coverage of the November 2025 changes.
OfferShippingDetails Schema
OfferShippingDetails (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.
Related: Structured Data, Schema Markup, Product Schema, Commerce Schema, Google Merchant Center
OfferShippingDetails Schema
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 you nest inside an Offer (via the shippingDetails property) to tell search engines what it costs to ship a specific product, where it ships to, and how long it takes to arrive. It bundles three ideas: shippingRate (a MonetaryAmount — the cost), shippingDestination (a DefinedRegion — a country, region, or postal-code range), and deliveryTime (a ShippingDeliveryTime object combining handlingTime, the warehouse processing delay, and transitTime, the carrier delay). Google surfaces it as the shipping-cost and delivery-estimate line in merchant listings and Shopping-style 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..
As of November 2025 this is a two-tier system, not a single type. Google introduced an organization-level ShippingService (declared via Organization.hasShippingService) as the recommended place to state a standard, catalog-wide shipping policy once. OfferShippingDetails under a specific Offer is now positioned as the override — used when a particular product’s shipping differs from the org-wide default, or as the fallback for sites with no global policy declared. That mirrors the same org-level/offer-level split Google already used for MerchantReturnPolicy.
It is not required for basic product 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. (only price and priceCurrency are), and it is never a ranking factor — it earns eligibility for the shipping-details enhancement. The trap worth knowing up front: valid markup can be silently 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. shipping setting, with no on-page error to warn you.
Related: Structured Data, Schema Markup, Product Schema, Commerce Schema, Google Merchant Center
Build-time retrieval analysis plus live signals for this exact article. The automatic chunk report includes a deterministic readiness score and is ready without a model download.
Search Console
sampleGA4 traffic (28d)
sampleCloudflare traffic (7d)
sampledCrUX field data (28d, phone)
sampleGoogle NLP entities
localChangelog
Updated Jul 18, 2026.
Editorial summary and recorded change details.Summary
Tightened attribution in the Precedence and silent-failure sections so the four-tier stack and the 'no error until rejection' sequence are credited to magstags' practitioner analysis, distinct from the two links Google's own Merchant Center docs document directly.
Change details
-
Precedence section now separates the two facts Google's Merchant Center docs document directly (item-level settings can override account-level settings; API updates can overwrite manual edits) from the full four-tier stack, which is magstags' practitioner synthesis.
-
Silent-failure section now frames the 'validates but gets silently overridden with no error until rejection' sequence as a well-corroborated practitioner pattern (magstags) rather than an established Google guarantee, while keeping the documented facts (disapproval for inaccurate shipping) as separately sourced.
Full comparison unavailable — no prior snapshot was archived for this revision.