Ecommerce SEO + AI Visibility
Ecommerce size guide
structured data schema
How to implement schema.org SizeSpecification, hasMeasurement, and size conversion data so AI shopping agents can answer size queries across US, EU, UK, and international sizing systems.
SizeSpecification (schema.org v14+) on each size variant Offer. Include sizeSystem (country code like "US" or "EU"), sizeGroup ("Womens", "Mens", etc.), and hasMeasurement with body measurement ranges. This unlocks size-specific AI agent recommendations: "size medium dress for 36-inch bust" and international size conversion queries.
Why size data matters for AI shopping agents
Apparel is one of the highest-intent ecommerce categories for AI shopping agents. Users ask very specific size-qualified queries: "women's running shorts size S with 3-inch inseam", "men's dress shirt 15.5 neck 34 sleeve", "kids snow boots toddler size 7". Without structured size data, AI agents cannot match these queries to your specific variants — they either skip your products or recommend them incorrectly, generating returns and refund requests.
Schema.org's SizeSpecification type, introduced in version 14.0, gives merchants a standard vocabulary to express:
- Which sizing system you use (US, EU, UK, JP, etc.)
- Which gender group the size applies to (Womens, Mens, Kids, etc.)
- The actual body measurements the size is intended to fit
- Age ranges for children's sizing
AI agent size query coverage by structured data tier
| What you provide | Queries answered by AI agents | Coverage level |
|---|---|---|
| No size data (default Shopify) | General product queries only | None |
| Size in variant name only (e.g. "Size: M") | Exact label match ("size M dress") | Label only |
| SizeSpecification + sizeSystem | Size label + system ("EU 40", "US 8") | System match |
| SizeSpecification + hasMeasurement | Body measurement queries ("36 inch bust", "32 waist") | Measurement match |
| SizeSpecification + hasMeasurement + multi-system | International conversions + body measurements | Full coverage |
Schema.org SizeSpecification — complete property reference
| Property | Type | Required for AI? | Example values |
|---|---|---|---|
name |
Text | Yes | "XS", "S", "M", "L", "XL", "2XL", "38", "40", "42" |
sizeSystem |
Text (country code or enum) | Yes | "US", "EU", "UK", "JP", "CN", "FR", "IT", "AU", "BR" |
sizeGroup |
SizeGroupEnumeration or Text | Yes | "Womens", "Mens", "Unisex", "Boy", "Girl", "Tall", "Petite", "Plus", "Maternity" |
hasMeasurement |
QuantitativeValue | Strongly recommended | chest: 91–97 cm, waist: 72–78 cm, hip: 99–105 cm |
suggestedAge |
QuantitativeValue | Children's only | minValue: 2, maxValue: 4, unitText: "years" |
suggestedGender |
GenderType or Text | Optional (use sizeGroup instead) | "Female", "Male", "Unknown" |
sizeSystem country codes
| Region | sizeSystem value | Example (women's top) |
|---|---|---|
| United States | "US" | XS, S, M, L, XL or 0, 2, 4, 6, 8 |
| Europe (most) | "EU" | 34, 36, 38, 40, 42, 44 |
| United Kingdom | "UK" | 6, 8, 10, 12, 14, 16 |
| Japan | "JP" | 5, 7, 9, 11, 13, 15 |
| China | "CN" | 155/80A, 160/84A, 165/88A |
| Italy | "IT" | 38, 40, 42, 44, 46, 48 |
| France | "FR" | 34, 36, 38, 40, 42, 44 |
| Australia | "AU" | 8, 10, 12, 14, 16, 18 |
| Generic metric | "SizeSystemMetric" | Use for measurements-only sizes |
Complete JSON-LD example: women's dress with US + EU sizing
This example uses ProductGroup (for the main product) with individual Product variants, each having a SizeSpecification. This is the structure Google recommends for size-variable apparel.
{
"@context": "https://schema.org",
"@type": "ProductGroup",
"name": "Linen Wrap Dress",
"description": "Relaxed-fit wrap dress in 100% Belgian linen. Available in three colors and five sizes.",
"brand": { "@type": "Brand", "name": "Maison Laurent" },
"url": "https://example.com/products/linen-wrap-dress",
"productGroupID": "WD-2026-LINEN",
"hasVariant": [
{
"@type": "Product",
"name": "Linen Wrap Dress — Size S",
"sku": "WD-LINEN-S",
"color": "Ivory",
"size": {
"@type": "SizeSpecification",
"name": "S",
"sizeSystem": "US",
"sizeGroup": "https://schema.org/WomensClothes",
"hasMeasurement": [
{
"@type": "QuantitativeValue",
"name": "chest",
"minValue": 84,
"maxValue": 89,
"unitCode": "CMT"
},
{
"@type": "QuantitativeValue",
"name": "waist",
"minValue": 65,
"maxValue": 70,
"unitCode": "CMT"
},
{
"@type": "QuantitativeValue",
"name": "hip",
"minValue": 91,
"maxValue": 96,
"unitCode": "CMT"
}
]
},
"offers": {
"@type": "Offer",
"price": "195.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Linen Wrap Dress — Size M",
"sku": "WD-LINEN-M",
"color": "Ivory",
"size": {
"@type": "SizeSpecification",
"name": "M",
"sizeSystem": "US",
"sizeGroup": "https://schema.org/WomensClothes",
"hasMeasurement": [
{ "@type": "QuantitativeValue", "name": "chest", "minValue": 91, "maxValue": 97, "unitCode": "CMT" },
{ "@type": "QuantitativeValue", "name": "waist", "minValue": 72, "maxValue": 78, "unitCode": "CMT" },
{ "@type": "QuantitativeValue", "name": "hip", "minValue": 99, "maxValue": 105, "unitCode": "CMT" }
]
},
"offers": {
"@type": "Offer",
"price": "195.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
]
}
Shopify Liquid implementation with metaobject size specs
Store your size measurement data in a size_spec metaobject definition. Each entry represents one size in one system (e.g. "US M" and "EU 40" are separate entries that both link to the size M variant). This allows you to maintain size data in Admin without editing Liquid code.
Metaobject definition fields for size_spec
type: size_spec fields: - key: size_label type: single_line_text_field (e.g. "M", "40", "12") - key: size_system type: single_line_text_field (e.g. "US", "EU", "UK") - key: size_group type: single_line_text_field (e.g. "Womens", "Mens") - key: chest_min_cm type: number_decimal - key: chest_max_cm type: number_decimal - key: waist_min_cm type: number_decimal - key: waist_max_cm type: number_decimal - key: hip_min_cm type: number_decimal - key: hip_max_cm type: number_decimal - key: inseam_min_cm type: number_decimal (bottoms only) - key: inseam_max_cm type: number_decimal (bottoms only) - key: foot_length_min type: number_decimal (footwear only) - key: foot_length_max type: number_decimal (footwear only)
Liquid JSON-LD output snippet
{% assign size_specs = product.metafields.custom.size_specs.value %}
{% if size_specs.size > 0 %}
"size": [
{% for spec in size_specs %}
{
"@type": "SizeSpecification",
"name": {{ spec.size_label.value | json }},
"sizeSystem": {{ spec.size_system.value | json }},
"sizeGroup": {{ spec.size_group.value | json }},
"hasMeasurement": [
{% if spec.chest_min_cm.value != blank %}
{ "@type": "QuantitativeValue", "name": "chest",
"minValue": {{ spec.chest_min_cm.value }},
"maxValue": {{ spec.chest_max_cm.value }}, "unitCode": "CMT" },
{% endif %}
{% if spec.waist_min_cm.value != blank %}
{ "@type": "QuantitativeValue", "name": "waist",
"minValue": {{ spec.waist_min_cm.value }},
"maxValue": {{ spec.waist_max_cm.value }}, "unitCode": "CMT" },
{% endif %}
{% if spec.hip_min_cm.value != blank %}
{ "@type": "QuantitativeValue", "name": "hip",
"minValue": {{ spec.hip_min_cm.value }},
"maxValue": {{ spec.hip_max_cm.value }}, "unitCode": "CMT" }
{% endif %}
]
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
{% endif %}
Children's sizing: suggestedAge
For children's apparel and footwear, the suggestedAge property on SizeSpecification lets AI agents answer queries like "rain jacket for 4 year old" or "toddler shoes 18 months". Combine it with sizeGroup (Boy, Girl, or Unisex) for maximum coverage.
{
"@type": "SizeSpecification",
"name": "2T",
"sizeSystem": "US",
"sizeGroup": "https://schema.org/KidsClothes",
"suggestedAge": {
"@type": "QuantitativeValue",
"minValue": 2,
"maxValue": 2.5,
"unitText": "years"
},
"hasMeasurement": [
{ "@type": "QuantitativeValue", "name": "height", "minValue": 85, "maxValue": 90, "unitCode": "CMT" },
{ "@type": "QuantitativeValue", "name": "weight", "minValue": 12, "maxValue": 14, "unitCode": "KGM" }
]
}
Common size structured data errors
| Error | Effect | Fix |
|---|---|---|
| No sizeSystem set | AI can't convert between systems; only label queries match | Add sizeSystem with country code |
| size value is a string variant option (not SizeSpecification) | No hasMeasurement or sizeSystem data available | Use SizeSpecification type, not plain text |
| hasMeasurement in inches without unitCode INH | AI assumes cm; size conversions are wrong | Set unitCode: "INH" for inches, "CMT" for centimeters |
| sizeGroup omitted for gendered clothing | Ambiguous for unisex queries; may miss male/female specific searches | Set sizeGroup to Womens or Mens |
| Only one size system (US) for international store | EU, UK, JP visitors get no size context; high return rate | Add alternate SizeSpecification entries for each system |
| Size in product title only ("Blue Dress Size M") | AI can read the label but no measurement or system context | Add SizeSpecification to the Offer or ProductGroup |
FAQ
Does schema.org have a size guide or size chart type?
Schema.org added the SizeSpecification type in version 14.0 (2021). It describes a size value within a specific sizing system with properties: name (size label), sizeSystem (country code), sizeGroup (gender/age group), hasMeasurement (body measurements), and suggestedAge (for children's sizing). Use SizeSpecification on your product's size variant Offer or as size property on the Product itself.
How do AI shopping agents use size structured data?
AI agents use SizeSpecification to answer queries like "size medium blue dress", "men's jacket 42 chest", or "kids shoes size 5 toddler". ChatGPT Shopping and Google AI Mode cross-reference sizeSystem and hasMeasurement to disambiguate international size queries. Merchants who provide measurement ranges get matched to long-tail searches like "shirt that fits 42 inch chest" — queries that don't match any size label directly.
Can I add size structured data to Shopify without modifying product variants?
Yes. Store size measurement ranges in a size_spec metaobject definition and link specs to products via a list metaobject_reference metafield. Output SizeSpecification JSON-LD from the Liquid template without modifying Shopify's variant inventory system. No Shopify app required.
What sizeSystem values does schema.org support?
Schema.org supports ISO 3166-1 alpha-2 country codes as sizeSystem values: "US" for US sizes, "EU" for European, "UK" for British, "JP" for Japanese, "CN" for Chinese, "IT" for Italian, "FR" for French, "BR" for Brazilian, "AU" for Australian sizes. Google's Merchant Center documentation endorses this pattern for apparel structured data.
What unitCode should I use for body measurements?
Use "CMT" for centimeters and "INH" for inches — these are UN/CEFACT unit codes used throughout schema.org quantity values. Using the wrong unitCode causes AI agents to misinterpret measurements: a chest measurement of 38 with unitCode "CMT" (38 cm) is interpreted as a very small child's garment, not a standard men's medium. For US-market apparel stores, use "INH" and include metric equivalents as additional hasMeasurement entries for international AI agents.
Scan for size data completeness
CatalogScan checks apparel product pages for SizeSpecification, sizeSystem, and hasMeasurement structured data. Get a report showing which of your products are invisible to size-qualified AI shopping queries.
Related: Schema markup overview · ProductGroup JSON-LD guide · Metaobjects for structured data