Google Shopping

How to Align Your Website Data, Structured Data and Product Feed

Google compares what your product data says with what your product page, its structured data and your checkout show. This guide covers how to keep all four saying the same thing.

Most Merchant Center mismatches are not really feed problems or website problems. They happen because the same product is described in several places (your platform, your feed or app, your page’s HTML, its structured data and your checkout) and those places drift apart.

This guide explains which values Google cross-checks, maps each feed attribute to its schema.org property and to what a shopper sees on the page, and gives you an audit routine for catching drift before it becomes a disapproval.

Short answer: Your product feed, landing page, Product structured data and checkout must agree on price, sale price, availability, condition, identifiers, variant details, shipping and returns. Google crawls your pages and compares them with your data, and mismatches can disapprove products. Put structured data in the server HTML, generate feed and page from the same source, and audit a sample after every site change.

Key Takeaways

  • Google compares your data source with the landing page HTML, its structured data and, for some values, checkout.
  • Availability must be consistent across landing page, structured data, checkout and data source.
  • Prices injected by JavaScript after page load can trigger mismatches; put prices and markup in the initial HTML.
  • Each variant needs its own URL that shows that variant’s price, availability and image.
  • Shipping and return policies must match across Merchant Center, your site and your markup.
  • Generate the feed and the page from one source of truth, then spot-check a sample regularly.

Why Google compares your feed with your website

Google doesn’t take your product data on trust. Its price mismatch documentation explains that Googlebot crawls your landing pages and compares the price in your data source with the price on the page or in structured data. The availability attribute rules say availability must be consistent across the landing page, structured data, checkout and data source, and that a mismatch triggers disapproval.

The stakes go beyond single products. Google states that repeated price mismatches may lead to account suspension, and that too many incorrect availability values put the account at risk of suspension. Alignment is one of the main ways to keep the account healthy, not just the listings.

Your page data also feeds automation. Automatic item updates read landing page data, including structured data, to update price, sale price, availability and condition. If the markup is wrong, automation can copy the wrong value into Merchant Center.

The four places a product is described

LayerWho reads itTypical way it goes wrong
Product data (feed, app or API)Merchant CenterUpdated on a schedule that lags behind the site
Visible landing pageShoppers and GooglebotTheme or app changes what’s displayed, or adds it with JavaScript
Product structured dataGoogle Search and Merchant Center automationHardcoded or cached values that don’t update with the page
CheckoutShoppersExtra fees, different stock rules or discounts not reflected elsewhere

Attribute, schema.org property and page check

This table maps the attributes Google compares most often to the matching property in merchant listing structured data and to what you should verify on the live page. Property names come from Google’s Merchant Center attribute pages and Search Central documentation.

Feed attributeschema.org propertyWhat to check on the page
idskuThe SKU shown or used on the page refers to the same product; IDs stay stable
titlenameTitle describes the product on the page, including the variant (color, size)
descriptiondescriptionConsistent with the title and page; no promo text, links or policies
linkoffers.url (or the page URL)Opens the exact product or variant, with no more than two redirects
image_linkimageSame product and variant as the page shows; crawlable image URL
priceoffers.price + priceCurrencySame amount and currency as the most prominent price in the HTML
sale_price + sale_price_effective_dateActive price, plus a StrikethroughPrice; validFrom / validThrough or priceValidUntilBoth prices visible on the page; only the sale price at checkout; dates match
availabilityoffers.availabilityActive buy button for in stock; sold-out text or disabled button for out of stock; shipping date for preorder or backorder
conditionoffers.itemConditionNew, used or refurbished stated in the title or description
brandbrand.nameSame brand as the page and packaging
gtin / mpngtin (gtin8, gtin12, gtin13, gtin14, isbn) / mpnSame identifiers in feed and markup; never invented
item_group_idinProductGroupWithID (or ProductGroup productGroupId)Variant selector on the page groups the same variants
shippingshippingDetails (or Organization-level shipping policy)Costs match what checkout charges
return_policy_label / return policieshasMerchantReturnPolicy (or Organization-level return policy)Window, method and fees match your returns page

