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.
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:
- GTIN validator error: Google's Rich Results Test flags the product as missing a required GTIN. Gift cards have no EAN/UPC — they're proprietary redemption codes — so the standard structured data fails the technical quality check. Google can suppress shopping listings with this error.
- Wrong price display: If your gift card has denominations of $25, $50, $100, and $200 and Shopify renders only the first variant's price, AI agents see a "$25 product" with no indication it's variable. A shopper asking "gift card for $100" won't match it.
- No gift-use signals: A shopper asking "digital gift ideas" or "last-minute gift under $50" is describing a gift card perfectly — but without
additionalPropertyvalues marking it as a gift card (digital delivery, instant send, store credit), the AI agent can't connect the query to the product.
AI agent behavior: gift cards across platforms
| Agent | Without gift card schema | With correct schema | Critical 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
| Error | What it causes | Fix |
|---|---|---|
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