ShipworkSite inspection
Structured data

Crawlability

PaginationAre paginated pages set up right?Internal searchIs site search eating crawl budget?URL parametersAre parameters creating duplicates?Log analyserWhat does Googlebot actually crawl?Robots builderNeed a robots.txt file?Soft 404sAre pages “not found” but returning 200?JavaScriptCan crawlers see it without running JS?FreshnessIs my site quietly going stale?Robots.txtDoes robots.txt say what I think?

Indexing

Sitemap lastmodAre my sitemap dates valid?SitemapIs my sitemap actually fetchable?IndexingIs Google allowed to index my pages?CanonicalsIs Google indexing the wrong URL?Index signalsDo sitemap and index signals agree?Sitemap generatorNeed a sitemap.xml for my site?Bulk URL statusWhere does each of these URLs really land?Redirect builderNeed the redirect rules?RedirectsAre my URLs answering directly, over HTTPS?

On-page

Keyword ideasWhat are people searching for?SERP previewHow does my page look in Google?Content qualityAre your pages too thin or too alike?Image weightAre images slowing the page?CannibalizationAre pages competing with each other?On-page checkDoes the page use its target phrase?ImagesAre my images accessible and loading?Meta tag builderWhat should my title and share tags say?DuplicatesDo my pages compete for one query?

Links

Orphan pagesWhich pages can no link reach?Link graphHow deep do your pages sit?Anchor textDo links say what they point at?Outbound linksAre external links still alive?Broken linksAre internal links sending visitors nowhere?

Structured data

Rich resultsIs my markup eligible for a rich result?Structured dataIs my product schema valid?Schema coverageDo my key pages carry structured data?Social previewHow does my page look when shared?Schema vs pageDoes markup match the page price?Schema builderNeed valid JSON-LD?

International

Hreflang sitemapDo page and sitemap hreflang agree?HreflangDo my language versions link back?Hreflang builderNeed the hreflang tags?Page DoctorWhy is this page not doing well?Redirect planMy site has dead links — what redirects do I write?Sitemap diffIs anything missing from my sitemap?Robots simulatorWhat does my robots.txt actually block?Can Googlebot?Can Googlebot fetch this URL?
Every error, explainedGuides
Pricing Learn Error guides Run free audit

+1 free check

Welcome to Shipwork

Sign in free and your next check this month is on us.

Continue with GoogleContinue with email

We email you a 6-digit code. No password.

No card needed. Reports and watches follow you to any device.

All errorsMissing field ‘shippingDetails’

Why shippingDetails is reported missing and whether it matters

What the error means

Your Offer does not declare shipping cost or delivery time, so your listing cannot show a delivery estimate next to the price.

Why Google rejects it

It is a recommended field rather than a hard rejection, which is why it is easy to leave alone for months. The cost is not a disapproval, it is a listing that looks thinner than a competitor whose result shows free delivery by a named date.

priceCurrencyshippingDetails
The currency is declared; the shipping terms are not.

How to fix it

  1. Set shipping rates in Merchant Center first. That covers the requirement without touching the theme and applies to every product at once.
  2. For page markup, add OfferShippingDetails to the Offer with shippingRate and deliveryTime.
  3. Only declare a rate you actually charge. A mismatch between markup and checkout is its own disapproval.

Common causes

Offer omits shippingDetails

Product markup may describe price and availability but contain no shipping details under its Offer. Google documents shippingDetails as a way to express shipping costs and delivery time on merchant listing product pages. Its absence can create a structured data warning even when shipping settings exist elsewhere.

Shipping details are attached outside the Offer

A JSON-LD block can be syntactically valid while placing OfferShippingDetails at an unsupported location. The property should be connected through the Offer's shippingDetails. Inspect the structured data tree to confirm the parser associates the region, rate, and delivery terms with the intended offer.

Rate or destination does not match checkout

Markup that says free shipping or a low rate for every destination can conflict with actual checkout rules. Regional zones, order thresholds, and product-specific shipping classes often make a single universal amount inaccurate. Compare the declared rate and destination with what a buyer in that region sees.

Delivery estimate is incomplete or unrealistic

If markup includes delivery time, handling and transit ranges need valid values and units. Copying a generic estimate can promise dates the warehouse does not meet. Check the public shipping policy and checkout estimates against the values emitted for each market.

Account settings are used instead of page markup

A Merchant Center shipping service may be configured even though the page schema does not include shippingDetails. These are distinct sources. Google can use settings from Merchant Center for shipping, while Search Console's structured data report evaluates what it finds in the page's markup.

Fix it on your platform

