Issue reference
Your product data has no name
- SCHEMA_PRODUCT_NAME_MISSING
- Read the details
- —
- Medium
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 can usually carry on, but more slowly or less sure of what they found, and an unsure agent is likelier to recommend another store.
The name is what an agent matches on. When a shopper asks for "the black trail runner in size 10", the agent compares names across stores, then confirms the variant. A Product with no name is a price with nothing attached to it, and the agent drops it.
tragent counts the products on a page without a name and scales the finding with the share: one unnamed product among many is a slip, every product unnamed means the page cannot be identified at all. Variants inside a ProductGroup take the group's name and are not counted separately.
How to fix it
Populate Product.name; agents match on it when comparing options.
{ "@type": "Product", "sku": "TR2-BLK-10", "offers": { "@type": "Offer", "price": "89.00", "priceCurrency": "USD" } }{ "@type": "Product", "name": "Trail Runner 2", "sku": "TR2-BLK-10", "offers": { "@type": "Offer", "price": "89.00", "priceCurrency": "USD" } }On your platform
Shopify
The structured_data filter names the product from its title. A missing name usually comes from a hand-written block in an older theme or an app that emits a second, incomplete Product. Search the theme for application/ld+json and remove or fix the extra block.
WooCommerce
WooCommerce names the Product from the product title. If a plugin rebuilds the schema, make sure its template includes the name.
// In your child theme's functions.php, or a small plugin.
add_filter( 'woocommerce_structured_data_product', function ( $markup, $product ) {
if ( empty( $markup['name'] ) ) {
$markup['name'] = wp_strip_all_tags( $product->get_name() );
}
return $markup;
}, 10, 2 );Headless or custom
Use the product title the page shows, without the store name appended, so it matches what other stores call the same item.
In practice
Use the name shoppers and other stores use. A title written for your own navigation, such as "TR2 / Black / 10 / SS26", is a SKU in disguise; an agent comparing stores will not match it to "Trail Runner 2, black, size 10". Put the colour and size in the variant's own fields and keep the product name to the product.
If your catalogue is imported from a supplier feed, check the names after every import. Feeds often arrive with names in capitals, with internal codes prefixed, or empty for child variants. Fixing them in the feed mapping once is cheaper than fixing pages one at a time, and it fixes the product feed agents read as well as the page.
Check the fix
- Open a product page's source and confirm every Product block has a name.
- Run the scan; the finding should be gone, or report a smaller share.
Run the check that reported SCHEMA_PRODUCT_NAME_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
- Naming every product with the store name or a campaign slogan.
- Variant blocks outside the ProductGroup, each a separate Product with no name.
- HTML entities left in the name, such as &, which agents read literally.