You rewrote the headlines. You tested three new descriptions. Spend is flat, and someone on your team keeps sending you screenshots of competitors' products showing up inside Google's AI Mode answers while yours do not. Here is the part that usually gets skipped: on shopping surfaces, Google has never used the copy you wrote. A Shopping unit is generated from the product data you send to Merchant Center. Your headlines run in text ads. Your feed runs wherever products get shown, and a system answering a full-sentence question has even less use for adjectives than a blue link did.
So the creative test you just finished was never connected to that surface. The thing that is connected is a spreadsheet most merchants have never read line by line: the feed.
What actually changed in AI Mode
In a classic Shopping listing, the feed decided eligibility and the shopper saw a title, an image, and a price. In a text ad, you wrote the words. In AI Mode, the shopper types a full question, something like "20x25x1 MERV 13 filters, six pack, in stock and shipping this week," and the answer is assembled around whatever products can satisfy that sentence. The question now carries constraints. Your product data either contains those constraints or it does not.
Which means a blank field is not a small gap. It is a fact the system cannot state on your behalf. If your title says "Premium Filter 6 Pack, Best Value" and never says 20x25x1 or MERV 13, you are not a weak match for that question. You are not a match at all, because nothing in your data answers it.
What is known, and what is not.
I want to be exact here, because this topic attracts confident nonsense. Google has not published which feed attributes it weights on AI surfaces, and I have not seen an outside source that credibly reverse engineered one. If you read a post that ranks the fields by importance for AI Mode, ask where the ranking came from. What is published, publicly and in detail, is the Merchant Center product data specification: which attributes exist, which are required, and what values are valid. That specification is the surface area you control. Everything below comes from it, plus one thing that has been true since Product Listing Ads existed: shopping creative is generated from feed data, not from advertiser copy.
Ad copy is a claim you make about your product. Feed data is a fact about your product. An answer engine cannot quote a blank field.
How does Google AI Mode decide which products to show?
Nobody outside Google can hand you the selection logic. What is knowable is the input: the structured product data in your Merchant Center feed is the description of your catalog that Google's shopping systems hold, and shopping units are built from it rather than from headlines you wrote. So treat selection as a question of whether your feed carries the facts a shopper's question asks about: size, spec, identifier, category, price, availability, shipping. Adjectives are not facts. A product whose only differentiator lives in a headline is invisible to a query that asks about a specification.
The five feed attributes worth fixing first
1. Title: structure it like a spec sheet, not a billboard.
Google's spec allows up to 150 characters, and most surfaces truncate, so the front of the string carries the weight. A working order is brand, product type, then the specs a buyer would actually type (size, count, model, capacity), then the variant. Strip promotional text: Google's own product data spec tells you not to put things like "free shipping" or "sale" in the title, and that copy was never doing selection work anyway.
2. GTIN and identifier_exists: this is how you get matched to a product, not just a page.
If a manufacturer assigned a barcode to the item, Google expects the GTIN. Without it you are a loose listing instead of a known product, harder to compare, and exposed to item level issues. If the product genuinely has no manufacturer identifier (handmade, custom fabricated, private label with no barcode), set identifier_exists to no and say so explicitly. Do not fabricate a number, and do not leave the field ambiguous.
3. availability: it has to be true right now, and it has to match your product page.
The valid values are in_stock, out_of_stock, preorder, and backorder. Google also crawls structured data on your landing page and can use it to update price and availability (that feature is called automatic item updates). So a feed that says in stock while the page says backordered is not a private inconsistency. It is two contradicting sources of truth, and you lose either way: a mismatch flag, or a shopper who bounces.
4. google_product_category and product_type: two taxonomies, two different jobs.
google_product_category places you inside Google's own taxonomy, and it should be set at the leaf level, not the top node. If you leave it blank, Google infers it, and inference from a vague title is a coin flip. product_type is your taxonomy, free text, and it is the field that makes your reporting usable later. Set both. They take one afternoon and they do not change again until your catalog does.
5. custom_label_0 through custom_label_4: not a selection signal, a measurement tool.
Be clear about this one: custom labels do not make Google favor you. You get five slots, and their value is segmentation. Tag margin band, season, stock depth, price tier, or bestseller rank. Then when performance moves, you can answer the only question that matters, which is which slice of the catalog is producing. Without labels you are optimizing blind, and you will credit the wrong change.
Around those five sit the supporting attributes that make an item quotable: image_link with a clean product image and no promotional overlays, a description that front loads specifications instead of brand story, item_group_id plus size, color, and material so variants resolve as one product family, and the structured product_detail attributes for the specs that buyers filter on.
A worked example: a feed that fails silently
This is a composite built from failure patterns, not a specific client account. Picture a distributor with roughly 4,000 SKUs in replacement HVAC filters and parts. The feed uploads cleanly every week. Merchant Center shows no disapprovals on this item. Nobody investigates it, because from the dashboard, nothing is wrong.
The item is eligible and never chosen. When a shopper asks for a 20x25x1 MERV 13 six pack that is in stock, this row has nothing to say. The title is marketing. The identifier is missing. The category was guessed. Availability was last touched by hand nine days ago. Here is the same row before and after.
| Attribute | What the failing feed sends | What a readable feed sends |
|---|---|---|
| title | Premium Filter 6 Pack, Best Value, Free Shipping | Brand MERV 13 Air Filter 20x25x1, 6 Pack, Pleated Furnace Filter |
| gtin | blank, identifier_exists not set | manufacturer barcode on every SKU that has one, identifier_exists set to no where none exists |
| availability | in_stock, updated by hand each week | synced from inventory, matching the structured data on the product page |
| google_product_category | blank, left for Google to infer | the leaf category for air filters, set explicitly |
| product_type | Products | Filters > Furnace > MERV 13 > 20x25x1 |
| custom_label_0 | blank | margin band, so you can see which slice gets pulled |
The reason this pattern survives for years is that it never triggers an alert. There is no error state for "technically valid, semantically empty." You only find it by reading your own feed the way a stranger would.
How to audit your product feed in an afternoon
Step 1: Download the feed as Google receives it, not your source spreadsheet.
The gap between what your PIM or Shopify app exports and what actually lands in Merchant Center is where most of the damage lives. Work from the received file.
Step 2: Measure coverage instead of eyeballing it.
Four percentages, one row of formulas: share of SKUs with a GTIN or an explicit identifier_exists value, share with google_product_category set, share with a title longer than a slogan, share with a working image_link. Those four numbers tell you whether you have a hygiene problem or a strategy problem.
Step 3: Read 25 titles as a stranger.
For each one, ask whether a person who has never heard of your company could match that title to a query containing a size, a model number, or a spec. If the answer is no more than a couple of times, titles are your first fix, ahead of everything else.
Step 4: Spot check 20 availability values against the live product pages.
Open the URLs and compare. Any mismatch means your inventory sync, not your feed, is the actual defect. Fix the sync first, or you will just publish wrong data faster.
Step 5: Set the taxonomy fields by hand for your top revenue categories.
You do not need all 4,000 SKUs on day one. Set google_product_category at leaf level and product_type in your own structure for the categories that carry the revenue, then work down the list.
Step 6: Fix the refresh cadence.
A correct feed refreshed weekly is a wrong feed six days out of seven. Move to a daily scheduled fetch at minimum, and use the Content API for price and stock if your catalog moves faster than that.
What a clean feed will not do for you
It will not create demand. If nobody is asking questions your catalog answers, perfect attributes change nothing. It will not rescue a price or shipping disadvantage, and it arguably exposes one: when the comparison is made on structured facts, being slower and more expensive becomes easier for a machine to notice.
Attribution on this surface is also thin right now. You may not be able to cleanly isolate AI Mode performance from the rest of your Shopping activity, which is exactly why the custom labels matter and why I would not promise anyone a measurable lift from a feed cleanup in week one. And feed work is maintenance, not a project. It decays every time you add SKUs, change suppliers, or migrate carts.
I do not know how much of AI Mode's current behavior will look the same in twelve months. Google changes surfaces constantly. What I am confident about is the direction: every layer Google has shipped in the last few years reads structured data better than it reads prose, and none of them have gotten worse at it.
This is the same job as schema markup and llms.txt
We treat feed attributes exactly the way we treat schema.org markup and llms.txt: machine readable facts about your business, placed where machines look. Your product page should carry Product and Offer markup with the same GTIN, price, and availability your feed sends. When those two disagree, you have two sources of truth about your own inventory, which is a bigger problem than any ad surface. We wrote about that failure mode in more depth in giving your business facts one source of truth.
If you want to see how the rest of your site reads to answer engines before you touch the feed, our AI Visibility scan is free and grades the twelve signals AI engines look at, with the fix sprint quoted from the scan results and shipping in 7 to 10 business days. Start with the free scan.
But if you sell products and you have to pick one thing this month, pick the feed. It is unglamorous, it is a spreadsheet, and it is the only copy about your products that Google's shopping systems have ever read.
