Shoppers want shipping answers before they commit. If delivery cost or timing feels vague, they hesitate.
That is where shipping details schema matters in 2026. It helps search systems read the same shipping story your page, policy, and feed already tell, so your store feels consistent.
Google has also pushed shipping data closer to product and Merchant Center data this year. That makes clean markup worth the effort now, not later.
When shipping details schema belongs on a product page
Use shipping markup when the answer changes by product, region, or customer type. Heavy items, cross-border stock, local pickup, and member-only shipping all fit this pattern.
For a site-wide policy, Google recommends a single shipping policy page with Organization markup and ShippingService. See Google’s shipping policy structured data guidance for the basic setup. For the field model itself, OfferShippingDetails is the key Schema.org type.
This split keeps your policy page simple. Product pages handle exceptions, and the policy page handles the default rule.
| Use case | Markup choice | Why it fits |
|---|---|---|
| Same rule for most items | Organization + ShippingService | One source of truth for the whole store |
| Different cost by product | Offer + shippingDetails | Fits oversized or fragile items |
| Region-based shipping | OfferShippingDetails | Handles countries, regions, or postal codes |
| Different delivery windows | ShippingDeliveryTime | Shows handling and transit ranges |
Keep the markup honest. It should describe what the shopper can actually buy.
The shipping fields that matter most
The strongest shipping markup answers three questions, where, how much, and when.
| Property | What it answers | Typical use |
|---|---|---|
shippingRate | How much does shipping cost? | Flat rate, free shipping, or tiered pricing |
shippingDestination | Where can it ship? | Country, region, or postal code rules |
deliveryTime | When will it arrive? | Handling time and transit time ranges |
shippingOrigin | Where does it ship from? | Multi-warehouse or cross-border stores |
doesNotShip | Where does it not ship? | Blocked regions or exceptions |
For free shipping thresholds, keep the threshold visible on the page and in your feed. The schema should reflect the applied rate, not invent a rule no shopper can see.
JSON-LD examples for common ecommerce setups
If your product pages already use offer markup, keep shipping data in the same structure. The broader product pattern is covered in the product schema for rich results.
Standard shipping
Use one object when a broad region shares the same rate and timing.
"@context": "https://schema.org",
"@type": "Offer",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": 5.99, "currency": "USD" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" }
}
Free shipping threshold
This works when shipping is free after a visible spend threshold. State the threshold in the page copy, then set the applicable rate to zero.
"@type": "Offer",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": 0, "currency": "USD" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" }
}
Region-specific shipping
Use separate shipping objects when pricing changes by area.
"shippingDetails": [
{ "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": 5.99, "currency": "USD" }, "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" } },
{ "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": 14.99, "currency": "USD" }, "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "CA" } }
]
Varying delivery times
This is the right pattern when standard and fast shipping both exist.
"shippingDetails": [
{ "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": 0, "currency": "USD" }, "deliveryTime": { "@type": "ShippingDeliveryTime", "handlingTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 1, "unitCode": "d" }, "transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 3, "unitCode": "d" } } },
{ "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": 12.99, "currency": "USD" }, "deliveryTime": { "@type": "ShippingDeliveryTime", "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 0, "unitCode": "d" }, "transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "d" } } }
]
How to add and test it without breaking markup
Add shipping data inside the same JSON-LD file that already contains Product and Offer. That keeps the offer, price, and shipping rule tied together. If you need a broader map of on-page schema, the ecommerce schema markup guide is a good companion.
- Map each visible product or variant to one
Offer. - Add
shippingDetailsunder thatOffer, then useOfferShippingDetailsfor each rule. - Match the page copy, policy page, and Merchant Center feed. Google’s April 14, 2026 shipping updates make that alignment more important.
- Test the output in Schema.org’s shippingDetails validator and Google’s testing tools, then re-check after theme or app changes.
Google’s 2026 feed changes also raised the bar for shipping accuracy. Quality checks are expected to matter more as the year moves on.
Fix the mistakes that usually cause problems
Most shipping schema issues come from mismatched data, not complex code.
- Missing fields cause the biggest trouble. If you don’t know the shipping rate or zone, leave the rule out until it’s real.
- Invalid nesting breaks the structure. Put shipping data under
Offer, not at the top level ofProduct. - Policy mismatches confuse both users and search systems. If the page says free shipping over $75 and the schema says $50, fix the source first.
- Over-broad regions create bad results. Separate countries, states, or postal codes when the rules differ.
- Empty placeholder values are risky. Parsers may read them, but shoppers won’t trust them.
Conclusion
Shipping data works best when it matches what shoppers already see. That means one clear policy page, accurate offer-level markup, and a feed that tells the same story.
If your store ships the same way to everyone, keep the setup simple. If shipping changes by region, product, or speed, use shipping details schema to spell that out cleanly. Clear markup makes the buying decision easier, and that still matters more than ever in 2026.



