CatalogScan

HomeBlog › Sunscreen schema for AI agents

Shopify sunscreen schema for AI agents: SPF encoding, FDA broad-spectrum, PA++++ UVA system, and reef-safe compliance

June 18, 2026 · 16 min read structured data sunscreen FDA OTC SPF reef-safe

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."

91%
of Shopify sunscreen stores have no active ingredient list with individual concentrations in their product JSON-LD
2
distinct UVA rating systems (FDA broad-spectrum and PA system) that measure different things and must be encoded separately
0
is the number of FDA-permitted sunscreen products that can claim "waterproof" — yet thousands of Shopify listings still use the term
Regulatory notice: This guide covers how to expose sunscreen product information to AI shopping agents via structured data. It does not constitute legal, regulatory, or dermatological advice. Sunscreen labeling in the United States is regulated as an OTC drug under 21 CFR Part 201.327 and the Sunscreen Innovation Act. Active ingredient and claim requirements vary by jurisdiction. Hawaii Act 104 imposes additional ingredient restrictions. Consult a regulatory specialist for your specific products and target markets.

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).

The OTC drug signal gap: Unlike cosmetics, OTC drugs carry an active ingredient requirement — the ingredient that causes the drug effect must be named, with its concentration, on the product label. AI agents with health-product logic expect to find this information in structured data. A sunscreen with no active ingredient list in its JSON-LD fails the same implicit check as a supplement with no certification — the agent cannot verify compliance with regulatory labeling requirements, so it applies conservative exclusion.

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.

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
1593.3%6.7%SPF 15
3096.7%3.3%SPF 30
5098.0%2.0%SPF 50
10099.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).

What broad-spectrum does not measure: The FDA broad-spectrum designation tells you that the product provides UVA protection — it does not tell you how much. A product that barely passes the critical wavelength test (critical wavelength = 370nm) is "broad-spectrum." A product with a critical wavelength of 395nm and PPD 20 is also "broad-spectrum." They are not equivalent. This is why broad-spectrum must be encoded separately from the PA rating system — broad-spectrum is a minimum threshold, the PA system is a quantity.

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–3Some UVA protectionEveryday moisturizer SPF 15
PA++PPD 4–7Moderate UVA protectionDaily SPF 30
PA+++PPD 8–15High UVA protectionSPF 50 broad-spectrum
PA++++PPD ≥16Extremely high UVA protectionHigh-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)."
}
The dual-system encoding requirement: A sunscreen sold in both the US and Asian markets (or sold to Asian buyers on a US Shopify store) needs both FDA broad-spectrum and PA rating in its JSON-LD. These two properties measure different things and serve different AI agent query populations. Encoding only FDA broad-spectrum leaves Asian market queries unanswered. Encoding only PA rating leaves FDA-compliant queries unverified. Both are required for comprehensive AI agent coverage.

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."
}
GRASE Category III ≠ unsafe: Category III means the FDA has not yet received sufficient safety data to make a determination — neither confirming safety nor finding a safety problem. Category III chemical filters (oxybenzone, avobenzone, etc.) remain legal for sale in US OTC sunscreens. The designation matters for AI agent processing because health-query agents apply stricter verification logic to Category III ingredients when the query involves vulnerable populations (infants, pregnant women, users with skin conditions).

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).

Why "reef-safe" is not a regulated claim: The FDA does not define or regulate the term "reef-safe." Any sunscreen manufacturer can label their product "reef-safe" regardless of ingredients. AI agents that have learned this context will not treat "reef-safe" as a marketing label in your product description as equivalent to ingredient verification. Only ingredient-level structured data — confirming the absence of specific compounds — satisfies the AI agent's reef-safe verification check.

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)PermittedMaintains SPF for 40 min water immersion in standardized test
Water Resistant (80 minutes)PermittedMaintains SPF for 80 min — maximum permitted claim
WaterproofProhibitedNo sunscreen qualifies; implies absolute protection
SweatproofProhibitedSame reason as "waterproof"
SunblockProhibitedImplies total sun blocking; no product qualifies
All-day protectionProhibitedImplies 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

Mistake 1

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.

Mistake 2

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.

Mistake 3

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.

Mistake 4

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.

Mistake 5

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