WooCommerce adds basic Product data to product pages by default, but Google merchant listings need more. The fix is to check the live output, fill missing fields such as brand and GTIN, and keep one set of markup per product.

Discuss your WooCommerce storeSee selected work

What WooCommerce outputs by default

On a single product page, WooCommerce writes a JSON-LD block that describes a Product. JSON-LD is structured data placed in a script tag, kept apart from the visible page. The default block includes the product name, URL, description and SKU, plus an image when the product has one. It also includes a GTIN when the product has a valid one. The offers section carries the price, currency, availability, URL and a seller entry for your shop. Ratings and reviews appear only when the product has approved reviews and ratings are switched on.

Structured data is a way of labelling facts on a page, such as price and stock, so search engines can read them without guessing. It does not change what shoppers see. Google may show extra details, such as price or stock, only where the data is accurate and complete.

WooCommerce does not write a brand field by default. Check the exact output on your own site, because the block can change between WooCommerce versions.

  1. Inspect current markup
  2. Remove duplicate plugin output
  3. Add brand and GTIN
  4. Test with Rich Results Test
  5. Check every variation
Start with what exists, remove duplicates, then add fields and test each product type.

What Google wants for merchant listings

Google’s merchant listing guidance asks for a Product with a name, an image and an offer. The offer must be a single Offer, not an AggregateOffer. It needs a price above zero and a priceCurrency, which is the three-letter currency code. Availability, the product URL, shipping details and a return policy are recommended. Brand, GTIN and SKU are also recommended, and they help Google match your product to others.

Google requires some fields and recommends others, so decide which ones matter for your catalogue. The fields Google asks for are listed in its documentation, and they can change over time. Treat the list as a checklist to verify against the current page, not a fixed rule.

What to decide before you start

Decide three things first. Each one changes the code you write.

  • Which fields you can fill reliably, such as brand and GTIN, the barcode number.
  • Whether an SEO plugin already outputs Product markup on your pages.
  • Whether you sell variable products, where each variation has its own price or stock.

Write the decisions in a short note. It saves time when you brief a developer.

Step by step

  1. Inspect the current markup

    Open a product page, view the page source, and search for application/ld+json. Copy the Product block and save a copy before you change anything, so you can compare the output after each step. Compare the price, currency and availability with what the page shows. Wrong values in markup can cause warnings, so check each one by eye.

  2. Find every source of Product markup

    Check your SEO plugin’s settings for schema or structured data output. Many SEO plugins add their own Product block. If that happens alongside WooCommerce’s block, the page describes the product twice. Keep one. Use the plugin’s output if it covers the fields you need, and switch off the other. If you find two blocks, keep the one with the most complete data. Compare its price and availability with the page before you delete anything.

  3. Collect brand and GTIN data

    Brand and GTIN need real values, not placeholders. Take brand names from your product catalogue or the manufacturer’s data. A GTIN is usually 8, 12, 13 or 14 digits. Current WooCommerce versions have a built-in GTIN, UPC, EAN or ISBN field in the product editor, and the markup uses it when the value is valid. A GTIN stored in a custom field will not appear, so check your version first. Record each product ID, SKU, brand and GTIN in a spreadsheet. A single wrong digit usually makes a GTIN invalid, so check each one against the source.

  4. Add missing fields with the filter

    The woocommerce_structured_data_product filter lets you change the Product data before WooCommerce outputs it. The example below adds a brand. The _brand meta key is an example, so use the key your store already stores brand names under.

    add_filter( 'woocommerce_structured_data_product', function ( $markup, $product ) {
        $brand = $product->get_meta( '_brand' );
        if ( $brand ) {
            $markup['brand'] = array(
                '@type' => 'Brand',
                'name'  => $brand,
            );
        }
        return $markup;
    }, 10, 2 );

    The filter passes the markup array and the product object. This is a starting point, so test it on a staging copy first. Google allows at most one brand name per product. Keep the code in a child theme or a site plugin, so it survives theme changes.

  5. Handle variable products carefully

    On a variable product page, WooCommerce outputs a price range with an offer count, not one fixed price. Google’s merchant listing guidance asks for a single Offer rather than an AggregateOffer, so a range may not qualify. Fixing that needs custom code or a dedicated schema plugin, so test the result on a real variable product.

    Each variation can also have its own SKU, GTIN and stock level. The product variants guide covers the data side. Check the price, stock and GTIN for at least one variation of each type.

  6. Test with the Rich Results Test

    Open Google’s Rich Results Test, enter the product URL or paste the code, and run the test. Check that Product is detected with no errors. Warnings about missing recommended fields are worth fixing for merchant listings. The test shows rich result eligibility. It does not guarantee a ranking or a listing.

  7. Remove duplicate markup

    After the test passes, check the page source again for a second Product block. Duplicate blocks can confuse search engines about which product is the real one. Keep one Product block per product page. Recheck after every plugin update, because plugins can add markup without telling you. Note which plugin outputs markup, so the next person does not add a second block by mistake.

How to check it worked

Test three product types: a simple product, a variable product and an out-of-stock product. Each should show one Product block, with the correct price and availability. Then check the merchant listings and product snippets reports in Search Console after Google has recrawled the pages. Allow several weeks, because recrawling takes time.

A passing test is a start, not the end. Compare three product pages against your feed or catalogue, and check that every value matches.

  • Writing the price with a symbol, such as £49, instead of a plain number like 49.00.
  • Marking an out-of-stock product as in stock.
  • Filling brand with a placeholder when the product has no real brand.

When to get help

Bring in a developer if your catalogue has many variations, or if you send a product feed to Google Shopping. A technical audit can check markup across the whole store. My WooCommerce SEO guide covers the wider work, and my WooCommerce developer service covers the code.

See all the Shopify, WooCommerce and 3D how-to guides.

Common questions

Does WooCommerce add structured data automatically?

Yes, on single product pages. WooCommerce writes a Product block in JSON-LD. The default block is basic. It has no brand, and it only includes a GTIN when the product has a valid one in the native field. Check your live page source before you decide what to add.

Do I need structured data for Google Shopping?

Google Shopping uses a product feed in Google Merchant Center. Structured data on the product page helps Google read the same details. Keep the product name, price and availability identical in both places, because mismatches can cause problems with your listings.

Should I use JSON-LD or microdata for WooCommerce?

Use JSON-LD, which Google recommends. It sits in one block that is easy to test and change. Keep the format WooCommerce outputs unless you have a clear reason to change it. Mixing formats on one page makes duplicates more likely.

Discuss your WooCommerce storeSee selected work

A practical guide by Niall Arnfield. Published 16 October 2026.