CatalogScan

SEO Guide · 2026

Shopify Gift Card SEO and Structured Data (2026)

Gift cards are one of the highest-converting product types in e-commerce — yet they're almost universally invisible to AI shopping agents because Shopify outputs generic product schema that fails four of the five signals agents use to recommend them. Here's the complete fix.

TL;DR Shopify's default JSON-LD treats gift cards as ordinary products. This causes three failures: a missing-GTIN warning that can suppress shopping results, no denomination range visible to AI agents, and no delivery-method signal. Fix: use AggregateOffer with lowPrice/highPrice for variable denominations, add identifier_exists: false to suppress the GTIN requirement, and use additionalProperty to signal email delivery. A gift card detected as product type gift_cards in Liquid can output this automatically with a conditional template block.

Why AI agents can't recommend your gift card

Shopify's product JSON-LD renderer treats a gift card product identically to a physical product. It outputs a Product schema with a name, price, and availability — but without any of the signals AI shopping agents need to correctly surface gift cards in recommendation queries.

Gift cards fail in three distinct ways when structured data is wrong or absent:

AI agent behavior: gift cards across platforms

AgentWithout gift card schemaWith correct schemaCritical signal
ChatGPT Shopping Shows as product at one denomination; "gift card" not surfaced for gift-idea queries Surfaces for "gift card", "digital gift", "last-minute gift" queries with price range shown AggregateOffer with lowPrice/highPrice
Google AI Mode May suppress from Shopping if GTIN missing; shows wrong price Shows denomination range; appears in "digital gift" carousels identifier_exists: false + AggregateOffer
Perplexity Shopping Skips gift cards in gift recommendation queries; no price range Includes in "gift ideas" with correct price range and store name additionalProperty "Gift type: store credit"
Bing Shopping AI Price display inconsistent; no denomination context Shows "from $X" denomination range; correct product type classification AggregateOffer denomination range
Google Shopping May require special exemption for missing GTIN; risk of disapproval Eligible for gift card product type exemption; correct denomination display google_product_category: 53 + identifier_exists: false

Structured data for a fixed-denomination gift card

For a gift card with a single fixed denomination (e.g. a $50 gift card only), use a standard Product schema with a single Offer, but add identifier_exists: false to suppress GTIN validation and include additionalProperty values for the gift-card-specific signals.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Your Store Gift Card — $50",
  "description": "A $50 gift card valid for any purchase at Your Store. Delivered instantly by email. No expiry.",
  "brand": {
    "@type": "Brand",
    "name": "Your Store"
  },
  "identifier_exists": false,
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "Product type", "value": "Gift card" },
    { "@type": "PropertyValue", "name": "Delivery method", "value": "Email (instant)" },
    { "@type": "PropertyValue", "name": "Valid for", "value": "All products in store" },
    { "@type": "PropertyValue", "name": "Expiry", "value": "No expiry" },
    { "@type": "PropertyValue", "name": "Denomination", "value": "Fixed: $50" }
  ],
  "offers": {
    "@type": "Offer",
    "price": "50.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://yourstore.com/products/gift-card",
    "seller": { "@type": "Organization", "name": "Your Store" }
  }
}

Structured data for variable-denomination gift cards

Most Shopify gift cards have multiple denomination options implemented as product variants. Use AggregateOffer with an array of individual Offer objects — one per denomination. Set offerCount to the number of denominations available.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Your Store Gift Card",
  "description": "A digital gift card valid for any purchase at Your Store. Choose from $10 to $500. Delivered instantly by email with a unique redemption code. Never expires.",
  "brand": { "@type": "Brand", "name": "Your Store" },
  "identifier_exists": false,
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "Product type", "value": "Gift card" },
    { "@type": "PropertyValue", "name": "Delivery method", "value": "Email (instant)" },
    { "@type": "PropertyValue", "name": "Valid for", "value": "All products in store" },
    { "@type": "PropertyValue", "name": "Denomination range", "value": "$10 to $500" },
    { "@type": "PropertyValue", "name": "Expiry", "value": "No expiry" }
  ],
  "offers": {
    "@type": "AggregateOffer",
    "lowPrice": "10.00",
    "highPrice": "500.00",
    "priceCurrency": "USD",
    "offerCount": 5,
    "offers": [
      {
        "@type": "Offer",
        "name": "$10 Gift Card",
        "price": "10.00",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock",
        "url": "https://yourstore.com/products/gift-card?variant=10"
      },
      {
        "@type": "Offer",
        "name": "$25 Gift Card",
        "price": "25.00",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock",
        "url": "https://yourstore.com/products/gift-card?variant=25"
      },
      {
        "@type": "Offer",
        "name": "$50 Gift Card",
        "price": "50.00",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock",
        "url": "https://yourstore.com/products/gift-card?variant=50"
      },
      {
        "@type": "Offer",
        "name": "$100 Gift Card",
        "price": "100.00",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock",
        "url": "https://yourstore.com/products/gift-card?variant=100"
      },
      {
        "@type": "Offer",
        "name": "$500 Gift Card",
        "price": "500.00",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock",
        "url": "https://yourstore.com/products/gift-card?variant=500"
      }
    ]
  }
}

