Articles — Product data for shops

Product data for shops

Your product lives in three places

For shopping recommendations, the same product often exists as a page for people, a structured block on that page, and a catalog file of price and stock. If they disagree, shopping tools get the facts wrong.

When a shop sells a watch, the same facts sit on the product page, in schema, and in a feed. Schema is that family of structured facts, usually written as JSON-LD, a structured block on the page. A feed is a catalog file of price and stock.

Same product, three places

Illustrative example, not a logged test. The Northloop Trail Watch is a fictional product at €300.

1 Webpage For humans · sells the story
Northloop

Northloop Trail Watch S - Black

€300.00
In stock

Built for long runs. Contactless pay. Free shipping over €50.

2 Schema (JSON-LD) For machines on this URL
{
        "@context": "https://schema.org",
        "@type": "Product",
        "name": "Northloop Trail Watch S - Black",
        "brand": { "@type": "Brand", "name": "Northloop" },
        "sku": "NL-TRAIL-S-BLK",
        "mpn": "NL-TRAIL-S",
        "offers": {
          "@type": "Offer",
          "price": "300.00",
          "priceCurrency": "EUR",
          "availability": "https://schema.org/InStock",
          "itemCondition": "https://schema.org/NewCondition"
        }
      }
3 Product feed For Merchant Center / catalogs
id
NL-TRAIL-S-BLK
title
Northloop Trail Watch S - Black
price
300.00 EUR
availability
in_stock
brand
Northloop
gtin
0850000123456
mpn
NL-TRAIL-S
condition
new
link
https://example.com/products/trail-watch-s
image_link
https://example.com/images/trail-watch-s.jpg
FactWebpageSchemaFeed
NameHeadline (can market a bit)nametitle
PriceBig €300price + currencyprice
Stock“In stock” badgeavailabilityavailability
IdentityOften visual onlysku / mpnid + gtin or mpn
ConditionRarely saiditemConditioncondition

The page sells. The block labels that URL for machines. The feed is the catalog those shopping systems read. All three should agree on the price, the stock, and which item this is.

A SKU is the shop’s own product code. A GTIN is a barcode number such as a UPC or EAN. An MPN is the manufacturer’s part number. The letters NL in NL-TRAIL-S-BLK are part of the product code.

When they disagree

Page still shows €300 and “In stock.” Feed still has last week’s promo: 249.00 EUR.

A shopper can be quoted €249, or told the watch is on sale, because that older figure is still in the feed.

The same SKU should carry the same facts in all three places. Those facts have to match. After price and stock match, a shopper who is choosing among options still needs ship-to, returns, and a clear merchant. See You can be recommended and still not get chosen.

Whether the assistant treats the three records as one product is the matching job in The assistant names a product, a shop, or a place.

What e-shops actually do (reality check)

Nobody fills every field in Google Merchant Center.

Typical reality:

Good enough usually starts with: stable id, clear title, correct price + availability, brand, a real link + image_link, condition, and an identifier (gtin or mpn + brand) when you have one.

More attributes help later. Wrong or stale basics hurt immediately.

Core feed fields (the ones to understand)

Field What it’s for
id Your stable internal product ID in the feed
title What the system should call the product
description Text details (keep factual)
link Canonical product URL
image_link Main image
price Current sell price + currency
availability In stock / out of stock / etc.
brand Brand name
gtin Barcode number when you have one
mpn Manufacturer’s part number, often with brand if there is no barcode
condition new / refurbished / used

Look up the other fields when your category needs them, such as sizes, shipping, or energy labels.

What gtin, mpn, and condition change

These three say which item this is, and whether the offer is new.

Without a clear identity, systems mix up variants, regions, and bundles.

Bad row vs good row

Bad — fluff, weak identity

id: 1
      title: Best trail watch!!! from €249
      price: 249 EUR
      availability: in stock
      brand: (empty)
      gtin: (empty)

Better — clear, match the page

id: NL-TRAIL-S-BLK
      title: Northloop Trail Watch S - Black
      price: 300.00 EUR
      availability: in_stock
      brand: Northloop
      gtin: 0850000123456
      mpn: NL-TRAIL-S
      condition: new

A fluffy title, a “from” price, and a missing brand or ID put the wrong facts in the answer. Use a clear identity and the real price, match the page, and update the row when the stock or the promotion changes.

Why you still need the webpage

The page is where a person reads the story, the reviews, and the comparisons. Structured data publishes facts machines can read is what the labeled facts do not do on their own. The page and the feed still have to show the same price.

Practical checklist

  1. Pick one hero product. Write name, brand, price, currency, stock, and condition once.
  2. Check that the page, the JSON-LD block if you have one, and the feed row match.
  3. Fix identity (gtin or mpn plus brand), price, and availability before you hunt rare attributes.
  4. Treat freshness as ongoing, not a one-time task.

You do not need to memorize every Merchant Center attribute. You need the feed, the core fields, and the same facts in all three places. Keep those core fields on one dated note and check the three places against it, the same habit as in Wrong price, wrong shop, fake discount.

Read next if: Structured data publishes facts machines can read · Wrong price, wrong shop, fake discount