Shopify product schema and feed mismatch: find the source
Fix conflicting price, stock and variant data across Shopify pages, JSON-LD and Merchant Center. Use a repeatable product-data reconciliation process.
- PUBLISHED
- FILED UNDER
- SEO
- READING TIME
- 3 minutes
- WORDS BY
- Shopify GEO SEO Agency

Your storefront shows a sale price. The feed still shows the old price. A review app publishes a third Product node with a default offer. The visible page may look right while external systems receive several versions of the truth. Diagnose that disagreement at the item level before changing templates.
Build a reconciliation sheet for a small sample
Choose an ordinary product, a sale item, a product with differently priced variants, a sold-out variant and a product sold in another currency. Give each row a timestamp. Export the values you actually observe; don't copy a colleague's description of how the integration is supposed to work.
| Field | Storefront | Structured data | Feed |
|---|---|---|---|
| Identity | Selected variant | SKU or valid product identifier | Corresponding submitted item |
| Price | Amount a buyer can pay now | Offer price and currency | Effective price for that market |
| Stock | Purchasable status | Availability of that offer | Submitted availability |
| Destination | Selected product URL | Offer or product URL | Landing page for that exact item |
A difference is only meaningful if all columns refer to the same offer. A US dollar price and a Swiss franc price are not necessarily a data error. Nor is a cached feed value from before a sale began directly comparable with the current checkout. Record context before deciding what to fix.
Find every producer of product markup
Inspect the HTML for all application/ld+json scripts. Identify what the theme, SEO integration, reviews integration and custom snippets each publish. Multiple scripts are not inherently wrong: an Organization and a Product can coexist. The problem is conflicting descriptions of the same product or offer.
Document ownership explicitly. For example, the catalogue owns price and inventory, the theme serialises the product offer, and the reviews integration supplies genuine review data. Test the relationships between them rather than deleting all but one script indiscriminately.
Fix the upstream mapping
Merchant Center supports product-page structured data for retrieving offer information. Its documentation identifies price, currency, availability and condition as important to automatic item updates. Those updates are a support mechanism, not an excuse to leave the submitted data wrong. Google Merchant Center: structured data attributes ↗
- Confirm the catalogue value and the selected market are correct.
- Check whether the page or markup uses a parent default instead of the selected variant.
- Review the feed connector's field mapping and most recent successful sync.
- Correct the source, refresh the integration through its supported workflow and inspect the resulting item.
- Retest the difficult sample, not only the product that originally triggered the complaint.
Test sale changes and unavailable options
Use a duplicate theme or controlled test product to examine the start and end of a sale. Check whether a comparison price is being mistaken for the actual selling price. For unavailable products, make sure the data describes the offer honestly and the page gives the shopper a useful next step.
Stock changes need their own page decision. Read what to do with out-of-stock and discontinued products.
Keep a record that survives the next app change
Save the sample items, expected values and source owners as a short release checklist. Repeat it when changing themes, feed connectors, review apps, currencies or discount logic. Close the original issue only when the page, markup and submitted item agree. Separately track when the receiving platform processes the correction; a successful sync does not prove an immediate search-result update.
Put this into practice with Shopify SEO and Shopify GEO.