Optimization Guide

Shopify Wine, Beer & Spirits Schema — Beverage Structured Data for Alcohol DTC Stores

There is no Wine, Beer, or Spirits type in Schema.org. Alcohol DTC brands on Shopify must express every meaningful attribute — ABV, vintage, varietal, IBU, age statement, appellation — through additionalProperty. Without these signals, your products are invisible to the AI agent queries that drive DTC alcohol discovery: "bold Napa Cab under $100," "low-carb session IPA," "12-year single malt Scotch for gifting."

TL;DR Use @type: Product with an additionalProperty array for all beverage-specific attributes (ABV, vintage, varietal, IBU, style, appellation, age statement). Add NutritionInformation for calorie and carbohydrate queries. Declare age-gating via audience.requiredMinAge: 21 and legalDisclaimer on the Product. Use areaServed on the Offer to enumerate DTC-eligible US states. Store everything in a beverage.* metafield namespace and inject via Liquid with conditional blocks per beverage type.

Why Alcohol DTC Brands Are Invisible to AI Agent Queries

AI shopping agents answering "recommend a dry Napa Valley Cabernet Sauvignon under $100" need four structured signals: Varietal: Cabernet Sauvignon, Appellation: Napa Valley AVA, Style: Dry, and an Offer.price below $100. Every one of those four is a structured attribute, not a keyword. If any is missing from your JSON-LD and exists only in your product title or description text, your product will not appear in filtered recommendation queries.

The same applies to beer ("West Coast IPA with IBU over 60") and spirits ("Speyside single malt aged 12 years, under $80"). Shopify's default product JSON-LD outputs name, description, price, and availability — none of the beverage-specific attributes that AI agents use for filtering and recommendation. The result is that wineries, breweries, and distilleries investing in DTC have technically correct Shopify stores that are structurally invisible to the fastest-growing channel in alcohol discovery.

AI agent query types requiring beverage structured data

Query type Example query Required structured signal
Varietal + region filter "bold Napa Valley Cabernet under $100" Varietal: Cabernet Sauvignon + Appellation: Napa Valley AVA + Offer.price
Vintage year filter "2019 Bordeaux Cabernet" Vintage Year: 2019 + Varietal: Cabernet Sauvignon or Appellation: Bordeaux
ABV / session filter "session IPA under 5% ABV" ABV: "4.2%" + Style: Session IPA
IBU / bitterness filter "West Coast IPA with at least 60 IBU" IBU: "65" + Style: West Coast IPA
Spirits age statement "12-year Speyside single malt under $80" Age Statement: 12 Year + Distillery Region: Speyside
Organic / biodynamic certification "USDA Organic natural wine" hasCertification: USDA Organic
Low-calorie / keto filter "keto-friendly low-carb wine" NutritionInformation.carbohydrateContent
Gifting / occasion "gift-worthy single malt for whisky enthusiast" Tasting Notes + Age Statement + Cask Type

Shopify default vs. beverage-schema JSON-LD

Shopify default — no beverage data
{
  "@type": "Product",
  "name": "2021 Napa Valley
    Cabernet Sauvignon 750ml",
  "description": "Bold Cab, 13.5% ABV,
    18 months French oak...",
  // varietal: in title text only
  // ABV: in description text only
  // vintage: in title text only
  // invisible to AI attribute filters
}
With beverage additionalProperty schema
{
  "@type": "Product",
  "additionalProperty": [
    { "name": "Varietal",
      "value": "Cabernet Sauvignon" },
    { "name": "Alcohol By Volume (ABV)",
      "value": "13.5%" },
    { "name": "Vintage Year",
      "value": "2021" },
    { "name": "Appellation / Region",
      "value": "Napa Valley AVA" }
  ]
}

additionalProperty Reference Tables

Declare all beverage attributes as PropertyValue objects in the additionalProperty array. Each entry needs @type: "PropertyValue", a name (human-readable label), and a value (string). The tables below show the recommended property names for each beverage category.

Wine additionalProperty attributes

