GMCSuspension

Google Merchant Center Structured Data and Rich Results: Complete Setup Guide (2026)

Structured data is JSON-LD markup you embed in your product pages to tell Google exactly what each page contains. For Google Merchant Center, it serves two purposes: it helps Google verify that your feed data matches your live pages, and it unlocks rich results, including star ratings and detailed product information, in free Shopping listings. This guide covers what to implement, how to test it, and how to fix the most common errors.

What Is Structured Data and Why Does GMC Care?

Structured data is a standardized way to describe content on a web page using a vocabulary Google understands. The most widely used format is JSON-LD, a block of code you embed in your page's HTML that describes what the page is about in machine-readable terms. For product pages, this means telling Google the product name, price, availability, brand, and other key attributes directly in the page code, rather than relying on Google to interpret them from your visible page text.

Google Merchant Center uses this information in two distinct ways. First, for feed verification: Google cross-checks the price, availability, and product identifiers in your Shopping feed against what it finds on the product page itself. If the structured data says a product costs $49.99 and your feed says $44.99, that discrepancy triggers a price mismatch warning. Second, for rich results: when your structured data is correct and complete, Google can show enhanced listings in free Shopping results that include star ratings, price ranges, and availability notes directly in the search result.

Required Product Schema Fields for Google Shopping

The schema.org Product type is the markup standard Google uses for Shopping. These are the fields Google treats as required or strongly recommended for Shopping feed validation and rich result eligibility:

Core required fields

The Offers object: price and availability

Price and availability data go inside an Offers block nested within the Product markup. These fields are the most commonly misconfigured:

A minimal but complete Offers implementation looks like this:

{
  "@type": "Offer",
  "price": "49.99",
  "priceCurrency": "USD",
  "availability": "https://schema.org/InStock",
  "priceValidUntil": "2026-12-31",
  "url": "https://www.yourstore.com/product/your-product"
}

Adding AggregateRating for Star Ratings in Free Listings

Star ratings in free Shopping listings come from AggregateRating markup. When this is correctly implemented and you have a sufficient number of reviews, Google can show a star rating directly in the Shopping result without any paid campaign.

The AggregateRating block goes inside the Product markup alongside the Offers block. Required fields:

Important: the ratings in your structured data must reflect actual customer reviews visible on the page. Google cross-checks this. If you mark up a 4.8-star rating but no reviews are visible on the product page, the markup will be flagged as misleading and may result in a manual action.

How to Test Your Structured Data

Google provides two official tools for testing structured data. Use both before submitting your site for GMC review or after implementing markup on new product templates.

Rich Results Test

Go to search.google.com/test/rich-results and paste your product page URL. The tool fetches and parses your page as Googlebot and shows you which rich result types your markup qualifies for, along with any errors or warnings. A green "Product" result with no errors means your markup is correctly formatted. Yellow warnings indicate missing recommended fields. Red errors indicate invalid or required-missing fields.

Schema Markup Validator

Go to validator.schema.org and paste your page URL or the raw JSON-LD code. This tool validates against the full schema.org specification and catches syntax errors that the Rich Results Test sometimes misses. Run both tools on your implementation, not just one.

Google Search Console coverage

After deploying markup sitewide, check the Enhancements section of Google Search Console. The Products report shows which pages have valid structured data, which have warnings, and which have errors. This is the most comprehensive view across your entire catalogue, but it takes 24 to 72 hours after deployment to populate.

Common Structured Data Errors and How to Fix Them

Missing priceValidUntil causes expiring prices warning

The most common GMC warning related to structured data is "Expiring prices." Google requires that structured data prices either have a priceValidUntil date far enough in the future, or are updated frequently enough that they never appear stale. When priceValidUntil is missing or has already passed, Google treats the price data as unreliable and may suppress the product from free listings or require additional verification.

Fix: add priceValidUntil to every Offers block and set it to a date at least 30 days in the future. For dynamic pricing, update this value automatically through your CMS or e-commerce platform on a regular schedule. Most major platforms (Shopify, WooCommerce, Magento) have plugins or built-in support for this field.

priceCurrency mismatch with feed

If your Shopping feed specifies EUR but your structured data says USD, Google flags a price mismatch even if the numeric value is correct. This happens frequently on multilingual or multi-currency stores where structured data is hardcoded in one currency while the feed uses geo-targeted currencies.

Fix: ensure priceCurrency in your structured data matches the currency in your active Shopping feed exactly. For multi-currency stores, generate separate structured data per locale or use the language and region-appropriate version of each product URL in your feed.

availability value not using schema.org vocabulary

Google requires that the availability field use the full schema.org URL format: https://schema.org/InStock. Using only "InStock" (without the URL prefix) is technically valid per schema.org but Google's validator sometimes treats it as a warning. Using plain text like "available" or "yes" is always an error.

Fix: always write availability as the full URL: "https://schema.org/InStock" or "https://schema.org/OutOfStock".

Markup not crawlable by Googlebot

If your structured data is injected via JavaScript after page load, Googlebot may not pick it up reliably. Googlebot renders JavaScript, but there can be timing delays and rendering failures that cause structured data to be missed. The most reliable approach is to include JSON-LD in the initial HTML response from your server, not as a client-side injection.

Fix: render structured data server-side (SSR) or include it in static HTML templates. If your platform relies on JavaScript rendering, test specifically with the Rich Results Test URL option (not the code snippet option) to confirm Googlebot sees the markup as rendered.

How Structured Data Accelerates Crawl-Time Price Updates

One underappreciated benefit of correct structured data is faster price propagation to Google Shopping. When Google crawls a product page, it can pick up price changes from both the structured data and the visible page content. Pages with correct, consistently updated structured data tend to have price changes reflected in Shopping listings faster than pages without it, because Google's systems treat the structured data as an authoritative price signal rather than having to infer price from page text.

For stores that run time-sensitive promotions or sales, this matters. A price drop that appears in your structured data during a Googlebot crawl can be reflected in free Shopping listings within hours, whereas waiting for the full product feed crawl cycle can take 24 to 48 hours. Structured data does not replace your feed, but it supplements it as a faster price verification signal.

Putting It Together: a Full Product Schema Example

Here is a complete, valid Product schema implementation you can adapt for your own product pages:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Blue Widget Pro 500",
  "image": "https://www.yourstore.com/images/blue-widget-pro-500.jpg",
  "description": "High-performance widget for professional use. Includes carrying case.",
  "sku": "BWP-500",
  "brand": {
    "@type": "Brand",
    "name": "WidgetCo"
  },
  "offers": {
    "@type": "Offer",
    "price": "79.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "priceValidUntil": "2026-12-31",
    "url": "https://www.yourstore.com/products/blue-widget-pro-500"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "128",
    "bestRating": "5",
    "worstRating": "1"
  }
}
</script>

Check Your Structured Data Compliance Automatically

Our audit tool checks 52+ Merchant Center policy requirements in about 60 seconds, including structured data completeness, price consistency, and feed verification signals. See exactly what to fix before your next GMC review.

Run Free Audit →

Related articles

→ How to fix a Google Merchant Center suspension → Google Merchant Center product schema errors → Google Merchant Center misrepresentation