Optimization Guide
Shopify Age Verification Structured Data for AI Shopping Agents
If you sell alcohol, tobacco, vaping products, or other age-restricted items on Shopify, your structured data needs to declare age requirements explicitly. Without these signals, AI shopping agents handle your products inconsistently — either skipping them out of compliance caution or recommending them without the required age disclaimer.
audience with PeopleAudience.requiredMinAge on your Product JSON-LD, plus an additionalProperty block with propertyID: "ageRestrictionType". Use the jurisdiction-correct minimum age (21 for US alcohol, 18 for UK alcohol, 21 for US tobacco/vaping). Without this markup, conservative AI agents skip age-restricted products entirely rather than risk recommending them to minors.
How AI Agents Handle Age-Restricted Products
AI shopping agents are increasingly cautious about age-restricted categories. Without explicit structured data signals, they face a binary choice: recommend the product and risk surfacing it to a minor, or skip it entirely to avoid compliance risk. Most choose the latter — which means your alcohol, tobacco, or vaping products simply don't appear in AI agent recommendations, even for clearly adult queries.
With correct age restriction markup, the agent can:
- Identify the product as age-restricted
- Know the specific minimum age threshold
- Include the product in adult-context recommendations with an appropriate disclaimer
- Surface the product confidently in direct adult queries ("best whiskey under $50", "gift ideas for a cigar smoker")
| Product type | Without markup | With correct markup |
|---|---|---|
| Alcohol (spirits, wine, beer) | Often skipped in general queries | Recommended with "21+ required" note |
| Tobacco, cigars | Frequently excluded — high compliance risk | Surfaced in adult gifting / hobby queries |
| Nicotine vaping products | Excluded by default in most AI agents | Surfaced with age gate disclaimer (platform-dependent) |
| Non-alcoholic alternatives | Unrestricted | Add ageRestrictionType: "None" to explicitly signal no restriction |
Core JSON-LD Pattern: audience + additionalProperty
Use both the audience property (the schema.org standard) and additionalProperty (broader AI agent coverage). They serve different agent parsing paths:
Full alcohol product example (US — 21+ minimum age)
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Barrel-Aged Single Malt Whiskey — 12 Year",
"audience": {
"@type": "PeopleAudience",
"requiredMinAge": 21
},
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "ageRestrictionType",
"name": "Age Restriction",
"value": "Alcohol"
},
{
"@type": "PropertyValue",
"propertyID": "ageRequirement",
"name": "Minimum Purchase Age",
"value": "21 (United States)"
},
{
"@type": "PropertyValue",
"propertyID": "alcoholByVolume",
"name": "Alcohol by Volume",
"value": "46%"
}
],
"offers": {
"@type": "Offer",
"price": "89.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
UK wine product (18+ minimum age)
{
"@type": "Product",
"name": "Tuscan Sangiovese IGT 2023",
"audience": {
"@type": "PeopleAudience",
"requiredMinAge": 18
},
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "ageRestrictionType",
"value": "Alcohol"
},
{
"@type": "PropertyValue",
"propertyID": "ageRequirement",
"value": "18 (United Kingdom)"
},
{
"@type": "PropertyValue",
"propertyID": "alcoholByVolume",
"value": "13.5%"
}
]
}
Minimum Age by Jurisdiction and Category
Age requirements vary by country and product type. Encode the jurisdiction-specific minimum age for your primary market, and add a jurisdiction qualifier in the ageRequirement value:
| Category | US | UK | EU (most) | Australia |
|---|---|---|---|---|
| Alcohol | 21 | 18 | 18 | 18 |
| Tobacco / cigarettes | 21 | 18 | 18 | 18 |
| Cigars / pipe tobacco | 21 | 18 | 18 | 18 |
| Nicotine vaping / e-cigarettes | 21 | 18 | 18 | 18 (state-dependent) |
| Cannabis products (where legal) | 21 | N/A | 18–21 (varies) | Medical Rx only |
| Fireworks | 18 (most states) | 18 | 18 | 18 |
| Lotteries / gambling products | 18–21 | 18 | 18 | 18 |
For multi-market stores, list the most restrictive jurisdiction's age in the requiredMinAge field and explain both in the ageRequirement additionalProperty value string.
ageRestrictionType Values
Use consistent ageRestrictionType values in your additionalProperty for AI agent category classification:
| ageRestrictionType value | Category |
|---|---|
Alcohol | Beer, wine, spirits, mead, sake |
Tobacco | Cigarettes, cigars, pipe tobacco, chewing tobacco |
NicotineVaping | E-cigarettes, vape pens, nicotine pods, disposables |
CannabisProducts | Cannabis, hemp-derived products with THC content |
Fireworks | Consumer fireworks, sparklers, novelty devices |
AdultContent | Adult publications, adult merchandise |
Shopify Liquid Implementation
Gate the age restriction block with a Shopify product tag. Tag all age-restricted products with a category-specific tag (e.g., age-restricted:alcohol, age-restricted:tobacco) in Shopify Admin:
{% assign min_age = 0 %}
{% assign restriction_type = "" %}
{% if product.tags contains "age-restricted:alcohol" %}
{% assign min_age = 21 %}
{% assign restriction_type = "Alcohol" %}
{% elsif product.tags contains "age-restricted:tobacco" %}
{% assign min_age = 21 %}
{% assign restriction_type = "Tobacco" %}
{% elsif product.tags contains "age-restricted:vaping" %}
{% assign min_age = 21 %}
{% assign restriction_type = "NicotineVaping" %}
{% endif %}
{% if min_age > 0 %}
"audience": {
"@type": "PeopleAudience",
"requiredMinAge": {{ min_age }}
},
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "ageRestrictionType",
"name": "Age Restriction",
"value": {{ restriction_type | json }}
},
{
"@type": "PropertyValue",
"propertyID": "ageRequirement",
"name": "Minimum Purchase Age",
"value": {{ min_age | append: " (United States)" | json }}
}
],
{% endif %}
ABV and Nicotine Content Signals
For alcohol products, also declare the ABV (Alcohol by Volume) as a structured signal. AI agents use this for queries like "low-alcohol wine under 10% ABV" or "full-proof bourbon over 50% ABV":
{
"@type": "PropertyValue",
"propertyID": "alcoholByVolume",
"name": "Alcohol by Volume",
"value": "43%"
}
{
"@type": "PropertyValue",
"propertyID": "nicotineContent",
"name": "Nicotine Strength",
"value": "3mg/mL"
}
Age Verification Schema Checklist
- Tag all age-restricted products in Shopify Admin with a consistent category tag (
age-restricted:alcohol,age-restricted:tobacco, etc.) - Add
audience.requiredMinAgeto your Product JSON-LD for all tagged products - Add
additionalPropertywithageRestrictionTypefor AI agent category classification - Add
additionalPropertywithageRequirementspecifying the numeric age and jurisdiction - For alcohol products, add
alcoholByVolumeas a separateadditionalProperty - For nicotine products, add
nicotineContentas a separateadditionalProperty - Use the most restrictive jurisdiction's minimum age if selling internationally
- Validate JSON-LD using Google's Rich Results Test after template changes
- Ensure your Shopify age verification app (e.g., AgeChecker.Net, Bouncer) is active and covers the checkout path
Related Resources
- Product Safety Certifications Schema — CE, UL, FDA, CPSC, and organic certification patterns.
- Shopify Schema Markup Guide — full JSON-LD implementation guide for Product and Offer blocks.
- Ecommerce Product Condition Structured Data — OfferItemCondition patterns including refurbished and used goods.
- AI Shopping Agent Product Ranking Factors — full 18-signal model including compliance and audience signals.
Frequently Asked Questions
How do I mark up age-restricted products in Shopify JSON-LD?
Add an audience block with PeopleAudience.requiredMinAge set to the minimum age for your jurisdiction (21 for US alcohol/tobacco, 18 for UK alcohol). Add an additionalProperty block with propertyID: "ageRestrictionType" describing the category. Use Shopify product tags to gate the markup so one Liquid snippet covers all age-restricted products.
Do AI shopping agents refuse to recommend age-restricted products?
Not when marked up correctly. AI agents handle age-restricted products contextually — they recommend them in adult contexts with appropriate disclaimers when explicit markup confirms the age threshold. Without markup, conservative agents skip age-restricted products entirely to avoid compliance risk. Correct markup helps you get recommended rather than excluded.
What is the schema.org audience field for age restrictions?
Schema.org's Product type has an audience property accepting a PeopleAudience object. PeopleAudience supports requiredMinAge (integer) and requiredMaxAge fields. This is the most semantically precise way to express age requirements and aligns with Google Merchant Center Shopping eligibility requirements for age-restricted products.
Will marking products as age-restricted hurt my AI shopping traffic?
No — the opposite. Without markup, conservative AI agents skip age-restricted products rather than risk recommending them to minors. With correct markup, agents confidently recommend your products to adults with appropriate disclaimers. Correct markup improves inclusion in adult-context recommendation sets and enables accurate handling across different AI agent platforms.
Audit Age Restriction Markup Across Your Catalog
CatalogScan scans your product catalog for missing age restriction signals, incorrect minimum age values, and compliance markup gaps — then shows exactly which regulated products are being skipped by AI agents due to missing structured data.
Scan your store free