Merchlint
Available now
Next, in this order
  • DeutschDE
  • EspañolES
  • FrançaisFR
  • ItalianoIT
  • PortuguêsPT
  • NederlandsNL
  • SvenskaSV
  • TürkçeTR

A language shows up here once its pages are actually written. Nothing on this site is machine-translated.

Install free
← All checks

WooCommerce product with no GTIN, UPC, EAN or ISBN

An empty GTIN is the most common reason a product quietly drops out of Google Shopping and other feeds — and nothing in WooCommerce warns you.

Group
Product identifiers
Confidence
F — fact from the database
Version
Free
Updated
Code
G3a

The symptom

Your feed plugin reports fewer products than your catalogue holds. Or Merchant Center shows “disapproved” next to items that look perfectly fine on the storefront. Nothing is broken in WooCommerce: the product saves, displays and sells. The identifier field is simply empty, and no screen in the admin ever mentions it.

Video, 1:11 — WooCommerce GTIN: why products drop out of Google Shopping

What it costs

A GTIN is how every system outside your shop knows that your product and someone else’s are the same thing. Without it:

  • The product leaves the feed. Google, Meta and most comparison engines treat a missing identifier as a reason to drop or demote the offer — and they do it silently.
  • You lose the comparison. An offer that does match a known product joins a listing with reviews, ratings and competing prices. One that does not stands alone, with none of that.
  • Marketplaces ask for it before you can list. Amazon requires a GTIN to create a new listing in most categories — a brand without barcodes has to apply for an exemption — and eBay asks for one on most new branded items. A listing without it either fails or ends up unmatched to the product everyone else sells, where nobody finds it.

On a variable product the identifier belongs on each variation, because each variation is a separate item to buy. A parent with an identifier and six variations without one exports as six products with no identifier.

If a shopping feed is what brought you here, this is one of several requirements that drop products without saying so. Why products drop out of your shopping feed walks the rest the same way, with the query for each.

How to check it yourself

WooCommerce stores the field as _global_unique_id. From WP-CLI, without any plugin:

wp db query "SELECT p.ID, p.post_title \
  FROM wp_posts p \
  LEFT JOIN wp_postmeta g ON g.post_id = p.ID AND g.meta_key = '_global_unique_id' \
  WHERE p.post_type IN ('product','product_variation') AND p.post_status = 'publish' \
  AND (g.meta_value IS NULL OR TRIM(g.meta_value) = '') LIMIT 50"

Replace wp_ with your table prefix. To see how much of the catalogue uses identifiers at all, count the filled ones:

wp db query "SELECT COUNT(*) AS wypelnione FROM wp_postmeta \
  WHERE meta_key = '_global_unique_id' AND TRIM(meta_value) <> ''"

If that returns zero, your shop does not use identifiers — see the false positives below.

How to fix it

  1. Open the product, go to Product data → Inventory, and fill GTIN, UPC, EAN, or ISBN. The number comes from the manufacturer and is printed under the barcode on the packaging.
  2. On a variable product, fill it on each variation, not on the parent. Different sizes and colours are different trade items and carry different numbers.
  3. For a bulk catalogue, map the column in a CSV import — WooCommerce’s own importer accepts GTIN, UPC, EAN, or ISBN as a column and validates the value on the way in.
  4. If the numbers already sit in another plugin’s field, copy them across rather than typing them again. EAN for WooCommerce does it itself (checked on version 5.6.0): WooCommerce → Settings → EAN → Tools → Copy to product meta, with the meta key _global_unique_id, and its Automatic actions for new and updated products keep the field filled from then on. Both are off by default. The copy writes the field directly and skips WooCommerce’s own checks, so a repeated number goes in without objection — run the audit again afterwards, and the duplicate identifier check shows any that came across twice.
  5. Do not invent numbers. A made-up GTIN is worse than an empty one: it collides with a real product somewhere and gets the offer rejected rather than ignored.

When it is a false positive

  • You make what you sell. Handmade goods, your own production, bespoke items and services have no manufacturer’s barcode and need none.
  • Your shop does not use identifiers at all. If not one product in the catalogue has the field filled, this check does not run — a list of every product would tell you nothing. You will see a note saying so instead of a thousand findings.
  • Your WooCommerce is older than 9.2. The field did not exist before that release, so there is nothing to fill in yet. The check says this explicitly rather than reporting your whole catalogue.
  • The identifier lives in a plugin field. This check reads WooCommerce’s own field. Since Merchlint 0.3.3 the audit says how many products keep their number only in a field of EAN for WooCommerce, Germanized for WooCommerce, Trusted Shops Easy Integration, Google for WooCommerce, Customer Reviews for WooCommerce or Product Feed Manager for WooCommerce, and names the field. Until the number is in WooCommerce’s field as well, findings about those products describe that field, not your data. Germanized passes its numbers through WooCommerce’s own field when that field is empty, so with Germanized this check sees them.

How Merchlint finds it

Merchlint reads _global_unique_id for every published product and, on variable products, for every variation. A variable product yields one finding with the evidence “N variations without a GTIN”, not one finding per variation — so a catalogue of two hundred variable products does not turn into a thousand rows.

The check does not run at all when the field is empty across the entire catalogue; instead it says which check it skipped and why. That decision is made on the whole catalogue, never on one batch, so two scans of an unchanged shop always agree.

Merchlint does not validate the check digit, does not look at brand or MPN, and never comments on what any regulation requires. It reports one fact: the field is empty.

Confidence: F — fact from the database. No interpretation, no threshold.

This check runs in the free version, on every product, with no cap.

Run this check on your store

Disagrees with what you see in your store? Write to us — we read every message. contact@merchlint.com