Field guide FG-02 · Product data

Shopify product data
an agent can act on.

The identity, attribute and transaction fields an AI shopping agent needs from a Shopify catalogue — SKU, barcode and GTIN, variants and options, product type, vendor, tags, metafields, weight and availability — where each lives in Shopify, and which facts only you can supply.

10 min readPublished · Last reviewed FG-02
FG-02 // What Rank Sniper checks for this todayAvailable
AIO · SKU coverage
Weight 14 of 108 in the AIO pillar. Passes a product only when every variant carries a non-empty SKU. Fix class by design: Assisted.
AIO · Structured attributes
Weight 16 of 108 in the AIO pillar. Passes when the description contains a measurement with a unit, a list, or the words dimension, material or composition. Fix class by design: Automatic.
AIO · Shipping weight
Weight 10 of 108 in the AIO pillar. Passes when at least one variant carries a weight above zero. Fix class by design: Assisted.
AIO · Real variant options
Weight 8 of 108 in the AIO pillar. Passes when an option has a real name, or the product has a single variant. Fix class by design: Assisted.
GEO · Vendor and provenance attribution
Weight 16 of 82 in the GEO pillar. Passes when the vendor field is not blank. Fix class by design: Assisted.
AIO · Entity consistency
Weight 8 of 108 in the AIO pillar. Passes when the vendor matches one of the catalogue’s most common vendors. Fix class by design: Assisted.
Transactability sub-score
SKU coverage (14) · Variant-level offers (12) · Price with priceCurrency (12) · Availability in schema (12) · Shipping weight (10)
Admin API fields
Planned Connected scan through the Shopify Admin API. Barcodes, metafields and inventory counts are out of a public scan’s reach.
01 // The standard

Described is not
the same as actionable.

An engine can summarise a thin product record. An agent that has to quote a price, pick a variant or start a checkout needs fields, not prose.

There are two jobs a machine can do with a product page. It can describe the product — summarise the copy, name the category, repeat a claim. Or it can act on it: tell a shopper the exact price in their currency, say whether the 14-inch is in stock, match this item to the same item sold elsewhere, hand a cart to a checkout. Description tolerates gaps. Action does not: each of those steps needs a specific field, and a field that is missing or ambiguous stops it.

The feed specifications that AI shopping surfaces publish make the fields explicit, and they converge. OpenAI’s product feed specification requires id, title, description, link, image_link, availability, price, brand, and a gtin or an mpn. Google Merchant Center’s product data specification requires id, title, description, link, image_link, price with an ISO 4217 currency, and availability; it calls gtin “Strongly Recommended”, requires brand for new products other than media, and requires mpn where there is no GTIN. Different documents, one skeleton: identity, price, availability, the variant, the brand.

Rank Sniper measures the same skeleton from the storefront side. Its AIO pillar carries a named transactability sub-score made of exactly these checks — the fields that decide whether an agent can complete a purchase rather than merely understand the listing:

SKU coverage · 14
A non-empty SKU on every variant of the product.
Variant-level offers · 12
An offers node inside the product markup on the page.
Price with priceCurrency · 12
A price and a priceCurrency together in the page’s JSON-LD.
Availability in schema · 12
An availability value inside the product markup.
Shipping weight · 10
A weight above zero on at least one variant.
02 // Identity

SKU, barcode, GTIN:
three different things.

Shopify stores three identifiers per variant, and they answer different questions: which row in your shop, which barcode is on the box, and which product this is in the world.

SKU — your identifier

Shopify defines the SKU as “a case-sensitive identifier for the product variant in the shop”. It is optional, and becomes required only when you connect a fulfillment service. That optionality is why so many catalogues have gaps: nothing forces a SKU onto a variant created by hand or by an import. For an agent, the SKU is the stable handle on one specific variant inside your store — the thing a cart line or a support ticket refers to.

The scan’s SKU coverage check is strict on purpose: a product passes only when every variant has one. A product with twelve sizes and eleven SKUs fails, because the twelfth size is exactly the one nobody can refer to.

Barcode — a field, not a guarantee

The variant’s barcode field holds, in the Admin API’s words, “the value of the barcode associated with the product”. Shopify’s Help Center lists the barcode types it accepts: custom barcodes, GTINs of 8, 12, 13 or 14 digits, UPC, EAN, ISBN and ASIN. So a barcode is not automatically a GTIN. An internal code in that field is a good warehouse label and a false global identifier.

