What is OfferShippingDetails in Schema.org?
OfferShippingDetails is the Schema.org type that describes an offer's shipping terms: which destination it ships to, how much it costs and how long it takes to arrive, adding up order handling and transit. An offer can carry several, one per destination or shipping option, and Google uses it to show the shipping cost and delivery time.
Key takeaways
- OfferShippingDetails says where you ship, what it costs and how long it takes, with one node for each combination of destination, price and delivery time.
- Google recommends declaring the general shipping policy once on the organization and using OfferShippingDetails only for products that fall outside it.
- To count, Google asks for a destination, a cost with its currency and a delivery time, split into handling and transit, in days.
- Google accepts regions as a destination only in the United States, Australia and Japan, and postal codes only in Australia, Canada and the United States; elsewhere, the whole country.
- If you set up shipping in Merchant Center or Search Console, that setup beats any markup on your site.
Before buying, almost everyone looks for the same thing: what shipping costs and when it arrives. OfferShippingDetails is how you tell a search engine, in the structured data of your product page, with numbers and not with phrases like "fast shipping". It is a Schema.org type, and it is written the same way in every language because it is a name from the vocabulary. It describes the shipping of one specific offer, not the shipping policy of the whole store, which has its own place in the markup. It matters to you because, according to Google, with it people can see the shipping cost and the estimated delivery time based on where they are and on your shipping policy.[1]Google Search Central. Merchant listing (Product, Offer) structured data
How it works
Schema.org defines OfferShippingDetails as the information about shipping destinations, and explains that several are used at once: one for each zone with a different rate, or two for the same destination that differ only in price and delivery time, a cheaper, slower one and a pricier, faster one.[2]Schema.org. OfferShippingDetails It goes inside the offer, the Offer type, with the shippingDetails property. Its main properties are the destination (shippingDestination), the cost (shippingRate), the total time from receiving the order until it reaches the customer (deliveryTime) and doesNotShip, to say that you do not ship to a destination; it also accepts the shipping origin and the item's weight and dimensions.[2]Schema.org. OfferShippingDetails
Google uses it in merchant listings. It is not required, but if you add it and want your shipping to be eligible to show, it asks for three things:[1]Google Search Central. Merchant listing (Product, Offer) structured data
| Property | What Google asks for |
|---|---|
shippingDestination |
The destination country as a two-letter code, such as US |
shippingRate |
The cost, with value or maxValue, and the currency as a three-letter code, which has to be the same as the offer's. Free shipping is 0. Only one rate per OfferShippingDetails |
deliveryTime |
Only one per shipment, with two parts: handlingTime, how long the order takes to leave the warehouse, and transitTime, how long it takes to arrive once it leaves. Each with a minimum and a maximum in whole days and the unit DAY |
If you offer several options to the same destination, such as standard and express shipping, Google asks for one shippingDetails per option, each with its own combination of cost and delivery time.[1]Google Search Central. Merchant listing (Product, Offer) structured data
Since November 12, 2025, Google also supports a store-wide shipping policy, and that changed the role of OfferShippingDetails.[3]Google Search Central. Latest documentation updates The general policy is written with another type, ShippingService, inside the organization node with the hasShippingService property, and it can vary cost and delivery time by weight, order value, number of items or destination. Google recommends putting it on a single page of your site. OfferShippingDetails is left for products that fall outside that policy, and it supports fewer properties than the policy does.[4]Google Search Central. Merchant shipping policy (ShippingService) structured data The merchant listing documentation says the same: it recommends the general policy on the organization and using the offer's shipping only for exceptions or if you have no general policy.[1]Google Search Central. Merchant listing (Product, Offer) structured data An offer that follows the general policy can point to it with an OfferShippingDetails that carries only hasShippingService with the @id of that policy.[1]Google Search Central. Merchant listing (Product, Offer) structured data
As with returns, the markup is the weakest source. Google applies the Content API for Shopping first, then the shipping settings in Google Merchant Center or Search Console, then the product markup and, last, the organization's.[4]Google Search Central. Merchant shipping policy (ShippingService) structured data
In a store
Made-up example. An invented furniture store has its general shipping policy on the organization node. An oak table falls outside it: because of its size it travels with another carrier, costs more and takes longer. Its offer carries its own shipping to the United States:
| What the page says | Property | Value |
|---|---|---|
| "Ships to the United States" | shippingDestination.addressCountry |
US |
| "Shipping: $39" | shippingRate |
39, USD |
| "Leaves the warehouse in 1 to 2 days" | handlingTime |
1 to 2, DAY |
| "Delivered 3 to 5 days after it ships" | transitTime |
3 to 5, DAY |
"offers": {
"@type": "Offer",
"price": "649.00",
"priceCurrency": "USD",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"shippingRate": {
"@type": "MonetaryAmount",
"value": 39,
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "DAY" },
"transitTime": { "@type": "QuantitativeValue", "minValue": 3, "maxValue": 5, "unitCode": "DAY" }
}
}
}
What to read in it. The shipping currency is the same as the price's, as Google asks.[1]Google Search Central. Merchant listing (Product, Offer) structured data The delivery time is not written as "4 to 7 days": it is split into what the store takes and what the carrier takes, and the total time is the sum of the two.[2]Schema.org. OfferShippingDetails And the rest of the catalog repeats none of this, because it follows the organization's general policy.[4]Google Search Central. Merchant shipping policy (ShippingService) structured data
What people often get wrong
Trying to mark a different shipping option for a region or a postal code in a country where Google does not accept it, such as a Canadian province or the Scottish Highlands. Schema.org allows it, but for a shipping destination Google only accepts regions in the United States, Australia and Japan, and postal codes in Australia, Canada and the United States.[1]Google Search Central. Merchant listing (Product, Offer) structured data Everywhere else, the destination Google understands is the whole country. If your rates change by zone, the page can explain it in text, and the shipping settings in Merchant Center are what rule over the markup.[4]Google Search Central. Merchant shipping policy (ShippingService) structured data
How to check it
- Search a product page's source code for
shippingDetailsand note the destination, the cost, the currency and the two delivery times.[1]Google Search Central. Merchant listing (Product, Offer) structured data - Compare them with what the customer sees on the page and in the cart for that destination, including the free-shipping threshold if you have one.
- Search for
hasShippingServiceon your organization node. If you have a general policy, the shipping on offers should appear only on products that fall outside it.[4]Google Search Central. Merchant shipping policy (ShippingService) structured data - Check whether you have shipping set up in Merchant Center or Search Console. If you do, those are what Google uses, ahead of your markup.[4]Google Search Central. Merchant shipping policy (ShippingService) structured data
- Run the URL through the Rich Results Test to see what it detects and with which errors or warnings.
Related concept: ShippingService
ShippingService is the store's shipping policy; OfferShippingDetails is an offer's shipping. The first is written once, on the organization, and can have conditions by weight, by amount or by destination; the second goes on the offer and serves the exception.[4]Google Search Central. Merchant shipping policy (ShippingService) structured data ShippingService lives inside the Organization node, just like the general return policy, which in markup is MerchantReturnPolicy.
To go further, the structured data reading path orders the rest of the terms, and the Offer entry explains what else the offer that carries the shipping holds.
Synonyms
- English
- shipping details structured data, shipping markup
- Español
- marcado de envío, datos estructurados de envío
Sources
- [1] Google Search Central. Merchant listing (Product, Offer) structured data. Accessed . ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
- [2] Schema.org. OfferShippingDetails. Accessed . ↑ ↑ ↑
- [3] Google Search Central. Latest documentation updates. Accessed . ↑
- [4] Google Search Central. Merchant shipping policy (ShippingService) structured data. Accessed . ↑ ↑ ↑ ↑ ↑ ↑ ↑
Change history
- First English version.
This definition is published under CC BY 4.0. Reuse this definition freely, crediting Clione with a link to this page.
Related terms
MerchantReturnPolicy
What MerchantReturnPolicy is, which properties Google asks for, where it goes (organization or offer), what overrides what and how to check it in your store.
Merchant listings
What Google's merchant listings are, where they appear, which Product and Offer markup they need and how to check whether your product page is eligible.
Offer
What the Schema.org Offer type is, how to write price, currency and availability, what Google requires, and how Offer differs from AggregateOffer.
Organization
What Schema.org's Organization type is, which properties Google recommends, where it goes in an online store, and why it has to match your site.
Price and availability signals
What price and availability signals are, where each copy lives (product page, markup and feeds), how Google compares them and what happens when they differ.
Google Merchant Center
What Google Merchant Center is, how your product data gets there, where Google shows it and how to check that the feed and the product page match.
Make your catalog easy for bots to read
Clione fills every product page with what bots read best: the JSON-LD graph with its structured data, the meta description and the FAQs. You review and press Push; then we check your live store so it all stays published.