Google’s structured data documentation recommends defining return and shipping policies once under Organization markup and using offer-level markup only to override them. That gives you one place to keep consistent with Merchant Center.

Price and sale price alignment

Price is the value Google checks most closely and the one that drifts most often. Three rules from Google’s documentation cover most problems:

  • The HTML price must match exactly. Googlebot reads the HTML your server returns. If a theme, currency switcher or app injects the price with JavaScript after load, this can trigger an error.
  • Match the most prominent currency. Use the right currency for the target country, and if the page shows several currencies, your data must match the one displayed most prominently. Search Central recommends a distinct URL per currency.
  • Keep markup in the initial HTML. JavaScript-generated Product markup can make Shopping crawls less frequent and less reliable for fast-changing price and availability.

Sales and strikethrough prices

For a sale, keep submitting the full price in price and the discount in sale_price. Show both prices on the landing page, only the sale price at checkout, and set sale_price_effective_date with the correct time zone. Without it, Google applies the sale immediately.

In structured data, the strikethrough price uses priceType StrikethroughPrice (ListPrice is also accepted during a transition), and sale timing uses validFrom with validThrough or priceValidUntil in ISO 8601 with a time zone. Google’s automation article adds that the strikethrough price on your site should match price when you submit a sale price.

A few markup details cause quiet problems. If both offers.price and priceSpecification are used for the active price, offers.price wins. A priceValidUntil date in the past may stop the listing from displaying. Specifications that contain both priceType and validForMemberTier are ignored.

Prices that aren’t sale prices

Loyalty-member prices don’t belong in sale_price; Google points to the loyalty_program attribute, and member prices in markup use validForMemberTier. Promo-code discounts are promotions, not sale prices. Coupon codes must be accessible to all users. For more, see the sale prices guide.

Availability alignment

Availability has four places to agree and a clear mapping between feed values and schema.org values.

Feed valueschema.org values that map to itPage and checkout must show
in_stockInStock, LimitedAvailability, OnlineOnlyAn active buy or add-to-cart button, and checkout accepts the order
out_of_stockOutOfStock, SoldOut, Discontinued, InStoreOnly“Sold out” text or a disabled buy button
preorderPreOrder, PreSaleVisible expected shipping date (availability_date required)
backorderBackOrderExpected shipping date (availability_date required)

Use one availability value per offer in markup. If an option is unavailable, disable it in the variant selector. If there are delivery restrictions, such as store pickup only, state them on the page.

The most common availability mismatch is timing: stock changes on the site before the next data update. The other common one is using out_of_stock to hide products, which Google says not to do; use pause (up to 14 days) or excluded_destination. The availability mismatch guide covers fixes in detail.

Variants: the most common source of drift

Variant products need extra care because the feed, the page and the markup each describe them differently. Google’s item_group_id documentation says each variant is a separate product with a unique id and the same item_group_id, and that the landing page must match the variant’s values: title, variant_option, color, price, availability and image_link.

  • Give each variant a distinct landing URL, using a path or query parameters (for example /t-shirt?color=green&size=small), so the page opens with that variant selected.
  • Align your item groups with the variant selector on the page.
  • Use the parent SKU as item_group_id and don’t submit the parent as a separate product.
  • Don’t rely on letter case to make IDs unique; Google treats “abc123” and “ABC123” as possibly the same.
  • Show a unique image per variant with the exact color or finish.

In practice, the most common variant mismatch is a link that opens the default variant, which has a different price or stock from the variant in the feed. See how to manage product variants.

Titles, descriptions, images and identifiers

These values are compared less mechanically than price, but they still need to match the page.

  • Title: Google’s title rules say the title must describe the product on the landing page and distinguish variants. Don’t put price, sale text, shipping or your company name in it.
  • Description: the description rules require consistency with the title and landing page, and describing only the product.
  • Condition: Google’s automation article suggests stating new, used or refurbished in the title or description so condition can be cross-checked.
  • Images: the image_link must show the product being sold, and reusing one photo across distinct products can lead to disapproval.
  • Identifiers: submit the same GTIN, MPN and brand in feed and markup. Identifiers come from the manufacturer and must not be guessed; see how to fix identifier issues.
  • ID: keep id stable. Google says changing it overwrites the product and its history.

