+EshopMedicCZ|SK|EN|DE

XML product feed for Google Shopping and comparison sites: the most common errors

The bridge between your e-shop and shopping channels — when it leaks, money falls through

An XML feed is the file your e-shop uses to send products to price comparison sites and ad systems: Google Shopping, comparison platforms, fashion marketplaces like Glami, and others. Your customer never sees it, but it decides whether your products show up at all, at what price, and whether a comparison site or Google penalizes you. And most feed problems are the same ones, over and over.

The most common feed errors

  1. Price mismatch: the feed says one thing, the website another. The most serious error of all — for Google it's the number one reason for Merchant Center suspensions; comparison sites quietly switch your offers off. It typically happens when the feed updates too late after a price change, or when a discount doesn't carry through to the feed.
  2. Wrong availability. The feed says "in stock", the site says "on request". Customers click on available goods — and leave annoyed. Comparison sites measure this and punish it.
  3. Missing or wrong matching identifiers (GTIN/EAN/MPN). Without a GTIN, your product won't match the comparison site's product page — and without that match, you're invisible in price comparisons.
  4. Generic or wrong categories. "Other" instead of "Kids' balance bikes" means worse discoverability and more expensive clicks. Map your categories to each platform's own category tree.
  5. Thin titles and descriptions. "Hoodie 123" won't sell. A title needs brand, type, and the key parameter; write your own description instead of copying the manufacturer's (comparison sites and Google both downgrade duplicate texts).
  6. The feed can't be downloaded. Your server blocks the platforms' bots, the feed sits behind a login, or generation dies on a timeout. Your offers then silently go stale or disappear.
Shoptet tip: you'll find your feeds under Integrations → XML feeds. After every bulk price change, check when each platform last downloaded the feed — and in Merchant Center, trigger a fresh fetch manually if needed. It saves you days of waiting with outdated prices.

How to keep an eye on your feed

  • After every price change, verify a sample of products: price on the site = price in the feed = price on the comparison site.
  • Watch the diagnostics: Merchant Center and most comparison platforms have an overview of disapproved products with reasons — it's free, and hardly anyone looks at it.
  • Watch the feed's availability: when the feed doesn't get downloaded, your offers go stale. EshopMedic's Ongoing care checks your site and feed automatically and alerts you by email.

A connection few people expect: your feed is also a ticket to a suspension. A mismatch between the feed and the website is the most common trigger for a Merchant Center ban — if it's happened to you, go through our first-aid guide.

Is your feed in good shape?

The free mini check-up examines your website, and the feed validator in the paid check-up inspects the feed's structure too. No registration, results right away.

Start the free check-up

Frequently asked questions

How often should the feed update?
Ideally several times a day; once a day is the minimum. The key thing is that an update runs after every price change — otherwise the platforms show old prices, and that's exactly the error that gets punished.
Do I need a GTIN/EAN for every product?
For branded goods, practically yes — without it you won't get matched. Products you make yourself may not have a GTIN; in that case fill in whatever matching the platform supports (brand + MPN) and expect to live outside the shared product pages.
Is one feed enough for all platforms?
No — Google and each comparison site have their own specifications (different required attributes, different category trees). That's why e-shop platforms generate separate feeds for each service; always use the one meant for it.
Why does Merchant Center disapprove products over price when it's correct?
Most often it's comparing an old version of the feed against the new price on your site (or vice versa). Check the time of the last feed fetch and trigger a new one. If it keeps happening, look for a spot on your site where the price displays differently — for example, a price without VAT in the structured data.
What does an XML product feed actually have to contain?
The usual structure is RSS 2.0: a root element rss with version 2.0, one channel inside it, and one item for every product. Google attributes are added through a namespace declared on the root element that points to http://base.google.com/ns/1.0, and every attribute tag from that namespace has to carry the g prefix, otherwise it is ignored. At item level Google requires title, link and description, even though the RSS 2.0 standard treats them as optional. Export the whole catalogue, not only the products that changed since the last run: if you remove a product from the file, it is removed from Merchant Center as well.
The platform rejects our feed as invalid XML. What is usually wrong?
In most cases a product text contains a character that XML treats as markup. The XML specification says the ampersand and the left angle bracket must not appear in their literal form in character data; they have to be escaped, for example as the entities amp and lt, or the text has to be placed in a CDATA section, where both characters may stay as they are. That is why a product name containing an ampersand breaks the file. The second frequent cause is a character that XML does not permit at all: below the space character the specification allows only tab, line feed and carriage return, so any other control character copied in from a supplier price list makes the file unreadable.
How large can the feed be and which file formats does Google accept?
Google accepts product files with the extensions txt, xml and tsv, and a single file can be up to 4 GB in size. An unsupported format, for example html, stops the file from being processed at all. If you do not upload the file by hand but let Merchant Center download it from your server, the link you provide has to start with http, https or sftp.
Google says it cannot check our product pages. What do we change?
The landing page named in the link attribute has to be crawlable. If robots.txt forbids it, or the page returns an HTTP error, those products stay disapproved and stop showing in Shopping ads and free listings until the page can be crawled again. In robots.txt allow both user agents: Googlebot for landing pages and Googlebot-image for images, each with an empty Disallow line, so the whole site can be crawled. After you fix it, the change may take 24 to 72 hours to show up in the Needs attention list.
We already send the price in the feed. Do we still need structured data on the product page?
Yes, if you want Merchant Center to keep your product data current from the page itself. For automatic item updates Google requires the schema.org values price, priceCurrency, availability and condition, with a Product object on the page and an Offer object nested in the offers field. The price has to use a period as the decimal separator instead of a comma, and the currency belongs in priceCurrency. One detail costs many shops their listings: the markup has to be present in the HTML returned by the web server, because markup generated by JavaScript after the page has loaded is not read.
The tool that watches this for you
Lost ordersPAID

Counts how many orders leak away through the very faults you just read about — and in which order to fix them.

Show me →