GTIN — the product in the world

A GTIN is what lets a system match your listing to the same product sold elsewhere. Merchant Center’s specification calls it strongly recommended rather than required and says to omit it if you are unsure, with brand plus mpn required where no GTIN exists. OpenAI’s feed specification accepts either a gtin or an mpn. Neither asks you to invent one, and nobody should: for handmade, made-to-order or private-label goods with no GTIN, the honest record is brand plus a manufacturer part number, not a fabricated barcode.

Rank Sniper’s public scan detects gtin and mpn in product JSON-LD but does not score them in rubric v1.0, and the variant barcode itself is not visible to a public scan. Reading identifiers per variant needs the Admin API — the connected scan, which is Planned.

Handle — identity for URLs only

The handle is “a unique, human-readable string of the product's title”, made of letters, hyphens and numbers — unique in your store and stable in your URLs, meaningless outside it. Keep it readable; do not mistake it for a product identifier.

03 // Variants

Variants and options,
named for what they are.

Price, SKU, barcode, weight and stock are variant facts in Shopify. A record that states them once for the whole product has answered one question and hidden the rest.

Shopify allows up to three options per product and, since 2025-10-15, up to 2,048 variants per product. Options are the axes — size, colour, material — and variants are the combinations. Everything an agent needs to transact lives on the variant: its price, SKU, barcode, weight and inventory. When markup or a feed states those facts once for the product, it is not summarising; it is picking one variant and presenting it as all of them. Merchant Center requires item_group_id to tie variants together in some regions, which is the feed-side form of the same rule.

Option names

An option’s name is the only thing that tells a machine what the variants differ by. The rubric puts it in one line:

Default Title tells an agent nothing about size, colour or configuration.Rubric v1.0 — Real variant options

The check passes a product whose options include a real name, and any product with a single variant — one variant has nothing to distinguish. It fails a product with several variants hung off an option still named Title, which leaves an agent unable to say what the choices are. Renaming it is a one-field change per product in the admin; the variants keep their values.

Where variants meet structured data

The same structure belongs in the markup: a ProductGroup with an Offer per variant. The structured-data guide has the Liquid, and our journal’s variant-collapse audit shows the failure from the machine’s side.

04 // Classification

Type, category, vendor,
tags and collections.

Five fields that place a product among others. Two are free text you control, one is a fixed taxonomy, one is a brand and one is a grouping.

Shopify’s own descriptions, quoted or summarised from its documentation; weights read from the scoring code.
What Shopify says it isWhat it does for a machineRank Sniper check
Product type“The product type that merchants define” — one per product; the Help Center calls it a way to create a custom category.Your own category label: the comparison set a product joins.Product type set (12 of 100 SEO)
Product categoryA category from Shopify’s Standard Product Taxonomy.A shared category vocabulary rather than your own words.Not read by the public scan.
Vendor“The name of the product's vendor” — a manufacturer, wholesaler or other vendor.The brand a record is attributed to; what a feed sends as brand.Vendor and provenance attribution (16 of 82 GEO); Entity consistency (8 of 108 AIO)
Tags“Searchable keywords that are associated with the product.”Use-case and occasion terms the category alone does not carry.Tag richness (10 of 100 SEO)
CollectionsGroups of products by category, theme or customer intent — manual, automatic by conditions, or both.Navigable groupings with their own URLs, listed in your sitemap.Not scored.

Vendor consistency is identity too

Three spellings of one brand — Northfield, Northfield Linen, NORTHFIELD LINEN CO. — are three brands to a parser. The scan’s entity-consistency check compares each product’s vendor, trimmed and lower-cased, against the catalogue’s most common vendors, and fails the outliers. Normalising the field is tedious and worth it: the vendor is what a feed sends as brand, and what a model has to attribute a claim to.

Type and tags that say something

A blank product type leaves a product outside every comparison set built on your own categories. Tags carry what the type cannot: gift, machine-washable, queen. The rubric’s test is three or more per product, and its reason is short: Three or more per product. How use-case and occasion queries find you. Collections are not scored, but each has its own URL in your sitemap, which makes them the natural entries for a catalogue list in an llms.txt.

05 // Attributes

Attributes:
one fact, one home.

Material, dimensions and composition are the fields agents filter and compare on. The question is where each fact lives, so every surface reads the same value.

