Google Shopping is one of the few places a small store can show up next to the big retailers on equal terms, and the product feed is the whole ticket in. It is also where most WooCommerce stores get stuck. The plugin gets installed, the feed gets submitted, and then Merchant Center starts sending emails about disapproved items, and the emails are written for people who already know what a GTIN is. This post is for the store owner reading those emails. It covers how the feed works, the handful of errors that account for most disapprovals we see, and a reasonable setup that keeps the feed healthy without someone babysitting it.
Quick answer: Merchant Center rejects products for a short list of reasons: the price or availability in your feed doesn’t match your product page, required identifiers like GTIN or brand are missing, images are too small or have text on them, titles contain promotional language, or the store itself is missing the policy pages Google requires. Fix the store-level issues first, then work through item errors in the Diagnostics tab, most of which come down to product data in WooCommerce rather than the plugin.
How does the product feed get to Google?
A plugin on your site builds a file, usually XML, that lists every product with a set of attributes Google expects: id, title, description, link, image link, price, availability, brand, GTIN or MPN, condition, and a Google product category. Merchant Center fetches that file on a schedule, typically daily, and compares what it says with what it finds when it crawls your actual product pages. Anything that disagrees gets flagged. That comparison is the source of a large share of the errors, because the feed and the page are generated by different code and drift apart in small ways.
On WooCommerce the usual options are Google for WooCommerce (the official plugin, previously called Google Listings and Ads), Product Feed PRO, and CTX Feed. They all produce a working feed. The differences are in how much control you get over mapping fields and how they handle variations. The official plugin is the least configurable and the least likely to break; the others earn their keep when your product data needs rules applied to it before Google sees it.
Why do products get disapproved?
Price mismatch is the one we see most, and it’s rarely the plugin’s fault. WooCommerce shows a sale price on the page, the feed sends the regular price, or the other way round. Or the page shows a price including tax and the feed sends it without. Or a variable product’s page shows a range and the feed sends one variant’s price. Google crawls the page, sees a different number, and disapproves the item for misrepresentation. The fix is usually to make sure the feed sends sale_price separately from price, and to add structured data (schema.org Product markup) to product pages so Google’s automatic item updates can correct small differences on their own. Most SEO plugins add that markup; check that it’s on and that the price in it is the price a customer sees.
Missing identifiers come next. Google wants a GTIN (the barcode number) for any product that has one, plus brand, and MPN where there’s no GTIN. WooCommerce has no GTIN field by default, so it lives in a custom field, a plugin field, or nowhere. If your products are things you manufacture yourself, you can set identifier_exists to no and Google will accept them without a GTIN, but it needs to be set deliberately, not left blank.
Then images. Minimum 100 by 100 pixels for most categories and 250 by 250 for apparel, no promotional text or watermarks, no placeholder images. Stores that imported products from a supplier feed often have images with “SALE” banners baked in, and those get every item disapproved at once. Variants each need their own image or they’ll all show the parent’s.
Titles and descriptions with promotional language (“free shipping”, “best price”, exclamation marks) get flagged, and so do titles in all capitals. Availability mismatches happen when stock changes between feed fetches; if you sell out often, either fetch the feed more frequently or turn on automatic item updates for availability.
Why is the whole account suspended rather than individual items?
Account-level suspensions are about the store, not the products, and they’re the ones that panic people. Google’s misrepresentation policy wants a visible returns and refund policy, contact information (a physical address and email or phone), clear shipping costs and timeframes, secure checkout, and terms of service. Sites with a generic template privacy page and nothing else tend to get suspended within a week of first submission. The other frequent trigger is a mismatch between shipping costs in Merchant Center and what checkout charges, which Google tests by going through your checkout.
If you’ve been suspended, fix every item on that list before requesting a review, because you only get a couple of review attempts before Google makes you wait. We’d rather see a store spend an afternoon writing policy pages than lose a month to a repeat suspension.
How do you set the feed up so it stays healthy?
- Get the product data right in WooCommerce first. Brand and GTIN in a consistent field, one clean image per variant, titles written for a shopper rather than for your warehouse.
- Pick one plugin and map fields explicitly. Don’t let the plugin guess at brand from the product name.
- Send
sale_priceandpriceas separate attributes, and includeitem_group_idfor variable products so variants group together. - Add or verify Product structured data on product pages, and turn on automatic item updates in Merchant Center for price and availability.
- Set the feed fetch schedule to daily at minimum, or more often if stock moves fast.
- Check the Diagnostics tab in Merchant Center once a week for the first month, then monthly. Errors cluster; fixing one root cause usually clears dozens of items.
What does this have to do with your analytics?
Shopping clicks land on product pages with Google’s click ID attached, and whether those clicks show up as revenue in GA4 depends on your purchase tracking being right. If you’ve already been through the problems in our post on GA4 not tracking Shopify purchases, the WooCommerce version is similar and worth checking before you spend on Shopping ads, because the feed can be perfect and you’ll still not know whether it’s paying for itself. The same goes for checkout: a feed sending traffic to a checkout that intermittently fails is money spent to demonstrate a bug.
For stores weighing whether to stay on WooCommerce at all, our Shopify vs WooCommerce comparison covers the trade-offs; Shopify’s native Google channel is simpler to run, and WooCommerce’s feed plugins give you more control. Neither one avoids the product data work.
If the feed problems are a symptom of product data that has never been consistent, that’s a data cleanup project rather than a feed project, and it’s the kind of thing we do under solutions and improvements: a script that normalises brand, GTIN, and image fields across the catalogue once, and a check that keeps them that way.
Frequently asked questions
Do I need a paid feed plugin?
Not to get listed. The official Google for WooCommerce plugin handles a straightforward catalogue. Paid plugins are worth it when you need rules: excluding categories, rewriting titles for Shopping, mapping custom fields to Google attributes, or feeding multiple countries with different prices.
My products don’t have barcodes. Can I still list them?
Yes. Set identifier_exists to no for those products, and provide brand and MPN where you can. Google accepts handmade and custom goods without GTINs; what it doesn’t accept is a blank where a GTIN should be for a product that clearly has one, like a branded electronics item.
How long after fixing an error does the item get approved?
After the next feed fetch and crawl, usually within a day or two. You can trigger a manual fetch in Merchant Center, and for policy-related suspensions you have to request a review separately once the fixes are live.
Why do my sale prices show as the regular price in Shopping?
Almost always because the feed sends only one price attribute. Make sure sale_price is mapped and that the sale schedule in WooCommerce is current; an expired scheduled sale still showing on the page is a common source of the mismatch.
Should I use free listings or paid Shopping ads?
Both use the same feed, and free listings are on by default once the feed is approved. Get the feed clean on free listings first, then put budget behind the products with margin once you can see revenue attribution in GA4.
Can variations be listed individually?
Yes, and they should be. Send each variant as its own item with a shared item_group_id, its own image, price, and availability, and attributes like size and colour. A parent product listed alone with a price range gets disapproved or shows the wrong price.