DeviLabs Book a call
GEO
Services
Pricing Work Case studies About Blog Book a call
info@devilab.eu · Wassenaar, NL
GEO

How to Optimize Product Pages for AI Search

We read 24 real DTC product pages the way a crawler sees them. Here is what they miss, what the platforms say they read, and a rewrite you can copy.

In this article
  1. What does an AI engine actually read on a product page?
  2. What we found on 24 real DTC product pages
  3. Schema helps machines read the page. It does not earn citations
  4. The anatomy of a product page AI can use
  5. A before-and-after rewrite
  6. Where to start
  7. Frequently asked questions
  8. Sources

To optimize product pages for AI search, write each page so a machine can read every fact a buyer asks about, from what the product is made of to what returns cost. Put those facts in plain text in the initial HTML, mark up price, identifiers and rating, and keep them identical to your product feed.

Half of that is ordinary product SEO. The new half: AI engines read your product twice, once from a product feed and once from the live page, and most stores only look after the page.

What does an AI engine actually read on a product page?

It reads two things: a structured product feed and the page itself. Shopify Catalog passes your titles, descriptions, variants and prices to AI shopping agents, and search-based engines crawl the live page. If the description is vague, the feed is vague. If page and feed disagree, you cannot control which version an engine uses.

The feed side is the part most guides skip. Shopify's own explainer on Catalog says it maps products to a standard taxonomy and that "Shopify will infer missing attributes when the product data is clear enough." Your description is the raw material for those attributes. A paragraph about mornings and energy gives the inference nothing to work with; "18/8 stainless steel, 750 mL, fits a car cup holder" gives it something to read.

OpenAI's product feed specification points the same way. It asks for a "factual product description" and a material field for "principal materials in the item", with further fields for dimensions, weight, review count and star rating. But it says "raw review entries and question-and-answer lists are not part of this discovery contract." The feed carries the aggregate; the page carries the detail.

Google says less. Its guide to AI features says normal SEO applies, that structured data should match the visible text on the page, and that there is "no special schema.org structured data that you need to add."

What we found on 24 real DTC product pages

Most product pages already carry basic Product JSON-LD with a price and stock status. What they leave out is the data that identifies the exact product and shows other buyers liked it: GTINs or part numbers, and star ratings in any markup. Shipping and return terms were almost never in the product's own markup.

The sample: the 29 brands in Shopify's article on DTC brand examples, the same list we used for our entity SEO audit. On 20 October 2026 we took, for each store, the first priced product in its public catalog file (gift cards skipped), loaded that product page without running JavaScript and read its JSON-LD. Five stores did not expose a readable catalog or page, which left 24 of the 29. We then loaded all 24 in headless Chrome, let the scripts run, and checked for rating markup again.

What the product page carried (initial HTML) Pages (of 24)
Product or ProductGroup JSON-LD 21
A price and a stock status in that JSON-LD 21
A brand name 20
A GTIN or manufacturer part number 10
A star rating in readable markup (JSON-LD or microdata) 8
Individual review entries 0
Shipping details in the product JSON-LD 3
A return policy in the product JSON-LD 3
FAQPage JSON-LD 3

Ratings are missing, and JavaScript does not add them. 15 of the 24 pages had no readable rating markup at all. One more, JuneShine, has a rating inside a JSON-LD block that is not valid JSON, so a parser throws the whole block away. When we let the pages run their scripts in a real browser, a rating appeared in the markup of none of them. 11 of those 15 pages reference a review app such as Okendo, Yotpo or Stamped in their HTML. On the Three Ships "The Minis" page we checked by eye, the rendered page shows a count of over four thousand reviews next to the title, yet nothing machine-readable carries it, before or after JavaScript. A shopper sees the count. A crawler or feed reading markup sees no rating.

Identifiers are missing on most pages. 14 of the 24 pages had no GTIN or part number in their JSON-LD. Eight of the sampled listings were bundles, sets or packs by their titles, which often have no single GTIN, so the fairer number is this: of the 16 single products, 9 of those 16 had no identifier either. An identifier is how a system knows your 750 mL bottle in black is the same item a review site and your own feed are talking about.

Shipping and returns are thin in the product markup. Only three pages put them there. This gap matters less: Google's merchant listing guide lets stores set shipping and returns in Merchant Center or Search Console instead, and ranks those settings above page markup. Check that they are set somewhere, then state the terms in plain words on the page, because a buyer asking "can I return this if it doesn't fit?" gets an answer from text.

Limits of the sample: we read one product per store, from a cloud server, and counted JSON-LD and microdata, not stars printed as text. The list is a Shopify showcase, so these are better-known brands than average. The first product in a catalog file is often a bundle or a seasonal item rather than a hero product. The scripts and both datasets are kept with this post's working files.

Schema helps machines read the page. It does not earn citations

Product markup does a narrow job well: it hands machines the right price, stock status, identifier and rating without guesswork. It does not make AI engines cite or recommend you more often. Treat it as accuracy plumbing and put your effort into the facts on the page.

