Structured Data Guide

Shopify Visual Artwork & Collectibles Schema: VisualArtwork JSON-LD for Art Galleries and Print Shops

Art galleries, print shops, and collectible stores on Shopify sell products with rich creative identity — artist name, medium, edition number, creation date, physical dimensions — that are entirely invisible to AI shopping agents when only a Product block is used. VisualArtwork is the correct schema.org type for paintings, prints, photographs, sculptures, and digital art sold as products.

TL;DR Add a VisualArtwork JSON-LD block alongside your Product block on art product pages. Essential properties: creator (Person with name and sameAs), artMedium, artworkSurface, artform, artworkEdition, artEditionSize, dateCreated, and width/height via additionalProperty. Store artwork data in Shopify metafields under the artwork namespace and render both blocks from product.liquid.

Why VisualArtwork Schema Is Essential for AI Art Discovery

When someone asks an AI shopping agent "archival giclée prints on cotton rag paper under $300" or "limited edition oil paintings by female artists," the agent needs to resolve three distinct questions about each candidate product:

  1. Is this a visual artwork? (determined by @type: VisualArtwork)
  2. What medium, edition, and format is it? (artMedium, artworkEdition, artform)
  3. What does it cost and can I buy it? (Product with Offer)

Without VisualArtwork structured data, your Shopify art products look identical to a candle or a phone case — generic products with a title, image, and price. The artist attribution, medium, edition scarcity, and physical dimensions that define a work of art are invisible to automated discovery systems.

Google's AI Overviews also surfaces artwork schema in visual and creative product panels. Stores that omit VisualArtwork markup lose these panels and fail to appear for queries where the creative attributes — not just the price — are the primary filter.

VisualArtwork vs. Product: Two Separate JSON-LD Blocks

VisualArtwork is a subtype of CreativeWork, not a subtype of Product. The two types are distinct schema.org hierarchies with different purposes on an art product page:

JSON-LD Block Type Hierarchy Answers
Product Thing → Product Price, availability, condition, shipping, seller, aggregate rating
VisualArtwork Thing → CreativeWork → VisualArtwork Artist, medium, surface, artform, edition designation, edition size, dimensions, creation date, series

Include both as separate <script type="application/ld+json"> elements on the same product page. The Product block handles commerce; the VisualArtwork block handles creative identity. Neither block replaces the other.

VisualArtwork Properties Reference

Property Type Description
artMedium Text Technique or medium: "Oil Paint", "Watercolor", "Acrylic on Canvas", "Archival Inkjet Print", "Photography", "Charcoal", "Gouache", "Screen Print"
artworkSurface Text Physical surface: "Canvas", "Paper", "Wood Panel", "Aluminum Dibond", "Archival Cotton Rag", "Hahnemühle German Etching 310gsm", "Silk", "Rice Paper"
artform Text Artwork category: "Painting", "Sculpture", "Photography", "Mixed Media", "Limited Edition Print", "Drawing", "Collage", "Digital Art"
artworkEdition Text Edition designation string: "7 of 50", "Artist's Proof 3/5", "Edition of 100", "Unique Work"
artEditionSize Integer Total number of copies in the edition as a numeric integer: 50, 100, 200. Use 1 for unique originals.
creator Person or Organization The artist who created the work — use a Person object with name and sameAs links to artist website / Wikipedia / Instagram
dateCreated Date or Text When the artwork was created: "2024-03-15" for a specific date or "2024" for just a year
width Distance Artwork width using Distance: {"@type": "Distance", "name": "16 inches"}
height Distance Artwork height using Distance: {"@type": "Distance", "name": "20 inches"}
depth Distance Relevant for sculptures or framed works where depth is a meaningful attribute
isPartOf CreativeWork Collection or series the artwork belongs to: {"@type": "CreativeWork", "name": "Coastal Light Series"}
locationCreated Place Where the artwork was made: {"@type": "Place", "name": "Barcelona, Spain"}
copyrightHolder Person or Organization Rights holder — typically the artist or the gallery that holds reproduction rights
license URL Copyright or usage rights URL — e.g., a Creative Commons license or a custom rights statement page
image ImageObject Photograph of the artwork with url, width, height in pixels
description Text Artwork statement, provenance notes, or exhibition history