Detecting gift cards in Shopify Liquid

Shopify stores gift card products with product.gift_card? returning true. Use this Liquid conditional to output gift-card-specific JSON-LD only on the gift card product template, and standard product JSON-LD everywhere else.

{% if product.gift_card? %}
  {% assign gc_prices = product.variants | map: 'price' | sort %}
  {% assign gc_low = gc_prices | first | divided_by: 100.0 %}
  {% assign gc_high = gc_prices | last | divided_by: 100.0 %}
  
{% endif %}

Common gift card structured data errors

ErrorWhat it causesFix
Missing identifier_exists: false Google flags as "missing GTIN"; risk of shopping result suppression Add "identifier_exists": false at Product level
Single price from first variant AI agents see "$10 gift card" with no range context; query mismatch for higher denominations Use AggregateOffer with lowPrice, highPrice, all variants as Offer array
No additionalProperty gift signals Not surfaced for "gift idea", "digital gift", "last-minute gift" queries Add Product type, Delivery method, Valid for, Expiry properties
Physical product GTIN schema on gift card Structured data validator error; confuses AI agent product classification Remove gtin, gtin8, gtin12, gtin13, mpn fields entirely
availability: OutOfStock on gift card AI agents skip unavailable products; gift cards are always in stock (digital) Always set InStock for digital gift cards — they can't sell out
No email delivery signal AI agents may tag as physical product; irrelevant for "digital gift" queries Add ShippingDetails with doesNotShip: true or additionalProperty "Delivery: Email"

Gift cards and the Google Merchant Center exemption

Google Merchant Center has a product category specifically for gift cards: category ID 53 (Gift Cards). When you assign this category in your feed and include identifier_exists: false, Google waives the GTIN requirement that would otherwise cause product disapproval. For Shopify merchants using the Google & YouTube app, you should set this as a custom product category via a metafield rather than relying on automatic categorization — Shopify's auto-categorizer often misclassifies gift cards as physical products in the gift/novelty category.

In your JSON-LD, you can hint at the product category using:

"additionalType": "https://www.google.com/basepages/producttype/Apparel%20&%20Accessories>Gift%20Cards"

This is non-normative in schema.org but recognized by Google's product crawlers as a category hint. Pair it with the full Google Shopping feed product category assignment for maximum coverage.

Verifying your gift card structured data

Run this command to confirm your gift card page outputs the correct JSON-LD:

curl -s https://yourstore.com/products/gift-card \
  | python3 -c "
import sys, json
from html.parser import HTMLParser

class JSONLDParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.in_ld = False
        self.data = []
    def handle_starttag(self, tag, attrs):
        if tag == 'script' and ('type','application/ld+json') in attrs:
            self.in_ld = True
    def handle_endtag(self, tag):
        if tag == 'script':
            self.in_ld = False
    def handle_data(self, data):
        if self.in_ld:
            self.data.append(data)

p = JSONLDParser()
p.feed(sys.stdin.read())
for d in p.data:
    j = json.loads(d.strip())
    print(json.dumps(j, indent=2))
"

Look for: identifier_exists: false at the Product level, @type: AggregateOffer with lowPrice and highPrice both populated, and at least 3 additionalProperty entries for gift card signals. If you see a single Offer at one price with no identifier_exists, your theme is outputting default product schema and you need the Liquid conditional above.

Frequently asked questions

Can AI shopping agents recommend Shopify gift cards?

Yes, but only with proper structured data. Without JSON-LD, AI agents treat gift cards as generic products with no denomination context, no gift use-case signals, and no clear indication the product is redeemable for store credit. With correct schema — AggregateOffer for variable denominations, identifier_exists: false, and additionalProperty values like "Delivery: Email" — AI agents can correctly recommend gift cards for "gift ideas", "last-minute gifts", and "digital gift card" queries.

Do Shopify gift cards need a GTIN or barcode?

No. Gift card products in Shopify do not have GTINs, MPNs, or barcodes. In your JSON-LD, suppress the GTIN requirement by including identifier_exists: false. This prevents Google's Rich Results validator from flagging the gift card as a product with a missing required identifier, which would otherwise risk suppressing it from shopping results.

How do I mark up a gift card with multiple denominations?

Use AggregateOffer for variable-denomination gift cards. Set lowPrice to your smallest denomination, highPrice to your largest, offerCount to the number of denomination options, and include each denomination as an individual Offer in the offers array. This lets AI agents display "from $10 to $200" rather than picking one price at random.

Does Shopify add gift card structured data automatically?

No. Shopify's default product JSON-LD does not handle gift card product types specially. It outputs generic Product schema without suppressing the GTIN warning, without denomination range, and without digital-delivery signals. Merchants must add custom Liquid JSON-LD to their gift card product template to output correct schema for AI shopping agents.

See how your gift cards score

CatalogScan checks gift card structured data — identifier_exists, AggregateOffer denominations, and missing gift signals — in your free scan.

Scan your store free