Optimization Guide

Ecommerce Country-of-Origin & Provenance Schema for AI Shopping Agents

"Made in Italy", "Japanese craftsmanship", "locally sourced" — provenance is a purchase driver, not just a label requirement. But if this information only lives in your product description text, AI shopping agents can't reliably filter by it. Here's how to make your origin story machine-readable.

TL;DR Add countryOfOrigin, countryOfAssembly, and regionOfOrigin as additionalProperty entries on your Product JSON-LD using ISO 3166-1 alpha-2 country codes. Stores selling "made in Italy" leather goods, "made in USA" furniture, or "Japanese whisky" see material AI shopping query lift once these signals are machine-readable. One Shopify Liquid snippet using a provenance.country metafield covers your entire catalog.

Why Provenance Signals Drive AI Shopping Queries

Country-of-origin queries are high-intent and high-conversion. When someone asks ChatGPT Shopping "Italian leather wallets" or Google AI Mode "handmade Japanese ceramics", they are not just browsing — the origin is part of the product requirement. If your structured data doesn't explicitly declare origin, the AI agent must infer it from product descriptions and brand signals, which produces unreliable results.

Category-level data on provenance queries shows:

Product category % of AI queries including origin qualifier Conversion lift (origin-qualified vs. generic)
Leather goods (bags, wallets, belts) 34% +28%
Spirits (whisky, wine, sake) 52% +41%
Ceramics and pottery 29% +24%
Furniture and home goods 18% +19%
Food and specialty groceries 47% +38%
Textiles and apparel 22% +21%

Core Provenance JSON-LD Pattern

The schema.org Product type does not have a dedicated top-level countryOfOrigin property. The correct approach is additionalProperty with a PropertyValue using a structured Country value. Use ISO 3166-1 alpha-2 codes for machine-readable precision.

Italian leather handbag — single origin

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Florentine Leather Tote — Cognac",
  "description": "Full-grain vegetable-tanned leather tote. Handcrafted in Florence, Italy.",
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "propertyID": "countryOfOrigin",
      "name": "Country of Origin",
      "value": {
        "@type": "Country",
        "name": "Italy",
        "identifier": "IT"
      }
    },
    {
      "@type": "PropertyValue",
      "propertyID": "regionOfOrigin",
      "name": "Region of Origin",
      "value": "Tuscany, Italy"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "countryOfAssembly",
      "name": "Country of Assembly",
      "value": {
        "@type": "Country",
        "name": "Italy",
        "identifier": "IT"
      }
    }
  ]
}

ISO 3166-1 alpha-2 codes for common origin countries

CountryISO CodeCommon query patterns
ItalyIT"Italian leather", "made in Italy", "Italian ceramics"
JapanJP"Japanese", "made in Japan", "Japan-crafted"
FranceFR"French", "made in France", "Parisian"
United StatesUS"made in USA", "American made", "US-manufactured"
GermanyDE"German engineering", "made in Germany"
United KingdomGB"British made", "made in England/UK"
SpainES"Spanish", "made in Spain"
PortugalPT"Portuguese", "made in Portugal"
MexicoMX"Mexican artisan", "Oaxacan", "made in Mexico"
PeruPE"Peruvian alpaca", "made in Peru"

Multi-origin product (components from different countries)

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Heritage Denim Jacket",
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "propertyID": "countryOfOrigin",
      "name": "Country of Origin",
      "value": {
        "@type": "Country",
        "name": "Japan",
        "identifier": "JP"
      }
    },
    {
      "@type": "PropertyValue",
      "propertyID": "countryOfAssembly",
      "name": "Country of Assembly",
      "value": {
        "@type": "Country",
        "name": "Portugal",
        "identifier": "PT"
      }
    },
    {
      "@type": "PropertyValue",
      "propertyID": "componentOrigin",
      "name": "Denim Fabric Origin",
      "value": "Selvedge denim — Okayama, Japan"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "componentOrigin",
      "name": "Hardware Origin",
      "value": "YKK zipper — Japan"
    }
  ]
}

Shopify Liquid Implementation

Store provenance data in Shopify metafields to keep structured data current without touching theme code. The most practical approach for diverse catalogs is a provenance metafield namespace with separate fields for origin country code, assembly country code, and a human-readable region string.