Shipping, returns and business information

Policies need to agree across Merchant Center, your website and your markup. Google’s shipping settings article says shipping costs should be as close as possible to your website, and to overestimate if you can’t match closely. Item-level shipping overrides account settings for that location, so keep the two consistent.

For returns, Google’s return policy requirements ask for a policy that is clear on your site, accessible without a login, and consistent in Merchant Center and across the site (footer, returns page, banners). It should state the time frame, return method and fees.

Business information follows the same idea. Contact details, business name and policies should be consistent between your Merchant Center account and your website, which matters most when an account is reviewed.

How to audit alignment

A sample-based audit catches most drift. Pick 10 to 20 products across your main categories, including a sale item, a low-stock item and a product with variants.

  1. Export the products’ current values from Merchant Center (or your feed) for price, sale_price, availability, condition, brand, gtin, mpn and link.
  2. Open each link in a private window and note the visible price, currency, sale display, stock status and selected variant.
  3. View the page source (not the rendered page) and confirm the price is in the server HTML.
  4. Run the URL through the Rich Results Test or URL Inspection to see the Product markup Google reads.
  5. Add a product to the cart and go as far as checkout to confirm price, shipping and availability.
  6. Compare all four layers in a spreadsheet and mark any value that differs.
  7. For each difference, find where the value is generated (platform field, theme template, app, feed rule) and fix it there.

Check Products > Needs attention for suggested attribute values or automatic fixes you accepted in the past. Google says accepted fixes override later changes from other methods, such as file uploads, so an old fix can keep a wrong value in place.

Keeping them aligned over time

  • Generate the feed and the page from the same platform fields, rather than maintaining a separate spreadsheet.
  • Schedule data updates at least as often as prices and stock change. For changes more than once a day, Google points to the Merchant API.
  • Keep automatic item updates on for occasional gaps, but don’t rely on them; Google designed them for a small share of products.
  • Re-run the sample audit after theme updates, new apps, currency or pricing changes, and checkout changes.
  • Keep a change log of site and feed changes so you can connect new mismatches to their cause.
  • Review attribute rules and supplemental sources when platform data changes; see feed rules.

For the structured data side in more depth, see how Product structured data supports Shopping.

When to get help

Alignment problems often live in theme code, apps or feed tooling rather than in the product records. If mismatches keep returning, affect many products, or appear after a migration, our Merchant Center service and technical SEO work trace the value back to where it’s generated. Google decides on any disapproval or review.

Frequently asked questions

Does my structured data have to match my product feed?

Google compares your data source with the price on the page or in structured data, and requires availability to be consistent across page, structured data, checkout and data source. Mismatches can lead to disapproval.

Why does Google see a different price from the one on my page?

Googlebot reads the HTML your server returns. If the price is added by JavaScript after load, served from a cache, or shown in a different currency, Google can see a different value.

Which schema.org property matches the availability attribute?

offers.availability. InStock, LimitedAvailability and OnlineOnly map to in_stock; OutOfStock, SoldOut, Discontinued and InStoreOnly map to out_of_stock; PreOrder and PreSale map to preorder; BackOrder maps to backorder.

Do I need a separate URL for each variant?

Google says each variant needs a distinct landing URL, using a path or query parameters, and the page must show that variant’s price, availability and image.

Can automatic item updates fix my mismatches for me?

They can correct sporadic mismatches using landing page data, but Google says they don’t replace regular data updates and may stop if there are too many mismatches.

Where should shipping and return policies go in structured data?

Google’s Search Central documentation recommends global shipping and return policies under Organization markup, with offer-level markup only to override them.

Need your feed and site back in sync?

We compare your product data, pages, markup and checkout, find where values drift and fix them at the source.

Sources

Last reviewed October 10, 2026 against the official documentation listed above. Google changes Merchant Center features and policies regularly — always confirm details in your own account.

Similar Posts