Guide
How to fix "Missing field" warnings in Search Console on a Shopify store
Open the Merchant listings report in Google Search Console for almost any
Shopify store and you'll find the same short list of issues:
Missing field "shippingDetails", Missing field "hasMerchantReturnPolicy",
Missing field "priceValidUntil", and often
No global identifier provided (e.g., gtin, mpn, isbn).
None of them keeps a product out of Google. They're non-critical, and Google's own documentation says fixing non-critical issues "isn't necessary to be eligible for rich results". What they mark is information Google asked for and didn't find: what shipping costs, how returns work, how long the price holds, and exactly which product this is. Those are the details shoppers compare on, in Google's shopping results and in AI assistants, so they're still worth filling in.
The short version. Shipping and return policies can be set once, with no code, in Search Console under Settings → Shopping → Shipping and returns, and Google uses those settings ahead of any markup. The Merchant listings report itself checks the markup on each page, so the fields below are what it looks for.
Why Shopify stores get these warnings
Dawn, Shopify's reference theme, builds its product markup with Shopify's
structured_data Liquid filter, and many themes do the same. Here's what it
produced on Shopify's own Dawn demo store when we checked on October 6, 2026, for a product
with six variants:
| What Google looks at | In Dawn's JSON-LD |
|---|---|
| Product name, URL, brand, description | Yes, on a ProductGroup |
| Each variant's name, image and SKU | Yes |
| Each variant's price, currency and availability | Yes, in its Offer |
| GTIN | Only for variants with a barcode: 1 of the 6 |
shippingDetails | No |
hasMerchantReturnPolicy | No |
priceValidUntil | No |
itemCondition | No |
aggregateRating, review | No (a reviews app may add them) |
That isn't a theme bug. Shipping rates and return windows live in your store's settings rather than on the product, so a theme rendering a product page has nothing to print. It's why the same handful of warnings turns up on so many Shopify stores.
Missing field "shippingDetails"
Google wants each offer's shipping cost and delivery time, for each country you ship to. There are three places to give it that, and Google applies them in this order, strongest first:
- Search Console or Merchant Center settings. In Search Console, go to Settings → Shopping → Shipping and returns and add a shipping policy per country: delivery days and the cost (flat, free, or free over an amount). If your store already has a Merchant Center account, set it there instead; Search Console can't edit policies created in Merchant Center.
- Product markup: a
shippingDetailsblock on each offer. - Organization markup: one store-wide policy, declared with
hasShippingServiceon your organization.
Whichever you use, the numbers have to match what your checkout actually charges. Google can reject a listing that shows a lower shipping cost than your site does.
On a product, the markup looks like this:
"offers": {
"@type": "Offer",
"price": "48.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" }
}
}
} handlingTime is how long you take to dispatch; transitTime is how
long the carrier takes.
Missing field "hasMerchantReturnPolicy"
The same three routes apply, in the same order. In Search Console you add a return policy per country under the same Shipping and returns page, with the URL of your policy page, the return window and the return cost. Google checks return policies by hand, which it says takes about 10 to 13 days, and shows them as pending until then.
In markup, Google recommends one store-wide policy on your organization, placed on a single page that describes your returns, with product-level policies only where a product differs:
{
"@context": "https://schema.org",
"@type": "OnlineStore",
"name": "Example Store",
"url": "https://example.com",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
To put a policy on a product instead, nest the same MerchantReturnPolicy under
each offer's hasMerchantReturnPolicy. Google supports only a subset of the
properties there, and the five above are all in it. The other allowed values for
returnFees are ReturnFeesCustomerResponsibility and
ReturnShippingFees; with the latter, add the amount in
returnShippingFeesAmount.
Your refund policy page in Shopify (Settings → Policies) is written for people, and this markup is how machines read the same terms, so keep the two in step. That page matters beyond Google too: Shopify requires it to be filled in before your products can appear in ChatGPT. More on that here.
Missing field "priceValidUntil"
priceValidUntil is the date after which an offer's price no longer applies.
Google lists it as recommended, and its product snippet documentation warns that a snippet
may not display when the date is in the past. A stale date is therefore worse than a
missing one.
If your prices have no end date, set one well ahead (a year out is common) and make sure something moves it forward before it arrives. For a sale with a real end date, use that date:
"priceValidUntil": "2027-10-06" The trap on Shopify is typing a fixed date into a theme file. It clears the warning until the day the date passes, and from then on it works against you on every product at once.
No global identifier provided (e.g., gtin, mpn, isbn)
This means the product markup has no gtin, mpn or
isbn. On Shopify the GTIN comes from the variant's barcode, so the fix is in your
product data rather than your theme: add the barcode printed on the product's packaging, or
the one GS1 issued you if you own the brand. Dawn already prints a variant's barcode as
gtin when it has one.
Two things to avoid:
- Internal codes in the barcode field. A GTIN has to pass a check digit, and a stock code published as a GTIN is a wrong identifier.
- Made-up GTINs. Handmade and custom products often have none. Leave the
GTIN out and make sure
brandis present, plusmpnif there's a manufacturer part number. If you make the product yourself, your own part number is that number.
How to add GTINs to Shopify and check them covers barcode types, bulk editing and the check digit.
Other fields Google recommends
-
itemCondition:https://schema.org/NewCondition,UsedConditionorRefurbishedCondition. If you sell new goods, say so; it costs one line. -
aggregateRatingandreview: only from real customer reviews, usually added by a reviews app. Never write ratings into markup by hand. -
color,size,material: optional for Google, but they're the facts shoppers filter on and assistants match on.
How to check a fix
- Paste a product URL into Google's Rich Results Test. The Merchant listings section shows which fields it found and which are still missing.
- Once the change is live, open the issue in Search Console's Merchant listings report and click Validate fix. Google re-crawls the affected pages and the count drops as it goes. Expect days to weeks, not minutes.
What SchemaRank does about each
SchemaRank is a Shopify app that audits every product's data against the fields above and publishes Product JSON-LD built from it through a theme app extension, without editing theme files:
itemConditionandpriceValidUntilin the JSON-LD it publishes for every product.-
shippingDetailsandhasMerchantReturnPolicyfrom shipping and return settings you enter once (Pro and Agency plans). - GTINs from your barcodes, with any barcode that fails its check digit flagged.
- Ratings only from real review data. It never invents them.
SchemaRank adds its own Product block rather than editing your theme's. If your theme prints product markup too, as Dawn does, the page carries both, and the theme's block still lacks these fields. What Product schema a Shopify theme outputs covers what to check when two blocks describe the same product.