Expressing Artwork Dimensions

Schema.org Distance is loosely typed — it uses a name string for human-readable display. For numeric filtering (e.g., "prints under 18 inches wide"), use additionalProperty with PropertyValue objects instead. The recommended approach is to use both:

Distance approach (human-readable display)

"width": {
  "@type": "Distance",
  "name": "16 inches"
},
"height": {
  "@type": "Distance",
  "name": "20 inches"
}

additionalProperty approach (numeric filtering, recommended)

"additionalProperty": [
  {
    "@type": "PropertyValue",
    "name": "Width",
    "value": 16,
    "unitCode": "INH",
    "unitText": "inches"
  },
  {
    "@type": "PropertyValue",
    "name": "Height",
    "value": 20,
    "unitCode": "INH",
    "unitText": "inches"
  }
]

The additionalProperty approach with UN/CEFACT unitCode values (INH for inches, CMT for centimeters) gives AI agents machine-readable numeric values they can use for range filtering. Use Distance.name for the top-level width/height properties (human display), and add additionalProperty entries with numeric values for filterable dimensions.

Complete JSON-LD Example: Limited Edition Giclée Print

The following example shows both blocks for a limited edition archival inkjet print — edition 7 of 50, 16×20 inches, printed on Hahnemühle cotton rag paper by artist Elena Vasquez.

/* ── Product block (commerce signals) ───────────────────────────── */
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Golden Hour — Limited Edition Giclée Print",
  "description": "Archival inkjet print from Elena Vasquez's Coastal Light Series. Edition 7 of 50, hand-signed and numbered. Printed on Hahnemühle German Etching 310gsm cotton rag paper with archival pigment inks rated 100+ years.",
  "image": {
    "@type": "ImageObject",
    "url": "https://your-gallery.myshopify.com/cdn/shop/products/golden-hour-print.jpg",
    "width": 1200,
    "height": 1500
  },
  "brand": {
    "@type": "Brand",
    "name": "Elena Vasquez Studio"
  },
  "offers": {
    "@type": "Offer",
    "price": "425.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://your-gallery.myshopify.com/products/golden-hour-giclee-print",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": {
      "@type": "Organization",
      "name": "Vasquez Studio Gallery"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.9",
    "reviewCount": "38",
    "bestRating": "5"
  }
}

/* ── VisualArtwork block (creative identity) ─────────────────────── */
{
  "@context": "https://schema.org",
  "@type": "VisualArtwork",
  "name": "Golden Hour",
  "description": "Coastal seascape capturing warm afternoon light over the Catalan coast. Part of the Coastal Light Series painted in Barcelona, 2024.",
  "image": {
    "@type": "ImageObject",
    "url": "https://your-gallery.myshopify.com/cdn/shop/products/golden-hour-print.jpg",
    "width": 1200,
    "height": 1500
  },
  "creator": {
    "@type": "Person",
    "name": "Elena Vasquez",
    "sameAs": [
      "https://elenavasquezart.com",
      "https://www.instagram.com/elenavasquezart/"
    ]
  },
  "artMedium": "Archival Inkjet Print",
  "artworkSurface": "Hahnemühle German Etching 310gsm Cotton Rag",
  "artform": "Limited Edition Print",
  "artworkEdition": "7 of 50",
  "artEditionSize": 50,
  "dateCreated": "2024",
  "width": {
    "@type": "Distance",
    "name": "16 inches"
  },
  "height": {
    "@type": "Distance",
    "name": "20 inches"
  },
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Width",
      "value": 16,
      "unitCode": "INH",
      "unitText": "inches"
    },
    {
      "@type": "PropertyValue",
      "name": "Height",
      "value": 20,
      "unitCode": "INH",
      "unitText": "inches"
    }
  ],
  "isPartOf": {
    "@type": "CreativeWork",
    "name": "Coastal Light Series"
  },
  "locationCreated": {
    "@type": "Place",
    "name": "Barcelona, Spain"
  },
  "copyrightHolder": {
    "@type": "Person",
    "name": "Elena Vasquez"
  },
  "url": "https://your-gallery.myshopify.com/products/golden-hour-giclee-print"
}

