Category-specific guides

Apparel: the fashion data stack

Apparel has the largest required-attribute set of any Shopify category and the lowest completion rate. Here is the data stack that closes the gap.

13 min read Updated May 1, 2026

Apparel has the largest schema vocabulary on Shopify and the lowest completion rate. Size, color, material, fit, gender, age range, country of origin, care instructions, sustainability certifications — eight required-or-recommended attributes for full surfacing, and most catalogs ship three.

This guide is the apparel-specific stack. The schema vocabulary, the attributes that fashion-intent queries depend on, the GMC feed structure that gets apparel surfacing right, and the failure modes common to fashion catalogs.

What “apparel” means here

Schema and feed conventions diverge across fashion verticals. This guide covers:

It does not specifically cover:

The eight apparel attributes

Apparel product

Required for surfacing

Recommended

Size

Size system

Color

Gender

Age group

Material

Fit

Country of origin

Care instructions

Pattern

Where the attributes live on a real product page — what a complete apparel product card looks like with every attribute exposed:

An apparel product card with the eight attributes labeledA stylized apparel product display annotated to show where each of the eight required and recommended attributes lives — size, size system, color, material, gender, age group, fit, country of origin, care instructions, and pattern.product imageAcme OutfittersHeritage Crewneck100% Merino WoolForest Green · Size M (US)Women’s · Adult · Slim fitMade in Italy · Hand wash coldmaterialRecommendedcolorRequiredsizeRequiredsize_systemRequiredgenderRequiredage_groupRequiredfitRecommendedcountry_of_originRecommendedcare_instructionsRecommendedPATTERN COVERAGEAll eight75+Standard four50–60Schema-only~30Attribute-coverage score byattribute completeness

In rough order of impact-on-surfacing for apparel-intent queries (weighted from observed behavior across the major AI search engines):

1. size

What it is: the variant’s size — XS, S, M, L, XL, 2XL, 30, 32, 34, 36. The exact label depends on the size system (see attribute 2).

Where it lives: Shopify variant option, GMC size attribute, Schema.org size (or additionalProperty).

Failure mode: catalogs that use non-standard size labels (“Petite,” “Tall,” “True to size”) confuse AI agents. Use the size value plus a separate size_type attribute for the qualifier.

2. size_system and size_type

What it is: the size system (US, EU, UK, JP, CN) and the size type (regular, petite, tall, plus, maternity).

Where it lives: GMC supplemental feed; not directly in Schema.org but exposable as additionalProperty.

Failure mode: US-only catalogs entering Europe surface poorly without size_system: EU rows in the supplemental feed. This is the single biggest cause of the “we expanded to EU and traffic disappeared” pattern.

3. color

What it is: a structured color name — Forest Green, Charcoal, Off-White. Not a hex code.

Where it lives: Shopify variant option, GMC color, Schema.org color.

Failure mode: brand-specific color names (“Acme’s signature Tuscan Sunset”) that have no equivalence to a normalized color. Include both: the brand name in the title, the normalized color in the attribute.

4. material

What it is: primary material composition — 100% Merino Wool, Recycled Polyester, Egyptian Cotton.

Where it lives: Shopify metafield, GMC material, Schema.org material.

Failure mode: stored in prose only. AI agents extract material from prose with high accuracy when it’s in the description; with much higher accuracy when it’s in a structured field. The structural version surfaces in material-intent queries; the prose version sometimes does and sometimes doesn’t.

5. gender and age_group

What it is: target gender (male, female, unisex) and age group (adult, kids, infant, newborn).

Where it lives: Shopify metafield or product type, GMC gender and age_group (both required for apparel category).

Failure mode: tagging unisex products as unisex rather than splitting into male and female listings. Some agents handle unisex correctly; many treat it as ambiguous and surface the product less. The catalog-level decision is whether to ship two variants or one with unisex — splitting into two outperforms in the agents that don’t handle unisex cleanly, with no downside in the ones that do.

6. fit

What it is: the fit description — slim, regular, relaxed, oversized, athletic.

Where it lives: Shopify metafield, GMC product_detail (no first-class GMC field), Schema.org additionalProperty.

Failure mode: unstructured fit descriptions (“runs slim”) embedded only in prose. Structured fit attributes are parseable by indexers and downstream commerce surfaces in a way prose isn’t, and fit-intent queries are increasingly common.

7. country_of_origin

What it is: the country where the product is manufactured.

Where it lives: Shopify metafield, GMC country_of_origin, Schema.org countryOfOrigin.

Failure mode: omitted because “made in the US” is a marketing claim the catalog uses elsewhere; not knowing it can’t appear in two places without being a structured attribute.

8. care_instructions

What it is: structured care language — Hand wash cold, Dry clean only, Machine wash gentle.

Where it lives: Shopify metafield, GMC product_detail, Schema.org additionalProperty.

Failure mode: stored as an icon image in the product page chrome without an alt text or structured equivalent. Invisible to AI agents.

The schema pattern for apparel

Built on the Product schema base, extended with apparel-specific properties:

