Optimization Guide

Shopify Dietary Supplement Schema — DietarySupplement JSON-LD for Health & Wellness Stores

AI shopping agents answering "magnesium glycinate 400mg capsules", "best prenatal vitamins third trimester", and "NSF certified protein powder for athletes" depend entirely on structured supplement data — not ingredient lists buried in product descriptions. Shopify has no built-in DietarySupplement output, leaving every supplement brand's dosage, ingredient, and demographic signals invisible to AI health and wellness queries.

TL;DR Output two separate JSON-LD blocks on supplement product pages: a standard Product block for commerce signals (offers, reviews, GTIN) and a DietarySupplement block for health signals (activeIngredient, dosageSchedule, targetPopulation, legalDisclaimer, functionalClass). Store supplement metadata in a supplement.* metafield namespace and inject both blocks via Liquid. Every structure/function claim on the page requires the FDA disclaimer in legalDisclaimer.

Why Supplement Brands Are Invisible to AI Health Queries

The dietary supplement category is structurally complex for AI shopping agents. Users ask layered queries: ingredient-specific ("glycine 1000mg sleep supplement"), demographic-targeted ("iron supplements safe for pregnancy"), certification-filtered ("third-party tested creatine monohydrate"), and functional ("adaptogens for stress"), all within a single product type. Answering them requires machine-readable health metadata that no Shopify default template provides.

Shopify's default product JSON-LD outputs a Product type with name, description, price, and availability. The entire health layer — active ingredients, dosing instructions, safety warnings, target demographics, and functional categories — lives in product description text, a Supplement Facts table image, or app-generated HTML. None of it is in structured data. None of it is visible to AI agent crawlers.

Schema.org provides a dedicated DietarySupplement type precisely for this use case. It extends Substance → BioChemEntity → Thing and is designed to carry health-specific signals that the generic Product type cannot represent. The correct implementation pattern uses two separate JSON-LD blocks on the same page: Product for the commerce layer, DietarySupplement for the health layer. Together they give AI agents the complete signal set to confidently include your supplements in filtered health and wellness results.

AI supplement query types requiring structured data

Query type Example query Required DietarySupplement property Without schema
Ingredient-specific "magnesium glycinate 400mg" activeIngredient, dosageSchedule.doseValue Agent cannot confirm ingredient form or dose
Demographic filter "prenatal vitamins first trimester" targetPopulation: "Pregnant women" Supplement excluded from demographic-filtered results
Functional category "best adaptogens for stress and anxiety" functionalClass: "Adaptogen" Product not matched in functional category queries
Dosage question "how many capsules of ashwagandha per day" dosageSchedule with frequency and doseValue Agent cannot answer dosage question; recommends elsewhere
Certification-filtered "NSF certified protein powder for athletes" hasCertification with NSF cert object Certified product excluded from certification filter
Safety-restricted "supplements safe while breastfeeding" safetyConsideration, targetPopulation Agent cannot assess suitability; conservative exclusion

The two-block pattern: Product + DietarySupplement

The DietarySupplement type is not a replacement for the Product type — it is a companion. Commerce properties like offers, aggregateRating, gtin, and brand belong on Product. Health properties like activeIngredient, dosageSchedule, and legalDisclaimer belong on DietarySupplement. Both blocks should appear in the <head> as separate <script type="application/ld+json"> tags on every supplement product page.

Product-only (missing health signals)
{
  "@type": "Product",
  "name": "Magnesium Glycinate 400mg",
  "description": "Take 2 capsules daily.
    Supports relaxation and sleep.",
  // No activeIngredient
  // No dosageSchedule
  // No targetPopulation
  // AI: ingredient/dose unknown
}
Product + DietarySupplement (complete)
{
  "@type": "Product",
  "name": "Magnesium Glycinate 400mg",
  "offers": { ... }
}
// — second block —
{
  "@type": "DietarySupplement",
  "name": "Magnesium Glycinate 400mg",
  "activeIngredient": "Magnesium glycinate",
  "dosageSchedule": {
    "doseValue": "400",
    "doseUnit": "mg",
    "frequency": "Once daily"
  }
}

DietarySupplement Properties Reference

The following properties are available on the DietarySupplement type. The most impactful for AI agent query matching are activeIngredient, dosageSchedule, targetPopulation, and functionalClass — implement these before the others.