The evidence is a controlled study. Ahrefs tracked 1,885 web pages that added JSON-LD between August 2025 and March 2026 against 4,000 control pages, and citations barely moved; the authors stress the pages were already being cited heavily by AI, so it says less about pages engines have never found. Our claims audit reaches the same verdict: schema helps with entity disambiguation and rich results, and "Citation frequency is not one of them." That is why the 24-page checklist above is a hygiene list, not a ranking plan.

Where markup does matter is timing. Google recommends Product structured data in the initial HTML, warning that markup generated by JavaScript "can make Shopping crawls less frequent and less reliable", which hits price and stock hardest.

Two pieces of advice in the ranking guides deserve a closer look. Several treat FAQ and Review schema as a core step; Google says no special markup is needed for its AI features. And Yotpo's guide says to "think of the first hundred words as the part a model is most likely to quote back to a shopper." The instinct is right, but the documented reason is Shopify's: put the most important facts early because some surfaces show only part of your description. The opening has to work as a standalone summary.

The anatomy of a product page AI can use

An AI-ready product page has eight parts, and each one maps to a field a feed or a crawler reads. Get the identity line, the fact block, the fit line and the review summary right first; they carry most of what a shopping answer needs. The table shows where each part ends up.

Page block What it says OpenAI feed field Product markup
Identity line (title) Product type, key attribute, variant title name
Opening summary Two plain sentences: what it is, who it is for description description
Fact block Material, size, weight, capacity, ingredients, compatibility material, dimensions, weight material, size, weight
Fit line Who it suits and who it does not description description
Price and stock Current price, sale price, availability price, sale_price, availability offers
Identifiers GTIN or part number, brand gtin, mpn, brand gtin (gtin12 for a UPC, gtin13 for an EAN), mpn, brand
Shipping and returns Cost, window, conditions in words shipping_price, accepts_returns, return_deadline_in_days shippingDetails, hasMerchantReturnPolicy (or Merchant Center)
Review summary and Q&A Rating, count, recent reviews, answered questions review_count, star_rating aggregateRating

The fit line is the part almost every store leaves out, and conversational shoppers lean on it. They ask for the "best bottle for a long commute that fits a cup holder" or one "not too heavy for a kid's backpack". A page that says who the product is wrong for gives the engine a reason to trust the rest.

On reviews, my rule for DTC brands has not changed: "Volume matters, average rating matters, but recency is the one people forget." Make sure recent reviews appear in the HTML, not only a handful of top-rated ones from years ago.

What goes in the fact block depends on the category:

Category Fact block A "not for" line
Apparel Fabric and percentages, fit, model's height and size worn, runs small or true to size, care "Not for: layering under a slim jacket (the fleece is bulky)"
Beauty and supplements Full ingredient list as text, dose or amount per use, allergens, vegan or fragrance-free status "Not for: use during pregnancy without asking your doctor"
Food and drink Serving size, allergens, dietary flags, shelf life, storage "Not for: nut allergies (made in a facility that handles nuts)"
Home and electronics Dimensions, weight, compatibility, power, warranty "Not for: induction hobs"

Write ingredients and size charts as text, not only as an image of the label: a crawler reading text cannot read a photo of a label.

A before-and-after rewrite

A rewrite moves the facts to the top and the mood to the bottom. The product below is made up, and its numbers are placeholders that show the shape of a page an engine can read; use your own measured specs, never estimates. The before is typical brand-voice copy; the after keeps the voice and adds the facts.

Before:

Halo. Meet your new everyday companion. Designed for people who move, Halo keeps the good stuff cold and the vibes high, wherever the day takes you. Available in four colors.

An engine can pull a name and a color count from that. It cannot tell whether Halo is a bottle or a flask, or what it holds.

After:

Halo insulated water bottle, 750 mL, stainless steel — Black

Halo is a 750 mL double-wall insulated water bottle in 18/8 stainless steel, built for commuters and gym bags. It keeps water cold for up to 24 hours and fits standard car cup holders.

  • Material: 18/8 stainless steel body, BPA-free polypropylene lid
  • Size: 7.3 cm wide, 26 cm tall, 340 g empty
  • Care: lid is dishwasher safe; hand-wash the body
  • Not for: carbonated drinks (the lid is not rated for pressure)
  • Shipping and returns: free US shipping over $50; returns within 30 days if unused

Built for the 6 a.m. train and the 6 p.m. gym bag. Ice in at breakfast, still rattling after dinner.

Then three questions taken from your support inbox, answered in a sentence each: "Does it fit a Toyota cup holder?", "Can I put ice cubes through the mouth?", "Is the paint chip-resistant?"

What changed: the title names the product type, capacity and variant, the way OpenAI's spec asks for "product name, including the selected variant when relevant". The opening states facts before mood. Every attribute Shopify Catalog could infer is now written down, so it does not have to guess. The "not for" line and the answered questions give a conversational engine material for constraint questions. The brand voice is still there, in the last two lines, after the facts instead of in place of them.

