Issue reference
Your products carry no GTIN or MPN
- SCHEMA_PRODUCT_IDENTIFIER_MISSING
- Read the details
- —
- Low
What it means
tragent reports this at the “Read the details” stage. The question there is “Can it understand what the product is?” Name, description, images and variants have to be readable as data, not just rendered as a page.
What it does to an agent
Agents get through, but your store reads less clearly to them than it could. It is worth fixing once the higher-severity issues are gone.
A GTIN is the number under the barcode, and it is how an agent knows two stores sell the same thing. Without it, an agent comparing prices for a shopper cannot match your listing to the same product elsewhere, so you drop out of comparisons even when you are cheapest.
Use the GTIN when the product has one; use the manufacturer part number (mpn) for items without a barcode. Your own SKU is still useful, but it is not a global identifier.
How to fix it
Add gtin (the barcode number) or mpn, so an agent comparing stores can tell you sell the same item.
"sku": "TR2-BLK-10", "gtin13": "0123456789012", "mpn": "NW-TR2-10-BLK"
On your platform
Shopify
Fill in the Barcode field on each variant; the structured_data filter reads it. Import tools often leave it empty even when the supplier's file has it.
WooCommerce
Recent WooCommerce versions have a GTIN, UPC, EAN or ISBN field under Inventory. Fill it in, then make sure it reaches the markup.
// In your child theme's functions.php, or a small plugin.
add_filter( 'woocommerce_structured_data_product', function ( $markup, $product ) {
if ( method_exists( $product, 'get_global_unique_id' ) && $product->get_global_unique_id() ) {
$markup['gtin'] = $product->get_global_unique_id();
}
return $markup;
}, 10, 2 );Headless or custom
Emit gtin (or gtin8, gtin12, gtin13, gtin14 by length) on the Product, or on each variant's Offer where variants have their own barcodes.
In practice
Get identifiers from the source: the manufacturer's data sheet or the supplier's feed, not a barcode generator. A made-up GTIN is worse than none, because it matches a different product, and marketplaces check them against the GS1 registry. For your own products, register a company prefix with GS1 and assign GTINs from it; for handmade or one-off items with no barcode, use an mpn.
Identifiers belong to the variant, not the parent. A shoe in six sizes has six GTINs, so put each one on the variant's Offer or the variant Product inside a ProductGroup. An agent comparing a size 10 across stores matches the size 10 barcode; a single GTIN on the parent matches only one size and misleads on the other five.
Once identifiers are in place, keep them in place through catalogue changes. Re-importing products, switching themes or moving platforms are the moments they get lost, because the barcode lives in a field the import mapping does not cover. Add the barcode field to your import template and check a few products after each import, the same way you would check prices.
Check the fix
- Check the JSON-LD on a product page for gtin or mpn.
- Run the scan; the identifier finding should be gone or list fewer products.
Run the check that reported SCHEMA_PRODUCT_IDENTIFIER_MISSING again after the change. The scan needs no account; an issue found during an AI shopping test needs that test run again.
npx @tragent/cli scan https://your-store.comCommon mistakes
- Putting the SKU in the gtin field.
- Barcodes with the leading zero stripped by a spreadsheet.