On Shopify

  1. Review shipping rates and delivery zones in Shopify admin and confirm what customers see for each target market. Do not encode one rate in schema if checkout varies by destination or order value.
  2. Check the published product page source for Offer and shippingDetails. Inspect the theme or schema app responsible for JSON-LD; Shopify shipping settings do not necessarily cause the theme to emit this property.
  3. You can maintain shipping services in Merchant Center instead of hand-coding frequently changing rates. If you also publish page markup, keep rate and delivery statements consistent with checkout and your shipping policy.
  4. For products with special shipping classes or restrictions, use accurate product or account-level configuration rather than applying the default product rate to every item.

On WooCommerce

  1. Review WooCommerce shipping zones, methods, and product shipping classes, then compare the real checkout rate for representative customer locations.
  2. Identify which plugin or theme emits Product and Offer schema. Configure shippingDetails in that source only if the rate and delivery terms can be maintained accurately there.
  3. If Merchant Center owns shipping configuration, review its shipping services and country coverage. Do not assume those settings will appear in each page's structured data report.
  4. Check variable products and products with different shipping classes separately. Make sure one Offer does not report a rate or delivery estimate that belongs to another variant.

On other platforms

  1. In Wix, BigCommerce, or Squarespace, compare the platform's shipping zones and product-level shipping settings with the schema generated by its theme or commerce app.
  2. If page schema cannot represent changing rates reliably, maintain shipping policies in Merchant Center and keep the storefront shipping page and checkout accurate.
  3. On custom sites, put OfferShippingDetails under the relevant Offer and include a defined destination, monetary amount and currency when applicable. Add handling and transit time only when you can support those estimates.
  4. Test markets, free-shipping thresholds, and product exceptions. Avoid presenting an all-country shipping amount when checkout charges differ by region.

How to confirm it is fixed

  1. Select products and shipping destinations with different rate conditions. Compare the public policy, checkout amount and delivery estimate with Merchant Center configuration and page markup.
  2. Use Rich Results Test on a live product URL. Confirm Google detects OfferShippingDetails beneath the correct Offer and parses its destination and rate.
  3. Check the Merchant listings report for the exact warning and allow a recrawl after updates. Structured data validation does not itself update Merchant Center account shipping services.
  4. Run the structured data check on representative pages to inspect shippingDetails in fetched Product markup.
  5. Revisit a logged-out checkout using the same country and product to verify the rate and delivery language remain accurate.

A worked example

Hypothetical case: a home decor shop configures free shipping in Merchant Center for orders over a threshold, but its product JSON-LD says every item ships free to every US address. Search Console flags incomplete or inconsistent shipping details on the merchant listing. The owner tests checkout with a low-cost item and a high-cost furniture item, then separates the account shipping service from the page schema. They remove the blanket free rate from the Offer markup and publish only the destination and rate the product can actually receive, leaving threshold logic in the account configuration. They validate the updated page and check the report after recrawling.

Questions

Is shippingDetails required for Product schema?
Google documents shippingDetails as a supported merchant listing property for shipping cost and delivery information. Depending on the report, missing data may appear as a recommendation or warning rather than a product disapproval. Check the current Search Console report details and do not confuse a markup warning with a Merchant Center shipping setup failure.
Can I set shipping in Merchant Center instead of adding shippingDetails?
Yes. Google recommends Merchant Center shipping settings as an alternative when rates or delivery policies are complicated or change frequently. Keep the account settings, product data, policy page, and checkout consistent. Search Console's structured data report still evaluates page markup separately.
Where does shippingDetails go in Product JSON-LD?
Google's supported markup uses OfferShippingDetails through the shippingDetails property on an Offer. Include the relevant shipping destination and rate, with delivery time when you can state it accurately. Validate the page with Google's Rich Results Test and check that the Offer belongs to the product shown.
Why does Google show a shipping warning when my Merchant Center rates are set?
Merchant Center shipping settings and page structured data are separate inputs. Your account can have shipping services while the page's Offer omits shippingDetails. Review the exact Search Console issue and decide whether account-level settings are the right maintained source or whether accurate markup should also be added.
Should I put free shipping in schema if checkout has a threshold?
Only when the schema describes the offer and destination accurately. If free shipping applies only above an order threshold, a product-level statement that shipping is always free can mislead. Use the appropriate Merchant Center configuration for threshold rules and avoid markup that contradicts checkout.
Find out if this is happening to you

Shipwork reports whether your Offer carries shippingDetails, alongside every other missing product field. Free, no account, no signup. Paste your store address.

Check my store for Missing field ‘shippingDetails’

Go deeper: Product schema, fully explained

See the check: Structured data, inspected

Other errors like this