Shipping Details Schema for Ecommerce Stores in 2026

Thierry

May 2, 2026

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 caseMarkup choiceWhy it fits
Same rule for most itemsOrganization + ShippingServiceOne source of truth for the whole store
Different cost by productOffer + shippingDetailsFits oversized or fragile items
Region-based shippingOfferShippingDetailsHandles countries, regions, or postal codes
Different delivery windowsShippingDeliveryTimeShows 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.

PropertyWhat it answersTypical use
shippingRateHow much does shipping cost?Flat rate, free shipping, or tiered pricing
shippingDestinationWhere can it ship?Country, region, or postal code rules
deliveryTimeWhen will it arrive?Handling time and transit time ranges
shippingOriginWhere does it ship from?Multi-warehouse or cross-border stores
doesNotShipWhere 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.

  1. Map each visible product or variant to one Offer.
  2. Add shippingDetails under that Offer, then use OfferShippingDetails for each rule.
  3. Match the page copy, policy page, and Merchant Center feed. Google’s April 14, 2026 shipping updates make that alignment more important.
  4. 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 of Product.
  • 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.

Spread the love

Leave a Comment