Most Shopify catalogues keep attributes in the description, as prose. That is readable, and Rank Sniper’s attribute checks read it there: the Structured attributes check passes a description containing a measurement with a unit, a list, or the words dimension, material or composition. It is also fragile — the same width typed into the description, a size chart and an app’s specification tab will eventually disagree.

Shopify’s own answer for structured facts is custom data. Metafields are, in Shopify’s words, “key-value pairs” that “add custom data to any Shopify resource”, each defined by a namespace and key, a value and a type. Metaobjects go further: “an instance of structured data with multiple related field values”, shaped by a definition that sets out its fields and rules — a material or a care instruction shared by many products.

The durable pattern is to keep each fact once, in a typed metafield, and render it everywhere from there: the specification table, the description’s key facts, the product markup. A sketch of the table:

Liquid — a specification table from metafields (namespace and keys are examples)
{%- assign spec = product.metafields.specs -%}
{%- if spec.material != blank or spec.width_cm != blank -%}
<table>
  <caption>Specifications</caption>
  {%- if spec.material != blank %}
  <tr><th scope="row">Material</th><td>{{ spec.material.value }}</td></tr>
  {%- endif %}
  {%- if spec.width_cm != blank %}
  <tr><th scope="row">Width</th><td>{{ spec.width_cm.value }} cm</td></tr>
  {%- endif %}
</table>
{%- endif -%}

Facts only you hold

Rank Sniper does not invent attributes. In the fix design, the structured attributes check is automatic only because it republishes what you already wrote: material, dimensions and composition extracted from your own copy. A measurement that is not in your copy is asked of you, never guessed. That design is Planned; today the scan names the products that fail and stops there. The reasoning is in our journal’s case against generated product facts.

06 // Transaction

Weight, availability,
price and images.

The fields that turn a listing into something an agent can put in a basket: what it costs, whether it can be bought, how heavy it is and what it looks like.

Shipping weight
Stored per variant; the storefront’s /products.json response the scan reads carries it as grams. No weight means no delivery estimate - you drop out of speed-filtered results. The scan passes a product when at least one variant has a weight above zero — 10 of 108 in AIO.
Availability
Per variant, from inventory. Both feed specifications enumerate the same values: in_stock, out_of_stock, preorder, backorder. In product markup it is availability on each Offer, bound to the variant’s real state.
Price and currency
Merchant Center requires the price with its ISO 4217 currency; Google’s merchant-listing markup requires price and priceCurrency together. A price without a currency is a number, not a price.
Images
At least one per product for the scan’s Imagery present check (8 of 108 AIO). Merchant Center enforces a 500 × 500 pixel minimum from 2027-01-31, so older product photography is worth checking now.
07 // Responsibility

Merchant fact
or derivable?

Every check this guide touches, sorted by who can supply a missing fact. The columns are read from the scoring code; fix classes describe the design, and no fix is applied by Rank Sniper today.

Who holds the fact: CHECK_REMEDY in the pillar layer. Fix class: the design each check is assigned. Weights are relative within each pillar.
Pillar · weightWho holds the factFix class by design
SKU coverageAIO · 14 of 108Only you hold itAssisted
Shipping weightAIO · 10 of 108Only you hold itAssisted
Imagery presentAIO · 8 of 108Only you hold itAssisted
Structured attributesAIO · 16 of 108Drafted from your data; you approveAutomatic
Real variant optionsAIO · 8 of 108Drafted from your data; you approveAssisted
Entity consistencyAIO · 8 of 108Drafted from your data; you approveAssisted
Vendor and provenance attributionGEO · 16 of 82Only you hold itAssisted
Quotable claim densityGEO · 16 of 82Only you hold itAssisted
Named entitiesGEO · 14 of 82Only you hold itAssisted
Product type setSEO · 12 of 100Derivable from your catalogueAssisted
Tag richnessSEO · 10 of 100Derivable from your catalogueAssisted

Read the middle column as the honest division of labour. A SKU, a shipping weight and product photography are facts only you hold, and no tool should fill them in for you. A product type or a set of tags can often be derived from the catalogue itself. Where Rank Sniper would draft something, you approve it before it is written: Planned assisted batch rewrites, applied on merchant approval. See the full tables on the AIO pillar, the GEO pillar and the methodology page, and — for how this data meets AI shopping programmes — the agentic-commerce guide.

Shopify Product Data for AI Agents: SKU, GTIN, Variants and Attributes — Rank Sniper