PropertyValue name Example value AI query use case
Alcohol By Volume (ABV) "13.5%" Low-alcohol wine queries; alcohol content filtering
Vintage Year "2021" Specific vintage year queries; cellar aging recommendations
Appellation / Region "Napa Valley AVA" Region-specific queries ("Sonoma Coast Pinot Noir")
Varietal "Cabernet Sauvignon" Grape variety filtering; the most common AI wine query dimension
Style "Dry" Dry vs. off-dry vs. sweet wine preference filtering
Color "Red" Red / white / rosé / orange category filtering
Serving Temperature "60–65°F (15–18°C)" Sommelier-style query responses; serving guidance
Suggested Pairing "Grilled ribeye, aged cheddar" Food pairing queries ("wine to pair with steak")
Winemaker "Maria Santos" Winemaker-specific queries; provenance and craft signals
Aging "18 months in French oak" Oak-aged / unoaked wine filter; tannin and flavor profile queries
Country of Origin "United States" Country-of-origin filtering; wine region disambiguation
Volume "750ml" Format queries (magnum, half-bottle, standard); gifting size selection

Beer additionalProperty attributes

PropertyValue name Example value AI query use case
Alcohol By Volume (ABV) "6.8%" Session beer / high-ABV filtering; "under 5%" queries
International Bitterness Units (IBU) "65" Hop-forward / bitter beer filtering; IPA bitterness level queries
Style "West Coast IPA" Beer style discovery — the primary AI beer query dimension
Fermentation "Ale" Ale vs. lager category filtering; fermentation character queries
Hops "Citra, Mosaic, Simcoe" Hop variety queries ("Citra-forward IPA"); craft beer geek filters
Malt "Pale malt, Crystal 40L" Malt bill queries; gluten-related ingredient transparency
Serving Temperature "38–45°F" Serving guidance; sommelier-style beer pairing queries
Volume "12 fl oz" Can / bottle / growler format filtering
Country of Origin "United States" Domestic vs. imported filtering; regional craft brewery signals

Spirits additionalProperty attributes

PropertyValue name Example value AI query use case
Alcohol By Volume (ABV) "46%" Cask-strength vs. diluted filtering; proof-level queries
Spirit Type "Single Malt Scotch Whisky" Category-level filtering — bourbon, gin, mezcal, rum, etc.
Age Statement "12 Year" Aged spirits queries; premium tier filtering by maturation
Cask Type "Ex-Bourbon, Sherry Cask Finish" Sherry bomb / ex-bourbon character queries; cask-specific filtering
Distillery Region "Speyside, Scotland" Scotch region filtering (Islay, Speyside, Highlands, Lowlands)
Grain / Base "100% Malted Barley" Single malt vs. blended; gluten transparency; grain-forward queries
Tasting Notes "Dried fruit, vanilla, gentle smoke" Flavor profile queries ("peaty Scotch", "vanilla bourbon"); gifting recommendations
Volume "750ml" Standard / miniature / magnum format filtering
Country of Origin "Scotland" Country / region of origin filtering

Complete Wine Product JSON-LD Example

