Rich Results, Shopping, and AI Mode: What Google Merchant Center Actually Gets You Ruby Rose Bloom, a self-hosted vintage storefront, discovered that Google Merchant Center offers multiple distinct surfaces, each fed by different mechanisms. After three days of investigation, the owner found that Product JSON-LD on product pages drives rich results in organic Search, while Merchant Center feeds free listings across Shopping, Search, and AI surfaces. The store also uncovered that Google had indexed only 5 of 436 pages and few product photos, highlighting the importance of the Search Console report. Ruby Rose Bloom https://rubyrosebloom.com sells one-of-a-kind vintage — a self-hosted storefront, no Shopify, no marketplace underneath it. Search Console's "Merchant opportunities" report told me 3 active products weren't showing up on the Shopping tab, and I went looking for the setting to fix. There wasn't one. What I actually found, three days of digging later, is that "get into Merchant Center" is not one thing — it's several different surfaces, each fed by a different mechanism, and the one everyone talks about the Shopping tab turned out to be the least interesting of them. This post is the question I actually had, answered with screenshots taken today: I have a storefront. What does getting into Merchant Center buy me, and where do my products actually end up? It also has an ending I didn't plan. After three days of feed fields and structured data I opened one Search Console report I'd been ignoring and found that Google had indexed 5 of my 436 pages — and, chasing that, that essentially none of my product photos were in the image index either. Those two sections are the most useful thing here, and they're the part I'd read first if I were you. Before the surfaces: Merchant Center is not an ads product by default. There are two lanes. Free listings are unpaid — you register a feed, Google reviews the items, approved items become eligible to appear in Shopping-related placements at no cost per click. This is the lane a small shop should care about first, because it costs nothing beyond the engineering time to feed it correctly. Shopping ads are the paid lane on top — you attach a budget and the same feed becomes the input to a campaign. Ruby Rose Bloom is running free listings only; there is no ad spend anywhere in this post. Free listings in Merchant Center: approved items, no ad spend, click potential still "available soon" on a three-day-old account. Free listings is the whole story for this shop. Worth saying plainly since most "how to get on Google Shopping" content assumes you're buying ads: you don't have to. "Merchant Center" isn't a single destination. Registering a feed there can make your products eligible for several different Google surfaces, and each one is driven by a different mechanism. Conflating them is the easiest way to misdiagnose why a product isn't showing up somewhere. This is the surface that surprised me, because it doesn't need Merchant Center at all. A plain site:rubyrosebloom.com arcopal teacup search — ordinary blue-link Google, not the Shopping tab — returns the product page with price and "In stock" rendered directly in the snippet , plus a breadcrumb trail Shop › drinkware . Organic Search, not Shopping: price and availability rendered straight from the page's own Product JSON-LD. That's the Product JSON-LD already on every product page — the same price , availability , itemCondition , shippingDetails , hasMerchantReturnPolicy block I assumed, at the start of all this, must be broken because the Shopping tab report was complaining. It isn't broken. It's driving a different surface, and it was doing that before the Merchant Center account existed at all. The distinction worth keeping straight: Product JSON-LD on the page can earn rich results in ordinary Search. Merchant Center product data can earn free listings across Shopping, Search, and Google's AI surfaces. Two overlapping paths, not two sealed lanes — they feed some of the same places, and either one buys you eligibility , never display. The Search Console report that started this whole investigation was only ever describing the first of them. This is the surface the feed exists to reach — the Shopping tab, and the broader Shopping Graph that other Google surfaces draw from. It's also the surface with the sharpest gap between "submitted" and "found," which the next section covers. This is the surface I didn't expect to have anything to say about, and it turned out to be the most important one. I asked Google's AI Mode "where can I buy a vintage Arcopal France milk glass teacup set in Canada" — a generic query, not naming the shop. The answer is a short written recommendation plus a product-card rail on the right: Etsy Canada, eBay Canada, and Poshmark Canada. Ruby Rose Bloom, which stocks exactly this kind of item, is absent. AI Mode's answer to a generic "where can I buy" query: Etsy, eBay, Poshmark. Not the shop. Then I asked about a specific item the shop actually has listed: "Paragon Warranted Teacup and Saucer Golden Leaves on Green Celadon 1950s for sale." AI Mode returned "Current Marketplace Listings" citing Etsy sellers, complete with price $75.65, struck through from $89 , condition "very good vintage condition, no chips, cracks, or crazing" , and availability. The shop's own Paragon listing — CA$144, approved in Merchant Center as of today — was not among the citations. AI Mode citing a competing Etsy listing by price, discount, and condition — the exact fields a product feed standardises. Here's the part worth sitting with. Look at what AI Mode actually quoted back in both cases: price, a discount, condition, availability. Those aren't paragraph-summary impressions pulled from prose — they're discrete, checkable values. The facts an AI answer reaches for are the same facts a product feed forces you to state exactly: one price, one condition, one availability, identical everywhere they appear. A shop whose numbers are unambiguous is a shop an answer can lift a fact from without hedging. But I want to be precise about what this evidence does and doesn't show, because it's thinner than it looks. Google documents no Merchant Center requirement for AI Mode at all — AI Mode cites ordinary web pages routinely, and a shop with no feed is not locked out of being quoted. So this is an observation about shape , not a mechanism I can point to in anyone's documentation: the facts those answers reached for were structured facts, and a feed is the artifact that forces you to state them precisely and identically everywhere. Not free, either — a feed is a second place your prices and availability have to stay true, and every consistency contract you sign is one you can breach. Cheap relative to what it buys, is the most I'd claim. What it isn't is evidence that the feed gets you cited. I have zero AI Mode citations for Ruby Rose Bloom and no timeline on which I expect that to change. The sources winning these answers have depth, account age, and inventory density that a three-day-old account with 431 items doesn't — I'd guess that's why they're there rather than me, but a guess is all it is; Google doesn't publish the ranking. Whether the work pays off here is an open question I can only answer by watching. Before the "does it work" question, one honest gap. A Shopping tab search for the exact product title — "Vintage Arcopal France milk glass teacup set of 3" — returns Etsy, eBay, and Poshmark listings, not Ruby Rose Bloom's, despite that exact item being approved in Merchant Center. A bare rubyrosebloom Shopping query returns rose bushes from Home Depot and offers "Did you mean: ruby rose bloom." Approval is permission to compete for placement, not placement itself. I originally wrote that the lag was "plausibly indexing time, plausibly a cold-start ranking penalty, probably both," and left it there. That was the lazy version. When I went back and actually opened the rest of Search Console, the answer was sitting in the Pages report. Five pages indexed. Four hundred and thirty-six submitted. The number that explains everything else: 5 indexed, 60 not. No amount of Merchant Center approval competes with a page Google hasn't indexed. Fifty-nine product pages sat in "Discovered – currently not indexed" — Google knew the URLs existed and had decided they weren't worth fetching. One click and three impressions in the performance report is exactly the order of magnitude you'd expect from five indexed pages. Everything else in Search Console was clean, which is what made this easy to miss: no manual actions, no security issues, HTTPS fine, breadcrumbs valid, sitemap read successfully with all 436 URLs, every product page returning 200 with real server-rendered HTML, a canonical, and complete Product JSON-LD. Every report I'd been checking was green. The one I hadn't opened said the site was effectively invisible. The cause turned out to be crawl shape, and I found it by curling my own shop page: bash $ curl -s https://rubyrosebloom.com/shop | grep -oE 'href="/products/ a-z0-9- +"' | sort -u | wc -l 24 $ curl -s https://rubyrosebloom.com/shop | grep -oE 'href="/shop\? ^" "' href="/shop?before=1786502561613" Twenty-four products, and exactly one way forward: a cursor. I wrote a script to walk the chain. Eighteen sequential hops to reach all 431 products. Two things wrong with that, and the second is worse than the first: To be clear about what that second point is: a mechanism I'm inferring, not documented Googlebot behaviour. Google describes link-based discovery and algorithmic crawl decisions, and doesn't promise or forbid any of this. What I have is the correlation — a catalogue reachable only through churning URLs, and 59 of its pages parked in "Discovered – currently not indexed" — plus the fact that the churn is trivially avoidable. That was enough for me to stop theorising and change the URLs. The fix was three server-rendered routes — /shop/page/:page , /shop/:category , and /shop/:category/page/:page — replacing the opaque cursor with offset paging, plus a category nav and a full pager of plain server-rendered links — real anchors with an href , not click handlers. The interactive infinite scroll still uses the cursor; the crawler now has stable paths beside it. Categories had been query parameters only /shop?category=drinkware was a 200, /shop/drinkware a 404 , so they became real paths too. Measured against the deployed site, breadth-first, following only server-rendered anchors: | before | after | | |---|---|---| listing links on /shop | 1 | 27 | deepest product from /shop | 18 hops | 2 hops | | products reachable | 431 | 431 | URLs in sitemap.xml | 435 | 475 | One detail that matters more than it looks: unknown categories and out-of-range pages now return a genuine 404 with noindex , not an empty grid with a 200. A soft 404 can sit unindexed while still consuming crawl activity — spending the budget I was trying to conserve, on pages that were never going to rank. There's a cost, and it's fair to name it: offset paging bills a database read per skipped document, so /shop/page/18 costs roughly 408 reads where the cursor cost 24. That is the price of a URL that means the same thing tomorrow. For this catalogue it's worth paying. At ten thousand products it wouldn't be, and I'd be looking at keyset pagination on a stable sort key instead. If you take one thing from this post, take this: I spent three days on structured data and feed fields while the actual problem was that Google had indexed five pages. The feed work was not wasted — it's a prerequisite for the Shopping tab either way, and it coincided with a disapproval count of zero — but I was optimising the quality of a signal that almost nothing could see. Open the Pages report first. Then a second one surfaced, and I only found it because I looked at my own result properly instead of celebrating the rank. Search the exact title, Collectible Vintage Sadler horse illustration mug . Ruby Rose Bloom is the first organic result , above Etsy and eBay, with price and "In stock" rendered in the snippet. It looks like a win. But the Etsy result below it has a thumbnail, the eBay result below that has a thumbnail, and mine has none. For a shop selling one-of-a-kind objects that people buy with their eyes, the missing 100×100 square is arguably worth more than the position. So I checked what Google actually holds. site:rubyrosebloom.com in the Images tab returns "It looks like there aren't many 'Images' matches on this topic." Essentially nothing from the domain is in the image index. The same query for dapperbleu.com — another small independent vintage shop, no bigger than mine, competing for the same searches — returns a full grid. Searching the product itself returns 55 images from Etsy, eBay, Poshmark, and dapperbleu. None from me. Nothing is technically blocking them, which is what makes this the kind of bug you can stare past: content-type: image/webp , and serves identically to Googlebot-Image/1.0 . X-Robots-Tag robots.txt is a 404 — no directives at all, so nothing is disallowed. image array, there's an og:image , and the