WooCommerce Missing Fields "brand", "review", "global identifier" and "aggregate rating"
Webmaster tools throws the missing fields error due to some empty fields in WooCommerce generated structured data. It takes less than a minute to fix!
Updated 3 July 2026: a lot has changed here. WooCommerce now has brands and a product identifier (GTIN) field built into core, so most of this no longer needs code at all. I've also dropped my old trick of auto-filling reviews with a fake 5-star rating, because Google treats self-serving fake review markup as a policy violation that can get your site penalized. The honest fix is below.
If Google Search Console (it used to be called Webmaster Tools) is warning you about missing fields on your product pages, you're in the right place.

Why does this happen?
WooCommerce builds structured data for your products automatically, but it leaves a few fields empty. Here's what each one means and how it's changed.
brand: WooCommerce used to need a separate WooCommerce Brands extension for this. As of WooCommerce 9.6 (early 2025), brands are part of core. Create your brand under Products, Brands, assign it to your products, and WooCommerce adds it to the structured data for you. No extension, no code.
global identifier: WooCommerce 9.2 added a built-in "Unique ID" field for GTIN, UPC, EAN, or ISBN, sitting on the product's Inventory tab. Put your barcode there and it flows straight into the schema. If a product genuinely has no barcode, you can fall back to using its SKU as the MPN, which the snippet below does.
review and aggregateRating: These are warnings, not errors, and they clear on their own once real customers start leaving reviews. Please don't fake them. A made-up 5-star rating is exactly the self-serving review markup Google penalizes, and it isn't worth the risk for a green checkmark.
The fix
On a recent WooCommerce, setting a brand and filling the identifier field makes the errors disappear with no code at all. If you're stuck on an older version, or you want to stamp one brand and identifier across every product, this snippet handles it. Drop it into your theme's functions.php or the Code Snippets plugin.
function priyan_sh_fix_product_schema( $markup, $product ) {
// Use the SKU as the identifier (MPN) when none is set
if ( empty( $markup['mpn'] ) && $product->get_sku() ) {
$markup['mpn'] = $product->get_sku();
}
// Brand has to be a Brand object, not a plain string
if ( empty( $markup['brand'] ) ) {
$markup['brand'] = array(
'@type' => 'Brand',
'name' => 'Your Brand Name',
);
}
return $markup;
}
add_filter( 'woocommerce_structured_data_product', 'priyan_sh_fix_product_schema', 10, 2 );Two things it does. It sets the MPN to the product's SKU when no identifier exists, and it adds a proper Brand object. That second part matters: the plain-string brand my old snippet used was wrong, and Google wants brand as an object with an @type of Brand. Swap "Your Brand Name" for your actual brand before you save.
Test a product URL with Google's Rich Results Test. The old Structured Data Testing Tool this post originally linked to was retired back in 2021. The missing-field errors should be gone.

Hope that sorts it out. Hit me up if you're still seeing errors.