Original Painting Example

For an original unique painting, set artEditionSize to 1 and artworkEdition to "Unique Work". The artMedium and artworkSurface reflect the painting materials rather than print materials:

{
  "@context": "https://schema.org",
  "@type": "VisualArtwork",
  "name": "Storm Front Over the Pyrenees",
  "creator": {
    "@type": "Person",
    "name": "Elena Vasquez",
    "sameAs": [
      "https://elenavasquezart.com",
      "https://www.instagram.com/elenavasquezart/"
    ]
  },
  "artMedium": "Oil Paint",
  "artworkSurface": "Linen Canvas",
  "artform": "Painting",
  "artworkEdition": "Unique Work",
  "artEditionSize": 1,
  "dateCreated": "2023-11-04",
  "width": {
    "@type": "Distance",
    "name": "24 inches"
  },
  "height": {
    "@type": "Distance",
    "name": "30 inches"
  },
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Width",
      "value": 24,
      "unitCode": "INH",
      "unitText": "inches"
    },
    {
      "@type": "PropertyValue",
      "name": "Height",
      "value": 30,
      "unitCode": "INH",
      "unitText": "inches"
    }
  ],
  "locationCreated": {
    "@type": "Place",
    "name": "Barcelona, Spain"
  },
  "copyrightHolder": {
    "@type": "Person",
    "name": "Elena Vasquez"
  }
}

Shopify Liquid Template: VisualArtwork + Product JSON-LD

Store artwork properties in Shopify metafields under the artwork namespace. The Liquid template reads these fields and renders both the Product block and the VisualArtwork block from product.liquid.

{% comment %} product.liquid — VisualArtwork JSON-LD alongside Product JSON-LD {% endcomment %}

{% assign artwork_medium = product.metafields.artwork.medium.value %}
{% if artwork_medium %}

<!-- Product block (commerce signals) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {{ product.title | json }},
  "description": {{ product.description | strip_html | truncate: 500 | json }},
  "image": {{ product.featured_image | image_url: width: 1200 | prepend: 'https:' | json }},
  "brand": {
    "@type": "Brand",
    "name": {{ product.metafields.artwork.artist_name.value | default: shop.name | json }}
  },
  "offers": {
    "@type": "Offer",
    "price": {{ product.price | money_without_currency | json }},
    "priceCurrency": {{ cart.currency.iso_code | json }},
    "availability": {% if product.available %}"https://schema.org/InStock"{% else %}"https://schema.org/OutOfStock"{% endif %},
    "url": "https://{{ shop.domain }}{{ product.url }}",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": {
      "@type": "Organization",
      "name": {{ shop.name | json }}
    }
  }
  {% if product.metafields.reviews.rating %}
  ,"aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "{{ product.metafields.reviews.rating.value }}",
    "reviewCount": "{{ product.metafields.reviews.rating_count.value }}",
    "bestRating": "5"
  }
  {% endif %}
}
</script>

