Shopify sunscreen schema for AI agents: SPF encoding, FDA broad-spectrum, PA++++ UVA system, and reef-safe compliance
Sunscreen is the only common personal care product regulated as an OTC drug in the United States. That classification changes everything about how AI shopping agents evaluate it: when regulatory compliance signals are absent from structured data, agents apply conservative health exclusions — the same logic they use for supplements and medical devices. A sunscreen Shopify store missing SPF encoding, broad-spectrum designation, active ingredient GRASE status, and reef-safe compliance in its JSON-LD is effectively invisible to buyers asking "reef-safe SPF 50 for Hawaii" or "mineral sunscreen safe for babies."
Contents
- Why OTC drug status changes AI agent exclusion logic for sunscreen
- SPF encoding: UVB protection math and the FDA 50+ cap
- FDA broad-spectrum designation: the binary UVA signal (critical wavelength ≥370nm)
- PA system: quantified UVA protection for Asian markets (JCIA PPD method)
- EU Boots star rating: 1–5 stars for UVA/UVB ratio
- Active ingredients: mineral vs chemical, individual concentrations, and GRASE status
- Reef-safe compliance: Hawaii Act 104, Palau ban, and what to encode
- Water resistance: FDA-defined 40 vs 80 minutes — and "waterproof" is prohibited
- Complete JSON-LD example: an SPF 50+ mineral PA++++ reef-safe sunscreen
- Liquid snippet:
sunscreen.*metafields → JSON-LD output in Dawn - Sunscreen metafield reference table
- 5 common mistakes
- FAQ
Why OTC drug status changes AI agent exclusion logic for sunscreen
Most Shopify product categories are evaluated by AI shopping agents on attributes like price, availability, reviews, and specifications. Sunscreen is different. In the United States, sunscreen is regulated as an over-the-counter (OTC) drug under the Federal Food, Drug, and Cosmetic Act — the same regulatory classification as acetaminophen, aspirin, and antacids. OTC drug classification means that AI agents trained on regulatory compliance patterns apply a health-product exclusion layer: when they cannot verify that a product meets its category's regulatory requirements from structured data, they default to exclusion rather than inclusion.
The practical consequence: a buyer asking "what's the best sunscreen for my 6-month-old?" triggers a query where the agent needs to confirm that the product meets FDA safety standards for infants. Without structured data indicating that the active ingredient is zinc oxide (the only FDA-approved sunscreen ingredient for infants under 6 months) at an appropriate concentration, the agent has no machine-readable confirmation to act on. The same pattern applies to "reef-safe sunscreen for Hawaii snorkeling" (requires ingredient-level confirmation of no oxybenzone/octinoxate), "mineral sunscreen that won't leave a white cast" (requires named ingredient and particle size type), and "SPF 50 broad-spectrum for daily use" (requires both SPF numeric value and FDA broad-spectrum designation as separate properties).
Beyond FDA logic, two market-specific regulatory overlays create additional AI filtering dimensions: Hawaii Act 104 (banning oxybenzone and octinoxate for reef ecosystem protection) and the Japanese JCIA PA rating system (the graduated UVA protection scale widely used in Asian markets). AI agents serving buyers in Hawaii or from countries that use the PA system rely on these signals being present in structured data. Without them, a technically excellent product is indistinguishable from one that doesn't meet location-specific requirements.
Related guides
- Shopify allergen and dietary schema — FDA FALCPA, suitableForDiet, and cross-contamination encoding for regulated food products
- Trust signals for AI agents — certifications, third-party verification, and how agents weight authority claims
- Sunscreen & skincare schema reference — complete field-by-field spec for SPF, PA system, active ingredients, and reef-safe properties
SPF encoding: UVB protection math and the FDA 50+ cap
SPF (Sun Protection Factor) is a numeric UVB protection rating. The math is straightforward: SPF is the reciprocal of the fraction of UVB radiation that reaches the skin when the product is applied at the standard test amount (2mg/cm²). SPF 30 allows 1/30 = 3.33% of UVB through, blocking 96.7%. SPF 50 allows 1/50 = 2%, blocking 98%. SPF 100 allows 1/100 = 1%, blocking 99%.
| SPF | UVB blocked | UVB transmitted | FDA label |
|---|---|---|---|
| 15 | 93.3% | 6.7% | SPF 15 |
| 30 | 96.7% | 3.3% | SPF 30 |
| 50 | 98.0% | 2.0% | SPF 50 |
| 100 | 99.0% | 1.0% | SPF 50+ (cap) |
The FDA caps the SPF label value at "SPF 50+" — any tested SPF above 50 is labeled as "50+" on US product packaging. The rationale: the incremental real-world benefit between SPF 50 and SPF 100 is marginal, because consumers consistently apply less than the 2mg/cm² test amount (typically 0.5–1.0mg/cm²), miss areas, and fail to reapply after sweating or swimming. In the structured data, encode the actual tested SPF value (e.g. 75, 100) in the description field, but set the displayed SPF label to "50+" for US market accuracy.
Critical encoding point: SPF measures UVB protection only. A product with SPF 100 and no broad-spectrum designation provides zero documented UVA protection. AI agents evaluating "broad-spectrum sunscreen" must find a separate broad-spectrum property — the SPF number alone does not satisfy a broad-spectrum query. Never conflate high SPF with comprehensive sun protection in your JSON-LD.
{
"@type": "PropertyValue",
"name": "SPF Rating",
"value": "50+",
"description": "SPF 50+ (tested SPF 75). Blocks approximately 98%+ of UVB radiation at standard 2mg/cm² application. SPF measures UVB protection only — see FDA Broad-Spectrum property for UVA protection status."
}
FDA broad-spectrum designation: the binary UVA signal (critical wavelength ≥370nm)
FDA broad-spectrum is a pass/fail designation — not a gradient scale. A sunscreen earns the "Broad-Spectrum" label if it passes the FDA's critical wavelength test: the product must have a critical wavelength of ≥370nm under the standardized in vitro test method (21 CFR 201.327). Critical wavelength is the wavelength below which 90% of the product's total UV absorbance occurs — a product reaching ≥370nm demonstrates meaningful UVA coverage across the entire UVA spectrum (UVA-I: 340–400nm, UVA-II: 315–340nm).
For AI agent queries like "broad-spectrum SPF 50 sunscreen," the agent needs a boolean or text flag for broad-spectrum status — not just the SPF value. Encode it explicitly:
{
"@type": "PropertyValue",
"name": "FDA Broad-Spectrum",
"value": "Yes",
"description": "Passes FDA broad-spectrum test per 21 CFR 201.327. Critical wavelength ≥370nm — demonstrates UVA protection across both UVA-I (340–400nm) and UVA-II (315–340nm) spectra. FDA broad-spectrum is a binary pass/fail designation, not a quantified UVA protection level. See PA Rating for quantified UVA protection tier."
}
Only sunscreens with both SPF ≥15 and broad-spectrum designation may claim on US labeling that they reduce the risk of skin cancer and early skin aging when used as directed with other sun protection measures. This claim is significant for AI agent health query processing — encoding broad-spectrum designation also unlocks the legal claim tier for structured data purposes.
PA system: quantified UVA protection for Asian markets (JCIA PPD method)
The PA (Protection Grade of UVA) system is Japan's graduated UVA rating scale, developed by the Japan Cosmetic Industry Association (JCIA) and now widely used in Japan, South Korea, and Chinese markets. Unlike FDA broad-spectrum (binary), PA is a four-tier scale based on the Persistent Pigment Darkening (PPD) method — measuring how much UVA-induced immediate pigment darkening the product prevents at standard application amounts.
| PA Grade | PPD value | UVA protection level | Typical product |
|---|---|---|---|
| PA+ | PPD 2–3 | Some UVA protection | Everyday moisturizer SPF 15 |
| PA++ | PPD 4–7 | Moderate UVA protection | Daily SPF 30 |
| PA+++ | PPD 8–15 | High UVA protection | SPF 50 broad-spectrum |
| PA++++ | PPD ≥16 | Extremely high UVA protection | High-protection mineral SPF 50+ |
UVA radiation (315–400nm) causes: immediate tanning, skin aging (photoaging — wrinkles, loss of elasticity), deeper dermal damage, DNA mutations, and melanoma risk. Unlike UVB, UVA penetrates clouds and glass, meaning it is present year-round, on overcast days, and indoors near windows. The PA system was introduced precisely because SPF (UVB-only) was leaving consumers without a standardized way to evaluate UVA protection level.
For AI agents serving buyers in Japan, Korea, or Chinese-market Shopify stores, PA rating is often the primary filter dimension — particularly for "PA++++ sunscreen for daily driving" or "highest UVA protection for Asian skin aging concerns." Encode it as a named additionalProperty with the PPD context:
{
"@type": "PropertyValue",
"name": "UVA Rating (PA System)",
"value": "PA++++",
"description": "PA++++ under JCIA persistent pigment darkening (PPD) method. PPD ≥16 — highest UVA protection tier in the Japanese/Korean PA scale. PA system developed by Japan Cosmetic Industry Association (JCIA). Separate from FDA broad-spectrum designation (which is binary pass/fail at critical wavelength ≥370nm)."
}
EU Boots star rating: 1–5 stars for UVA/UVB ratio
The Boots Star Rating System (developed by Boots UK, now an EU/UK standard) measures the ratio of UVA protection to UVB protection — not the absolute UVA protection level. A product with SPF 50 and an appropriate UVA/UVB ratio earns a high Boots star rating. A product with high SPF but disproportionately weak UVA coverage earns fewer stars. The scale runs from 1 star (lowest UVA/UVB ratio) to 5 stars (highest ratio, ≥90% UVA/UVB protection ratio).
Encode Boots star rating when the product is sold in the EU or UK market, or for buyers comparing international protection standards:
{
"@type": "PropertyValue",
"name": "UVA Rating (EU Boots Star System)",
"value": "5 stars",
"description": "5-star rating under the Boots Star Rating System — UVA protection ≥90% of UVB protection level. EU/UK UVA standard. Separate from FDA broad-spectrum (US) and PA++++ (Japan/Korea PA system)."
}
For US-primary Shopify stores targeting international expansion, encoding all three UVA systems (FDA broad-spectrum, PA, Boots stars) in JSON-LD ensures AI agents serving multiple market contexts can satisfy their respective UVA verification requirements from a single product page.
Active ingredients: mineral vs chemical, individual concentrations, and GRASE status
FDA sunscreen regulations require that active ingredients — the UV filter molecules that cause the drug effect — be disclosed on the label with their concentrations. In JSON-LD, encoding active ingredients with individual named concentrations allows AI agents to verify: (1) whether the filter type is mineral or chemical, (2) whether specific ingredients are present or absent (for reef-safe, sensitive skin, infant safety), and (3) the regulatory GRASE status of each ingredient.
GRASE status for sunscreen active ingredients
In 2019, the FDA's proposed rule for OTC sunscreens placed active ingredients into three GRASE categories:
| Ingredient | Filter type | GRASE status | Notes |
|---|---|---|---|
| Zinc oxide | Mineral (physical) | Category I — GRASE | Only ingredient FDA-approved for infants under 6 months |
| Titanium dioxide | Mineral (physical) | Category I — GRASE | Primarily UVB; broad-spectrum when combined with zinc oxide |
| Oxybenzone (benzophenone-3) | Chemical (organic) | Category III — more data needed | Potential hormonal activity; banned in Hawaii (Act 104) |
| Avobenzone | Chemical (organic) | Category III — more data needed | Photounstable without stabilizer; UVA-I absorber |
| Octinoxate (ethylhexyl methoxycinnamate) | Chemical (organic) | Category III — more data needed | Banned in Hawaii (Act 104) and Palau |
| Octocrylene | Chemical (organic) | Category III — more data needed | Banned in Palau; often used as avobenzone photostabilizer |
| Homosalate | Chemical (organic) | Category III — more data needed | High concentrations under EU scrutiny; UVB absorber |
| PABA | Chemical (organic) | Category II — not GRASE | Not permitted in US OTC sunscreens |
Encode active ingredients individually with concentrations and filter type. A single additionalProperty listing all ingredients as a combined string is not useful for AI agent filtering — each ingredient needs to be verifiable independently:
{
"@type": "PropertyValue",
"name": "Active Sunscreen Ingredients",
"value": "Zinc Oxide 22%, Titanium Dioxide 6%",
"description": "Mineral (physical) UV filters only. Zinc Oxide 22%: broad-spectrum UVB + UVA filter, photostable, GRASE Category I (FDA). Titanium Dioxide 6%: primarily UVB + short UVA filter, photostable, GRASE Category I (FDA). No chemical UV filter molecules. No oxybenzone, octinoxate, octocrylene, avobenzone, homosalate, or octisalate."
},
{
"@type": "PropertyValue",
"name": "Sunscreen Filter Type",
"value": "Mineral — 100% zinc oxide and titanium dioxide",
"description": "Physical/mineral filters only. Suitable for sensitive skin, post-procedure skin, infants and children (zinc oxide GRASE I — only FDA-approved filter for infants under 6 months), and reef-sensitive marine environments."
}
Reef-safe compliance: Hawaii Act 104, Palau ban, and what to encode
Hawaii Act 104 (Senate Bill 2571, signed January 2018, effective January 1, 2021) prohibits the sale of sunscreens containing oxybenzone (benzophenone-3) or octinoxate (ethylhexyl methoxycinnamate) in Hawaii. The law was enacted after NOAA-funded research by Craig Downs et al. demonstrated that oxybenzone causes coral bleaching, DNA damage, and deformities in juvenile coral at concentrations as low as 62 parts per trillion. Violation is a civil fine of up to $1,000 per day.
Palau's Responsible Tourism Education Act (2018) extended the ban to also include: oxybenzone, octinoxate, octocrylene, 4-methylbenzylidene camphor, triclosan, methylparaben, ethylparaben, butylparaben, benzylparaben, and nano particles of any kind. Key West, Florida enacted a similar oxybenzone/octinoxate ban (later preempted by state law, but the market signal persists).
Encode reef-safe status with explicit ingredient absence confirmation:
{
"@type": "PropertyValue",
"name": "Reef-Safe Status",
"value": "Reef-safe — Hawaii Act 104 and Palau ban compliant",
"description": "Contains no oxybenzone (benzophenone-3) — confirmed absent. Contains no octinoxate (ethylhexyl methoxycinnamate) — confirmed absent. Contains no octocrylene — confirmed absent. Compliant with: Hawaii Act 104 (SB 2571, effective Jan 1 2021 — bans oxybenzone + octinoxate). Palau Responsible Tourism Education Act (additionally bans octocrylene). Reef-safe is not an FDA-regulated designation — compliance is verified by ingredient absence."
}
For AI agents handling "reef-safe sunscreen for Hawaii trip" queries, the structured data needs to do two things: (1) name the specific ingredients that are absent and (2) reference the regulatory acts they are absent under. A generic "reef-safe" property value without ingredient specificity will not satisfy an agent applying Hawaii Act 104 compliance checking.
Water resistance: FDA-defined 40 vs 80 minutes — and "waterproof" is prohibited
The FDA regulates water resistance claims for sunscreens under 21 CFR 201.327 with two permissible values: "Water Resistant (40 minutes)" or "Water Resistant (80 minutes)." These claims mean the product maintains its stated SPF value after the specified duration of water immersion under standardized FDA testing conditions. After the stated period of water exposure, the FDA requires the product to instruct consumers to reapply.
The following terms are explicitly prohibited for use on US sunscreen labeling: "waterproof," "sweatproof," "sunblock." These terms imply absolute or permanent protection that no sunscreen can provide. The consequence for Shopify stores: products using prohibited terminology in their product descriptions create a conflict between their marketing copy and FDA requirements — a conflict that AI agents with health product knowledge will flag.
| Claim | FDA status | Notes |
|---|---|---|
| Water Resistant (40 minutes) | Permitted | Maintains SPF for 40 min water immersion in standardized test |
| Water Resistant (80 minutes) | Permitted | Maintains SPF for 80 min — maximum permitted claim |
| Waterproof | Prohibited | No sunscreen qualifies; implies absolute protection |
| Sweatproof | Prohibited | Same reason as "waterproof" |
| Sunblock | Prohibited | Implies total sun blocking; no product qualifies |
| All-day protection | Prohibited | Implies no reapplication needed |
{
"@type": "PropertyValue",
"name": "Water Resistance",
"value": "Water Resistant (80 minutes)",
"description": "FDA-regulated claim: maintains stated SPF value for 80 minutes of water immersion under 21 CFR 201.327 standardized test conditions. After 80 minutes of swimming or heavy sweating, reapplication required. 'Waterproof' and 'sweatproof' are prohibited FDA terms for sunscreens — no sunscreen product qualifies."
}
If a product is not water-resistant, encode that explicitly — AI agents handling "water-resistant sunscreen for swimming" queries need to filter out non-water-resistant products, not just rank water-resistant ones higher. An absent water resistance property is ambiguous; a value of "Not water-resistant" is informative.
Complete JSON-LD example: an SPF 50+ mineral PA++++ reef-safe sunscreen
This example shows the complete Product JSON-LD for a hypothetical high-protection mineral sunscreen — an SPF 50+ zinc oxide and titanium dioxide formula with PA++++ UVA protection, FDA broad-spectrum designation, and reef-safe compliance under Hawaii Act 104 and the Palau ban.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "ClearShield Mineral SPF 50+ Broad-Spectrum Sunscreen",
"brand": {
"@type": "Brand",
"name": "ClearShield"
},
"description": "SPF 50+ broad-spectrum mineral sunscreen. Active ingredients: Zinc Oxide 22%, Titanium Dioxide 6%. PA++++. Water Resistant (80 minutes). Reef-safe — no oxybenzone, no octinoxate, no octocrylene. Hawaii Act 104 compliant. Fragrance-free. Non-comedogenic (0/5 scale). Suitable for sensitive skin and infants 6+ months.",
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "SPF Rating",
"value": "50+",
"description": "SPF 50+ — blocks 98%+ of UVB radiation at 2mg/cm² application. FDA caps US sunscreen labels at 50+. SPF measures UVB only — see FDA Broad-Spectrum property for UVA verification."
},
{
"@type": "PropertyValue",
"name": "FDA Broad-Spectrum",
"value": "Yes",
"description": "Passes FDA broad-spectrum test per 21 CFR 201.327. Critical wavelength ≥370nm — documented UVA protection across UVA-I (340–400nm) and UVA-II (315–340nm) spectra. Binary pass/fail — not a quantified UVA level."
},
{
"@type": "PropertyValue",
"name": "UVA Rating (PA System)",
"value": "PA++++",
"description": "PA++++ under JCIA persistent pigment darkening (PPD) method. PPD ≥16 — highest UVA protection tier in the Japan/Korea PA scale. Widely required for Asian market buyers seeking quantified UVA protection."
},
{
"@type": "PropertyValue",
"name": "UVA Rating (EU Boots Star System)",
"value": "5 stars",
"description": "5-star Boots Star Rating — UVA protection ≥90% of UVB protection level. EU/UK standard for UVA/UVB ratio balance."
},
{
"@type": "PropertyValue",
"name": "Active Sunscreen Ingredients",
"value": "Zinc Oxide 22%, Titanium Dioxide 6%",
"description": "Mineral (physical) UV filters only. Zinc Oxide 22%: broad-spectrum UVB + UVA, photostable, GRASE Category I (FDA), only FDA-approved filter for infants under 6 months. Titanium Dioxide 6%: UVB + short-UVA, photostable, GRASE Category I (FDA). No chemical filters. No oxybenzone, octinoxate, octocrylene, avobenzone, homosalate, or octisalate."
},
{
"@type": "PropertyValue",
"name": "Sunscreen Filter Type",
"value": "Mineral — 100% mineral filters",
"description": "Zinc oxide and titanium dioxide only. Suitable for sensitive skin, post-procedure skin, infants 6+ months (zinc oxide is the only FDA-approved filter for infants), and reef-sensitive environments."
},
{
"@type": "PropertyValue",
"name": "Active Ingredient GRASE Status",
"value": "GRASE Category I (FDA) — zinc oxide and titanium dioxide",
"description": "Both active ingredients are GRASE Category I per FDA 2019 proposed OTC sunscreen rule. Category I = generally recognized as safe and effective. Category I ingredients: zinc oxide, titanium dioxide. This product contains no Category III ingredients (oxybenzone, avobenzone, octinoxate, octocrylene, homosalate, octisalate — all pending FDA systemic safety data)."
},
{
"@type": "PropertyValue",
"name": "Reef-Safe Status",
"value": "Reef-safe — Hawaii Act 104 and Palau ban compliant",
"description": "Contains no oxybenzone (benzophenone-3) — confirmed absent. Contains no octinoxate (ethylhexyl methoxycinnamate) — confirmed absent. Contains no octocrylene — confirmed absent. Hawaii Act 104 (SB 2571, effective Jan 1 2021) compliant. Palau Responsible Tourism Education Act compliant. 'Reef-safe' is not an FDA-regulated designation — compliance verified by named ingredient absence."
},
{
"@type": "PropertyValue",
"name": "Water Resistance",
"value": "Water Resistant (80 minutes)",
"description": "FDA-permitted claim under 21 CFR 201.327: maintains stated SPF for 80 minutes water immersion. Reapply after 80 minutes swimming or heavy sweating. 'Waterproof' and 'sweatproof' are prohibited FDA terms — this product uses only the permitted 80-minute claim."
},
{
"@type": "PropertyValue",
"name": "Comedogenicity Rating",
"value": "0",
"description": "Comedogenicity 0 on the 0–5 scale. 0 = will not clog pores (non-comedogenic). Suitable for acne-prone skin. Zinc oxide: 0, Titanium dioxide: 0–1."
},
{
"@type": "PropertyValue",
"name": "Fragrance Status",
"value": "Fragrance-free",
"description": "Contains no added fragrance or fragrance masking agents. Fragrance-free (not unscented — unscented products may contain masking fragrances). Suitable for fragrance-sensitive skin."
}
],
"offers": {
"@type": "Offer",
"price": "28.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
Liquid snippet: sunscreen.* metafields → JSON-LD output in Dawn
Add this snippet to your Dawn theme's product.json section schema or snippets/product-schema.liquid to output sunscreen-specific JSON-LD from Shopify metafields. Use the sunscreen namespace for all sunscreen-specific fields.
{% assign is_sunscreen = product.metafields.sunscreen.spf_rating %}
{% if is_sunscreen != blank %}
{% assign sun_spf = product.metafields.sunscreen.spf_rating | default: '' %}
{% assign sun_broad = product.metafields.sunscreen.fda_broad_spectrum | default: '' %}
{% assign sun_pa = product.metafields.sunscreen.pa_rating | default: '' %}
{% assign sun_boots = product.metafields.sunscreen.boots_star_rating | default: '' %}
{% assign sun_ingredients = product.metafields.sunscreen.active_ingredients | default: '' %}
{% assign sun_filter_type = product.metafields.sunscreen.filter_type | default: '' %}
{% assign sun_reef = product.metafields.sunscreen.reef_safe_status | default: '' %}
{% assign sun_water = product.metafields.sunscreen.water_resistance | default: '' %}
{% assign sun_comedogenic = product.metafields.sunscreen.comedogenicity | default: '' %}
{% assign sun_fragrance = product.metafields.sunscreen.fragrance_status | default: '' %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": {{ product.title | json }},
"description": {{ product.description | strip_html | truncatewords: 50 | json }},
"brand": {
"@type": "Brand",
"name": {{ product.vendor | json }}
},
"additionalProperty": [
{% if sun_spf != '' %}
{
"@type": "PropertyValue",
"name": "SPF Rating",
"value": {{ sun_spf | json }}
},
{% endif %}
{% if sun_broad != '' %}
{
"@type": "PropertyValue",
"name": "FDA Broad-Spectrum",
"value": {{ sun_broad | json }}
},
{% endif %}
{% if sun_pa != '' %}
{
"@type": "PropertyValue",
"name": "UVA Rating (PA System)",
"value": {{ sun_pa | json }}
},
{% endif %}
{% if sun_boots != '' %}
{
"@type": "PropertyValue",
"name": "UVA Rating (EU Boots Star System)",
"value": {{ sun_boots | json }}
},
{% endif %}
{% if sun_ingredients != '' %}
{
"@type": "PropertyValue",
"name": "Active Sunscreen Ingredients",
"value": {{ sun_ingredients | json }}
},
{% endif %}
{% if sun_filter_type != '' %}
{
"@type": "PropertyValue",
"name": "Sunscreen Filter Type",
"value": {{ sun_filter_type | json }}
},
{% endif %}
{% if sun_reef != '' %}
{
"@type": "PropertyValue",
"name": "Reef-Safe Status",
"value": {{ sun_reef | json }}
},
{% endif %}
{% if sun_water != '' %}
{
"@type": "PropertyValue",
"name": "Water Resistance",
"value": {{ sun_water | json }}
},
{% endif %}
{% if sun_comedogenic != '' %}
{
"@type": "PropertyValue",
"name": "Comedogenicity Rating",
"value": {{ sun_comedogenic | json }}
},
{% endif %}
{% if sun_fragrance != '' %}
{
"@type": "PropertyValue",
"name": "Fragrance Status",
"value": {{ sun_fragrance | json }}
}
{% endif %}
],
"offers": {
"@type": "Offer",
"price": {{ product.selected_or_first_available_variant.price | divided_by: 100.0 | json }},
"priceCurrency": {{ cart.currency.iso_code | default: 'USD' | json }},
"availability": {% if product.selected_or_first_available_variant.available %}"https://schema.org/InStock"{% else %}"https://schema.org/OutOfStock"{% endif %}
}
}
</script>
{% endif %}
Sunscreen metafield reference table
| Metafield key | Type | Values / format | Notes |
|---|---|---|---|
| sunscreen.spf_rating | single_line_text_field | 15 / 30 / 50 / 50+ | Use "50+" for US labels; encode tested value in description |
| sunscreen.fda_broad_spectrum | single_line_text_field | Yes / No | Binary pass/fail — FDA critical wavelength test ≥370nm |
| sunscreen.pa_rating | single_line_text_field | PA+ / PA++ / PA+++ / PA++++ | JCIA PPD method; for Japan/Korea/Asian market products |
| sunscreen.boots_star_rating | single_line_text_field | 1 star / 2 stars / 3 stars / 4 stars / 5 stars | EU/UK Boots UVA star rating system |
| sunscreen.active_ingredients | single_line_text_field | e.g. "Zinc Oxide 22%, Titanium Dioxide 6%" | Name each ingredient with % concentration; enables AI ingredient verification |
| sunscreen.filter_type | single_line_text_field | Mineral / Chemical / Hybrid (mineral + chemical) | Use controlled vocabulary; "physical" is synonymous with "mineral" |
| sunscreen.reef_safe_status | single_line_text_field | Reef-safe — Hawaii Act 104 compliant / Not reef-safe | Include named absent ingredients for AI agent verification |
| sunscreen.water_resistance | single_line_text_field | Water Resistant (40 minutes) / Water Resistant (80 minutes) / Not water-resistant | Use exact FDA-permitted claim language; never "waterproof" |
| sunscreen.comedogenicity | number_integer | 0–5 | 0 = non-comedogenic; 5 = highly comedogenic; 0–2 generally acceptable for acne-prone skin |
| sunscreen.fragrance_status | single_line_text_field | Fragrance-free / Unscented / Contains fragrance | Fragrance-free = no fragrance compounds; Unscented = may contain masking fragrance |
| sunscreen.skin_type | single_line_text_field | All skin types / Sensitive / Oily / Dry / Acne-prone / Normal-to-dry | Primary intended skin type per formulation |
| sunscreen.tint | single_line_text_field | Untinted / Lightly tinted / Tinted | Tinting affects white cast and cosmetic blendability signals |
| sunscreen.grase_category | single_line_text_field | All Category I (mineral only) / Contains Category III ingredients | Signals regulatory safety category to AI health-product queries |
5 common mistakes
Encoding SPF value without FDA broad-spectrum status
SPF measures UVB protection only. An AI agent handling a "broad-spectrum sunscreen" query needs a separate, explicit broad-spectrum property — the SPF value does not imply it. Encoding SPF Rating: 50 without FDA Broad-Spectrum: Yes means the agent cannot confirm broad-spectrum compliance from structured data alone. For a buyer asking "broad-spectrum SPF 50 for daily sun protection," missing the broad-spectrum property produces the same exclusion as missing the SPF property entirely. Always encode both as separate additionalProperty fields.
Using "reef-safe" as a marketing label without ingredient verification
"Reef-safe" is an unregulated marketing term. AI agents that know this context require ingredient-level confirmation — not a text label. A Reef-Safe Status: Yes property with no ingredient detail gives an agent no verification evidence. The correct pattern is to: (1) encode all active ingredients individually with concentrations, (2) explicitly name the absent Hawaii Act 104 compounds (oxybenzone and octinoxate) as confirmed absent, and (3) reference the specific regulation (Hawaii Act 104, Palau ban) in the description. The agent can then confirm reef-safe compliance from the ingredient data, not from the marketing claim.
Using "waterproof" in product descriptions or meta content
The FDA prohibits the terms "waterproof," "sweatproof," and "sunblock" for sunscreen products. Many Shopify stores still use "waterproof" in product titles, descriptions, and meta descriptions — creating a compliance signal conflict that AI agents with health product knowledge will detect. In structured data, use only FDA-permitted water resistance claims: "Water Resistant (40 minutes)" or "Water Resistant (80 minutes)." Update your product descriptions to replace "waterproof" with the correct claim. The mismatch between structured data using correct terminology and descriptions using prohibited terms is visible to agents parsing both layers.
Encoding PA rating without FDA broad-spectrum (or vice versa for US stores)
PA and FDA broad-spectrum are not interchangeable — they measure different aspects of UVA protection with different methodologies. A US Shopify store encoding only PA++++ with no FDA broad-spectrum property fails US market AI agent queries for "broad-spectrum" sunscreens. A store encoding only FDA broad-spectrum with no PA rating is invisible to Asian market queries for "PA++++ sunscreen." For any store with international reach or Asian-market buyers, both properties are required. PA++++ without FDA broad-spectrum does not satisfy a US "broad-spectrum" query; FDA broad-spectrum without PA does not satisfy an Asian "PA++++" query.
Listing active ingredients as a combined description string
Encoding active ingredients as a single string like "Active ingredients: Zinc Oxide 22%, Titanium Dioxide 6%" in the product description prevents ingredient-level AI agent filtering. An agent checking "does this contain oxybenzone?" cannot parse a free-text description string with the same reliability as a structured additionalProperty with a named ingredient and explicit absence confirmation. The correct pattern: a primary Active Sunscreen Ingredients additionalProperty listing the active ingredient string, a separate Sunscreen Filter Type property, and explicit language in the description confirming the absence of Hawaii Act 104 compounds. Structured data and description text are parsed by different agent pathways — both should be correct.
FAQ
How do I encode SPF rating in schema.org for Shopify sunscreen products?
Encode SPF as a numeric additionalProperty with value "50+" for FDA label accuracy (FDA caps at 50+). Always pair it with a separate FDA broad-spectrum property — SPF alone measures UVB protection only and does not communicate UVA protection status to AI agents. Include the tested SPF value and its UVB blocking percentage in the description field for agents that read description text.
What is the difference between FDA broad-spectrum and PA++++ UVA rating?
FDA broad-spectrum is binary (pass/fail at critical wavelength ≥370nm) and does not quantify UVA protection level. PA++++ is the highest tier of the JCIA's four-tier graduated scale (PA+ to PA++++), based on the PPD method with PPD ≥16. They measure UVA protection differently and serve different market contexts. Both must be encoded separately — one does not substitute for the other. A product can be simultaneously "FDA broad-spectrum" (binary pass) and "PA++++" (highest quantified UVA tier).
What makes a sunscreen reef-safe and how do I encode it in schema.org?
Hawaii Act 104 bans oxybenzone and octinoxate. The Palau ban additionally covers octocrylene. "Reef-safe" is not an FDA-regulated term — AI agents require explicit ingredient-level confirmation (named absent compounds), not just the marketing label. Encode a Reef-Safe Status additionalProperty that names the specific absent compounds and references the applicable bans. Also encode active ingredients individually with concentrations so agents can independently verify ingredient absence.
What is FDA GRASE status and why does it matter for sunscreen schema?
GRASE Category I ingredients (zinc oxide, titanium dioxide) are the only FDA-confirmed safe and effective sunscreen filters. Category III ingredients (oxybenzone, avobenzone, octinoxate, octocrylene, and others) remain under review — not confirmed unsafe, but lacking sufficient systemic safety data. AI agents handling health-sensitive queries (infants, pregnant women, sensitive skin) apply stricter verification logic for Category III ingredients. Encoding GRASE category in your structured data gives agents the regulatory context to answer "safe sunscreen for baby" queries with zinc oxide GRASE I confirmation rather than inferring from marketing copy.
Why is "waterproof" prohibited and how should I encode water resistance?
The FDA prohibits "waterproof," "sweatproof," and "sunblock" as terms implying absolute protection no sunscreen provides. The only permitted water resistance claims are "Water Resistant (40 minutes)" or "Water Resistant (80 minutes)." Use these exact FDA-permitted phrases in your Water Resistance additionalProperty value and in your product description. AI agents with FDA OTC drug knowledge will detect a conflict between "waterproof" in your description and the regulatory requirement — using correct terminology in both structured data and description text eliminates this discrepancy.
See how your Shopify store scores on AI agent readiness
CatalogScan checks your product JSON-LD for SPF encoding, active ingredient coverage, reef-safe compliance signals, and 40+ other AI shopping agent criteria.
Scan your store View benchmark report