Guide
Fixing Google's "Missing field shippingDetails" warning
Published October 4, 2026
Search Console's Merchant listings report says a product page is "Missing field shippingDetails (in offers)". The page is not broken and it has not been dropped. Google is saying it could not read your shipping cost or delivery time from the product's markup, and it has other places it is willing to read them from.
What the warning means
Google's merchant listing markup has two required Offer fields, price and priceCurrency. Everything else, shippingDetails included, is recommended. A missing recommended field is reported as a warning, and a page with warnings still qualifies for merchant listing results; it just shows them without the shipping cost and delivery estimate Google can add when it has them.
So the question is not "how do I make the warning go away" but "where should Google read my shipping terms from". Google's shipping documentation lists four, and when more than one is set it uses the strongest: the Content API for Shopping, then shipping settings in Merchant Center or Search Console, then markup on each product's Offer, then site-wide markup on your Organization. One more sits above all of them for a store that submits a product feed: Merchant Center's help says shipping attributes in the feed override the account's settings, so a synced catalogue already outranks any markup the site adds.
If your shipping terms are the same for every product, Google recommends site-wide settings or site-wide markup over per-product markup. Per-product shippingDetails is for products whose terms differ from the rest.
Fix 1: set shipping in Search Console or Merchant Center
If Google recognises your site as an online merchant, Search Console offers shipping and returns settings under its merchant settings, and Merchant Center has its own shipping settings. Fill in either, and Google uses those terms for every product on the site. Google's documentation is explicit that settings take precedence over markup: if both exist, only the settings are used.
This is the quickest fix, and on a Shopify store it is usually the only one that needs no theme edit, because the product markup most themes write includes no shipping terms. The Merchant listings report reads the page's markup, so the warning may stay in the report after you set this up; settings are read ahead of markup, so it is reporting a field Google no longer needs from the page.
Fix 2: site-wide markup on your Organization
A standard shipping policy for the whole store goes on your Organization markup as hasShippingService, not as shippingDetails. Google documents it as the recommended markup form. It lives once, on the page that carries your Organization markup (usually the home page), and describes the conditions under which you ship and what it costs.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Example Store",
"url": "https://www.example.com/",
"hasShippingService": {
"@type": "ShippingService",
"name": "Standard shipping",
"fulfillmentType": "FulfillmentTypeDelivery",
"shippingConditions": {
"@type": "ShippingConditions",
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" },
"shippingRate": { "@type": "MonetaryAmount", "value": 5.95, "currency": "USD" }
}
}
}Rates can be a fixed amount, as above, or a ShippingRateSettings node with a percentage of the order value; conditions can add order-value and weight ranges. Google's organization shipping page lists every property.
Fix 3: shippingDetails on each product's Offer
When a product ships on different terms from the rest, or you would rather every product page carry its terms, add shippingDetails to that product's Offer. Google requires shippingRate and shippingDestination; deliveryTime is recommended, and it is the part a shopper actually asks about.
"offers": {
"@type": "Offer",
"price": 49.00,
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": 5.95, "currency": "USD" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" },
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
"transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 5, "unitCode": "DAY" }
}
}
}- Ship to more than one country at different rates: make
shippingDetailsan array with oneOfferShippingDetailsper destination. - Free shipping: a
shippingRatewithvalue0. - Keep the numbers the same as your shipping policy page says. Markup that disagrees with the page is worse than no markup.
Where this goes on a Shopify store
Shopify themes write the Product markup themselves. Find the file that does it by searching the theme code for "@type": "Product" (in the code editor, Online Store, Themes, Edit code); the file name varies by theme. The shippingDetails node goes inside the offers object that file writes. The rate, destination and delivery days are typed into the theme by hand, so if you change your shipping rates, change them here too.
If you would rather not edit the theme, a structured-data app can add the node, and Fix 1 needs no code at all. Whatever you choose, use one method: two sources of shipping terms that disagree is the one way to make this worse.
Checking the fix
- Paste one product URL into Google's Rich Results Test and confirm the Offer now shows the shipping node with no missing-field notice.
- In Search Console, open the Merchant listings report, select the warning, and choose Validate fix. Google re-reads a sample of the affected pages over the following days or weeks and reports back.
- If you chose Fix 1, the report's warning can remain. Settings take precedence, so there is nothing left for the markup to supply.
Why this matters beyond the warning
Delivery cost and delivery time are two of the questions that stop a purchase, and a system answering a shopper reads them from the product's Offer, where the price is, not from a policy page three clicks away. Terms that exist only as a paragraph on a shipping page have to be found and paraphrased; terms in the Offer can be repeated exactly.
A Findwise scan reads a sample of a store's public pages and checks the same ground from the shopper's side: whether the store states shipping and return terms only in prose with nothing in the product markup, whether a shipping node names a rate and a destination, and whether the policy nodes a store does publish are attached to each product's Offer. Each finding cites the page it was seen on. Findwise estimates from public pages; it does not test AI assistants and cannot say what any assistant shows for your store.
Check your own store
A Findwise scan reads a sample of your store's public pages and reports where the product facts, structure and policies are thin for AI-assisted shopping, each finding with the page it was seen on.
Sources
- Google Search Central: Merchant listing (Product, Offer) structured data
- Google Search Central: Merchant shipping policy structured data
- Google Search Central: Organization structured data
- Google Merchant Center Help: Manage your shipping settings
- Google Search Central blog: More ways to share your shipping and returns policies with Google (November 2025)