{%- assign variant = product.selected_or_first_available_variant -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {{ product.title | json }},
  "description": {{ product.description | strip_html | json }},
  "sku": {{ variant.sku | json }},
  {%- if variant.barcode -%}
  "gtin13": {{ variant.barcode | json }},
  {%- endif -%}
  "brand": {
    "@type": "Brand",
    "name": {{ product.vendor | json }}
  },
  "category": "Apparel & Accessories > Clothing > {{ product.product_type }}",
  "color": {{ variant.option1 | json }},
  "size": {{ variant.option2 | json }},
  {%- if product.metafields.product.material -%}
  "material": {{ product.metafields.product.material | json }},
  {%- endif -%}
  {%- if product.metafields.product.country_of_origin -%}
  "countryOfOrigin": {
    "@type": "Country",
    "name": {{ product.metafields.product.country_of_origin | json }}
  },
  {%- endif -%}
  "additionalProperty": [
    {%- if product.metafields.product.fit -%}
    {
      "@type": "PropertyValue",
      "name": "Fit",
      "value": {{ product.metafields.product.fit | json }}
    },
    {%- endif -%}
    {%- if product.metafields.product.care_instructions -%}
    {
      "@type": "PropertyValue",
      "name": "Care Instructions",
      "value": {{ product.metafields.product.care_instructions | json }}
    }
    {%- endif -%}
  ],
  "audience": {
    "@type": "PeopleAudience",
    "suggestedGender": {{ product.metafields.product.gender | json }},
    "suggestedMinAge": 18
  },
  "offers": {
    "@type": "Offer",
    "url": {{ shop.url | append: product.url | json }},
    "priceCurrency": {{ cart.currency.iso_code | json }},
    "price": {{ variant.price | divided_by: 100.0 | json }},
    "availability": {%- if variant.available -%}
      "https://schema.org/InStock"
    {%- else -%}
      "https://schema.org/OutOfStock"
    {%- endif %}
  }
}
</script>

Apparel-specific GMC feed structure

The supplemental feed for apparel must include:

AttributeRequiredFormat
colorYesSingle normalized color name
sizeYesSize value matching size_system
size_systemYesUS, EU, UK, JP, CN, AU
size_typeOptionalregular, petite, tall, plus, maternity
genderYesmale, female, unisex
age_groupYesadult, kids, infant, newborn
materialRecommendedComma-separated for blends
patternOptionalsolid, striped, floral, plaid
country_of_originRecommendedISO country code or name

Skip pattern if products are predominantly solid colors. The attribute is weighted in pattern-intent queries (“striped wool sweater”) that may not be high-volume for the catalog.

Reviews

Apparel reviews carry two kinds of information: an aggregate satisfaction signal (the rating value and review count) and review text that frequently includes fit feedback (“runs small,” “true to size,” “size up”). The aggregate signal is what aggregateRating captures in structured data; the review text is what’s in the server-rendered page HTML and contributes to the broader index of the page’s content.

Whether and how AI agents specifically extract fit-feedback phrases from review text is not publicly documented. What’s documented is that server-rendered HTML is read by indexers, JavaScript-only widgets are not reliably indexed, and a server-rendered review section is a more durable input than a widget regardless of what’s done with the extracted content downstream.

Catalog-side discipline:

See Review and AggregateRating schema after Google’s 2024 changes for the surfaces that continue to read review structured data and what Google’s narrowing actually changed.

Q&A pairs as a sibling FAQPage block

Apparel pages commonly carry pre-purchase Q&A — fit, sizing, fabric care, returns. When that content exists, render it as a sibling FAQPage JSON-LD block alongside the Product block. The two are separate Schema.org types; they live in two <script type="application/ld+json"> blocks on the same page, not nested. See Product schema for Shopify for the rendering pattern.

The contrarian take

Most apparel-SEO content optimizes for Google Shopping with paid campaigns in mind. The free organic surfacing in Google Shopping, in Google AI Overviews, in ChatGPT’s product index, and in Perplexity’s sourcing pulls from the same feed but rewards different attributes — GMC paid campaigns weight bidding-related signals; organic surfacing weights attribute completeness.

Catalogs that pay close attention to GMC paid campaign performance often have feeds optimized for paid efficiency (only the must-have attributes), which underperforms on organic AI surfacing where the optional attributes carry weight. The fix is to maintain the feed for organic surfacing — full attribute coverage — and let the paid campaign work with whatever subset it weights.

Where it breaks

How attribute coverage maps to scoring

Catalogs with all eight load-bearing attributes structured and exposed perform better on the Description density dimension of Lumio’s AI Readiness Score — the dimension that evaluates how attribute-rich the rendered content is. Catalogs with only the standard four (size, color, material, gender) score lower on that dimension by definition, since fewer attributes are present in the rendered structured data.

What to ship this week

  1. Add the five missing metafields if they’re not in place: material, country_of_origin, fit, care_instructions, plus a gender metafield if gender isn’t already a product type.
  2. Update product.liquid to render the apparel-specific schema.
  3. Configure the apparel supplemental feed in GMC with all required attributes.
  4. Validate ten products end-to-end: admin → product page → Schema.org Validator → GMC diagnostics.

For a 500–2,000 SKU apparel catalog, this is a 4–6 hour project that moves the readiness score 10–15 points and the Google Shopping organic surfacing measurably within 30 days.