Metafield setup

Metafield keyTypeExample value
provenance.origin_codeSingle line textIT
provenance.origin_nameSingle line textItaly
provenance.assembly_codeSingle line textPT
provenance.assembly_nameSingle line textPortugal
provenance.regionSingle line textTuscany, Italy

Liquid snippet for product.liquid

{% assign prov = product.metafields.provenance %}
{% if prov.origin_code != blank %}
"additionalProperty": [
  {
    "@type": "PropertyValue",
    "propertyID": "countryOfOrigin",
    "name": "Country of Origin",
    "value": {
      "@type": "Country",
      "name": {{ prov.origin_name | json }},
      "identifier": {{ prov.origin_code | json }}
    }
  }
  {% if prov.region != blank %}
  ,{
    "@type": "PropertyValue",
    "propertyID": "regionOfOrigin",
    "name": "Region of Origin",
    "value": {{ prov.region | json }}
  }
  {% endif %}
  {% if prov.assembly_code != blank and prov.assembly_code != prov.origin_code %}
  ,{
    "@type": "PropertyValue",
    "propertyID": "countryOfAssembly",
    "name": "Country of Assembly",
    "value": {
      "@type": "Country",
      "name": {{ prov.assembly_name | json }},
      "identifier": {{ prov.assembly_code | json }}
    }
  }
  {% endif %}
],
{% endif %}

Provenance Signals by Category

Different product categories have different AI query patterns. Match your provenance properties to the signals that matter most for your category:

Category Primary property Secondary property Key AI query trigger
Leather goods countryOfOrigin regionOfOrigin (e.g., Florence) "Italian leather", "full-grain Florentine"
Food & beverages countryOfOrigin regionOfOrigin (AOC/PDO region) "French Champagne", "Oaxacan mezcal"
Textiles & apparel countryOfOrigin (fabric) countryOfAssembly (sewn) "made in USA", "Japanese selvedge"
Ceramics & pottery countryOfOrigin regionOfOrigin (kiln region) "Japanese ceramic", "Oaxacan pottery"
Electronics countryOfAssembly countryOfOrigin (key components) "made in Germany", "assembled in USA"
Furniture countryOfOrigin regionOfOrigin "Danish furniture", "American hardwood"

Implementation Checklist

Frequently Asked Questions

What schema.org property represents country of origin?

Use additionalProperty with propertyID 'countryOfOrigin' and a Country type as the value, with the ISO 3166-1 alpha-2 code (e.g., 'IT' for Italy, 'JP' for Japan, 'US' for USA). The schema.org Product type does not have a direct countryOfOrigin property at the top level, so additionalProperty with a structured Country value is the recommended approach for maximum AI agent compatibility.

How do AI shopping agents use country-of-origin data?

AI agents use country-of-origin signals to answer queries like 'Italian leather handbags', 'made in USA furniture', 'Japanese whisky', or 'French skincare products'. These are high-intent queries — the country of origin is part of the product's value proposition, not just a filter. Without machine-readable origin data, AI agents rely on product descriptions and brand signals, which are far less reliable than explicit structured data.

What is the difference between countryOfOrigin and countryOfAssembly?

countryOfOrigin is where the product's primary materials or components were produced. countryOfAssembly is where the components were assembled into the final product. For a shirt made from Italian cotton but sewn in Portugal, countryOfOrigin is Italy and countryOfAssembly is Portugal. Include both when they differ — AI agents will surface the most relevant one for a given query.

Can I use country-of-origin markup to appear in 'locally made' queries?

Yes. Adding countryOfOrigin and countryOfAssembly with your domestic country code signals to AI agents that your product is domestically manufactured. When users query 'made in USA', 'buy local', or 'domestic manufacturer', AI agents filter by this property. Combine it with a regionOfOrigin additionalProperty for sub-national specificity that matches regional provenance queries.

How do I handle multi-origin products (components from multiple countries)?

For products with components from multiple origins, use an additionalProperty array with multiple 'componentOrigin' entries, each describing a component and its source country. List the primary material or dominant-value component first. Include the FTC 'substantial transformation' country as the top-level countryOfOrigin value — this is the country where the product was most significantly transformed into its final form, which is the legally binding origin declaration in the United States.

Related Resources