Shipping & Compliance Guide
Ecommerce Hazardous Material Shipping Restrictions Schema for AI Shopping Agents
Lithium batteries can't fly. Aerosols face quantity limits on air. Pool chemicals are ground-only. When AI shopping agents don't know your product's shipping restrictions, they recommend it to buyers whose address makes it unshippable. Here's how to declare hazmat shipping signals in structured data.
hazmatClass, shippingRestriction, and dangerousGoodsCode additionalProperty entries to your Product JSON-LD. Use the UN hazmat class number and UN identification number for machine-readable precision. Combine with Offer.eligibleRegion to restrict recommendations to shippable territories. Lithium battery products, aerosols, and flammable liquids are the three categories requiring this most urgently.
The Hazmat Visibility Problem in AI Shopping
AI shopping agents are increasingly shipping-aware. Google AI Mode queries like "power bank delivered tomorrow" or "spray paint next-day delivery" imply delivery capability, not just product availability. An agent without hazmat shipping data will recommend lithium-ion power banks for next-day air delivery to Hawaii — an order that cannot legally be fulfilled.
The cost of this gap is asymmetric: the agent looks unreliable, the merchant gets a cancelled order, and the buyer is frustrated. Structured hazmat signals let the AI agent filter accurately rather than recommend first and fail at checkout.
Most common Shopify hazmat categories
| Product type | UN Number | Hazmat class | Air restriction | US ground restriction |
|---|---|---|---|---|
| Lithium-ion batteries (standalone) | UN3480 | Class 9 | Passenger aircraft banned; cargo aircraft limited | None (DOT compliant packaging) |
| Li-ion batteries in equipment | UN3481 | Class 9 | Limited on passenger aircraft (<100Wh) | None (DOT compliant packaging) |
| Aerosols (flammable) | UN1950 | Class 2.1 | Limited quantity (<500mL) on passenger aircraft | None (consumer commodity exception) |
| Nail polish / acetone | UN1993 | Class 3 | Limited quantity only | Flammable liquid; ORM-D or small quantity |
| Pool oxidizers (chlorine tablets) | UN1479 | Class 5.1 | Restricted / prohibited | Must ship separate from flammables |
| Perfumes / colognes (>24% alcohol) | UN1266 | Class 3 | Limited quantity; <1L per package | Consumer commodity ORM-D exception |
Core Hazmat JSON-LD Pattern
Hazmat shipping restrictions belong on the Product as additionalProperty entries. The Offer.shippingDetails and Offer.eligibleRegion properties handle geographic shipping eligibility.
Lithium-ion battery product (UN3481 — batteries in equipment)
{
"@context": "https://schema.org",
"@type": "Product",
"name": "TurboCharge 20000mAh Power Bank",
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "hazmatClass",
"name": "Hazmat Class",
"value": "Class 9 — Miscellaneous Dangerous Goods"
},
{
"@type": "PropertyValue",
"propertyID": "dangerousGoodsCode",
"name": "UN Number",
"value": "UN3481"
},
{
"@type": "PropertyValue",
"propertyID": "shippingRestriction",
"name": "Air Shipping Restriction",
"value": "Passenger aircraft: permitted under 100Wh per cell. Cargo aircraft: permitted. Express air: carrier dependent."
},
{
"@type": "PropertyValue",
"propertyID": "batteryWattHours",
"name": "Battery Capacity",
"value": "74 Wh"
}
],
"offers": {
"@type": "Offer",
"price": "59.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
}
}
}
}
Ground-only product (aerosols, flammables)
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Automotive Spray Paint — Gloss Black 400mL",
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "hazmatClass",
"name": "Hazmat Class",
"value": "Class 2.1 — Flammable Gas (aerosol)"
},
{
"@type": "PropertyValue",
"propertyID": "dangerousGoodsCode",
"name": "UN Number",
"value": "UN1950"
},
{
"@type": "PropertyValue",
"propertyID": "shippingRestriction",
"name": "Shipping Restriction",
"value": "Ground shipping only within contiguous United States (lower 48 states). Cannot ship to Alaska, Hawaii, Puerto Rico, or US territories via any carrier. Cannot ship internationally."
}
],
"offers": {
"@type": "Offer",
"price": "12.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"eligibleRegion": {
"@type": "DefinedRegion",
"addressCountry": "US",
"addressRegion": ["AL","AR","AZ","CA","CO","CT","DE","FL","GA","IA","ID","IL","IN","KS","KY","LA","MA","MD","ME","MI","MN","MO","MS","MT","NC","ND","NE","NH","NJ","NM","NV","NY","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VA","VT","WA","WI","WV","WY","DC"]
}
}
}
Pool chemicals — restricted shipping with separation requirement
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Pool Shock Chlorine Granules 25lb",
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "hazmatClass",
"name": "Hazmat Class",
"value": "Class 5.1 — Oxidizing Substance"
},
{
"@type": "PropertyValue",
"propertyID": "dangerousGoodsCode",
"name": "UN Number",
"value": "UN1479"
},
{
"@type": "PropertyValue",
"propertyID": "shippingRestriction",
"name": "Shipping Restriction",
"value": "Ground only. Cannot ship by air. Must not ship in same package as flammable liquids, acids, or reducing agents. US domestic ground only."
},
{
"@type": "PropertyValue",
"propertyID": "shippingNote",
"name": "Compatibility Note",
"value": "Cannot be shipped with flammable liquids (UN Class 3), organic peroxides (Class 5.2), or corrosive materials (Class 8)"
}
]
}
Shopify Liquid Implementation
Use Shopify product tags for simple hazmat flags and metafields for the full structured data payload. This approach lets your operations team update hazmat classification without theme edits.
Tag-based hazmat detection
{% if product.tags contains 'hazmat-class9' or product.tags contains 'hazmat-lithium' %}
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "hazmatClass",
"name": "Hazmat Class",
"value": "Class 9 — Miscellaneous Dangerous Goods"
},
{
"@type": "PropertyValue",
"propertyID": "shippingRestriction",
"name": "Air Shipping Restriction",
"value": "Air shipping subject to IATA DGR Section II lithium battery limitations. Express air carriers may apply additional restrictions."
}
]
{% elsif product.tags contains 'hazmat-ground-only' or product.tags contains 'hazmat-aerosol' %}
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "shippingRestriction",
"name": "Shipping Restriction",
"value": "Ground shipping only. Restricted to contiguous US 48 states."
}
]
{% endif %}
Metafield-based full hazmat payload
{% assign hm = product.metafields.hazmat %}
{% if hm.class != blank %}
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "hazmatClass",
"name": "Hazmat Class",
"value": {{ hm.class | json }}
},
{
"@type": "PropertyValue",
"propertyID": "dangerousGoodsCode",
"name": "UN Number",
"value": {{ hm.un_number | json }}
},
{
"@type": "PropertyValue",
"propertyID": "shippingRestriction",
"name": "Shipping Restriction",
"value": {{ hm.restriction | json }}
}
],
{% if hm.us48_only == true %}
"eligibleRegion": {
"@type": "DefinedRegion",
"addressCountry": "US",
"addressRegion": ["AL","AR","AZ","CA","CO","CT","DE","FL","GA","IA","ID","IL","IN","KS","KY","LA","MA","MD","ME","MI","MN","MO","MS","MT","NC","ND","NE","NH","NJ","NM","NV","NY","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VA","VT","WA","WI","WV","WY","DC"]
},
{% endif %}
{% endif %}
Shipping Restriction Reference by Hazmat Class
| Class | Type | propertyID to use | Key restriction to declare |
|---|---|---|---|
| Class 1 | Explosives | hazmatClass, shippingRestriction |
Typically prohibited entirely from ecommerce shipping |
| Class 2.1 | Flammable gases / aerosols | hazmatClass, shippingRestriction |
Air limited; consumer commodity exception for small quantities |
| Class 3 | Flammable liquids | hazmatClass, dangerousGoodsCode |
Air limited; ORM-D exception for small retail quantities |
| Class 5.1 | Oxidizing agents | hazmatClass, shippingNote |
Ground only; separation from flammables required |
| Class 8 | Corrosives | hazmatClass, shippingRestriction |
Special packaging; limited on passenger aircraft |
| Class 9 | Miscellaneous (incl. Li batteries) | hazmatClass, dangerousGoodsCode, batteryWattHours |
Wh-dependent air limits; UN3480 banned on passenger aircraft |
Implementation Checklist
- Identify all products in your catalog that contain hazardous materials (batteries, aerosols, flammables, oxidizers, corrosives)
- Add
hazmatClassadditionalPropertywith the DOT/IATA class designation - Add
dangerousGoodsCodeadditionalPropertywith the UN identification number - Add
shippingRestrictionadditionalPropertywith plain-language restriction description - For ground-only products: add
Offer.eligibleRegionwith the list of eligible US state codes - For lithium battery products: add
batteryWattHoursadditionalProperty— this determines air eligibility - Tag products with hazmat tags in Shopify admin for Liquid-based detection
- Ensure checkout shipping rate rules exclude ineligible carriers for hazmat products
- Ping IndexNow after adding hazmat markup to existing products
Frequently Asked Questions
What schema.org properties declare hazmat shipping restrictions?
Use additionalProperty entries with propertyID 'hazmatClass' (the UN hazmat class number), 'shippingRestriction' (plain-language restriction), and 'dangerousGoodsCode' (UN number). For geographic restrictions, add Offer.eligibleRegion with a DefinedRegion listing eligible countries and states. The combination of hazmatClass, shippingRestriction, and eligibleRegion is the most complete machine-readable signal for AI agents.
How do AI shopping agents handle hazmat shipping restrictions?
AI shopping agents that are shipping-aware use shipping eligibility to filter recommendations by delivery address. If a user asks for 'lithium battery tools shipped to Hawaii', an agent with hazmat markup knows these products typically cannot ship to Hawaii via air, and can either surface ground-shipped alternatives or notify the user of the restriction. Without structured shipping restrictions, AI agents recommend products that may be unshippable to the user's location.
Do I need to declare UN numbers in my Shopify structured data?
UN numbers are required on shipping labels and manifests, but declaring them in structured data is optional from a regulatory perspective. However, including the UN number in a dangerousGoodsCode additionalProperty makes your hazmat classification unambiguous for AI agents. 'UN3480' (lithium batteries, unpackaged) is more precise than a generic hazmat class. AI procurement tools increasingly use UN numbers for automated compliance checks.
How do I declare that a product can only ship via ground transport?
Add a shippingRestriction additionalProperty with value 'ground-only' and add Offer.eligibleRegion excluding non-ground-accessible territories. If your Shopify store uses carrier-calculated shipping, also add a 'ground-only' tag to the product — Shopify's shipping rate filters can then exclude air rates in checkout. The structured data signals the restriction to AI agents; the Shopify configuration enforces it at purchase.
What Shopify products are most commonly affected by hazmat restrictions?
The most common categories are: lithium-ion batteries and battery-powered devices (UN 3480/3481), aerosols and spray cans (UN 1950), nail polish and acetone (Class 3 flammables), pool chemicals and oxidizers (Class 5.1), and lithium metal batteries in camera and flashlight products. Each category has specific IATA Dangerous Goods Regulations and 49 CFR rules governing how they can ship.