Property Type Description Example value
activeIngredient Text The primary active ingredient(s) using INCI or INN name, not a marketing name "Magnesium glycinate"
nonProprietaryName Text Generic/INN/INCI name for the ingredient — use when activeIngredient is a branded name "Magnesium bis(glycinate)"
isProprietary Boolean true for branded proprietary formulas; false for generic ingredient names false
legalDisclaimer Text FDA structure/function claim disclaimer — required whenever the page uses claim language Full FDA disclaimer text
dosageSchedule DoseSchedule Recommended use instructions — how much, how often, with what See DoseSchedule table below
maximumIntake DoseSchedule Maximum safe daily intake — separate from recommended dose doseValue: "800", doseUnit: "mg"
mechanismOfAction Text How the ingredient works at a biological level "Acts as a cofactor for over 300 enzymatic reactions"
targetPopulation Text Who the supplement is intended for — critical for demographic filter queries "Adults 18 and over", "Athletes", "Pregnant women"
safetyConsideration Text Warning text about contraindications and special populations "Consult a physician before use if pregnant or nursing"
functionalClass Text Supplement category — used for functional-category queries "Mineral", "Adaptogen", "Probiotic", "Nootropic"

DoseSchedule properties

Both dosageSchedule and maximumIntake use the DoseSchedule type. This structured object lets AI agents answer direct dosage questions ("how much ashwagandha should I take") rather than deferring to a generic recommendation:

Property Type Description Example
doseUnit Text Unit of measurement for the dose "mg", "g", "IU", "capsules", "scoops"
doseValue Text Numeric quantity per serving "400", "2000", "1"
frequency Text Dosing frequency and timing instructions "Once daily with food", "Twice daily with meals"
targetPopulation Text Who this specific dose applies to (if population-specific) "Adults", "Athletes during training"

Complete JSON-LD Example: Magnesium Glycinate Supplement

The following example shows both JSON-LD blocks for a realistic magnesium supplement product. The Product block carries all commerce signals; the DietarySupplement block carries all health signals. Both blocks reference the same product by name and URL.

<!-- Block 1: Product (commerce signals) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Magnesium Glycinate 400mg — 120 Capsules",
  "description": "High-absorption magnesium glycinate chelate. Supports muscle relaxation, restful sleep, and nervous system function. Third-party tested. Supports relaxation and sleep health.*",
  "url": "https://example.com/products/magnesium-glycinate-400mg",
  "sku": "MAG-GLY-400-120",
  "gtin12": "012345678901",
  "image": [
    "https://example.com/cdn/shop/products/magnesium-glycinate-front.jpg",
    "https://example.com/cdn/shop/products/magnesium-glycinate-supplement-facts.jpg"
  ],
  "brand": {
    "@type": "Brand",
    "name": "PureForm Nutrition"
  },
  "offers": {
    "@type": "Offer",
    "price": "34.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/products/magnesium-glycinate-400mg",
    "priceValidUntil": "2027-01-01",
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "0",
        "currency": "USD"
      },
      "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "US"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "DAY" },
        "transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 5, "unitCode": "DAY" }
      }
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "312",
    "bestRating": "5",
    "worstRating": "1"
  },
  "hasCertification": [
    {
      "@type": "Certification",
      "name": "NSF Contents Certified",
      "certificationIdentification": "NSF-CC-2025-08741",
      "issuedBy": {
        "@type": "Organization",
        "name": "NSF International"
      }
    },
    {
      "@type": "Certification",
      "name": "USP Verified",
      "certificationIdentification": "USP-VER-2024-3192",
      "issuedBy": {
        "@type": "Organization",
        "name": "United States Pharmacopeia"
      }
    }
  ],
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "propertyID": "certificationId",
      "name": "Certification",
      "value": "NSF Contents Certified"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "certifyingOrganization",
      "name": "Certified By",
      "value": "NSF International"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "servingCount",
      "name": "Servings Per Container",
      "value": "60"
    }
  ]
}
</script>

