Skip to content

Why Google Merchant Center rejects your Shopify products, and how to fix them at the source

From the work/ 13 min read

Products missing from Google Shopping with no warning in the store. How to read Merchant Center's issues, trace each one to a Shopify field, and fix it where the sync reads it.

  • Shopify
  • Google Merchant Center
In this article (6)
  1. How the data actually travels
  2. Reading the issues in Merchant Center
  3. The causes, one at a time
  4. Why fixing it in Merchant Center does not stick
  5. The Shopify fields that feed the feed
  6. A monthly catalogue review

The product is published, in stock and selling on the store. Someone searches for it on Google, opens the Shopping tab, and it is not there. Nothing in the Shopify product page says anything is wrong. The order count from Google just stays lower than it should, and nobody notices until a campaign report shows a product with no impressions.

That silence is the whole problem. Shopify does not refuse to publish a product because Google would reject it. The store and Google's catalogue are two systems, connected by a sync, and the verdict on each product is written on Google's side. Unless someone goes and reads it, a disapproved product looks exactly like a product nobody searched for.

This guide is about reading that verdict, grouping it by cause, and fixing each cause in the Shopify field the sync reads from. It assumes the store uses Shopify's Google & YouTube channel, which is how most Shopify stores send products to Merchant Center.

How the data actually travels

The Google & YouTube channel, in Shopify's words, "syncs products that are available to your online store with Google Merchant Center". On first setup every product available to the online store is synced; you can narrow that later. Google expires product data that is not refreshed within 30 days, and the channel refreshes it inside that window, so you never upload anything by hand. Shopify's syncing guide also says Google reviews new products within 3 to 5 business days after the initial sync, so a product created this morning has no verdict yet.

Most of what Google receives comes from fields you already fill in: the product title and description, the media, the variant price and compare-at price, the variant barcode. A few things Google needs have no home on the Shopify product page, so the channel adds its own fields: a Google product category, a "custom product" checkbox for items with no GTIN or MPN, and Google-specific values such as age group, gender and condition. You edit them from the channel, whose bulk editor covers several at once, and they are stored on the product as metafields, so they travel with it.

Scroll the figure sideways to see all of it

Then Google checks what arrived against its product data specification and against your live product page, and sends a status back. In the channel's Products tab each product shows one of four statuses: Not approved, Limited, Under review or Approved. Under review means your latest Shopify change has not reached Merchant Center yet.

Reading the issues in Merchant Center

The Shopify channel tells you that a product has a problem. Merchant Center tells you which problem, how many products share it and what Google thinks you should do. A naming note first: what Google called Merchant Center Next replaced the classic interface in 2024, and in July 2026 Google dropped the "Next". It is now just Merchant Center, although some older help articles still use both names.

According to Google's page on issues in Merchant Center, the work starts under Products, in the Needs attention tab, which lists every product with an issue. From there:

  • Filter the list by issue impact, status or what needs attention, rather than scrolling product by product.
  • Open an issue to reach its issue details page, which shows the business impact, example products and the steps to fix it.
  • Use the download icon to export the affected items as a CSV. That file is the working list for the rest of this guide.
  • Turn on Prioritized fixes if you want low-impact issues hidden while you work through the ones that block products.
  • Check the account-level issues too (View setup and policy issues). A store-level requirement, such as the refund policy Shopify says must be in the footer, affects every product at once, and no product-level fix will clear it.

Group the export by issue, not by product. Two hundred disapproved products are rarely two hundred problems. They are usually three or four causes, each repeated across a collection that was imported the same way or edited by the same person. Sort by issue, count, and you have a priority list: the cause that blocks the most revenue first.

The causes, one at a time

Missing or invalid GTIN

A GTIN is the number under the barcode: UPC in North America (12 digits), EAN in most other markets (13), JAN in Japan (8 or 13), ISBN for books (13) and ITF-14 for multipacks. Google uses it to recognise that your product is the same product other stores sell. In Shopify it lives in each variant's Barcode field, in the inventory section, and the channel sends it as the gtin attribute.

Google's GTIN page requires that the check digit, the last digit, is present and correct. That digit is computed from the others, so a mistyped digit, a missing leading zero or an internal code pasted into the barcode field fails the check. The method comes from GS1, the body that issues these numbers. Starting from the digit next to the check digit and moving left, multiply each digit alternately by 3 and by 1, add the results, and the check digit is whatever brings that sum up to the next multiple of ten.

