A fact you’ve entered in a metafield or a category attribute hasn’t reached Shopify Catalog until you’ve seen it in a returned record. Until then, it’s populated, not received.
Shopify’s help page for its Shopify Catalog Mapping tool, as rendered on October 27, 2026, says you can change the sources for the Catalog title, description or category, for example pointing the description at a product metafield. You can also use a metafield to group products into one combined listing. Be careful: a copy of the same page served that day still said category can’t be mapped, so re-read it before you rely on it. Mapping is an instruction, not proof. In 1,620 records we pulled from Shopify’s Global Catalog search, no categories or metadata.attributes field appeared at all. The spec and feature lists that did appear are ones Shopify marks Inferred, meaning Shopify generated them.
So check each fact by field, and give it one of five statuses: matched, changed, generated, not observed or unknown.
Populated, mapped, received: three different claims
Merchants often treat these as one step. They’re three.
| Claim | What it means | How you’d know |
|---|---|---|
| Populated | The value is in your admin, in a field or metafield | You can see it in the product editor |
| Mapped | Shopify documents a route from that field into Catalog | Shopify’s help page names the route |
| Received | The value appears in a record that Catalog returns | You’ve read the returned record and found it, in a named field |
Only the third is evidence. The first two are intentions.
What Shopify documents today, and what we observed
The table lines up each place your data can live against the route Shopify documents and what we saw in 1,620 returned search records (October 26, 2026, no buyer context). “Not observed” means the key was absent from every record, not that Shopify never uses the data.
| Where your data lives | Documented route into Catalog | Field in our returned records |
|---|---|---|
| Product title | Default source; can be remapped to a metafield or combined with text or Liquid | title: all 1,620 |
| Product description | Default source; can be remapped to a metafield or combined with text or Liquid | description: all 1,620. Shopify marks it Inferred |
| Product category (Standard Product Taxonomy) | Rendered help page: the category source can be changed in Shopify Catalog Mapping (another copy says it can’t). Shopify also classifies from your product information for eligibility | categories: 0 of 1,620 |
| Category metafields (taxonomy “product attributes”) | Can drive variant options, and a category metafield can be the grouping key. No route as their own record field is documented | metadata.attributes: 0 of 1,620 |
| Your own product metafields | By mapping them as the source of the title, description or (per the rendered page) category, or using them to group products | No field of their own |
| Variant options and option names | Sent by default; option display names can be set in Shopify Catalog Mapping | Product options: 988. Shopify marks options Inferred |
| Type, vendor, collections, tags, barcode | Shopify’s optimizing page says AI platforms “consider” them | No tags, barcodes or sku key on any record |
| Compare-at price | You choose whether Catalog sends compare-at prices; one copy says it goes out as the list price | Variant list_price: 423 |
| External URL standard metafield (Agentic plan) | Required for Agentic-plan stores without a published store | Not checked |
| Generated spec, feature and selling-point lists | Shopify generates them; you can’t map them | metadata.tech_specs, top_features, unique_selling_points: 1,548 |
Two things in that table are easy to get wrong.
The metadata in the record isn’t your metafields. The Universal Commerce Protocol, which Shopify’s catalog follows, defines product metadata as business-defined custom data. But the metadata keys we saw in Shopify’s Global Catalog were the three lists Shopify marks Inferred. Seeing a spec in metadata.tech_specs tells you Shopify produced it. It doesn’t tell you your metafield arrived.
“Considered” isn’t “received”. Shopify says AI platforms consider type, vendor, collections, tags and barcode. None of those appeared as a key in the search records we read. They may be used for matching inside Shopify. The documentation doesn’t say, so record them as unknown.
The metafield-to-record mapping template
Fill in one row per fact that matters to a shopper. The first three columns come from your admin; the last three from the returned record. This template is our proposal, not a Shopify feature.
| Fact | Where you entered it (field or metafield, exact value) | Documented route | Field in the returned record | Value found | Status |
|---|---|---|---|---|---|
| [e.g. noise level] | [custom.noise_level: 26 dB, sleep mode, 1 m] |
[description mapping, or none] | [description / metadata.tech_specs / none] |
[quote] | [status] |
Use exactly one status per row:
| Status | Meaning | What to do |
|---|---|---|
| Matched | Your value appears, with the same number and unit, in a named field | Nothing. Re-check after big edits |
| Changed | It appears, but the number, unit or condition differs | Find out which copy is right, fix the source, re-check |
| Generated | A value appears only in an Inferred list and you didn’t write it there | Confirm it against a real source. If it’s wrong, correct your own text so there’s a right value to work from |
| Not observed | You looked at the record and the fact isn’t there | Map it into the description, or write it into the description directly |
| Unknown | You haven’t seen a returned record, or the route isn’t documented | Leave it unknown. Don’t mark it received because the admin field is filled |
The last row is the discipline that matters. A filled metafield with no observed record stays unknown.
Worked case 1: one backpack, one ambiguous line
We can’t see any merchant’s admin, so this case fills only the record side of the template. It’s still the side most merchants never look at.
Search: “anti theft backpack for city travel”, position 8. The description lists its size as “Volume: 28L Height: 11.2 inch Width: 7.5 inch Depth: 2.4lbs”. It gives no weight anywhere. Shopify’s generated spec list says:
- “Weight: 2.4 lbs (1.1 kg)”
- “Dimensions: Height 11.2 in, Width 7.5 in, Depth 2.4 in”
| Fact | Description says | Generated spec list says | Status |
|---|---|---|---|
| Volume | “28L” | “28 liters” | Matched |
| Height and width | “11.2 inch”, “7.5 inch” | “11.2 in”, “7.5 in” | Matched |
| Depth | “2.4lbs” (a weight unit on a length) | “2.4 in” | Changed |
| Weight | Nothing | “2.4 lbs (1.1 kg)” | Generated |
One line in the description became two different facts in the generated list: a depth in inches and a weight in pounds, plus a kilogram conversion nobody wrote. Our guess is that “2.4lbs” was a weight typed into the depth line. That’s an inference, and the record can’t settle it. We don’t know whether the depth is 2.4 inches, or whether the bag weighs 2.4 pounds. Neither does an agent reading this record.
The fix is at the source. Put depth and weight in their own measurement fields, with units, so each value has one home. Then make sure the text Catalog receives states both correctly, and re-read the record. Our specification template covers which Shopify measurement types fit which facts.
Worked case 2: the same fact, counted two ways
For “humidifier for dry winter air large room quiet top fill”, a decibel figure appears in the description of 4 of the 10 listings (positions 2, 3, 5 and 7). Counting the description or Shopify-generated metadata, it appears in 6 of 10 (adding positions 6 and 9). It’s in no title.
Both counts are true, and they mean different things. For positions 6 and 9, the decibel figure exists in the record only as a generated value. If you owned either listing, your template row would read: noise level, your source unknown to us, no documented route, metadata.tech_specs, “26 dB”, Generated. That’s a fact you should confirm and then state in your own text, with the setting it was measured at. Our humidifier audit has the full field-by-field breakdown.
How to get a metafield fact into the record
Shopify documents four levers. We haven’t tested what any of them produces in a returned record, so re-read the record after using one.
- Put the fact in the description text. The description is in every record we read. That makes it the one field you write that reliably travels, though Shopify marks it Inferred too.
- Map the description in Shopify Catalog Mapping. Shopify’s example is changing the description source to a product metafield, and one copy of the page adds that text fields can combine sources with entered text or Liquid. That’s how a structured value such as “Noise level: 26 dB (sleep mode, measured at 1 m)” could be appended to the Catalog description without changing your storefront. If a mapped metafield is empty for a product, Shopify falls back to the default source. Changes are processed with a delay Shopify doesn’t specify.
- Check the category source. The rendered help page lists category among the fields whose source you can change. Shopify doesn’t say how a mapped category shows up in a returned record, and none of our 1,620 search records carried a
categoriesfield. So treat a category mapping as unknown until you see it in a record. - Connect category metafields to variant options. Shopify says category metafields can drive variant options, and options do travel (on 988 of our records). Shopify also lets you set the option display names Catalog uses. Keep them plain words; Shopify’s listing insights flag acronyms and numbers.
And pick the right taxonomy category anyway. Shopify classifies products from their information for Catalog eligibility, and an Uncategorized product is excluded. The taxonomy itself has limits, though: Shopify says unit of measurement and dimension-type attributes aren’t available, and custom attributes aren’t supported. Measurements still need their own fields.
How to read the returned record
You need the record, not the admin. Two documented ways:
- The product preview in Shopify Catalog Mapping. Shopify says it shows how Catalog receives your product data, and that it isn’t an exact indicator of how AI channels view or display it. We haven’t seen the screen.
- A developer lookup in Shopify’s Global Catalog. Shopify documents
lookup_catalog, which accepts a product URL, andget_productfor full details. Our counts come from the search route. A lookup may return fields a search doesn’t, and we didn’t test that.
Write down the date and the field name for every value you find. “It’s in Catalog” isn’t a finding. “description, 27 Oct, quoted” is.
For how a returned record is grouped with other sellers’ offers of the same product, see the Global Catalog identity guide.
How we checked
On October 27, 2026 we read Shopify’s help pages on customizing product data for Shopify Catalog, the Standard Product Taxonomy, category metafields, Catalog requirements and optimizing products, plus the Global Catalog and Global Catalog extension developer pages and the Universal Commerce Protocol catalog specification (version 2026-08-25).
We then re-read our saved Global Catalog responses for 162 searches, taken October 26, 2026 through Shopify’s command-line tool (catalog search, top 10, no buyer, country or currency context). A script counted which keys were present on each product and on its single returned variant, across all 1,620 records. It found:
- no
categories,metadata.attributesortagson any product; - no
sku,barcodesortagson any variant; - non-empty
metadata.tech_specs,metadata.top_featuresandmetadata.unique_selling_pointson 1,548 products; - product
optionson 988, variantlist_priceon 423, and variantdisclosureson 2.
For the backpack, it extracted the description with HTML removed and the generated spec list for position 8 of “anti theft backpack for city travel”. The description contains “lbs” once, in “Depth: 2.4lbs”, and no other weight. We did not query the catalog again.
Your next step
Pick the three facts your customers ask about most for one product. Fill in one template row for each, and leave the record columns blank until a developer or the Shopify Catalog Mapping preview shows you the actual record. Any row that ends as “Generated” or “Not observed” is your first fix. Any row still marked “Unknown” means you haven’t checked yet. It isn’t a pass.