<!-- Block 2: DietarySupplement (health signals) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "DietarySupplement",
  "name": "Magnesium Glycinate 400mg — 120 Capsules",
  "url": "https://example.com/products/magnesium-glycinate-400mg",
  "description": "High-absorption magnesium glycinate chelate for muscle relaxation and sleep support.",
  "activeIngredient": "Magnesium glycinate",
  "nonProprietaryName": "Magnesium bis(glycinate)",
  "isProprietary": false,
  "functionalClass": "Mineral",
  "targetPopulation": "Adults 18 and over",
  "mechanismOfAction": "Magnesium glycinate is a chelated form of magnesium bonded to glycine, an amino acid. Magnesium acts as a cofactor in over 300 enzymatic reactions and modulates NMDA receptor activity, contributing to neuromuscular relaxation and sleep architecture regulation.",
  "dosageSchedule": {
    "@type": "DoseSchedule",
    "doseValue": "400",
    "doseUnit": "mg",
    "frequency": "Once daily with food, preferably in the evening",
    "targetPopulation": "Adults 18 and over"
  },
  "maximumIntake": {
    "@type": "DoseSchedule",
    "doseValue": "800",
    "doseUnit": "mg",
    "frequency": "Do not exceed 800mg supplemental magnesium per day",
    "targetPopulation": "Adults"
  },
  "safetyConsideration": "Consult a physician before use if pregnant, nursing, taking prescription medications, or if you have a medical condition including kidney disease. High doses of magnesium from supplements may cause loose stools.",
  "legalDisclaimer": "These statements have not been evaluated by the Food and Drug Administration. This product is not intended to diagnose, treat, cure, or prevent any disease."
}
</script>

FDA Regulatory Considerations in Schema

The schema data you output carries regulatory implications. Two specific areas require care:

Structure/function claims and the FDA disclaimer

A structure/function claim describes how a nutrient or ingredient affects the structure or function of the body: "supports immune health," "promotes healthy energy levels," "helps maintain cardiovascular function," "supports restful sleep." These claims are permitted on supplements under DSHEA but require the FDA disclaimer in both the product label and any promotional copy — including structured data that feeds AI agent product surfaces.

Place the full disclaimer text in the legalDisclaimer property whenever any structure/function language appears in your description, product title, or other schema fields. The exact required text is: "These statements have not been evaluated by the Food and Drug Administration. This product is not intended to diagnose, treat, cure, or prevent any disease."

Health claims vs. structure/function claims

Health claims assert a relationship between a nutrient and a disease: "reduces risk of heart disease," "lowers blood pressure," "prevents osteoporosis." These require FDA approval and pre-market substantiation — they cannot be placed in schema data (or anywhere on a supplement product page) without an authorized health claim. Merchants encountering AI-generated product descriptions should audit for health claim language before it enters schema fields.

Claim type Example Permitted in schema? Disclaimer required?
Structure/function claim "Supports bone health" Yes Yes — legalDisclaimer required
Nutrient content claim "High in Vitamin C" Yes No
Authorized health claim "Adequate calcium may reduce risk of osteoporosis" Only if FDA-authorized Qualifier language required
Disease claim "Treats arthritis pain" No — drug claim Not applicable; claim itself is prohibited

Supplement Facts Panel and NutritionInformation

The Supplement Facts Panel data — serving size, servings per container, and key nutrient amounts — can be encoded using the NutritionInformation type on the Product block, the same way food products use it. This is distinct from the health-focused DietarySupplement block. For protein powders or meal replacement supplements where calories and macros matter, adding NutritionInformation to the Product block alongside the DietarySupplement block gives AI agents the complete signal set. See the food and beverage nutrition schema guide for the NutritionInformation implementation pattern.

Shopify Metafield Architecture

Store supplement-specific data in a dedicated supplement namespace so it can be injected cleanly into JSON-LD without polluting the core product metafields. Create these in the Shopify admin under Settings → Custom data → Products before building the Liquid snippet.

Metafield key Type Maps to schema property Example value
supplement.active_ingredient Single-line text activeIngredient Magnesium glycinate
supplement.non_proprietary_name Single-line text nonProprietaryName Magnesium bis(glycinate)
supplement.dose_value Integer dosageSchedule.doseValue 400
supplement.dose_unit Single-line text dosageSchedule.doseUnit mg
supplement.frequency Single-line text dosageSchedule.frequency Once daily with food
supplement.max_dose_value Integer maximumIntake.doseValue 800
supplement.target_population Single-line text targetPopulation Adults 18 and over
supplement.functional_class Single-line text functionalClass Mineral
supplement.is_proprietary Boolean isProprietary false
supplement.mechanism_of_action Multi-line text mechanismOfAction Paragraph describing biochemical mechanism
supplement.disclaimer Multi-line text legalDisclaimer Full FDA disclaimer text (default value set in metafield definition)
supplement.safety_note Multi-line text safetyConsideration Consult a physician before use if pregnant or nursing
supplement.certifications JSON hasCertification array [{"name":"NSF Contents Certified","id":"NSF-CC-2025-08741","issuer":"NSF International"}]