The following is a production-ready JSON-LD block for a 2021 Napa Valley Cabernet Sauvignon. It combines the Product type with NutritionInformation, a full additionalProperty array, hasCertification for organic status, a brand object with knowledge graph linking, an age-gating audience block, a legalDisclaimer, and a state-restricted Offer with areaServed:

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "2021 Napa Valley Cabernet Sauvignon — Estate Reserve",
  "description": "A bold, full-bodied Cabernet Sauvignon from our estate vineyard in the heart of Napa Valley. 18 months in French and American oak. Aromas of dark cherry, cassis, cedar, and a hint of vanilla.",
  "sku": "NVC-CAB-2021-750",
  "image": "https://example-winery.com/products/2021-napa-cab.jpg",
  "brand": {
    "@type": "Brand",
    "name": "Silver Creek Cellars",
    "url": "https://example-winery.com",
    "sameAs": "https://en.wikipedia.org/wiki/Example_Winery"
  },
  "audience": {
    "@type": "PeopleAudience",
    "requiredMinAge": 21
  },
  "legalDisclaimer": "Please drink responsibly. Must be 21 or older to purchase. Not available in all states. Void where prohibited by law.",
  "nutrition": {
    "@type": "NutritionInformation",
    "servingSize": "5 fl oz (148 ml)",
    "calories": "120 Cal",
    "carbohydrateContent": "3.8 g",
    "sugarContent": "1.2 g",
    "fatContent": "0 g",
    "proteinContent": "0.1 g",
    "sodiumContent": "6 mg"
  },
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Alcohol By Volume (ABV)",
      "value": "13.5%"
    },
    {
      "@type": "PropertyValue",
      "name": "Vintage Year",
      "value": "2021"
    },
    {
      "@type": "PropertyValue",
      "name": "Appellation / Region",
      "value": "Napa Valley AVA"
    },
    {
      "@type": "PropertyValue",
      "name": "Varietal",
      "value": "Cabernet Sauvignon"
    },
    {
      "@type": "PropertyValue",
      "name": "Style",
      "value": "Dry"
    },
    {
      "@type": "PropertyValue",
      "name": "Color",
      "value": "Red"
    },
    {
      "@type": "PropertyValue",
      "name": "Serving Temperature",
      "value": "60–65°F (15–18°C)"
    },
    {
      "@type": "PropertyValue",
      "name": "Suggested Pairing",
      "value": "Grilled ribeye, aged cheddar, roasted lamb"
    },
    {
      "@type": "PropertyValue",
      "name": "Aging",
      "value": "18 months in French and American oak"
    },
    {
      "@type": "PropertyValue",
      "name": "Winemaker",
      "value": "Maria Santos"
    },
    {
      "@type": "PropertyValue",
      "name": "Country of Origin",
      "value": "United States"
    },
    {
      "@type": "PropertyValue",
      "name": "Volume",
      "value": "750ml"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "ageRestrictionType",
      "name": "Age Restriction",
      "value": "Alcohol"
    }
  ],
  "hasCertification": {
    "@type": "Certification",
    "name": "USDA Organic",
    "certificationIdentification": "USDA-ORG-2024-91832",
    "certificationStatus": "https://schema.org/CertificationActive",
    "issuedBy": {
      "@type": "Organization",
      "name": "Oregon Tilth Certified Organic",
      "url": "https://tilth.org"
    }
  },
  "offers": {
    "@type": "Offer",
    "price": "89.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://example-winery.com/products/2021-napa-cab",
    "eligibleCustomerType": "https://schema.org/Adult",
    "description": "Must be 21 or older to purchase. Age verification required at delivery.",
    "areaServed": [
      {"@type": "State", "name": "California"},
      {"@type": "State", "name": "New York"},
      {"@type": "State", "name": "Texas"},
      {"@type": "State", "name": "Florida"},
      {"@type": "State", "name": "Oregon"},
      {"@type": "State", "name": "Washington"},
      {"@type": "State", "name": "Illinois"},
      {"@type": "State", "name": "Colorado"},
      {"@type": "State", "name": "Nevada"},
      {"@type": "State", "name": "Arizona"}
    ],
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "12.00",
        "currency": "USD"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "businessDays": {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
        },
        "cutoffTime": "15:00:00-07:00",
        "handlingTime": {
          "@type": "QuantitativeValue",
          "minValue": 1,
          "maxValue": 2,
          "unitCode": "DAY"
        },
        "transitTime": {
          "@type": "QuantitativeValue",
          "minValue": 3,
          "maxValue": 5,
          "unitCode": "DAY"
        }
      }
    }
  }
}

State-Level DTC Shipping with areaServed

DTC alcohol shipping in the United States is regulated at the state level. As of 2026, fewer than half of US states permit direct-to-consumer wine shipping from out-of-state wineries, and spirits DTC is even more restricted. Without areaServed on your Offer, an AI shopping agent has no way to know that your Napa Valley Cabernet is unavailable to buyers in Alabama or Mississippi — and may recommend it to shoppers who will hit a hard stop at checkout.

areaServed on the Offer object accepts an array of State objects or ISO 3166-2 codes. Enumerate every US state where your DTC license is active. Update this list whenever your compliance program expands to new states:

