
Adding more schema isn’t the shortcut into AI search, and product feed optimization is where the effort pays. Google’s position on structured data fits in one sentence.
"Structured data isn't required for generative AI search, and there's no special schema.org markup you need to add."
Google does name an exception that matters to anyone selling something: using products like Merchant Center, including Merchant Center feeds, and Google Business Profiles can help your products and services be visible in both AI responses and other Google Search results (opens in new tab).
Structured data isn’t an AI ranking input. It’s a feed input, and the feed is an input to the surfaces that decide what an AI assistant shows a shopper. Product feed optimization is where the effort pays, and your on-page markup earns its keep by keeping that feed correct rather than by charming a language model.
Markup and feeds are the technical half of the problem. The authority and answer-engine half, the content and citation side of the same problem, is covered in our guide to generative engine optimization for Shopify stores. You need both.
Google Says Structured Data Isn't Required For AI Search
Google says you don’t need to create new machine readable files, AI text files, or markup to appear in its AI features (opens in new tab), and that there’s no special schema.org structured data you need to add. To be eligible to be shown as a supporting link in AI Overviews or AI Mode, a page must be indexed and eligible to be shown in Google Search with a snippet.
Google says there are no additional requirements to appear in AI Overviews or AI Mode, and no other special optimizations are necessary. It describes the retrieval mechanism as a “query fan-out” technique, issuing multiple related searches across subtopics and data sources. For commerce, its advice for these features isn’t about markup at all: keep your Merchant Center and Business Profile information up to date.
The same goes for llms.txt. Google says you don’t need to create machine-readable files or Markdown to appear in Google Search, including its generative AI capabilities, because Google Search itself doesn’t use them. Google says creating them will neither harm nor help your site’s visibility or rankings in Google Search, as Google Search ignores them.
So what about the studies that claim schema-bearing pages get cited more? The measurement that exists comes from SEO tool vendors running their own citation-tracking products as the instrument, the published results point in opposite directions, and one of the more rigorous designs found a small negative effect. There’s no primary, non-vendor evidence establishing that schema causes AI citation.
None of that means your markup is wasted.
Where Product Feed Optimization Actually Enters The Picture
Merchant Center will build a product feed out of the structured data on your site, through the feed input method called website crawl (opens in new tab). It works in three stages. Google scans your website to find product pages, reads the structured data on those pages to understand product details like title, price, and availability, then formats that information and delivers it to your Merchant Center account.
Google checks your website at least once every 24 hours for new products. Products already covered by another data source won’t be duplicated. The prerequisites are to implement structured data, grant Google permission to collect it, and verify and link your website to the Merchant Center account. If the option doesn’t appear, check that your markup is correct, that the account isn’t suspended, and that Googlebot isn’t blocked in robots.txt.
Automatic item updates require four schema.org values (opens in new tab): price, priceCurrency, availability and condition. That requirement turns markup into a product feed optimization task rather than an SEO nicety. The landing page has to contain a Product object with a nested Offer in the offers field, and Google recommends JSON-LD because it’s distinct from any user-facing code, which makes it easier to maintain.
Automatic item updates are the feature that stops your feed from getting disapproved when a price changes on the site before it changes in the feed. Merchant Center uses structured data markup (opens in new tab) in two ways: automatic item updates, and automated feeds via website crawl. Four schema values keep your catalog from going stale between feed pushes.
Product Feed To Shopping Graph To AI Mode
The rest of the chain runs in two hops. The Shopping Graph (opens in new tab) draws on information retailers share directly via Google Merchant Center or from what retailers and brands post across the web. Google describes it as an ML-powered, real-time data set of the world’s products and sellers. Brands, retailers, and other content providers send their product info directly to Google (opens in new tab) through tools like Merchant Center.
Hop two is the AI connection. In May 2025, Google said its shopping experience in AI Mode (opens in new tab) brings together Gemini capabilities with the Shopping Graph to help you browse for inspiration, think through considerations and narrow down products. Google put the Shopping Graph at more than 50 billion product listings, with more than 2 billion of those listings refreshed every hour.
Feed to Shopping Graph, Shopping Graph to AI Mode. Google has published both hops, which is further than any other AI surface has gone.
Google has never said that a Merchant Center feed is required to appear in AI Mode. What it says is softer: feeds “can help your products and services to be visible in both AI responses and other Google Search results.”
There’s still a reason serious merchants run an actual feed rather than trusting the crawl. A Merchant Center feed buys you more than markup alone (opens in new tab): a guarantee that Google knows about all your products, because web crawling isn’t guaranteed; control over update timing at weekly, daily, or hourly cadence; the ability to share data that isn’t on the website at all; and eligibility for the Google Shopping tab. When the two conflict, Google’s advice is to let Merchant Center automatically update its copy of your product data based on the website contents.
Run the feed for coverage and control. Run the markup so the feed stays true to the page.
The Shopify Baseline For Product Feed Optimization
Shopify’s entire product structured data in the Dawn theme is one line. In Dawn’s main product section (opens in new tab), the JSON-LD script tag contains nothing but {{ product | structured_data }}. There’s no hand-built object, no property list, and nothing for a merchant to edit inside the theme.
The structured_data Liquid filter (opens in new tab) works on the product and article objects. Products without variants emit schema.org Product. Products with one or more variants emit ProductGroup. Articles emit Article.
Shopify publishes one example of the filter’s output, and it’s a Product. It contains @context, @id, @type, brand with a nested name, category, description, image, name, offers (with @id, @type, availability, price, priceCurrency, and url), and url. In Shopify’s own example, category and description are both empty strings.
{
"@context": "http://schema.org/",
"@id": "/products/crocodile-tears#product",
"@type": "Product",
"brand": {
"@type": "Brand",
"name": "Polina's Potent Potions"
},
"category": "",
"description": "",
"image": "https://polinas-potent-potions.myshopify.com/cdn/shop/products/amber-beard-oil-bottle.jpg?v=1650642958&width=1920",
"name": "Crocodile tears",
"offers": {
"@id": "/products/crocodile-tears?variant=39888242344001#offer",
"@type": "Offer",
"availability": "http://schema.org/OutOfStock",
"price": "56.00",
"priceCurrency": "CAD",
"url": "https://polinas-potent-potions.myshopify.com/products/crocodile-tears?variant=39888242344001"
},
"url": "https://polinas-potent-potions.myshopify.com/products/crocodile-tears"
}
Compare that against Google’s merchant listing requirements (opens in new tab) and the verdict is good news with a ceiling. Product requires name, image, and offers. The nested Offer requires price (which must be greater than zero for merchant listings) and priceCurrency, and it has to be an Offer rather than an AggregateOffer, with you as the seller.
Shopify’s example clears every one of those. Eligibility is scoped too: only pages where a shopper can purchase a product are eligible for merchant listing experiences, not pages with links to other sites that sell the product.
Clearing required is the floor, not the finish line. Google’s recommended tier is where the differentiating data lives, and that’s where Shopify’s published example stops.
The Recommended Properties Shopify's Example Leaves Out
| Property | Google tier (merchant listings) | In Shopify’s published example output |
|---|---|---|
name |
Product, required | Yes |
image |
Product, required | Yes |
offers |
Product, required | Yes |
offers.price |
Offer, required | Yes |
offers.priceCurrency |
Offer, required | Yes |
offers.availability |
Offer, recommended | Yes |
brand.name |
Product, recommended | Yes |
description |
Product, recommended | Yes, empty string in the example |
category |
Product, recommended | Yes, empty string in the example |
sku |
Product, recommended | Not in the example |
gtin / gtin8 / gtin12 / gtin13 / gtin14 |
Product, recommended | Not in the example |
mpn |
Product, recommended | Not in the example |
aggregateRating |
Product, recommended | Not in the example |
review |
Product, recommended | Not in the example |
itemCondition |
Offer, recommended | Not in the example |
priceValidUntil |
Offer, recommended | Not in the example |
shippingDetails |
Offer, recommended | Not in the example |
hasMerchantReturnPolicy |
Offer, recommended | Not in the example |
Shopify publishes one example, and a single example isn’t an exhaustive contract. The filter’s behavior on a product that has a barcode set is undocumented, so run your own product URL through the Rich Results Test (opens in new tab) and read what your store actually emits.
itemCondition isn’t in Shopify’s published example, and condition is one of the four schema.org values Google requires for automatic item updates. If your rendered output matches the published shape, you’re missing a quarter of the set that keeps your feed synchronized with your site.
Google’s own merchant listing example (opens in new tab) shows the fuller shape, reproduced here exactly as Google publishes it. It carries a priceValidUntil date that has since passed and a UsedCondition value on an otherwise new-looking product, which is Google’s example rather than our recommendation.
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Executive Anvil",
"image": [
"https://example.com/photos/1x1/photo.jpg",
"https://example.com/photos/4x3/photo.jpg",
"https://example.com/photos/16x9/photo.jpg"
],
"description": "Sleeker than ACME's Classic Anvil, the Executive Anvil is perfect for the business traveler looking for something to drop from a height.",
"sku": "0446310786",
"mpn": "925872",
"brand": {
"@type": "Brand",
"name": "ACME"
},
"review": {
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": 4,
"bestRating": 5
},
"author": {
"@type": "Person",
"name": "Fred Benson"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.4,
"reviewCount": 89
},
"offers": {
"@type": "Offer",
"url": "https://example.com/anvil",
"priceCurrency": "USD",
"price": 119.99,
"priceValidUntil": "2024-11-20",
"itemCondition": "https://schema.org/UsedCondition",
"availability": "https://schema.org/InStock"
}
}
Product Schema Mapped To Feed Attributes
What counts as ecommerce structured data? In practice, it’s the Product, ProductGroup, Offer, Review, AggregateRating, OfferShippingDetails, and MerchantReturnPolicy types on your product pages, expressed as JSON-LD. Google’s structured data policies (opens in new tab) accept JSON-LD, Microdata, or RDFa and recommend JSON-LD, and they set the rules that get sites into trouble: don’t block structured data pages with robots.txt or noindex, don’t mark up content that isn’t visible to readers, and specify all required properties for your rich result type.
The consequence of breaking those rules is narrow. Google says a violation costs a page its eligibility for appearance as a rich result, and doesn’t affect how the page ranks in Google web search. A structured data manual action is a rich results problem, not a rankings problem.
Google maps Merchant Center feed attributes onto schema.org properties (opens in new tab) one for one. That mapping is the practical core of product feed optimization on Shopify, because it tells you exactly which markup change moves which feed column.
| Merchant Center attribute | schema.org property | Notes |
|---|---|---|
id |
sku |
Max 50 characters; use SKU where possible |
title |
name |
Required |
description |
description |
Required |
image_link |
image |
Required |
gtin |
gtin8 / gtin12 / gtin13 / gtin14 / gtin / isbn |
Specify only one; correct length and check digit required |
mpn |
mpn |
Used when no manufacturer GTIN exists |
brand |
brand.name |
Use a Brand object with a name |
item_group_id |
inProductGroupWithID |
Parent SKU grouping all variants |
link |
url on the Offer |
Required |
price |
price + priceCurrency on the Offer |
No currency symbols, separators, or spaces |
sale_price |
price, with the original in priceSpecification using priceType="StrikethroughPrice" |
Duration via validFrom and priceValidUntil |
availability |
availability (ItemAvailability) |
InStock, OutOfStock, BackOrder, PreOrder, Discontinued |
condition |
itemCondition |
NewCondition, RefurbishedCondition, UsedCondition |
color / material / pattern |
color / material / pattern |
Direct mapping |
size |
size or size.name |
May use a SizeSpecification object |
gender |
audience.suggestedGender |
male / female / unisex |
age_group |
audience.suggestedMinAge / suggestedMaxAge |
Maps age bands to numeric ranges |
| shipping fields | shippingDetails (OfferShippingDetails) |
Country, region, rate, handling and transit time |
| return fields | hasMerchantReturnPolicy |
Country, category, days, method, fees |
The sale price row is the one merchants get wrong most consistently. Your offers.price carries the current price, and the original price goes in a priceSpecification with "priceType": "https://schema.org/StrikethroughPrice", bounded by validFrom and priceValidUntil. Google’s published fragment looks like this.
"offers": {
"@type": "Offer",
"price": 10.00,
"priceCurrency": "GBP",
"validFrom": "2025-11-20T08:00:00+00:00",
"priceValidUntil": "2025-11-30T23:59:59+00:00",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"priceType": "https://schema.org/StrikethroughPrice",
"price": 15.00,
"priceCurrency": "GBP"
}
}
You can’t mark up a price drop, though. Google computes price drops itself (opens in new tab) by observing price changes for the product over time. You publish an honest price consistently, and Google draws its own conclusion.
Your markup can qualify for product snippets, merchant listing experiences, popular products, the shopping knowledge panel, and Google Images annotations. A product snippet is a text result that includes additional product information such as ratings, review information, price, and availability. Adding the required product information properties for merchant listings means that your product pages can also be eligible for product snippets. Build for merchant listings and snippets come along.
The requirement gap between the two tiers explains why a store that “has schema” still isn’t getting the richer treatment. Product snippets (opens in new tab) require only name plus at least one of review, aggregateRating, or offers, with price required on the Offer and priceCurrency merely recommended. Merchant listings require name, image, and an Offer carrying both price and priceCurrency.
Variants, ProductGroup, And Shopify's Query Parameters
Shopify puts every variant of a product on one canonical URL with a ?variant= query parameter, which is precisely Google’s single-page pattern for product variant structured data (opens in new tab). In that pattern you publish one ProductGroup at the canonical URL and nest each variant under hasVariant. ProductGroup requires only name. Everything that makes it useful sits in the recommended tier: productGroupID, described by Google as the parent SKU, plus variesBy (with values like https://schema.org/size and https://schema.org/color), hasVariant, brand, description, aggregateRating, and review.
The multi-page alternative applies when each variant has its own URL. There you duplicate the full self-contained markup on every page, there’s no single canonical parent URL, and variants point back with isVariantOf and an @id reference. Google also requires each variant to carry a unique identifier such as sku or gtin, and warns that JavaScript-generated markup should account for increased crawl traffic against your server.
Variant products emit ProductGroup, but Shopify publishes no ProductGroup example. Inspect your own variant product URL to see whether the output includes productGroupID, variesBy, or hasVariant rather than assuming either shape.
The identifier itself has a specific home in Shopify’s data model. GTIN lives in the barcode field on ProductVariant (opens in new tab), which holds the barcode, UPC, ISBN, or GTIN associated with the variant, exposed on the Storefront API since the 2022-01 version and readable on the Admin APIs. That’s per variant, which matches Google’s per-variant GTIN expectation exactly.
Get the identifiers right and stop there. Google accepts GTIN values (opens in new tab) of 0, 8, 12, 13, or 14 digits, ignores spaces and dashes, allows up to 10 values per product, requires a correct GS1 check digit, and tells you to avoid restricted prefixes (02, 04, 2) and coupon prefixes (05, 98, 99). Its hardest rule is the one people violate to fill a column: “Don’t submit a GTIN for a product that doesn’t have one.”
If Merchant Center flags limited performance due to missing identifiers (opens in new tab), the fix is to give the product either an accurate GTIN or both an MPN and a brand, working from the Needs attention tab and the affected-products CSV. Genuinely one-of-a-kind or vintage products are exempt and get declared through the identifier-exists attribute. And a number you generated yourself isn’t a fix: Google’s rule is to only provide a GTIN if you’re sure it’s correct and, when in doubt, to not provide one rather than guess or make up a value.
Reviews, Shipping, Returns, And Loyalty Markup
Ratings are the highest-leverage recommended property most Shopify stores skip, and the review snippet requirements (opens in new tab) are short. A Review requires author, itemReviewed and its name (omit when nested), and reviewRating.ratingValue. An AggregateRating requires itemReviewed, ratingValue, and at least one of ratingCount or reviewCount.
Google’s self-serving review rule is that “if the entity that’s being reviewed controls the reviews about itself, their pages that use LocalBusiness or any other type of Organization structured data are ineligible.”
That clause names LocalBusiness and Organization, and Product is a supported host type. Marking up customer reviews on a product page is fine. Fake reviews aren’t: Google prohibits marking up irrelevant or misleading content, such as fake reviews. Reviewer names have to be valid names for a Person or Team, so a “50% off on Black Friday” author value fails.
Shipping and returns are the two properties that most directly change how a shopper reads a result. shippingDetails takes an OfferShippingDetails with a shippingRate (a MonetaryAmount with value and currency, where free shipping is a value of 0), a shippingDestination with addressCountry, and a deliveryTime split into handlingTime and transitTime as QuantitativeValue ranges with a unitCode of DAY.
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": 3.49,
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
Returns work the same way through hasMerchantReturnPolicy, with applicableCountry, a returnPolicyCategory of MerchantReturnFiniteReturnWindow, MerchantReturnNotPermitted, or MerchantReturnUnlimitedWindow, plus merchantReturnDays, returnMethod, returnFees, and returnShippingFeesAmount. Google recommends nesting the MerchantReturnPolicy under the Organization type when one policy covers everything you sell, overriding at product level only where a product genuinely differs. That’s a single edit to your theme layout instead of a per-product field.
Loyalty pricing is the newest layer and it’s country-limited. You declare a loyalty program (opens in new tab) as a MemberProgram on your OnlineStore via hasMemberProgram, with name, description, and hasTiers required, and each MemberProgramTier requiring name and hasTierBenefit. Per-offer member prices then reference a tier through validForMemberTier on a UnitPriceSpecification. It’s available in Australia, Brazil, Canada, France, Germany, Mexico, the UK, and the US, on desktop and mobile, and Google flags membershipPointsEarned as beta.
The JavaScript Rule That Quietly Breaks Product Feed Optimization
Merchant Center requires structured data markup to be present in the HTML returned from the web server. It can’t be generated with JavaScript after the page has loaded, and breaking that rule kills the structured-data-to-feed path outright.
Passing data on your website dynamically with JavaScript after the page is loaded triggers an error. To avoid a mismatched product price (opens in new tab), the prices reflected in the HTML need to match exactly the prices uploaded in Merchant Center.
Three more conditions travel with it. Either the landing page has a single offer, or every offer carries a matching SKU or GTIN identifier. The landing page can’t change based on information about the customer, such as adapting prices based on a customer’s IP address or browser type. And the structured data has to match the values shown to the customer.
On Shopify, that list indicts a specific set of apps. Geolocation currency converters that rewrite prices client-side, discount and bundle apps that inject a promotional price into the DOM after load, subscription widgets that swap the displayed price on selection, and JavaScript variant switchers that update price without a server round trip all put your rendered price out of step with your served HTML. The markup Google reads is the markup in the response body, not the markup in your browser’s inspector.
The same conflict shows up on the availability side. The submitted availability value and the landing page must match, and Google names the common root cause of mismatched product availability (opens in new tab) as the time difference between updates on your website and updates of your product data. Google’s recommended fixes are to enable automatic item updates for frequently changing data and to schedule feed updates so they coincide with website changes. Automatic item updates, again, need price, priceCurrency, availability, and condition in your markup.
Verify with the tools Google names rather than by eye. The Rich Results Test (opens in new tab) shows which rich results a page qualifies for, and Google recommends it specifically for checking price data on landing pages. The Schema Markup Validator (opens in new tab) checks schema.org syntax without Google-specific validation, which makes it the right tool for catching malformed JSON before you debug eligibility.
Product Feed Management Is Hygiene, Not A Launch
Markup is half the job. The Merchant Center product data specification (opens in new tab) sets the other half, and every attribute in it is a lever. Required for every product: id (max 50 characters, ideally your SKU, kept stable across updates), title (max 150 characters), description (max 5,000 characters), link, image_link, availability, and price with an ISO 4217 currency code matching your landing page and checkout.
Google enforces a minimum image size of 500 by 500 pixels from January 31, 2027. The certification attribute became required for EU, EFTA, and UK products needing energy efficiency labels as of April 2025, in the format EC:EPREL:code, superseding energy_efficiency_class except in Switzerland, Norway, and the UK.
And Google requires AI-generated copy to be labeled, with no country carve-out: descriptions created with generative AI go in structured_description and titles in structured_title, both with digital_source_type set to trained_algorithmic_media, and IPTC metadata left intact on AI-generated images. Send both structured_description and plain description and Google says it will use only description, so the label does nothing if you leave the old attribute populated. A separate rule covers AI labels on ad creatives in the European Union, India and New York; that one is about ads rather than feed attributes and the two are easy to conflate.
The conditionally required attributes are where most feeds bleed reach. brand is required for new products except movies, books, and sound recordings. mpn is required only when the product has no manufacturer-assigned GTIN. condition is required for used or refurbished items.
availability_date is required for preorders. item_group_id is required for variants in select countries and required outright for free listings, which is the row that quietly excludes variant catalogs from organic Shopping surfaces.
Apparel carries its own set. color, size, gender, and age_group are required for apparel in Brazil, France, Germany, Japan, the UK, and the US, with color also required whenever a product comes in multiple colors, and material and pattern required when they distinguish a variant. Feed hygiene at this level is unglamorous and it’s the largest single source of recoverable impressions we find in audits.
Then there’s the part of product feed management that most stores never touch: the optional attributes that give an AI shopping surface something to reason about. product_detail supports up to 100 specifications, product_highlight supports 2 to 100 highlights of up to 150 characters each, question_and_answer supports up to 30 pairs, additional_image_link supports up to 10 images, and video_link accepts 6 to 240 second clips at 720p minimum. Google made the intent explicit at Google Marketing Live in May 2026 with conversational attributes (opens in new tab), a tool to help retailers optimize product descriptions for natural-language search.
Product feed optimization for AI surfaces looks less like schema tricks and more like filling in the attributes that answer a shopper’s actual question.
Shopify's Google Channel Requirements
Shopify’s Google & YouTube channel requirements (opens in new tab) add store-level rules on top of Google’s. If a product has a GTIN (Global Trade Item Number), you need to add it in the variant details before you can publish the product. Products without a GTIN need an MPN and brand added in the channel.
Music, movies, and video games require a UPC, EAN, or JAN. Books require an ISBN.
Three limitations cause real incidents. Product options, including variants, need to be in English to sync with Google. Multi-client Merchant Center accounts can’t sync products through the channel. And connecting the channel overwrites existing product feeds to prevent conflicts, so a hand-built feed you rely on is gone the moment you connect.
How To Measure Product Feed Optimization On AI Surfaces
Google gives a first-party answer to “how are my products doing in AI results.” AI performance insights (opens in new tab) in Merchant Center reports share of voice against competitors, classifies shopping queries into a Discovery, Evaluation, and Ready to Buy funnel, and shows the frequency of search types and which of your products appeared. It covers AI Mode and AI Overviews.
Availability is limited and specific. It covers English-language queries for Merchant Center accounts in Australia, Canada, India, New Zealand, and the United States. Google’s own optimization advice is to provide high quality data, keep your Merchant Center account updated, add the relevant search terms into your product titles and descriptions, and populate any missing attributes.
Google will tell you how your products perform on Google’s AI surfaces, from Google’s own data. Third-party AI visibility trackers are estimating from outside the system rather than reporting from inside it.
For classic Search, use the right report. Google split the old Product report (opens in new tab) into a Merchant listings report and a Product snippets report under a Shopping section in Search Console. Merchant listings covers pages where shoppers can buy.
The Merchant listings report includes checks for product snippets that include Offer structured data, so the Product snippets report only needs to be consulted for non-merchant listing pages. If you sell directly, one report is your report.
Product Feed Optimization Beyond Google
Google is the only surface that publishes the whole chain, but it isn’t the only one that publishes a feed spec.
| Surface | Published product data path | Unconfirmed |
|---|---|---|
| Google AI Mode and AI Overviews | Merchant Center feed (upload or website crawl) into the Shopping Graph, which powers AI Mode shopping | Any ranking factor; any statement that a feed is required |
| ChatGPT | Product feed spec with nine required fields, SFTP delivery, approved partners only | Any statement that ChatGPT reads on-page schema.org markup; how products are selected or ranked |
| Microsoft Copilot | Web content plus Microsoft Merchant Center feeds for organic product results | Any required field list; geographic rollout beyond stated merchant requirements |
| Perplexity | A Merchant Program has been announced | Feed format, delivery method, requirements, and selection behavior |
OpenAI's Product Feed Spec
OpenAI runs a product feed program with a published specification. It publishes agentic checkout, delegated payment, and product feeds (opens in new tab) as three separate specifications. OpenAI says the product feed is there so ChatGPT accurately indexes and displays your products with up-to-date price and availability. Onboarding product feeds in ChatGPT is currently available to approved partners (opens in new tab), with applications through a form at chatgpt.com/merchants (opens in new tab).
The file upload product spec (opens in new tab) has nine required fields, and the shape will look familiar to anyone who maintains a Google Shopping product feed.
| Field | OpenAI’s description |
|---|---|
item_id |
Stable ID, unique per item or variant within your feed |
title |
Product name, including the selected variant when relevant |
description |
Factual product description for this item |
url |
Product detail page for the item |
brand |
Product brand as shown on the product page |
seller_name |
Name of the seller supplying this offer |
image_url |
Main product image, showing this variant |
availability |
One of in_stock, out_of_stock, pre_order, backorder, unknown |
price |
Regular item price in major currency units |
OpenAI’s own format is JSONL, but it publishes a Google-compatible path that takes a UTF-8, tab-delimited .txt or .tsv file or a comma-delimited .csv, plus gzipped variants of all three. Your Merchant Center feed work carries over. Delivery is by SFTP (opens in new tab), with full snapshots at least daily, up to 500,000 items per shard, and target shard files under about 500MB.
Eligibility flags decide what your products can do. Search defaults to enabled and checkout to disabled, and ads default to disabled unless your feed has an Ads default configured, all controlled by is_eligible_search, is_eligible_checkout, and is_ads_eligible. Promotions data can only be provided via the API, and the products API spec (opens in new tab) uses a different structure again, requiring id and variants at the product level with id and title on each variant.
Search eligibility and checkout eligibility are separate switches, and checkout is its own implementation: supporting Instant Checkout in ChatGPT (opens in new tab) requires a merchant to implement three flows. A feed gets your products into discovery. Transacting inside the assistant is a separate build, governed by the Agentic Commerce Protocol (opens in new tab): maintained by OpenAI and Stripe, Apache 2.0 licensed, in beta, with a latest stable version of 2026-04-17 and changelog entries running through 2026 covering cart, feed, orders, authentication, and MCP.
OpenAI hasn’t said that ChatGPT reads on-page schema.org markup to build product results, and it hasn’t said how products get selected or ranked. The lever OpenAI publishes a spec for is the feed.
Google’s answer to ACP is the Universal Commerce Protocol (opens in new tab), announced on 2026-01-11 as an open-source standard for agentic commerce, developed with Shopify, Etsy, Wayfair, Target, and Walmart and endorsed by over 20 global partners including Adyen, American Express, Best Buy, Stripe, and Visa.
Its first merchant requirement is an active Merchant Center account, which makes the feed the entry ticket to Google’s agentic stack. Google expanded it at Marketing Live in May 2026 with Universal Cart across multiple retailers, BNPL through Affirm and Klarna in Google Pay, and checkout expansion into Canada, Australia, and the UK. We go deeper on what agents transacting means for your store in our piece on agentic commerce for Shopify merchants.
Microsoft Copilot: Feeds For Discovery, UCP For Transactions
Microsoft describes UCP as a complementary layer to Merchant Center feeds (opens in new tab) that turns product data into executable commerce actions. It draws the line this way: “Feeds primarily enable discovery (products showing up in AI responses), while UCP enables transactions.”
On organic results, Microsoft says it uses both information found on the web and information from a merchant’s feed in the Microsoft Merchant Center. Onboarding runs through Microsoft Merchant Center with a UCP-compliant feed, through payment processors including PayPal and Stripe for eligible merchants, or through Shopify, which auto-enrolled merchants with admin controls. Microsoft’s eligibility requirements, which apply to Copilot Checkout rather than to feeds, are English-language merchants selling to US buyers in USD, meeting privacy standards and maintaining merchant-of-record status.
Perplexity: A Merchant Program Was Announced, Confirm The Mechanics
Perplexity has announced a Merchant Program. Confirm its feed format, delivery method, identifier handling, retailer selection, and commission structure with Perplexity before you build for it.
Where Product Feed Optimization Pays, And Where It's Cargo Cult
Effort spent on markup pays in proportion to how directly it touches the feed, and effort spent on speculative AI signals pays nothing anyone can demonstrate.
The work that pays, roughly in order. First, get price, priceCurrency, availability, and condition into server-rendered JSON-LD, because those four are what Google requires for automatic item updates and they’re the difference between a synchronized catalog and a disapproval queue. Second, fill in identifiers, so sku and the correct gtin variant map onto Merchant Center’s id and gtin.
Third, add shippingDetails and hasMerchantReturnPolicy, nesting the return policy under Organization if one policy covers your catalog. Fourth, add aggregateRating and review where you genuinely have them.
Fifth, and this is where most Shopify stores have the largest untapped surface, populate the feed attributes that describe the product in a shopper’s own language: product_detail, product_highlight, question_and_answer, and richer titles and descriptions. Google is shipping conversational attributes to help with exactly this, and its advice for AI performance is to add relevant search terms to titles and descriptions and populate missing attributes.
The cargo cult, equally plainly. Building an llms.txt file for shopping visibility, when Google says Search ignores such files. Adding schema types with no defined rich result because “AI likes structure.” Chasing ranking factors for AI Mode, ChatGPT, Copilot, or Perplexity that didn’t come from the vendor.
Two more belong on the list. Attempting to mark up a price drop that Google computes on its own. And adding pros and cons markup to a merchant product page, when Google restricts that appearance to editorial product review pages, “not merchant product pages or customer product reviews.”
Also on the cargo cult list: treating the feed as a setup task. Prices move, stock moves, apps get installed, and a theme update changes what your pages render. Product feed management is a recurring hygiene job with a diagnostics queue attached, and Merchant Center’s Needs attention tab is the queue.
None of this replaces a product page that converts once a shopper arrives. Discovery through an AI surface still ends on your PDP, which is where the money is won or lost, and we’ve written up the five product page tests worth running on that. If you’re working the broader question of how your brand gets surfaced and cited across assistants, our answer engine optimization approach covers the non-commerce half of the same problem.
Where To Start Your Product Feed Optimization
Run your top-selling product URL through the Rich Results Test and read the extracted JSON-LD. Check whether price, priceCurrency, availability, and itemCondition are all present, and whether the price in the served HTML matches the price a shopper sees after your apps finish loading. If it doesn’t, that’s your first fix and it isn’t a schema problem.
Then open Merchant Center’s Needs attention tab and clear the identifier and mismatch issues before you add anything new. Then look at your feed’s optional attributes and ask whether a shopper’s question about that product could be answered from the data you’re sending. Then, if you’re in Australia, Canada, India, New Zealand, or the US, turn on AI performance insights and start reading the Discovery, Evaluation, and Ready to Buy funnel against the products you actually care about.
Schema markup isn’t the shortcut into AI search that it’s sold as. It’s the thing that keeps the feed honest, and the feed is the published path.
If your Shopify catalog is running on Dawn’s default markup and a feed nobody has audited since launch, that’s a fixable gap and usually a fast one. Our Google Shopping and Performance Max management team lives in these feeds every day. Want to know what’s actually broken before you commit to anything? Schedule a free Growth Audit and we’ll show you exactly where your product data is costing you visibility, and what it takes to close it.
Not sure where the gap is? That's exactly what the Digital Marketing Growth Audit is for.
A free, no-obligation look at where your site can win more traffic and conversions, with a clear digital marketing roadmap to get there. Just a straight read on where your digital presence stands and where it's headed.



