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.

TL;DR For digital products: use 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.deliveryLeadTimetransitTime.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:

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

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.

Scan your store free