"offers": {
  "@type": "Offer",
  "price": "89.00",
  "priceCurrency": "USD",
  "availability": "https://schema.org/InStock",
  "areaServed": [
    {"@type": "State", "name": "California"},
    {"@type": "State", "name": "New York"},
    {"@type": "State", "name": "Texas"},
    {"@type": "State", "name": "Florida"},
    {"@type": "State", "name": "Oregon"},
    {"@type": "State", "name": "Washington"},
    {"@type": "State", "name": "Illinois"},
    {"@type": "State", "name": "Colorado"}
  ]
}

For stores that ship internationally, combine State objects for US state-level restrictions with Country objects for international markets where your export license is valid. See the geo-restricted product schema guide for the full eligibleRegion and ineligibleRegion pattern for country-level exclusions.

Age-Gating and Legal Disclaimer Signals

Alcohol products require explicit age-gating signals in structured data. Without them, conservative AI agents omit alcohol products from recommendations entirely rather than risk surfacing them in ambiguous contexts. Two complementary signals ensure correct AI agent handling:

audience.requiredMinAge on Product

The audience property on Product accepts a PeopleAudience object. Set requiredMinAge: 21 for US alcohol products. This is the semantically authoritative signal for age restriction — the same field Google Merchant Center uses for Shopping eligibility:

"audience": {
  "@type": "PeopleAudience",
  "requiredMinAge": 21
}

eligibleCustomerType on Offer

Reinforce the age signal on the Offer object using eligibleCustomerType. The https://schema.org/Adult value is the schema.org canonical adult customer type signal:

"offers": {
  "@type": "Offer",
  "eligibleCustomerType": "https://schema.org/Adult",
  "description": "Must be 21+ to purchase. Valid government-issued ID required at delivery."
}

legalDisclaimer on Product

Add legalDisclaimer to the Product to express responsible drinking and regulatory compliance context. AI agents generating product recommendations for alcohol products use this text when forming response disclaimers:

"legalDisclaimer": "Please drink responsibly. Must be 21 or older to purchase. Not available in all states. Void where prohibited by law."

For a deeper treatment of age verification structured data patterns across alcohol, tobacco, and vaping categories, see the age verification structured data guide.

NutritionInformation for Beverages

AI health agents increasingly incorporate calorie and macronutrient data into product recommendations. Queries like "low-calorie wine under 100 calories per glass," "keto-friendly spirits with zero carbs," and "low-carb light beer" all require structured NutritionInformation. Spirits are especially well-positioned for keto and low-carb queries — most have near-zero carbohydrates and no sugar — but only when that data is declared structurally.

Standard serving sizes for structured data reporting:

Beverage type Standard serving size Typical calorie range
Wine (red / white) 5 fl oz (148 ml) 100–130 Cal per serving
Wine (dessert / fortified) 2 fl oz (59 ml) 60–95 Cal per serving
Beer (standard) 12 fl oz (355 ml) 100–200 Cal per serving
Beer (light) 12 fl oz (355 ml) 50–110 Cal per serving
Spirits (distilled) 1.5 fl oz (44 ml) 95–110 Cal per serving
// Wine NutritionInformation
"nutrition": {
  "@type": "NutritionInformation",
  "servingSize": "5 fl oz (148 ml)",
  "calories": "120 Cal",
  "carbohydrateContent": "3.8 g",
  "sugarContent": "1.2 g",
  "fatContent": "0 g",
  "proteinContent": "0.1 g",
  "sodiumContent": "6 mg"
}

// Spirits NutritionInformation (zero-carb)
"nutrition": {
  "@type": "NutritionInformation",
  "servingSize": "1.5 fl oz (44 ml)",
  "calories": "105 Cal",
  "carbohydrateContent": "0 g",
  "sugarContent": "0 g",
  "fatContent": "0 g",
  "proteinContent": "0 g",
  "sodiumContent": "0 mg"
}

For a complete guide to nutrition structured data including food certification and allergen patterns, see the food and beverage nutrition schema guide.

