Home › Blog › Jewelry gemstone schema
Shopify jewelry schema for AI shopping agents: GIA certificate data, 4Cs additionalProperty, and lab-grown disambiguation
91% of Shopify jewelry stores have no gemstone quality data in their product structured data. AI shopping agents filter diamonds by cut grade, carat, and GIA certificate number from JSON-LD — not from your beautifully written product descriptions. Without additionalProperty for the 4Cs, your entire diamond collection is invisible to every quality-filtered query.
Contents
- How AI agents filter jewelry: quality parameters, not descriptions
- The 4Cs as additionalProperty: GIA vocabulary and exact values
- GIA and IGI certificate structured data: hasCertification anatomy
- Lab-grown disambiguation: CVD vs HPHT, IGI vs GIA, origin additionalProperty
- Metal purity and hallmark markup: fineness values and stamp strings
- Ring size: ProductGroup variesBy SizeSpecification
- Ethical sourcing certifications: Kimberley Process and RJC
- Dawn Liquid snippet: jewelry.* metafield namespace
- Five common mistakes
- FAQ
How AI agents filter jewelry: quality parameters, not descriptions
When a shopper asks ChatGPT Shopping "find me a round diamond engagement ring, 1 carat, VVS1 clarity, Excellent cut, under $9,000" the AI agent is not reading your product description. It is parsing structured data for matching additionalProperty values against those four parameters simultaneously. Jewelry is the highest-consideration purchase category in ecommerce — buyers research for weeks and use highly specific quality vocabulary. AI agents translate that vocabulary directly into structured data filter queries.
Jewelry is unique in three ways that make structured data more critical here than in almost any other product category:
- Quality vocabulary is standardized. The 4Cs (cut, color, clarity, carat) and GIA grading terms (Excellent, Very Good, D-Z color scale, FL-SI2 clarity) are industry-wide controlled vocabularies. An AI agent can match "VVS1" to a structured data value with zero ambiguity — but only if that value is in a machine-readable
additionalProperty, not embedded in prose. - Certificates are identifiers. GIA grading report numbers are unique product identifiers — more specific than GTIN for diamonds. An agent handling "find a diamond with GIA report 2141438153" performs an exact
certificationIdentificationlookup. WithouthasCertificationin your JSON-LD, that query returns zero matches on your store. - Origin now drives purchase decisions. The lab-grown diamond market has grown from under 2% to over 20% of diamond sales in five years. Buyers filter explicitly for "lab-grown CVD" or "natural mined conflict-free" — AI agents need structured disambiguation between origin types, growth methods, and certification labs to serve those queries correctly.
The complete technical reference for jewelry structured data is in the Shopify jewelry and gemstone schema guide, which covers all properties with exact GIA vocabulary tables. This post explains the strategic rationale behind each element and provides a ready-to-deploy Dawn Liquid snippet.
The 4Cs as additionalProperty: GIA vocabulary and exact values
The 4Cs — cut, color, clarity, and carat weight — are the four properties GIA established in 1953 as the universal language for describing diamond quality. Every other major grading laboratory (IGI, AGS, HRD) uses the same framework. For AI shopping agents, these are the primary filter dimensions for diamond and gemstone queries.
Each of the 4Cs is implemented as a separate additionalProperty on the Product object with a PropertyValue type. The property names and value vocabularies must match GIA's published terminology exactly — AI agents trained on jewelry data expect these specific strings.
| 4C | propertyID / name | GIA valid values (most common) | Notes |
|---|---|---|---|
| Cut | Cut Grade | Excellent · Very Good · Good · Fair · Poor | Only applies to round brilliant cut diamonds. Fancy shapes (oval, pear, cushion) have no GIA cut grade — omit the property for fancy shapes to avoid misleading agents. |
| Color | Diamond Color | D · E · F · G · H · I · J · K · L · M (colorless → near colorless → faint) | Use the single letter only — not "D (Colorless)" or "D-F". GIA's scale runs D through Z; below M is increasingly detectable yellow tint. Fancy colored diamonds use a separate vocabulary ("Fancy Vivid Yellow", "Fancy Intense Blue") — do not use D-Z for fancy colors. |
| Clarity | Diamond Clarity | FL · IF · VVS1 · VVS2 · VS1 · VS2 · SI1 · SI2 · I1 · I2 · I3 | Use the GIA abbreviation exactly. "Flawless" instead of "FL" will not match agent filters. For non-diamond gemstones, clarity is typically described as "Eye Clean", "Slightly Included", or "Heavily Included" — these are not standardized, but far better than omitting the property. |
| Carat Weight | Carat Weight | Decimal number: 1.0, 1.51, 0.75 |
Value must be a plain decimal number (not a string like "1.5ct" or "1.5 carats"). Use unitCode: "OZT" (troy ounce) — but in practice, most agents parse the numeric value directly. Two decimal places of precision is standard. |
A complete 4Cs block for a 1.02ct round brilliant diamond looks like this:
{
"@type": "Product",
"name": "Round Brilliant Diamond 1.02ct G VS1 Excellent Cut",
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "Cut Grade",
"value": "Excellent"
},
{
"@type": "PropertyValue",
"name": "Diamond Color",
"value": "G"
},
{
"@type": "PropertyValue",
"name": "Diamond Clarity",
"value": "VS1"
},
{
"@type": "PropertyValue",
"name": "Carat Weight",
"value": 1.02,
"unitCode": "OZT"
},
{
"@type": "PropertyValue",
"name": "Shape",
"value": "Round Brilliant"
}
]
}
additionalProperty name="Shape" value="Oval". Include Shape as a fifth additionalProperty for every diamond and gemstone product. Standard GIA shape vocabulary: Round Brilliant, Princess, Cushion, Oval, Pear, Marquise, Emerald, Asscher, Radiant, Heart.
GIA and IGI certificate structured data: hasCertification anatomy
A GIA grading report is the most authoritative quality document in the diamond industry — and its report number is a unique product identifier more precise than any GTIN. AI shopping agents handling queries like "GIA certified diamond VS1 1 carat" or "show me diamonds with GIA certificates" need hasCertification structured data to match those queries to your inventory.
The hasCertification property on Product accepts a Certification type with the following key properties. See also: product safety and quality certifications schema reference for the full Certification type anatomy.
Required
Organization type with name and url. For GIA: {"@type": "Organization", "name": "GIA", "url": "https://www.gia.edu"}. For IGI: {"@type": "Organization", "name": "IGI", "url": "https://www.igi.org"}. For AGS (American Gem Society): {"@type": "Organization", "name": "AGS", "url": "https://www.americangemsociety.org"}.Required
"2141438153"). Store the numeric string exactly — no spaces, no dashes, no "GIA" prefix. This value is what AI agents match against explicit certificate queries. It is also used to construct the public verification URL.Recommended
"https://www.gia.edu/report-check?reportno=2141438153". For IGI: "https://www.igi.org/verify-your-report/?r=104052897". AI agents surface this URL when a buyer wants to verify the certificate independently — a significant trust signal for high-value purchases.Recommended
"GIA Diamond Grading Report", "IGI Lab Grown Diamond Report", "AGS Diamond Quality Document". Helps agents describe the certification type in natural language to the buyer.A complete hasCertification block for a GIA-certified diamond:
{
"@type": "Product",
"name": "Round Brilliant Diamond 1.02ct G VS1",
"hasCertification": {
"@type": "Certification",
"name": "GIA Diamond Grading Report",
"certificationBody": {
"@type": "Organization",
"name": "GIA",
"url": "https://www.gia.edu"
},
"certificationIdentification": "2141438153",
"url": "https://www.gia.edu/report-check?reportno=2141438153"
}
}
Lab-grown disambiguation: CVD vs HPHT, IGI vs GIA, origin additionalProperty
Lab-grown diamonds are chemically and physically identical to mined diamonds — AI agents can only distinguish them through structured data. This distinction is commercially critical: buyers searching for "lab-grown CVD diamond" must not be shown natural mined diamonds, and vice versa. Without origin disambiguation in your JSON-LD, AI agents either conflate lab-grown and natural inventory or exclude your products from origin-filtered queries entirely.
Two additionalProperty values handle lab-grown disambiguation:
"Natural" for mined stones, "Lab-Grown" for synthesized stones. This is the primary filter dimension — use it consistently across all products so AI agents can reliably separate the two categories in your catalog. Natural: mined from earth. Lab-Grown: grown in a laboratory under controlled conditions."CVD" (Chemical Vapor Deposition — carbon-rich gas deposited layer by layer at low pressure) and "HPHT" (High Pressure High Temperature — mimics natural diamond formation at extreme pressure and heat). Only output this property for lab-grown stones — omit it entirely for natural diamonds. Buyers who care about growth method are very specific: "CVD lab diamond" and "HPHT lab diamond" are distinct search intents.For certification, IGI is the predominant grading lab for lab-grown diamonds, while GIA historically focused on natural stones (though GIA now grades lab-grown as well). Signal the correct lab in your hasCertification:
/* Lab-grown CVD diamond — full example */
{
"@type": "Product",
"name": "Lab-Grown Round Brilliant Diamond 1.01ct E VS2 CVD",
"additionalProperty": [
{ "@type": "PropertyValue", "name": "Origin", "value": "Lab-Grown" },
{ "@type": "PropertyValue", "name": "Growth Method", "value": "CVD" },
{ "@type": "PropertyValue", "name": "Cut Grade", "value": "Excellent" },
{ "@type": "PropertyValue", "name": "Diamond Color", "value": "E" },
{ "@type": "PropertyValue", "name": "Diamond Clarity", "value": "VS2" },
{ "@type": "PropertyValue", "name": "Carat Weight", "value": 1.01, "unitCode": "OZT" },
{ "@type": "PropertyValue", "name": "Shape", "value": "Round Brilliant" }
],
"hasCertification": {
"@type": "Certification",
"name": "IGI Lab Grown Diamond Report",
"certificationBody": {
"@type": "Organization",
"name": "IGI",
"url": "https://www.igi.org"
},
"certificationIdentification": "104052897",
"url": "https://www.igi.org/verify-your-report/?r=104052897"
}
}
Related
- Shopify jewelry and gemstone schema reference — GIA vocabulary tables, metal purity, ring size, ethical sourcing
- Shopify trust signals for AI agents — return policy, warranty, certifications, and seller rating schema
- Product safety and quality certifications schema — Certification type anatomy and compliance markup
Metal purity and hallmark markup: fineness values and stamp strings
For jewelry with precious metals — gold, silver, platinum, palladium — metal purity is a primary filter criterion. "14k gold engagement ring" and "sterling silver chain" are queries AI agents match against structured metal composition data, not title keywords.
Metal purity is expressed through two complementary additionalProperty values. See also the product material composition schema guide for the broader material markup pattern.
| Metal | Common purity | Metal Purity (string) | Metal Fineness (decimal) | Hallmark stamp |
|---|---|---|---|---|
| Gold | 10k | 10K Gold | 0.417 | 417 |
| Gold | 14k | 14K Gold | 0.585 | 585 |
| Gold | 18k | 18K Gold | 0.750 | 750 |
| Gold | 22k | 22K Gold | 0.916 | 916 |
| Gold | 24k | 24K Gold (Pure) | 0.999 | 999 |
| Silver | Sterling | Sterling Silver | 0.925 | 925 |
| Silver | Fine | Fine Silver | 0.999 | 999 |
| Platinum | 950 | Platinum 950 | 0.950 | Pt950 |
| Platinum | 900 | Platinum 900 | 0.900 | Pt900 |
Implement both Metal Purity and Metal Fineness as additionalProperty values — the string form serves natural language queries ("14k gold ring"), while the numeric fineness value enables precise filter matching:
{
"@type": "PropertyValue",
"name": "Metal Purity",
"value": "14K Gold"
},
{
"@type": "PropertyValue",
"name": "Metal Fineness",
"value": 0.585,
"propertyID": "https://schema.org/value"
},
{
"@type": "PropertyValue",
"name": "Metal Hallmark Stamp",
"value": "585"
}
Ring size: ProductGroup variesBy SizeSpecification
Ring size variants are a common implementation mistake on Shopify jewelry stores. The default Dawn theme outputs each ring size as a separate Offer with no size schema — AI agents cannot determine that the $1,200 price applies to all sizes, or that a size-6 variant is available when the shopper asks "round diamond ring available in size 6 under $1,500."
The correct architecture uses ProductGroup with variesBy: SizeSpecification:
{
"@context": "https://schema.org",
"@type": "ProductGroup",
"name": "Solitaire Diamond Engagement Ring",
"variesBy": "https://schema.org/size",
"hasVariant": [
{
"@type": "Product",
"name": "Solitaire Diamond Engagement Ring — Size 5",
"size": {
"@type": "SizeSpecification",
"name": "5",
"sizeSystem": "https://schema.org/WearableSizeSystemUS",
"sizeGroup": "https://schema.org/WearableSizeGroupMisses"
},
"offers": {
"@type": "Offer",
"price": "1299.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Solitaire Diamond Engagement Ring — Size 6",
"size": {
"@type": "SizeSpecification",
"name": "6",
"sizeSystem": "https://schema.org/WearableSizeSystemUS",
"sizeGroup": "https://schema.org/WearableSizeGroupMisses"
},
"offers": {
"@type": "Offer",
"price": "1299.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
]
}
For half-sizes, use the decimal string format: "name": "6.5". US ring sizes run from 3 to 13 in whole and half increments for most styles. The sizeGroup: WearableSizeGroupMisses is a useful default for women's rings; use WearableSizeGroupMens for men's bands if sized accordingly.
Ethical sourcing certifications: Kimberley Process and RJC
Ethical sourcing is a growing purchase criterion — buyers increasingly filter for conflict-free and responsibly sourced jewelry. AI agents answer "certified conflict-free diamond" and "RJC certified jeweler" queries from hasCertification data, not marketing copy.
Two certifications cover the main ethical sourcing signals:
certificationBody.name to "Kimberley Process Certification Scheme" and certificationBody.url to "https://www.kimberleyprocess.com". The name on the Certification should be "Conflict-Free Diamond Certification". For individual stones, this is inherited from the supplier; express it as a property-level certification, not a product-level identifier.Organization entity in theme.liquid, not on the product-level Product type. Set certificationBody.name to "Responsible Jewellery Council" and url to "https://www.responsiblejewellery.com". AI agents querying "RJC certified jeweler" match this Organization-level certification, not product-level markup.Product-level ethical sourcing can also be expressed through sustainabilityFeature on Product:
{
"@type": "Product",
"sustainabilityFeature": [
{
"@type": "DefinedTerm",
"name": "Conflict-Free Diamond",
"description": "Sourced through the Kimberley Process Certification Scheme, conflict-free guarantee from our supplier network"
},
{
"@type": "DefinedTerm",
"name": "Recycled Metal Setting",
"description": "Ring setting fabricated from post-consumer recycled gold — verified by our refiner's chain of custody documentation"
}
]
}
Dawn Liquid snippet: jewelry.* metafield namespace
The cleanest implementation architecture for Shopify jewelry stores stores gemstone quality attributes in a jewelry.* metafield namespace, then reads those values in a product JSON-LD snippet added to theme/snippets/product-jsonld.liquid.
Recommended metafield definitions (Settings → Custom data → Products):
| Namespace.key | Type | Used for |
|---|---|---|
| jewelry.stone_type | Single line text | "Diamond", "Sapphire", "Emerald", "Ruby", etc. |
| jewelry.origin | Single line text | "Natural" or "Lab-Grown" |
| jewelry.growth_method | Single line text | "CVD" or "HPHT" (lab-grown only) |
| jewelry.cut_grade | Single line text | "Excellent", "Very Good", "Good", "Fair", "Poor" |
| jewelry.color_grade | Single line text | "D" through "Z", or fancy color name |
| jewelry.clarity_grade | Single line text | "FL", "IF", "VVS1", "VVS2", "VS1", "VS2", "SI1", "SI2", "I1", "I2", "I3" |
| jewelry.carat_weight | Number (decimal) | 1.02, 0.75, etc. |
| jewelry.shape | Single line text | "Round Brilliant", "Oval", "Cushion", etc. |
| jewelry.cert_lab | Single line text | "GIA", "IGI", "AGS" |
| jewelry.cert_number | Single line text | Grading report number |
| jewelry.metal_purity | Single line text | "14K Gold", "Sterling Silver", "Platinum 950" |
| jewelry.metal_fineness | Number (decimal) | 0.585, 0.925, 0.950 |
| jewelry.hallmark_stamp | Single line text | "585", "925", "Pt950" |
| jewelry.conflict_free | Boolean | Kimberley Process sourced |
| jewelry.recycled_metal | Boolean | Post-consumer recycled metal setting |
Then in your product JSON-LD snippet:
{% comment %} product-jsonld.liquid — jewelry section {% endcomment %}
{% assign jw = product.metafields.jewelry %}
{% if jw.stone_type != blank %}
"additionalProperty": [
{% if jw.stone_type != blank %}
{ "@type": "PropertyValue", "name": "Stone Type", "value": {{ jw.stone_type | json }} },
{% endif %}
{% if jw.origin != blank %}
{ "@type": "PropertyValue", "name": "Origin", "value": {{ jw.origin | json }} },
{% endif %}
{% if jw.growth_method != blank %}
{ "@type": "PropertyValue", "name": "Growth Method", "value": {{ jw.growth_method | json }} },
{% endif %}
{% if jw.cut_grade != blank %}
{ "@type": "PropertyValue", "name": "Cut Grade", "value": {{ jw.cut_grade | json }} },
{% endif %}
{% if jw.color_grade != blank %}
{ "@type": "PropertyValue", "name": "Diamond Color", "value": {{ jw.color_grade | json }} },
{% endif %}
{% if jw.clarity_grade != blank %}
{ "@type": "PropertyValue", "name": "Diamond Clarity", "value": {{ jw.clarity_grade | json }} },
{% endif %}
{% if jw.carat_weight != blank %}
{ "@type": "PropertyValue", "name": "Carat Weight", "value": {{ jw.carat_weight }}, "unitCode": "OZT" },
{% endif %}
{% if jw.shape != blank %}
{ "@type": "PropertyValue", "name": "Shape", "value": {{ jw.shape | json }} },
{% endif %}
{% if jw.metal_purity != blank %}
{ "@type": "PropertyValue", "name": "Metal Purity", "value": {{ jw.metal_purity | json }} },
{% endif %}
{% if jw.metal_fineness != blank %}
{ "@type": "PropertyValue", "name": "Metal Fineness", "value": {{ jw.metal_fineness }} },
{% endif %}
{% if jw.hallmark_stamp != blank %}
{ "@type": "PropertyValue", "name": "Metal Hallmark Stamp", "value": {{ jw.hallmark_stamp | json }} }
{% endif %}
],
{% endif %}
{% if jw.cert_lab != blank and jw.cert_number != blank %}
{% assign cert_lab_lower = jw.cert_lab | downcase %}
{% if cert_lab_lower == "gia" %}
{% assign cert_url = "https://www.gia.edu/report-check?reportno=" | append: jw.cert_number %}
{% elsif cert_lab_lower == "igi" %}
{% assign cert_url = "https://www.igi.org/verify-your-report/?r=" | append: jw.cert_number %}
{% else %}
{% assign cert_url = "" %}
{% endif %}
"hasCertification": {
"@type": "Certification",
"name": {{ jw.cert_lab | append: " Diamond Grading Report" | json }},
"certificationIdentification": {{ jw.cert_number | json }},
"url": {{ cert_url | json }},
"certificationBody": {
"@type": "Organization",
"name": {{ jw.cert_lab | json }}
}
}{% if jw.conflict_free %},
"sustainabilityFeature": {
"@type": "DefinedTerm",
"name": "Conflict-Free Diamond",
"description": "Sourced through the Kimberley Process Certification Scheme"
}
{% endif %}
{% endif %}
Five common mistakes
Writing "this G-color VS1 clarity Excellent cut 1.02ct round brilliant diamond" in your product description is useful for human readers but invisible to AI agent filter queries. Filters operate on structured additionalProperty values, not NLP extraction of unstructured text. The same description with zero additionalProperty blocks will not match "G color VS1 under $8,000" queries from any AI shopping agent.
Common substitutions that break filter matching: "Flawless" instead of "FL", "Very Very Slightly Included 1" instead of "VVS1", "Colorless" instead of "D", "Ideal" instead of "Excellent". AI agents trained on jewelry data expect the GIA abbreviation forms. If your POS or PIM system stores the full names, add a Liquid translation map to convert them to GIA abbreviations before outputting JSON-LD.
Adding hasCertification with just certificationBody and no certificationIdentification (the report number) is significantly less valuable than the full form. AI agents cannot answer "find GIA certified diamonds" without the certificationBody, but they cannot answer "verify this specific diamond" without the certificationIdentification. Always include the report number — it is the most unique identifier your diamond has.
Stores that carry both natural and lab-grown diamonds but use identical JSON-LD for both create a filter crisis: AI agents cannot separate the inventory. Worse, a store carrying only lab-grown diamonds with no Origin: Lab-Grown additionalProperty will occasionally be served for "natural diamond" queries and excluded from "lab diamond" queries — the opposite of what the buyer wanted. Always set Origin on every gemstone product.
Outputting "value": "1.02ct" or "value": "1.02 carats" instead of "value": 1.02 (a plain number) prevents numeric comparison operations. An AI agent filtering "diamonds between 1.0 and 1.5 carats" needs a numeric value to perform the range check. The unit is communicated separately via unitCode — the value itself must be a JSON number, not a string with a unit suffix.
FAQ
additionalProperty for gemstone quality attributes like cut, color, clarity, or carat weight. It also outputs no hasCertification for GIA grading reports. For a jewelry store, this means AI shopping agents filtering queries like "round diamond 1ct VVS1 Excellent cut under $8,000" find nothing to match against in your product structured data, regardless of how well your product descriptions are written."2141438153"). Store the full numeric string as the certificationIdentification value — do not add spaces, dashes, or a "GIA" prefix. The certificationBody identifies which lab issued it; the certificationIdentification is the report number alone. For IGI reports, numbers follow a similar pattern but the verification URL base is different: https://www.igi.org/verify-your-report/?r= + the number.additionalProperty values: first, set Origin to "Natural" or "Lab-Grown"; second, for lab-grown stones, set Growth Method to "CVD" or "HPHT". These properties allow AI agents to match origin-filtered queries correctly and disambiguate your lab-grown inventory from natural stones in comparison responses. Also use IGI as the certificationBody for lab-grown stones (IGI is the predominant grading lab for lab-grown diamonds) and GIA for natural stones.ProductGroup entity carries variesBy: size to tell AI agents that size is a filterable dimension. Each individual Product variant carries its own size: SizeSpecification with the actual numeric size value ("name": "6", "name": "6.5", etc.) using sizeSystem: WearableSizeSystemUS. Do not embed ring size as a variant title string — title substring parsing is not how AI agents resolve size filter queries.additionalProperty coverage of the 4Cs, metal purity, and hasCertification for grading laboratory reports. Products missing these signals are flagged in the gemstone quality signal report with a per-property breakdown. CatalogScan also flags common mistakes including carat weight output as a string instead of a numeric value, missing certificationIdentification on hasCertification blocks, and identical JSON-LD for lab-grown and natural diamonds in mixed-inventory stores.Is your jewelry catalog visible to AI shopping agents?
CatalogScan scans your Shopify store's JSON-LD and flags every missing 4C, GIA certificate gap, and metal purity hole — product by product.
Free scan — no signup More guides