Offer Shipping Details — Clarify Regions, Rates, and Timing
Generate valid OfferShippingDetails JSON‑LD for product offers. Describe regions, rates, handling/transit times, and thresholds to set clear delivery expectations.
Why many product pages underperform
Pain points we solve
- Shoppers can’t see accurate shipping costs by region.
- No handling/transit breakdown, leading to missed delivery expectations.
- Free‑shipping policies are unclear or inconsistently modeled.
- Multiple regions and rates are mixed together in one block of JSON.
How SwiftSchema helps
Solution
The generator guides you to add one OfferShippingDetails object per region/policy, with region targeting (DefinedRegion), a clear shippingRate, and deliveryTime as handling and transit ranges in days.
It supports freeShippingThreshold and shippingLabel for merchandising, producing clean, copy‑ready JSON‑LD attached under Offer.shippingDetails.
How it works
How it works
- Select Offer (or Product > Offer) in the generator.
- Add shippingDestination (country, and optional region or postal ranges).
- Set shippingRate (value + currency) and any freeShippingThreshold.
- Provide deliveryTime with handling and transit ranges in days (unitCode=DAY).
- Copy JSON or Script and paste into the product offer. Validate in the Rich Results Test.
What is OfferShippingDetails structured data?
OfferShippingDetails describes shipping regions, rates, and delivery timing for an Offer. Use one object per region or policy to keep options clear and maintainable across your catalog.
Eligibility & Status
This type supports clarity and consistency for commerce but isn't a standalone rich result. Correct modeling helps Product/Offer eligibility and user expectations.
Why shipping markup matters
- Clarity at scale: Customers see accurate costs and timelines per region, reducing checkout friction.
- Policy enforcement: Structured delivery times ensure your on-page messaging mirrors logistics data.
- Automation: Region-specific objects let teams update shipping policies without touching every product page.
- Merchandising: Free-shipping thresholds and labels can be surfaced consistently in feeds.
Essential properties to include
- shippingDestination(DefinedRegion): Always setaddressCountry; addaddressRegion/postalCodeRangewhen needed.
- shippingRate(MonetaryAmount): Providevalue+currency; set to 0 for free tiers.
- deliveryTime(ShippingDeliveryTime): IncludehandlingTimeandtransitTimeQuantitativeValues with min/max andunitCode=DAY.
- freeShippingThreshold(MonetaryAmount): Order value that unlocks free shipping.
- shippingLabel: Text label to identify each shipping method.
Preparing shipping data before generating schema
- Audit policies: Gather current rates, zones, and SLA windows from logistics.
- Segment regions: Decide how granular you need (country, state, postal range).
- Confirm currencies: Ensure rates use valid ISO currency codes.
- Document thresholds: Capture free-shipping minimums or promotional rules.
- Plan labels: Align labels (Standard, Express) with storefront messaging.
- Sync with ops: Establish who updates schema when fulfillment rules change.
Implementation workflow inside SwiftSchema
- Select Offer (or Product > Offer) in the generator.
- Add shippingDestinationfor the region this policy covers.
- Set shippingRateand optionalfreeShippingThreshold.
- Provide deliveryTimewith handling/transit ranges (unitCode=DAY).
- Add shippingLabelor notes for each method.
- Repeat per region/policy and attach each object under Offer.shippingDetails.
- Validate via the Rich Results Test.
Troubleshooting & QA
- Missing units: Always specify unitCode=DAY(or other ISO codes).
- Mixed regions: Keep one object per region/postal range.
- Threshold confusion: Pair freeShippingThresholdwith clear on-page messaging.
- Incorrect nesting: Place objects under Offer.shippingDetails, not directly on Product.
- Stale data: Update schema when rates or transit windows change; scripts can compare schema to logistics tables.
Maintenance and governance
- Update shipping entries whenever logistics teams adjust policies.
- Audit quarterly to ensure schema matches storefront shipping tables and merchant feeds.
- Coordinate promotions—when running free shipping, adjust thresholds and revert afterward.
- Keep lastReviewedmetadata current and note ownership for shipping schema updates.
Common Errors & Fixes
- Missing units: add unitCode=DAYfor handling/transit time ranges.
- Mixed regions: provide separate objects per region or postal range.
- Unclear free shipping: add freeShippingThresholdMonetaryAmount and reflect policy in page content.
- Incorrect nesting: ensure the object sits under Offer.shippingDetails.
Required properties
shippingDestination.addressCountryshippingRate.valueshippingRate.currency
Recommended properties
shippingDestination.addressRegionshippingDestination.postalCodeRangeshippingRate.valueshippingRate.currencydeliveryTime.handlingTime.minValuedeliveryTime.handlingTime.maxValuedeliveryTime.handlingTime.unitCode=DAYdeliveryTime.transitTime.minValuedeliveryTime.transitTime.maxValuedeliveryTime.transitTime.unitCode=DAYfreeShippingThreshold.valuefreeShippingThreshold.currencyshippingLabel
{
"@context": "https://schema.org",
"@type": "Offer",
"price": 9.99,
"priceCurrency": "USD",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"shippingRate": {
"@type": "MonetaryAmount",
"value": 3.49,
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 2,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 3,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
}