brand with Knowledge Graph Linking

Winery, brewery, and distillery brand entities often have Wikipedia pages, Wikidata entries, or other knowledge graph nodes. Linking your brand object to these authoritative sources enables AI agents to resolve your brand to a known entity — which improves the confidence of attribute-based recommendations and enables factual queries ("wines from Silver Oak Cellars") to correctly surface your products.

"brand": {
  "@type": "Brand",
  "name": "Silver Oak Cellars",
  "url": "https://silveroak.com",
  "sameAs": [
    "https://en.wikipedia.org/wiki/Silver_Oak_Cellars",
    "https://www.wikidata.org/wiki/Q7520309"
  ]
}

At minimum, include name and url. Add sameAs with Wikipedia or Wikidata URLs when available — this is the single highest-leverage entity linking signal for DTC beverage brands in AI knowledge graphs.

hasCertification for Organic, Biodynamic, and Sustainable Wines

The natural wine and sustainable spirits segment increasingly depends on certification signals for AI discovery. Queries like "USDA Organic red wine," "biodynamic Burgundy," and "Demeter-certified Pinot Noir" require hasCertification with a recognized issuing body to match. A text mention of "organic" in your product description does not qualify — the certification must be declared as a structured Certification object with an issuedBy Organization:

"hasCertification": [
  {
    "@type": "Certification",
    "name": "USDA Organic",
    "certificationIdentification": "USDA-ORG-2024-91832",
    "certificationStatus": "https://schema.org/CertificationActive",
    "issuedBy": {
      "@type": "Organization",
      "name": "Oregon Tilth Certified Organic",
      "url": "https://tilth.org"
    }
  },
  {
    "@type": "Certification",
    "name": "Demeter Biodynamic",
    "certificationStatus": "https://schema.org/CertificationActive",
    "issuedBy": {
      "@type": "Organization",
      "name": "Demeter USA",
      "url": "https://www.demeter-usa.org"
    }
  }
]

Shopify Liquid Template with Beverage-Type Conditionals

Store all beverage attributes in a beverage metafield namespace. Use the beverage.type metafield (Single-line text: "Wine", "Beer", or "Spirits") to conditionally inject the correct property set for each beverage category. This single Liquid snippet handles all three product types from one template file:

