Google Merchant Center “Missing or incorrect GTIN”: how to find every PrestaShop product without a GTIN
“Missing or incorrect GTIN” is one of the most common Google Merchant Center issues for PrestaShop shops. The fix itself is easy – type the right barcode into the right field. The hard part is finding every product and combination that needs it. This guide shows where PrestaShop keeps the GTIN, how to list all gaps with a few SQL queries, and when you may legitimately skip the GTIN.
What Google actually asks for
A GTIN is the barcode number of a product: EAN-13 in Europe, UPC in North America, ISBN for books. Google uses it to match your offer to the right product in its catalog. Its rule for unique product identifiers is short: a product needs either an accurate GTIN, or both an MPN and a brand. Depending on the country and product category, you may also have to state explicitly that an identifier does not exist.
Two details matter in practice:
- Only send a GTIN you are sure of. Google says this explicitly. An invented or reused barcode is worse than none, because it attaches your offer to someone else’s product.
- Every variant is a separate product for Google. A T-shirt in 4 sizes and 3 colours is 12 items in the feed, and each of them needs its own GTIN. One barcode on the parent product is not enough.
Where PrestaShop stores the GTIN
| Product type | Field in the back office | Database column |
|---|---|---|
| Simple product | Product › Details (References) › EAN-13 or JAN barcode | ps_product.ean13 |
| Product with combinations | Product › Combinations › each combination › EAN-13 | ps_product_attribute.ean13 |
| Alternative identifiers | UPC, ISBN, MPN (MPN since PrestaShop 1.7.7) | upc, isbn, mpn in the same tables |
The most common mistake: the barcode is filled in on the product, while the shop sells combinations. Most feed modules send one item per combination, so Google sees a whole family of variants without a GTIN.
Find every product without a GTIN (SQL)
Run these queries in phpMyAdmin or Adminer. They only read data. Replace the ps_ prefix with your own, and id_lang = 1 / id_shop = 1 with your default language and shop if they differ.
1. Simple products without any identifier
SELECT p.id_product, p.reference, pl.name
FROM ps_product p
JOIN ps_product_lang pl
ON pl.id_product = p.id_product AND pl.id_lang = 1 AND pl.id_shop = 1
WHERE p.active = 1
AND NOT EXISTS (SELECT 1 FROM ps_product_attribute pa WHERE pa.id_product = p.id_product)
AND COALESCE(p.ean13, '') = ''
AND COALESCE(p.upc, '') = ''
AND COALESCE(p.isbn, '') = ''
ORDER BY p.id_product;
2. Combinations without EAN
SELECT p.id_product, pl.name, pa.id_product_attribute,
pa.reference AS combination_reference
FROM ps_product_attribute pa
JOIN ps_product p ON p.id_product = pa.id_product
JOIN ps_product_lang pl
ON pl.id_product = p.id_product AND pl.id_lang = 1 AND pl.id_shop = 1
WHERE p.active = 1
AND COALESCE(pa.ean13, '') = ''
ORDER BY p.id_product, pa.id_product_attribute;
3. Barcodes with an impossible length
A valid GTIN has 8, 12, 13 or 14 digits. Anything else – a reference pasted into the wrong field, a missing digit – will be rejected.
SELECT p.id_product, pl.name, p.ean13
FROM ps_product p
JOIN ps_product_lang pl
ON pl.id_product = p.id_product AND pl.id_lang = 1 AND pl.id_shop = 1
WHERE p.ean13 <> ''
AND p.ean13 NOT REGEXP '^[0-9]{8}$|^[0-9]{12,14}$';
Run the same check on ps_product_attribute.ean13 for combinations. The length test does not verify the check digit, but it catches most typos.
When you can skip the GTIN
Not every product has a barcode. Handmade items, custom-made products, vintage goods and private-label products sold only by you usually do not. For those, send identifier_exists = no in the feed instead of an empty or invented value, and fill in the brand. Check how your feed module handles it: many send this flag only when the GTIN, MPN and brand are all empty.
Do not use this flag to silence the warning for products that do have a barcode on the box. Google matches products by barcode, and offers without one perform worse in Shopping results.
Fix it once, then keep it fixed
Filling in missing barcodes is a one-off job. Keeping them complete is not: new products, new sizes and imports from suppliers bring the gaps back every season. Two habits help:
- Add the barcode to your product import template as a required column, including the combination level.
- Re-check the catalog before every campaign or feed change, not after Merchant Center complains.
Check it automatically
Product Data Guardian runs these checks for the whole catalog in one scan: products and every combination without EAN/GTIN, missing brands, images, descriptions and stock. Each product gets a 0–100 score, and one click lists exactly the products to fix. Products below your threshold can be kept out of the Google Shopping and Meta feeds automatically.