<!-- VisualArtwork block (creative identity) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "VisualArtwork",
  "name": {{ product.title | json }},
  "description": {{ product.description | strip_html | truncate: 500 | json }},
  "image": {
    "@type": "ImageObject",
    "url": "https:{{ product.featured_image | image_url: width: 1200 }}",
    "width": 1200
  },
  "creator": {
    "@type": "Person",
    "name": {{ product.metafields.artwork.artist_name.value | json }}
    {% if product.metafields.artwork.artist_url.value %}
    ,"sameAs": [{{ product.metafields.artwork.artist_url.value | json }}]
    {% endif %}
  },
  "artMedium": {{ artwork_medium | json }},
  {% if product.metafields.artwork.surface.value %}
  "artworkSurface": {{ product.metafields.artwork.surface.value | json }},
  {% endif %}
  {% if product.metafields.artwork.artform.value %}
  "artform": {{ product.metafields.artwork.artform.value | json }},
  {% endif %}
  {% if product.metafields.artwork.edition.value %}
  "artworkEdition": {{ product.metafields.artwork.edition.value | json }},
  {% endif %}
  {% if product.metafields.artwork.edition_size.value %}
  "artEditionSize": {{ product.metafields.artwork.edition_size.value }},
  {% endif %}
  {% if product.metafields.artwork.date_created.value %}
  "dateCreated": {{ product.metafields.artwork.date_created.value | date: "%Y-%m-%d" | json }},
  {% endif %}
  {% if product.metafields.artwork.width_in.value %}
  "width": {
    "@type": "Distance",
    "name": "{{ product.metafields.artwork.width_in.value }} inches"
  },
  "height": {
    "@type": "Distance",
    "name": "{{ product.metafields.artwork.height_in.value }} inches"
  },
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Width",
      "value": {{ product.metafields.artwork.width_in.value }},
      "unitCode": "INH",
      "unitText": "inches"
    },
    {
      "@type": "PropertyValue",
      "name": "Height",
      "value": {{ product.metafields.artwork.height_in.value }},
      "unitCode": "INH",
      "unitText": "inches"
    }
  ],
  {% endif %}
  {% if product.metafields.artwork.certificate.value %}
  "description": {{ product.metafields.artwork.certificate.value | json }},
  {% endif %}
  "url": "https://{{ shop.domain }}{{ product.url }}"
}
</script>

{% endif %}

Artwork metafields reference

Metafield key Type Example value Maps to
artwork.medium Single-line text "Archival Inkjet Print" artMedium
artwork.surface Single-line text "Hahnemühle German Etching 310gsm Cotton Rag" artworkSurface
artwork.artform Single-line text "Limited Edition Print" artform
artwork.edition Single-line text "7 of 50" artworkEdition
artwork.edition_size Integer 50 artEditionSize
artwork.artist_name Single-line text "Elena Vasquez" creator.name
artwork.artist_url Single-line text (URL) "https://elenavasquezart.com" creator.sameAs
artwork.date_created Date "2024-03-15" dateCreated
artwork.width_in Decimal 16.0 width / additionalProperty
artwork.height_in Decimal 20.0 height / additionalProperty
artwork.is_original Boolean false Controls artform / artworkEdition defaults
artwork.certificate Single-line text "Hand-signed certificate of authenticity included" description (provenance note)

Common VisualArtwork Schema Mistakes on Shopify

Mistake Effect on AI Discovery Fix
Using only Product @type with no VisualArtwork block Artist name, medium, and edition number are invisible to AI agents handling art discovery queries — the product is treated as a generic item Add a separate VisualArtwork JSON-LD block alongside the Product block; both must be present for full coverage
Putting "Limited Edition Print 7/50" in the product title but not in structured artworkEdition AI agents can't filter by edition availability — "small edition prints" and "open edition prints" queries miss your listings entirely Set artworkEdition to "7 of 50" and artEditionSize to 50 as structured properties; don't rely on title parsing
Setting creator to a plain string instead of a Person or Organization object The artist entity is not linkable to the knowledge graph; author-based queries ("prints by Elena Vasquez") resolve poorly Use {"@type": "Person", "name": "Elena Vasquez", "sameAs": ["https://elenavasquezart.com"]} — a typed object with sameAs
Using the gallery as creator instead of the individual artist Misattribution confuses AI entity linking — the gallery is the seller, not the creator of the artwork Set creator to the artist's Person object; use the Product block's seller or brand for the gallery identity
Omitting artMedium entirely Queries like "archival print on cotton rag" or "oil painting on canvas" require this field — without it, medium-specific queries won't surface your listings Populate artMedium from the artwork.medium metafield; it is the single most important VisualArtwork property after creator