{% assign bev = product.metafields.beverage %}
{% if bev.type %}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {{ product.title | json }},
  "description": {{ product.description | strip_html | truncatewords: 60 | json }},
  "sku": {{ product.selected_or_first_available_variant.sku | json }},
  "brand": {
    "@type": "Brand",
    "name": {{ product.vendor | json }},
    "url": {{ shop.url | json }}
  },
  "audience": {
    "@type": "PeopleAudience",
    "requiredMinAge": 21
  },
  "legalDisclaimer": "Please drink responsibly. Must be 21 or older to purchase. Not available in all states.",
  "nutrition": {
    "@type": "NutritionInformation",
    "servingSize": {{ bev.serving_size.value | default: "1 serving" | json }},
    "calories": "{{ bev.calories.value }} Cal",
    "carbohydrateContent": "{{ bev.carbs_g.value | default: '0' }} g",
    "sugarContent": "{{ bev.sugar_g.value | default: '0' }} g",
    "fatContent": "0 g",
    "proteinContent": "0 g",
    "sodiumContent": "{{ bev.sodium_mg.value | default: '0' }} mg"
  },
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Alcohol By Volume (ABV)",
      "value": "{{ bev.abv.value }}%"
    },
    {
      "@type": "PropertyValue",
      "name": "Style",
      "value": {{ bev.style.value | json }}
    },
    {
      "@type": "PropertyValue",
      "name": "Volume",
      "value": "{{ bev.volume_ml.value }}ml"
    },
    {
      "@type": "PropertyValue",
      "name": "Serving Temperature",
      "value": {{ bev.serving_temp.value | json }}
    },
    {% if bev.pairing.value %}
    {
      "@type": "PropertyValue",
      "name": "Suggested Pairing",
      "value": {{ bev.pairing.value | json }}
    },
    {% endif %}

    {% comment %}Wine-specific properties{% endcomment %}
    {% if bev.type.value == "Wine" %}
    {
      "@type": "PropertyValue",
      "name": "Vintage Year",
      "value": "{{ bev.vintage.value }}"
    },
    {
      "@type": "PropertyValue",
      "name": "Appellation / Region",
      "value": {{ bev.appellation.value | json }}
    },
    {
      "@type": "PropertyValue",
      "name": "Varietal",
      "value": {{ bev.varietal.value | json }}
    },
    {% endif %}

    {% comment %}Beer-specific properties{% endcomment %}
    {% if bev.type.value == "Beer" %}
    {% if bev.ibu.value %}
    {
      "@type": "PropertyValue",
      "name": "International Bitterness Units (IBU)",
      "value": "{{ bev.ibu.value }}"
    },
    {% endif %}
    {% endif %}

    {% comment %}Spirits-specific properties{% endcomment %}
    {% if bev.type.value == "Spirits" %}
    {% if bev.age_statement.value %}
    {
      "@type": "PropertyValue",
      "name": "Age Statement",
      "value": {{ bev.age_statement.value | json }}
    },
    {% endif %}
    {% if bev.cask_type.value %}
    {
      "@type": "PropertyValue",
      "name": "Cask Type",
      "value": {{ bev.cask_type.value | json }}
    },
    {% endif %}
    {% endif %}

    {
      "@type": "PropertyValue",
      "propertyID": "ageRestrictionType",
      "name": "Age Restriction",
      "value": "Alcohol"
    }
  ],
  {% if bev.is_organic.value == true %}
  "hasCertification": {
    "@type": "Certification",
    "name": "USDA Organic",
    "certificationStatus": "https://schema.org/CertificationActive",
    "issuedBy": {
      "@type": "Organization",
      "name": "USDA Agricultural Marketing Service"
    }
  },
  {% endif %}
  "offers": {
    "@type": "Offer",
    "price": {{ product.selected_or_first_available_variant.price | money_without_currency | json }},
    "priceCurrency": {{ shop.currency | json }},
    "availability": {% if product.available %}"https://schema.org/InStock"{% else %}"https://schema.org/OutOfStock"{% endif %},
    "url": {{ canonical_url | json }},
    "eligibleCustomerType": "https://schema.org/Adult",
    "areaServed": {{ shop.metafields.beverage.dtc_states.value | json }}
  }
}
</script>
{% endif %}

Metafield namespace reference

Metafield key Shopify type Applies to Example value
beverage.type Single-line text All "Wine", "Beer", "Spirits"
beverage.abv Decimal All 13.5
beverage.style Single-line text All "Dry", "West Coast IPA", "Single Malt"
beverage.volume_ml Integer All 750
beverage.serving_temp Single-line text All "60–65°F (15–18°C)"
beverage.pairing Multi-line text All "Grilled ribeye, aged cheddar"
beverage.calories Integer All 120
beverage.serving_size Single-line text All "5 fl oz (148 ml)"
beverage.vintage Integer Wine only 2021
beverage.appellation Single-line text Wine only "Napa Valley AVA"
beverage.varietal Single-line text Wine only "Cabernet Sauvignon"
beverage.ibu Integer Beer only 65
beverage.age_statement Single-line text Spirits only "12 Year"
beverage.cask_type Single-line text Spirits only "Ex-Bourbon, Sherry Cask Finish"
beverage.is_organic Boolean All true / false
shop.beverage.dtc_states JSON (shop metafield) All (shop-level) JSON array of State objects

Common Mistakes