The buyer an AI answer sends to this page arrives with a specific question. The page has to answer it in the first screen, or that buyer leaves.

Where to start

Start with the five products that bring in most of your revenue, not the whole catalog. For each one, work through these steps in order. Step 7 is the check that counts: if your price, rating and first fact line are not in the page source, a crawler that skips JavaScript cannot see them.

  1. Check that AI crawlers can reach the page. Open yourstore.com/robots.txt and confirm OAI-SearchBot, PerplexityBot and Googlebot are not disallowed on /products/. If you use Cloudflare or another bot shield, check its AI-crawler setting too; our post on AI shopping agents and crawlers covers which ones to let in.
  2. Rewrite the title and opening. Product type, key attribute, variant in the title; two factual sentences before any brand story.
  3. Add the fact block and fit line. Use the category table above, as text on the page.
  4. Add identifiers. Enter the GTIN in Shopify's barcode field for every variant. If a product has no GTIN, leave the field empty and give an MPN with your brand, as OpenAI's spec says; never make up a barcode. Then view the page source and search for "gtin": if your number is not there, your theme's Product JSON-LD needs a developer to add it.
  5. Get ratings into the markup. View the page source and search for "aggregateRating". If it is missing while stars show on the page, look in your review app's settings for a rich-snippet or SEO option, or ask its support whether it can write the rating into your theme's Product JSON-LD.
  6. Make page, markup and feed agree. The price, stock and product name should match everywhere. Check Shopify Catalog's product mapping and your Merchant Center shipping and return settings.
  7. Read the page without JavaScript. Open the page source (or fetch it with curl) and search for your price, your rating and your first fact line.

Then check whether it worked. Before you change anything, write down five to ten buyer questions each product should answer, ask them in ChatGPT, Perplexity and Google AI Mode, and log whether you are named and whether price, material and size come back right. Run each prompt more than once; answers vary between runs. Re-run the same set after the changes have been crawled and your feed has synced. As I've written before about timelines, "Access fixes land in days. Content starts getting retrieved in weeks." Our measurement protocol has the full method, and our guide to the ChatGPT product feed covers the feed setup. If you want the whole storefront checked against the engines, that is where our GEO service starts.

Frequently asked questions

No. Google says there is no special schema.org markup needed for AI Overviews or AI Mode, and OpenAI's discovery feed does not take question-and-answer lists. Put the questions and answers on the page as plain text, where every crawler can read them. Mark them up if your theme makes that easy, but the text is what matters.

Long enough to state every fact a buyer would ask about, and no longer. For most single products that is a two-sentence opening plus a short fact list and a few answered questions. Shopify's advice is to put the most important facts early, because some surfaces show only part of a description.

OpenAI's product feed takes only a review count and an average star rating, not the reviews themselves, so the detail has to live on the page. If your stars load through JavaScript, a crawler that does not run scripts sees no rating at all. Get the rating into the initial HTML and into the feed.

Not at first. Rewrite the five products that bring in most of your revenue, check that the page, the markup and the feed agree, then ask AI engines the buyer questions those products answer. Roll the template out to the rest of the catalog once it holds up on the first five.

Yes. The page side is the same on any platform: facts in plain text in the initial HTML, Product markup with identifiers, ratings and price that match the page. The feed side changes: outside Shopify you send your catalog to OpenAI through its own product feed format and keep your Google Merchant Center feed current.

Sources

  1. Products – Agentic Commerce — OpenAI Developers.
  2. What Is Shopify Catalog and How Does It Work? (2026) — Shopify, Jun 16, 2026.
  3. How To Add Merchant Listing Structured Data — Google Search Central, Sep 8, 2026.
  4. AI Features and Your Website — Google Search Central, Dec 10, 2025.
  5. We Tracked 1,885 Pages Adding Schema. AI Citations Barely Moved. — Ahrefs, May 11, 2026.
  6. The GEO Claims Audit: 24 Claims Checked Against the Evidence — DeviLabs, Aug 11, 2026.
  7. Optimize Product Pages For AI Search — Yotpo, Aug 25, 2026.

How this article was made: researched and drafted with AI assistance, built on DeviLabs’ published methods and Dominykas Jankauskas’s own positions, then fact-checked against the primary sources listed above and reviewed before publication. Read the full editorial policy. Spotted an error? Email info@devilab.eu.

Next step

Find out what AI says about you

Free 30-minute consultation call. We go through how AI engines pick the brands they name in your category, where the opening is for you, and what it would take to get into those answers.

Dominykas Jankauskas, founder of DeviLabs
About the author

Founder of DeviLabs, a Generative Engine Optimization (GEO) agency in Wassenaar, the Netherlands. He leads the agency’s GEO practice and its AI-native creative production, working with DTC, ecommerce, SaaS and SMB brands across the European Union and the United States.

← All articles