A worked example, using the number Google itself uses on its GTIN page. It is illustrative, not a product of ours or of any client:

GTIN-13     3 2 3 4 5 6 7 8 9 0 1 2 | 6
weights     1 3 1 3 1 3 1 3 1 3 1 3
products    3 6 3 12 5 18 7 24 9 0 1 6   sum = 94
next multiple of ten: 100 - 94 = 6   check digit = 6  valid

Change any single digit and the sum changes, so the last digit no longer matches. You can run the same check over a whole catalogue before Google does. Export your products from Shopify, take the barcode column (its header is Barcodes in the current CSV format and Barcode in older files, according to Shopify's CSV guide), and pass every value through this:

// GS1 check digit: weights 3, 1, 3, 1... starting next to the check digit.
function isValidGtin(raw) {
  const code = String(raw).replace(/[\s-]/g, '');
  if (!/^(\d{8}|\d{12}|\d{13}|\d{14})$/.test(code)) return false;
  const digits = [...code].map(Number);
  const check = digits.pop();
  const sum = digits.reverse().reduce((acc, d, i) => acc + d * (i % 2 === 0 ? 3 : 1), 0);
  return (10 - (sum % 10)) % 10 === check;
}

isValidGtin('3234567890126'); // true
isValidGtin('3234567890123'); // false: last digit typed wrong

A correct check digit is necessary but not sufficient. Google's GTIN page also refuses numbers in restricted ranges (prefixes 02, 04 or 2) and coupon ranges (05, 98, 99), and a number can be well formed and still belong to a different product. The specification is blunt about it: only submit a GTIN if you are sure it is correct, and when in doubt leave it out.

What about products that have no GTIN? Google's page on unique product identifiers lists the cases: custom-made goods such as custom t-shirts, art and handmade items, vintage and antique products, and products that only you sell. For those, send brand and MPN if they exist. If the product genuinely has no GTIN and no brand plus MPN combination, the identifier_exists attribute set to no tells Google so. In the Shopify channel that is the custom product checkbox. Use it only when it is true: Google warns products marked this way when there is evidence an identifier exists, and Shopify's channel requirements say incorrect identifiers keep products unpublished and can get the account suspended. Do not put your internal SKU in the MPN field either; Google asks for manufacturer values only.

Price mismatch

Google crawls the product page and compares the price it finds with the price in the feed. The price mismatch page lists the usual reasons, and on Shopify they map to a short list of settings.

  • Sales and compare-at price. Google's guide for Shopify sales says the original price goes in Compare-at price and the discounted price in Price, with compare-at higher than price, and that Google updates within 24 hours after you save. A sale built any other way, such as a theme script that rewrites the displayed price, puts one number on the page and another in the feed. Promo codes belong in Shopify discounts, published to the Google & YouTube channel, not in product prices.
  • Currency and markets. The price must be shown in the currency of the country you target. In the channel, Settings, Product sync, Countries and languages decides which countries are synced, and Google's Shopify sync page says those markets must be enabled in Shopify with general shipping rates. If the store sets prices by IP or cookie, the crawler may see a different price than the feed sent.
  • Tax. For the United States and Canada, Google wants prices without tax; elsewhere, prices include VAT or GST. In Shopify, Settings, Taxes and duties controls whether prices include tax, and it can be set per market. A European market showing net prices will mismatch.
  • Variants. If the variant link in the feed does not load with that variant selected, Google reads the wrong price. That is a theme issue, not a data issue.
  • Structured data. If the theme's product markup prints a different price from the visible one, Google sees two answers. Our notes on technical SEO for Shopify cover where that markup lives in the theme.

Stale or wrong availability

The availability mismatch issue appears when the feed says in stock and the page says otherwise, or the reverse. Common Shopify causes: a variant whose inventory is not tracked, so it always reports available; a sold-out variant that the product page preselects; a buy button that is greyed out or broken; and colour names that differ between the variant option and the page. Google accepts four values (in_stock, out_of_stock, preorder, backorder), and preorder and backorder need an availability date. Fix the inventory settings and the theme, and the next sync carries the right value.

Merchant Center has a safety net here: automatic item updates, under Products, Automations, enabled by default. Google can correct price, sale price, availability and condition from what it finds on the page. Google is explicit that this is a fallback for sporadic problems, that it may not work for products that change more than once a day, and that it can pick the wrong strikethrough price when a page shows several. It hides the symptom; it does not fix the source.

Images that break the rules

The image requirements refuse promotional overlays (prices, calls to action, "free shipping", a "New" badge), watermarks, added logos, borders, placeholders such as "coming soon" graphics, and single-colour squares. The file must be crawlable by Googlebot, its extension must match its real format, and it must stay under 64 megapixels and 16 MB. Google has also announced a minimum of 500 by 500 pixels for all products from 31 January 2027, and recommends around 1500 by 1500. On Shopify the fix is in the product's Media: replace the first image with a clean product shot and move lifestyle or promotional images later. Merchant Center offers automatic image improvements for minor overlay problems, but again, that is Google editing a copy, not your catalogue.

Titles and categories

Titles can be up to 150 characters, must describe the product as the page does, and cannot carry promotional text or be written in capitals; Shopify's guide names the "Excessive capitalization" error specifically. Variant titles should include what distinguishes them, such as colour or size, and Shopify's requirements add that product options must be in English to sync.

For categories there are two fields. Shopify's own product category, from the Standard Product Taxonomy, drives tax and category metafields such as age group and target gender for apparel. The Google product category, set in the channel under product categorization, is what Google reads as google_product_category. Shopify says that without it Google assigns one automatically and you may see errors. Apparel is where this matters most: Google may require age group, gender, colour and size there before a product can be published.

Scroll the figure sideways to see all of it

Why fixing it in Merchant Center does not stick

Merchant Center lets you edit a product's attributes directly, and Google's own fix guides often say to do exactly that. For a store connected through the Shopify channel it is wasted work. Google's page for Shopify users says it directly: the information from your Shopify account will always overwrite the information in your Merchant Center account. The only exception is ad campaigns. The next time the product changes in Shopify, or the channel refreshes it inside the 30-day window, your Merchant Center edit is replaced by the Shopify value that caused the issue in the first place.

The same goes for feed rules and supplemental data sources used to patch a value. They can work, but they hide a wrong value in Shopify behind a correction somewhere else, and the next person to edit the product has no idea it exists. Fix the field in Shopify. Then wait for the sync, which shows as Under review in the channel, and check the issue again. After a fix Google's crawl usually takes 24 to 48 hours; if Google asks for a review, its price guide quotes 7 business days for that review.

The Shopify fields that feed the feed

  • Title and Description: title and description. A missing description blocks the sync.
  • Media: the images, first image as the main one.
  • Variant price and compare-at price: the price and the sale.
  • Variant barcode: the GTIN.
  • Inventory tracking per variant: the availability.
  • Product category (Shopify taxonomy) and its category metafields: tax, apparel attributes.
  • Channel fields, stored on the product as metafields: Google product category, custom product, brand and MPN, age group, gender, condition and custom labels. Shopify's CSV exports them as columns that start with Google Shopping /, so they can be reviewed in a spreadsheet.
  • Sales channels on each product: it must be available to both the Online Store and Google & YouTube, or Google reports an unavailable landing page.
  • Store settings: markets, taxes and duties, the general shipping profile (the only one that syncs), the refund policy and terms of service in the footer, and visible contact information.

A monthly catalogue review

Rejections come back because the catalogue keeps changing. Once a month, with the same steps each time:

  1. Export Needs attention from Merchant Center as CSV and write down the count per issue, with the date.
  2. Check account-level issues before product-level ones.
  3. Run every barcode in a Shopify product export through the check digit function. List the products marked custom product and confirm each really has no GTIN.
  4. Look at last month's new products: description present, first image clean, Google product category set, apparel attributes filled.
  5. Compare a sample of sale products: compare-at price higher than price, and the page showing the same price the feed sends in every synced country.
  6. Open a sold-out variant's link and confirm the page does not preselect it as available.
  7. Check that nobody edited products in Merchant Center or added feed rules since the last review. If they did, move the fix into Shopify.
  8. Compare the counts with last month. A cause that returns points to a process, such as an import template or a supplier file, which is where the next fix belongs.

The checks overlap with a launch review; our pre-launch QA flow for Shopify covers the storefront side. If you would rather hand the catalogue work over, it is what we do in product feeds: the issue export grouped by cause, the fixes made in Shopify, and the same review run again a month later.

Written by

Luis Morales

Luis Morales

Frontend and Shopify developer, EcomLabs

@luismoralesdev on Instagram

Published October 22, 2026 · updated October 23, 2026

← Blog