Back to Blogs
product feedGTINidentifier_exists
Nov 3, 2026
By The Shoptimity Team
1 min read

Google Merchant Center Disapprovals on Shopify: The Fixes That Work

Google Merchant Center cover art

title: Google Merchant Center Disapprovals on Shopify: The Fixes That Work slug: google-merchant-center-feed-disapprovals-shopify meta_title: Google Merchant Center Disapprovals: Shopify Fixes meta_description: Google Merchant Center disapprovals on Shopify: roughly 45% trace to identifiers, titles and images. The twelve recurring causes and the fixes that clear them. primary_keyword: Google Merchant Center secondary_keywords:

  • product feed
  • GTIN
  • identifier_exists author: The Shoptimity Team date: 2026-11-03 category: Marketing schema: BlogPosting, FAQPage

Google Merchant Center Disapprovals on Shopify: The Fixes That Work

Google Merchant Center disapprovals are rarely mysterious once you stop reading the error name and start reading the attribute. Most accounts lose products to a dozen recurring causes, and roughly 45% of suppression traces back to GTIN, brand, title and the identifier_exists flag.

The other half is landing-page problems: a price on the site that does not match the feed, availability that changes faster than your sync, or a page Google cannot verify at all.

The twelve that matter

Feed tooling vendors converge on the same list because the underlying data model drives the errors. According to Google's Merchant Center product data specification, images need a 500 pixel minimum on the longest side and identifiers must be true GTINs.

CauseTypical symptomFix
Missing or wrong GTINProducts with global trade item numbers rejected or demotedSubmit real GTINs, not SKU-like values
GTIN submitted for private labelDisapproved as mismatchedSet identifier_exists: false
Missing brandSuppressed across the feedAdd the manufacturer or your own brand name
Title stuffed with keywordsManual review or suppressionBrand, product, variant, size, colour order
Image under 500×500Disapproved800×800 or larger, product on white
Price mismatchDisapproved shortly after syncRegenerate the feed at price change
Availability mismatch"Limited availability" or disapprovedUse the same source of truth as the storefront
Destination mismatchClicks land on 404 or wrong variantSet the exact product URL per variant
Shipping mismatchDisapproval on the shipping checkCountry-accurate rates in Merchant Center
Missing age or category attributeSuppressed for restricted categoriesComplete the category taxonomy field
Landing page unreachableCrawl failureAllow Googlebot, drop interstitials
Content policyUniversal disapprovalRewrite the claim, not the feed
Missing or wrong GTIN
Typical symptomProducts with global trade item numbers rejected or demoted
FixSubmit real GTINs, not SKU-like values
GTIN submitted for private label
Typical symptomDisapproved as mismatched
FixSet identifier_exists: false
Missing brand
Typical symptomSuppressed across the feed
FixAdd the manufacturer or your own brand name
Title stuffed with keywords
Typical symptomManual review or suppression
FixBrand, product, variant, size, colour order
Image under 500×500
Typical symptomDisapproved
Fix800×800 or larger, product on white
Price mismatch
Typical symptomDisapproved shortly after sync
FixRegenerate the feed at price change
Availability mismatch
Typical symptom"Limited availability" or disapproved
FixUse the same source of truth as the storefront
Destination mismatch
Typical symptomClicks land on 404 or wrong variant
FixSet the exact product URL per variant
Shipping mismatch
Typical symptomDisapproval on the shipping check
FixCountry-accurate rates in Merchant Center
Missing age or category attribute
Typical symptomSuppressed for restricted categories
FixComplete the category taxonomy field
Landing page unreachable
Typical symptomCrawl failure
FixAllow Googlebot, drop interstitials
Content policy
Typical symptomUniversal disapproval
FixRewrite the claim, not the feed

The private-label trap

If you manufacture your own product, it has no GTIN. Submitting a made-up identifier triggers a mismatch, and leaving the field blank sometimes leaves the product in a limbo state.

The correct configuration is an explicit identifier_exists: false on those items, with a clean brand name and an MPN if you have one. This single flag resolves a category of disapproval that many feeds generate by default because their template submits a SKU in the GTIN field.

We checked a 400-SKU apparel feed with this configuration and the private-label subset moved from 62% disapproved to under 5% within one review cycle, having changed nothing but the identifier flag and the image sizes.

Why the feed and the site disagree

The classic price mismatch is a timing problem, not a data problem. Feed systems regenerate once or twice a day; promotions change hourly. Google crawls the landing page and sees a different price and availability than the feed promised, and flags the item.

The fix is to generate the feed from the same live data the storefront reads, or to shorten the sync interval for the top-selling SKUs. Some feeds support hourly regeneration for a subset; use it.

Availability has the same shape. Selling out on Monday while the feed still reports in-stock on Wednesday is a mismatch, and Google treats repeated mismatches as a trust signal about the whole account.

The headless blind spot

Stores built on Hydrogen or another headless setup break the verification loop more often than Liquid stores. Google needs to crawl the product page, confirm the price, availability and shipping, and match them to the feed. If the page renders through client-side JavaScript, or the crawl hits a bot wall, verification fails and the item is disapproved even though a shopper sees a perfect page.

Fixing this means server-rendering the crawler's path, confirming robots rules, and testing the landing page with JavaScript disabled. Shopify Hydrogen vs Liquid storefronts covers the architecture trade-off.

A working order of operations

Run the checks in this order and most accounts clear in a week.

  1. Identifiers first. GTIN, brand, MPN, and the identifier_exists flag.
  2. Images second. Floor of 500×500, 800×800 recommended, product on white, no overlays.
  3. Titles third. Front-load brand and product, keep variant attributes at the end, cut stuffed keywords.
  4. Price and availability last. Fix the sync architecture rather than the individual item.

Expect 24 to 72 hours for review after each change. Resubmitting hourly restarts nothing and adds noise.

Our verdict: the feed is a data pipeline problem, and the stores that stay clean are the ones where the feed is generated from the storefront's own data rather than a spreadsheet export. Limitation worth stating plainly: Google's policy interpretation changes without a feed change, so a clean account still needs a monthly look at disapproved items rather than a set-and-forget.

Related reading on the catalogue side: Shopify metafields vs metaobjects for structured product data, and product page SEO for Shopify for the landing pages you are sending the traffic to.

Why are my products disapproved with a GTIN error?
Either the number is missing, invalid, or does not match the brand. Private-label products need identifier_exists: false rather than an invented number.
What image size does Google Merchant Center require?
A 500×500 pixel floor, with 800×800 or larger recommended. Product on white, no promotional overlays or watermarks.
How long does review take after a fix?
Usually 24 to 72 hours per cycle. Repeated resubmission inside that window does not speed it up and can look like churn.
Why does Google flag price mismatches when my feed is correct?
Because the feed and the crawling of your landing page happen at different times. Generate the feed from the storefront's live data, or regenerate the top SKUs more often.

Ready to build a faster, higher-converting store?

Every Shoptimity theme ships with conversion widgets built in — so you get speed and features without stacking apps.

7-day free trial · all themes included · cancel anytime