Mistake Problem Fix
Using Product alone with no beverage additionalProperty ABV, vintage, varietal, style, and region data are absent from structured data. AI agents cannot surface this product in any attribute-filtered recommendation query — the most common query type for alcohol DTC. Add an additionalProperty array with at minimum ABV, varietal (wine), or style (beer/spirits). Each beverage-specific attribute is a PropertyValue entry.
Putting varietal, vintage, and ABV in the product title but not in additionalProperty AI agents filter by structured attributes, not by parsing title strings. "2021 Napa Valley Cabernet Sauvignon 13.5% ABV" in a product title does not match a structured query for Varietal: Cabernet Sauvignon. Declare every filterworthy attribute as a discrete PropertyValue in additionalProperty, even if it duplicates information in the title. Structured beats textual for AI filtering every time.
Omitting age-gating signals on alcohol products Without audience.requiredMinAge: 21 and eligibleCustomerType: Adult, conservative AI agents skip alcohol products entirely rather than recommend them without a confirmed age restriction signal. Add audience.requiredMinAge: 21 to the Product and eligibleCustomerType: "https://schema.org/Adult" to the Offer. Also add legalDisclaimer to the Product with responsible drinking language.
Setting brand as a string or a plain name with no url or sameAs A brand declared as "brand": "Silver Oak Cellars" (string) or as a Brand object with only a name fails to link the winery entity to any knowledge graph node. AI agents cannot resolve the brand to a known winery entity, losing all the factual associations (region, style, reputation) that drive "best wines from X" queries. Always declare brand as a Brand object with name, url, and sameAs linking to a Wikipedia or Wikidata URL for the winery, brewery, or distillery.
Omitting legalDisclaimer on alcohol products Responsible drinking and state restriction disclaimers are expected context for alcohol products in AI-generated recommendations. Without them, an AI agent may either add its own generic disclaimer (which may not match your specific situation) or omit the product from recommendation sets out of compliance caution. Add legalDisclaimer to the Product with language covering: minimum age, responsible drinking, state availability restrictions, and any void-where-prohibited language relevant to your DTC license.

Implementation Checklist

Frequently Asked Questions

Is there a Wine or Beer @type in Schema.org for alcohol products?

No. Schema.org does not define a Wine, Beer, or Spirits type. Use @type: Product and declare all beverage-specific attributes — ABV, vintage, varietal, IBU, age statement, cask type — as additionalProperty PropertyValue entries. This is the same pattern used for other specialty product categories without a dedicated schema.org type. AI shopping agents read and filter on PropertyValue entries directly.

How do I express ABV (alcohol content) in structured data for AI agents?

Add ABV as an additionalProperty entry: { "@type": "PropertyValue", "name": "Alcohol By Volume (ABV)", "value": "13.5%" }. Use a consistent name label so AI agents can identify the property. This enables queries like "low-alcohol wine under 12% ABV," "cask-strength bourbon over 55%," and "session IPA under 5%." Without this structured signal, ABV in product descriptions or titles is invisible to AI attribute filtering.

How does state-level DTC shipping eligibility work in structured data?

Use areaServed on your Offer object, listing each state where your DTC alcohol license is active as a State object: { "@type": "State", "name": "California" }. AI shopping agents read areaServed to determine purchase eligibility before recommending a product. Without it, agents may recommend your wine or spirits to shoppers in states where you cannot legally ship — leading to checkout failures and a poor customer experience. For country-level restrictions, use eligibleRegion per the geo-restricted product schema guide.

How does beverage structured data help AI agents answer wine recommendation queries?

AI agents answering "bold Napa Cab under $100" need structured signals for Varietal, Appellation, Style, and Price — not a product title that contains those words. Without additionalProperty entries for Varietal: "Cabernet Sauvignon" and Appellation: "Napa Valley AVA," your product does not match the structured filter even if both words appear in your title. Structured attributes are also required for category-level queries ("all Napa Valley red wines under $80") where the agent must enumerate a set of products rather than rank a single result.

Should I include nutrition information for wine and beer products?

Yes. AI health agents factor calorie and carbohydrate data into recommendations for queries like "low-calorie wine under 100 calories per glass" or "keto-friendly spirits." Wine, beer, and spirits have well-defined serving sizes and caloric content. Add NutritionInformation with servingSize, calories, carbohydrateContent, and sugarContent. Spirits in particular benefit from declaring near-zero carbohydrates — a strong signal for keto and low-carb lifestyle queries. Shopify outputs no nutrition data by default and this must be added via Liquid. See the food and beverage nutrition schema guide for the full NutritionInformation pattern.

Related Resources