Set the supplement.disclaimer metafield definition's default value to the full FDA disclaimer text. This ensures every supplement product page carries the disclaimer even when a product manager forgets to fill it in — a safe default is better than a missing legalDisclaimer on a page that uses structure/function language.

Shopify Liquid Snippet

Add this snippet to your product.liquid or product-template.liquid. It outputs the full two-block JSON-LD pattern, gated on the presence of the supplement.active_ingredient metafield so non-supplement products are unaffected. Each optional property has an if guard to prevent empty schema fields.

{% comment %}
  Supplement schema: outputs Product block + DietarySupplement block
  Gate: only renders when supplement.active_ingredient metafield is set
{% endcomment %}
{% assign supp_ingredient = product.metafields.supplement.active_ingredient %}
{% if supp_ingredient != blank %}

{% assign supp_dose_value    = product.metafields.supplement.dose_value %}
{% assign supp_dose_unit     = product.metafields.supplement.dose_unit %}
{% assign supp_frequency     = product.metafields.supplement.frequency %}
{% assign supp_max_dose      = product.metafields.supplement.max_dose_value %}
{% assign supp_target_pop    = product.metafields.supplement.target_population %}
{% assign supp_func_class    = product.metafields.supplement.functional_class %}
{% assign supp_is_prop       = product.metafields.supplement.is_proprietary %}
{% assign supp_non_prop_name = product.metafields.supplement.non_proprietary_name %}
{% assign supp_mechanism     = product.metafields.supplement.mechanism_of_action %}
{% assign supp_disclaimer    = product.metafields.supplement.disclaimer %}
{% assign supp_safety        = product.metafields.supplement.safety_note %}
{% assign supp_certs_json    = product.metafields.supplement.certifications %}

{% comment %} --- BLOCK 1: Product (commerce signals) --- {% endcomment %}


{% comment %} --- BLOCK 2: DietarySupplement (health signals) --- {% endcomment %}


{% endif %}

Save this as snippets/supplement-schema.liquid and include it from your product template with {% raw %}{% render 'supplement-schema' %}{% endraw %}. This keeps the supplement logic isolated and easy to audit for FDA compliance review.

Functional Classes and Target Population Values

Use consistent, predictable values for functionalClass and targetPopulation across your catalog. AI agents match these against query intent — inconsistent values across products reduce matching confidence.

Recommended functionalClass values

functionalClass value Typical products Example AI queries matched
Mineral Magnesium, Zinc, Iron, Calcium supplements "best magnesium supplement for sleep", "iron deficiency supplement"
Vitamin Vitamin D, Vitamin C, B-complex, folate "vitamin D3 K2 supplement", "best B12 for vegans"
Protein Supplement Whey protein, casein, pea protein, collagen peptides "best whey protein powder for muscle gain", "plant-based protein 30g per serving"
Probiotic Multi-strain probiotic capsules, soil-based probiotics "probiotics for gut health and bloating", "50 billion CFU probiotic"
Adaptogen Ashwagandha, Rhodiola, Holy Basil, Eleuthero "best adaptogen for stress and cortisol", "ashwagandha for anxiety"
Nootropic Lion's Mane, Bacopa, Phosphatidylserine, Alpha-GPC "nootropics for focus and memory", "best cognitive supplement"
Omega-3 Fatty Acid Fish oil, krill oil, algal DHA/EPA "omega-3 supplement for inflammation", "algae-based DHA for vegans"
Antioxidant CoQ10, Resveratrol, Glutathione, Astaxanthin "antioxidant supplement for aging", "ubiquinol CoQ10 200mg"
Amino Acid Creatine, L-Glutamine, L-Theanine, BCAA blends "creatine monohydrate powder", "L-theanine for sleep and anxiety"
Herbal Supplement Turmeric, Echinacea, Elderberry, Milk Thistle "turmeric with black pepper supplement", "elderberry for immune support"

Recommended targetPopulation values

Use these standard values for targetPopulation — they map directly to the most common demographic modifier queries in AI supplement searches:

Common Mistakes That Make Supplements Invisible to AI

These are the five most frequent implementation errors in supplement JSON-LD, listed in order of impact on AI agent query coverage:

# Mistake Impact Fix
1 Using Product @type alone — no DietarySupplement block All health-specific properties (activeIngredient, dosageSchedule, targetPopulation) are invisible to AI agents. Supplement matches only on price, brand, and title text. Add a second DietarySupplement JSON-LD block to every supplement product page alongside the Product block
2 Omitting legalDisclaimer when using structure/function language FDA non-compliance risk. AI agents trained on compliant data may treat claim-heavy pages without disclaimers as lower-quality signals. Google Merchant Center flags health claims without required disclaimers. Add the full FDA disclaimer text to the legalDisclaimer field whenever any structure/function language appears anywhere on the page
3 Setting activeIngredient to a marketing/brand name instead of the INCI/INN name AI agents cannot match "Magtein" or "Aquamin" against user queries for "magnesium L-threonate" or "marine calcium." Branded ingredient names are opaque to agent ingredient-matching logic. Use INCI/INN names in activeIngredient (e.g., "Magnesium L-threonate"). Use nonProprietaryName for the branded name, and set isProprietary: true
4 Missing dosageSchedule AI agents cannot answer the most common supplement follow-up question: "how many should I take?" Without a DoseSchedule object, the agent must either parse free-text instructions or decline to answer — reducing purchase confidence. Populate dosageSchedule with at minimum doseValue, doseUnit, and frequency. Even a simple "2 capsules once daily" is significantly better than no structured dosage data
5 Missing targetPopulation Supplement is not matched in any demographic-filtered query: "prenatal vitamins," "supplements for seniors over 65," "kids vitamins," "supplements for athletes." These represent a large share of high-intent supplement searches. Set targetPopulation in both the DietarySupplement root and inside the dosageSchedule object. Use standard values from the recommended list above

Supplement Certifications in Structured Data

NSF Certified for Sport, Informed Sport, and USP Verified are the three certifications with the highest AI query match rate for supplement-specific filtered searches. Encode them using both hasCertification and additionalProperty on the Product block for maximum AI agent coverage.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Whey Protein Isolate — Chocolate — 2 lb",
  "hasCertification": [
    {
      "@type": "Certification",
      "name": "NSF Certified for Sport",
      "certificationIdentification": "NSF-CFS-2025-14203",
      "issuedBy": {
        "@type": "Organization",
        "name": "NSF International",
        "url": "https://www.nsfsport.com"
      },
      "certificationStatus": "CertificationActive"
    },
    {
      "@type": "Certification",
      "name": "Informed Sport Certified",
      "certificationIdentification": "IS-2025-07841",
      "issuedBy": {
        "@type": "Organization",
        "name": "LGC Group",
        "url": "https://www.informed.sport"
      },
      "certificationStatus": "CertificationActive"
    }
  ],
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "propertyID": "certificationId",
      "name": "Certification",
      "value": "NSF Certified for Sport"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "certifyingOrganization",
      "name": "Certified By",
      "value": "NSF International"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "certificationId",
      "name": "Certification",
      "value": "Informed Sport Certified"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "certifyingOrganization",
      "name": "Certified By",
      "value": "LGC Group"
    }
  ]
}

For the full certification schema implementation pattern across product categories, see the Product Safety Certifications Schema guide.

Protein Powder Example: Full Two-Block Implementation

Protein powders require both the DietarySupplement block (for ingredient, dosage, target population) and a NutritionInformation block nested in Product (for calories, macros). This is the most complete implementation for AI agents answering queries like "best whey protein 30g per serving under 150 calories."

<!-- Block 1: Product -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Whey Protein Isolate — Chocolate — 2 lb",
  "brand": { "@type": "Brand", "name": "PureForm Nutrition" },
  "sku": "WPI-CHOC-2LB",
  "offers": {
    "@type": "Offer",
    "price": "59.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "841",
    "bestRating": "5"
  },
  "nutrition": {
    "@type": "NutritionInformation",
    "servingSize": "1 scoop (35g)",
    "calories": "140 calories",
    "proteinContent": "30 g",
    "fatContent": "1.5 g",
    "saturatedFatContent": "0.5 g",
    "carbohydrateContent": "3 g",
    "sugarContent": "2 g",
    "sodiumContent": "160 mg"
  },
  "hasCertification": [
    {
      "@type": "Certification",
      "name": "NSF Certified for Sport",
      "issuedBy": { "@type": "Organization", "name": "NSF International" }
    }
  ]
}
</script>

