Structured Data Guide
Shopify Digital Product Delivery Schema
Shopify's default JSON-LD treats digital products like physical ones — no delivery method, no file format, no instant-access signal. AI shopping agents use these signals to filter for "immediate download" queries and to exclude your product from shipping-related results where it doesn't belong.
OnlineOnly for availability, set deliveryLeadTime to zero, add fileFormat and contentSize to the product block, and choose the correct @type for the content category (DigitalDocument, SoftwareApplication, Course). These four signals together tell AI agents your product is a digital download, what format it delivers in, and that it's available instantly.
Choosing the Right @type for Digital Products
schema.org has multiple types suited to digital goods. The correct choice depends on what the product delivers:
| Product category | Best @type | Use additionalType for |
|---|---|---|
| PDF guides, ebooks, templates | DigitalDocument |
Product (for shopping recommendations) |
| Software, plugins, themes, apps | SoftwareApplication |
Product |
| Online courses, tutorials | Course |
Product |
| Video content, films | VideoObject |
Product |
| Music, audio files | AudioObject |
Product |
| SVG illustrations, photo packs | ImageObject |
Product |
| Fonts, design assets | DigitalDocument |
Product |
AI agents use @type to filter by content category. A SoftwareApplication with applicationCategory: "DesignApplication" is surfaced for "design software" queries that a generic Product would not match.
Digital Product JSON-LD Patterns
PDF guide / ebook
{
"@context": "https://schema.org",
"@type": ["DigitalDocument", "Product"],
"name": "{{ product.title | escape }}",
"description": {{ product.description | strip_html | truncatewords: 150 | json }},
"url": "{{ shop.url }}/products/{{ product.handle }}",
"image": "{{ product.featured_image | img_url: '1200x630' }}",
"fileFormat": "application/pdf",
"contentSize": "{{ product.metafields.digital.file_size | default: '2.5 MB' }}",
"encodingFormat": "application/pdf",
"offers": {
"@type": "Offer",
"price": {{ product.price | money_without_currency | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"availability": "https://schema.org/OnlineOnly",
"deliveryLeadTime": {
"@type": "ShippingDeliveryTime",
"businessDays": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["https://schema.org/Monday","https://schema.org/Tuesday","https://schema.org/Wednesday","https://schema.org/Thursday","https://schema.org/Friday","https://schema.org/Saturday","https://schema.org/Sunday"]
},
"handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 0, "unitCode": "DAY" },
"transitTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 0, "unitCode": "DAY" }
},
"description": "Instant digital download — PDF delivered immediately after purchase."
}
}
Software / Shopify theme / plugin
{
"@context": "https://schema.org",
"@type": ["SoftwareApplication", "Product"],
"name": {{ product.title | json }},
"applicationCategory": "{{ product.metafields.software.category | default: 'WebApplication' }}",
"operatingSystem": "Web",
"softwareVersion": "{{ product.metafields.software.version | default: '1.0' }}",
"fileFormat": "application/zip",
"contentSize": "{{ product.metafields.digital.file_size | default: '1.2 MB' }}",
"offers": {
"@type": "Offer",
"price": {{ product.price | money_without_currency | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"availability": "https://schema.org/OnlineOnly",
"description": "License key and download delivered by email after purchase."
}
}
Online course
{
"@context": "https://schema.org",
"@type": ["Course", "Product"],
"name": {{ product.title | json }},
"description": {{ product.description | strip_html | truncatewords: 150 | json }},
"provider": {
"@type": "Organization",
"name": {{ shop.name | json }},
"url": {{ shop.url | json }}
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "online",
"courseSchedule": {
"@type": "Schedule",
"repeatFrequency": "P0D",
"description": "Self-paced — start any time"
}
},
"offers": {
"@type": "Offer",
"price": {{ product.price | money_without_currency | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"availability": "https://schema.org/OnlineOnly",
"validFrom": "2026-01-01"
}
}
Instant Delivery and No-Shipping Signals
The three signals AI agents use to classify a product as "instant digital delivery":
| Signal | Property | Correct value | Missing value effect |
|---|---|---|---|
| Availability type | Offer.availability |
OnlineOnly |
May appear in "in-store pickup available" results |
| Zero delivery time | Offer.deliveryLeadTime → transitTime.minValue: 0 |
0 days | Treated as physical with unknown shipping time |
| File format | Product.fileFormat |
MIME type string (e.g., application/pdf) |
Agent can't confirm format compatibility for buyer |
Common delivery description patterns
In addition to structured properties, the Offer.description field is parsed by AI agents for delivery context. Effective patterns:
- "Instant digital download — PDF delivered immediately after purchase."
- "Download link emailed within 5 minutes of purchase. No physical shipping."
- "Lifetime access. Download anytime from your account."
- "ZIP file includes 47 SVG icons + editable Figma source. No physical product."
Avoid vague descriptions like "digital product" with no delivery context — this matches too broadly and gives agents no useful delivery signal.
Metafields for Digital Product Data
For consistent digital product structured data at scale, use Shopify metafields to store digital-specific attributes. Create a digital namespace with these definitions:
| Metafield key | Type | Used in JSON-LD |
|---|---|---|
digital.file_size |
Single line text | contentSize ("12.4 MB") |
digital.file_format |
Single line text | fileFormat ("application/pdf") |
digital.software_version |
Single line text | softwareVersion ("3.2.1") |
digital.application_category |
Single line text | applicationCategory ("WebApplication") |
digital.page_count |
Integer | numberOfPages (DigitalDocument) |
Digital Product Structured Data Checklist
| # | Check | Priority |
|---|---|---|
| 1 | Offer availability is OnlineOnly, not InStock |
Critical |
| 2 | @type uses the appropriate digital content type (DigitalDocument, SoftwareApplication, Course) |
Critical |
| 3 | deliveryLeadTime set with 0-day transit and handling time |
High |
| 4 | fileFormat contains MIME type string for the delivered file |
High |
| 5 | Offer description states delivery method in plain text ("download link emailed") |
High |
| 6 | contentSize present with file size in standard units |
Medium |
| 7 | Software products have applicationCategory and operatingSystem |
Medium |
| 8 | Course products have hasCourseInstance with courseMode: "online" |
Medium |
| 9 | Product page does not include shipping calculator or shipping estimate UI for digital items | Medium |
Related Resources
- Shopify Digital Products AI Visibility — broader guide to making digital products discoverable across AI shopping channels.
- Shopify Schema Markup Guide — full Offer and Product JSON-LD reference with Liquid implementation examples.
- Shopify Product Availability Structured Data — OnlineOnly vs. InStock vs. InStoreOnly: when to use each.
- Ecommerce Shipping Time Structured Data — physical product delivery lead time patterns for comparison.
Frequently Asked Questions
What schema.org type should I use for a digital download product in Shopify?
For most digital products, use the base Product type combined with a more specific digital type. Use DigitalDocument for PDFs and ebooks, SoftwareApplication for apps and plugins, Course for online courses, and VideoObject for video content. This helps AI agents correctly categorize your product for "instant download" and "no shipping required" query contexts.
How do I signal "instant download" in JSON-LD for AI shopping agents?
Set the Offer's deliveryLeadTime to a ShippingDeliveryTime with transitTime.minValue and maxValue both set to 0. Combine this with availability: OnlineOnly and an Offer.description noting "Instant digital download." AI agents use this cluster of signals to filter for "instant access" and "download immediately" queries.
Should digital products use InStock or OnlineOnly for availability?
Use OnlineOnly. It correctly communicates that the product is available for purchase online but cannot be physically picked up or shipped. InStock is technically accurate but doesn't communicate the digital nature, which can cause your product to appear incorrectly in "available in store" or "near me" results.
How do I handle file format and file size in product structured data?
Add a fileFormat field to the Product containing the MIME type (e.g., application/pdf, application/zip). For file size, use contentSize with a string in standard units ("12.4 MB"). AI agents that assist with software and digital asset purchases use these signals to confirm format compatibility before recommending.
Audit Your Digital Product Structured Data
CatalogScan detects digital products missing OnlineOnly availability, zero-day delivery lead time, and file format signals — three checks that together determine whether AI agents surface your downloads for instant-access queries.