artMedium and artworkSurface Reference Values

These are not schema.org enumerations — they are free-text strings. Use specific, industry-standard terminology so AI agents can match medium-filter queries accurately:

artMedium value artworkSurface value Typical artform
"Oil Paint""Linen Canvas" or "Cotton Canvas""Painting"
"Watercolor""Arches 300gsm Hot Press Paper""Painting"
"Acrylic on Canvas""Canvas""Painting"
"Archival Inkjet Print""Hahnemühle German Etching 310gsm Cotton Rag""Limited Edition Print"
"Archival Inkjet Print""Aluminum Dibond""Limited Edition Print"
"Photography""Archival Baryta Paper""Photography"
"Screen Print""Somerset Velvet 400gsm""Limited Edition Print"
"Charcoal""Fabriano 300gsm Paper""Drawing"
"Gouache""Illustration Board""Painting"
"Digital Print""Silk""Limited Edition Print"

CatalogScan VisualArtwork Schema Checks

CatalogScan's AI Readiness scan detects Shopify stores in art gallery, print shop, and collectibles categories and checks for VisualArtwork JSON-LD alongside standard Product blocks. Stores missing VisualArtwork markup on art products receive a creative-signal gap warning. The scan validates: creator structure (Person vs. plain string), artMedium presence, artworkEdition format, artEditionSize as a numeric integer, and dimension data via additionalProperty PropertyValue objects.

Related guides: Shopify AR & 3D model structured data · Shopify schema markup guide · Ecommerce product schema overview · Shopify Book schema guide · CatalogScan blog

FAQ

Should I use VisualArtwork or Product schema for limited edition prints on Shopify?

Use both as separate JSON-LD blocks. Product handles commerce signals (price, availability, shipping). VisualArtwork handles creative identity (artist, medium, edition, dimensions, creation date). Neither replaces the other — AI agents and Google consume both independently to answer purchase-intent and art-discovery queries.

How does VisualArtwork schema help AI agents discover my art gallery's products?

AI agents answering queries like "archival prints on cotton rag under $400" or "limited edition oil paintings edition under 50" use VisualArtwork properties — artMedium, artworkEdition, artEditionSize, artform — to match and filter inventory. Without these structured fields, the same information buried in product descriptions is invisible to automated discovery systems.

How do I link the artist's identity to the knowledge graph using creator and sameAs?

Set creator to a Person object with name and a sameAs array. Include the artist's official website URL and their Wikipedia article URL if one exists. This lets AI agent knowledge graph systems resolve the artist entity — connecting your product pages to the artist's broader web presence and enabling artist-name queries to surface your listings reliably.

How do I express an original painting vs. a limited edition print in structured data?

For original paintings: set artworkEdition to "Unique Work", artEditionSize to 1, artMedium to "Oil Paint" (or appropriate medium), artworkSurface to "Linen Canvas", and artform to "Painting". For limited edition prints: set artworkEdition to "7 of 50", artEditionSize to 50, artMedium to "Archival Inkjet Print", artworkSurface to the specific paper, and artform to "Limited Edition Print".

What is artworkEdition and how does it differ from artEditionSize?

artworkEdition is the human-readable edition string — "7 of 50", "Artist's Proof 3/5", or "Edition of 100" — describing this specific copy's place in the edition. artEditionSize is the total edition number as a machine-readable integer — 50, 100, or 1 for unique originals. AI agents use artEditionSize for numeric filtering ("small edition prints" means low artEditionSize); artworkEdition is for display and provenance verification.