<!-- Block 2: DietarySupplement -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "DietarySupplement",
  "name": "Whey Protein Isolate — Chocolate — 2 lb",
  "activeIngredient": "Whey protein isolate",
  "nonProprietaryName": "Hydrolyzed whey protein isolate (WPI 90)",
  "isProprietary": false,
  "functionalClass": "Protein Supplement",
  "targetPopulation": "Athletes",
  "dosageSchedule": {
    "@type": "DoseSchedule",
    "doseValue": "1",
    "doseUnit": "scoops",
    "frequency": "1–2 scoops daily, ideally within 30 minutes post-workout",
    "targetPopulation": "Athletes and active adults"
  },
  "maximumIntake": {
    "@type": "DoseSchedule",
    "doseValue": "2",
    "doseUnit": "scoops",
    "frequency": "Do not exceed 2 scoops per day"
  },
  "mechanismOfAction": "Whey protein isolate provides a complete essential amino acid profile with high leucine content. Leucine acts as a primary trigger for muscle protein synthesis via the mTOR pathway. The isolated form has greater than 90% protein content by weight with minimal lactose, making it suitable for lactose-sensitive individuals.",
  "safetyConsideration": "Not recommended for individuals with milk or soy allergies. Manufactured in a facility that processes tree nuts. Consult a physician if you have pre-existing kidney conditions before significantly increasing dietary protein intake.",
  "legalDisclaimer": "These statements have not been evaluated by the Food and Drug Administration. This product is not intended to diagnose, treat, cure, or prevent any disease."
}
</script>

Testing and Validation

After deploying supplement schema, validate both blocks using the standard structured data tooling and then test against realistic AI shopping queries:

For a complete audit of your supplement store's AI readiness across all structured data signals, use CatalogScan's free store scan to identify missing schema fields, FDA disclaimer coverage, and certification markup gaps.

Also see the Shopify structured data testing guide and the e-commerce AI readiness checklist for the full validation workflow.

Frequently Asked Questions

Should I use DietarySupplement or Drug schema for supplements?

Use DietarySupplement for OTC dietary supplements — vitamins, minerals, protein powders, herbal extracts, amino acids, and probiotics sold without a prescription. The Drug type is reserved for licensed pharmaceutical medications. DietarySupplement is the correct schema.org type for anything regulated under DSHEA in the US. Misusing the Drug type can trigger compliance flags in Google Merchant Center and mislead AI agents about the regulatory class of your product.

How does DietarySupplement schema help AI agents recommend my supplements?

AI shopping agents parse DietarySupplement schema to answer ingredient queries ("magnesium glycinate 400mg"), dosage questions ("how many capsules per day"), demographic filters ("prenatal vitamins," "supplements for seniors over 65"), and functional category searches ("adaptogens for stress"). Without this schema, these signals only exist in description text — requiring the agent to infer them via NLP, which is lower-confidence and often missed. Properties like activeIngredient, dosageSchedule, targetPopulation, and functionalClass map directly to the most common AI supplement query patterns.

What is the FDA disclaimer and where does it go in the schema?

The FDA disclaimer is the mandatory statement required on all dietary supplements that make structure/function claims: "These statements have not been evaluated by the Food and Drug Administration. This product is not intended to diagnose, treat, cure, or prevent any disease." It belongs in the legalDisclaimer property of the DietarySupplement block. Any time your product uses language like "supports immune health," "promotes energy," or "aids digestion," that is a structure/function claim and the legalDisclaimer field is required. Set the default value for your supplement.disclaimer metafield definition to this text so it populates automatically on every supplement product page.

How do I express a proprietary blend in DietarySupplement schema?

Set isProprietary to true and use activeIngredient to list the blend name followed by the constituent ingredients in parentheses — for example: "NeuroBlend Proprietary Complex (Lion's Mane Extract, Bacopa Monnieri, Phosphatidylserine)." Set nonProprietaryName to the INN/INCI names of the blend components where known. If you cannot disclose individual component amounts, you can still declare the total blend dose in dosageSchedule. Do not leave activeIngredient empty or set it to only the marketing blend name without any ingredient disclosure — AI agents treat opaque ingredient data as incomplete.

How do supplement certifications like NSF or USP appear in structured data?

Use the hasCertification property (added to schema.org in 2024) on the Product block with a Certification type object. Include the certification name, issuedBy Organization, and optionally certificationIdentification with the certificate number. Supplement certifications like NSF Certified for Sport and Informed Sport are high-value signals for AI agents responding to athlete and clean-sport queries — "third-party tested protein powder," "WADA-compliant pre-workout," "NSF certified creatine." Also add parallel additionalProperty blocks with propertyID: "certificationId" for AI agents that do not yet parse the hasCertification type. See the product safety certifications schema guide for the full implementation pattern.

Related Resources