# Why You Show in One AI Engine but Not Another > If you appear in one AI shopping engine but not another for the same query, the cause is engine-specific: a different commerce rail, a per-engine crawler you blocked, or a gap in the one data source that engine reads. ## Key takeaways - Showing in one AI engine but not another for the same search is almost never an eligibility problem, because one engine already proves your catalog is legible. It is an engine-specific gap: the wrong rail, a blocked crawler, or a hole in the one data source the missing engine reads. - The engines run on different rails. ChatGPT's checkout is on ACP, Gemini and Google AI Mode are on UCP over your Merchant Center feed, and Perplexity works from pages its crawler can fetch and cite. Implementing one rail does not enroll you on the others. - Per-engine 'not in Gemini' and 'not in Perplexity' are the same diagnosis run against a different engine, which is why this is one cross-engine page and not three near-duplicate ones. Diagnose the missing engine on its own terms. - One trap looks like absence but is not: you can be present on an engine yet never ranked first. Measure each engine separately before you conclude you are missing at all. ## The same store, one engine sees you and another does not This page is for a specific, confusing symptom: your store surfaces fine in one AI shopping engine but is missing from another for the same query, with the same catalog behind both. That differential is the whole diagnosis. If one engine can find and recommend you, your product data is legible enough to work, so the missing engine is not rejecting your store on quality. Something engine-specific is in the way. That framing also tells you when you are on the wrong page. If you appear in no engine at all, that is total absence, and the flow for it is [why you're not in ChatGPT shopping](/store-not-in-chatgpt-shopping/), which works one engine's absolute absence in order. If you do appear but keep losing the recommendation to a competitor, that is a selection problem, covered in [shown but not selected](/shown-but-not-selected/). Stay here only when the pattern is comparative: present in at least one engine, absent from another. There is a deliberate reason this is a single cross-engine page. "Not in Gemini," "not in Perplexity," and "not in ChatGPT" are the same diagnosis pointed at a different engine: find the rail, crawler, or data-source gap for whichever engine is missing. Splitting that into a page per engine would just repeat the four checks below three times, so we consolidate them here and hand off to each engine's playbook for the fix. Work the four causes in order, and stop at the first one true for the engine you are missing from. ## Cause 1: you built the wrong rail for the missing engine The engines do not share one commerce pipe, so implementing the plumbing for one does nothing for the others. ChatGPT's Instant Checkout runs on the [Agentic Commerce Protocol](/glossary/#acp) (ACP), the open commerce standard from OpenAI and Stripe. Google's own UCP developer documentation states that adopting the [Universal Commerce Protocol](/glossary/#ucp) (UCP) enables agentic actions on AI Mode in Google Search and Gemini, starting with direct buying, layered on the Merchant Center feeds merchants already run. Perplexity operates and documents its own crawler, PerplexityBot. Its shopping recommendations lean on pages that crawler can fetch and cite, so the entry point differs again from ACP or UCP. Because the transactional rails differ per engine, we expect building only one of them to leave the others unable to surface or transact you. A store that shipped an ACP feed and checkout for ChatGPT has done nothing that puts it on the UCP rail Gemini uses, and vice versa. So if the engine you are missing from runs a rail you never implemented, that is your cause, and it is a build task, not a wait. Do not re-derive the protocols here: the side-by-side comparison of what each covers is in [UCP vs ACP](/ucp-vs-acp/). The two readiness items to work are publishing a UCP profile if you are missing from Google surfaces and building the ACP feed and checkout if you are missing from ChatGPT. ## Cause 2: you blocked that engine's crawler, but not the others Each engine reaches your site through its own separately-named user agents, so a rule that blocks one leaves the others untouched, which is exactly how you end up visible in one engine and invisible in another. OpenAI documents OAI-SearchBot as the agent that surfaces pages inside ChatGPT, carrying a named user-agent token that robots.txt can allow or disallow; Google and Perplexity document their own distinct tokens the same way. So a `Disallow` for PerplexityBot while OAI-SearchBot is allowed, or a WAF rule that challenges one engine's crawler and not another's, produces precisely this split: present in the allowed engine, absent from the blocked one. The block is often accidental and lives below robots.txt, in a CDN bot manager, a "block AI bots" plugin, or a firewall rule that filters one range and not others. The exact tokens per engine, and which are search versus training crawlers, are in the [AI shopping crawler reference](/reference/ai-shopping-crawlers/); the practical move is to confirm the missing engine's crawler token is allowed in robots.txt and not being silently blocked at the edge. Allow the AI search crawlers explicitly, and verify your bot protection is not filtering legitimate agent traffic for the one engine you are missing. ## Cause 3: the one data source that engine reads has a hole Even with the right rail and an open crawler, an engine can only work from the source it actually reads, and those sources differ. Google's UCP documentation describes AI Mode and Gemini shopping actions as layered on the Merchant Center feeds merchants already run. That makes an incomplete or absent Merchant Center feed a Gemini-shaped hole specifically: ChatGPT can see you through your ACP feed and pages while Gemini, drawing on Merchant Center, has too little to represent you. Perplexity's readable source is different again. Because it recommends what its crawler can fetch and quote, we expect a store whose product facts only appear after client-side JavaScript, or behind a block, to be legible to a feed-based engine yet effectively blank to Perplexity. So match the fix to the missing engine's source. If Gemini is the gap, the lever is a complete, accurate Merchant Center feed carrying every required attribute. If Perplexity is the gap, the lever is server-rendered, crawlable product pages that state the facts in the HTML, plus a machine-readable mirror where you keep one. A hole in whichever source the missing engine reads is enough to erase you from that engine alone. ## Cause 4: you are present, just never ranked first Before you conclude an engine cannot see you, rule out that it can, and simply never places you where you looked. "Absent" and "present but never in the visible pick" look identical if you only ever check one answer. The ACES simulation reports that position bias varies by provider and persisted even in text-only interfaces, which the authors note undermines any universal notion of a "top" rank. ACES is a controlled simulation over a fixed model set, not live sales, so read it as a pattern to watch. Because ranking behavior differs per engine, we expect the same store to sit in a visible slot on one engine and be pushed out of view on another, reading as a visibility gap when it is really a ranking one. This case is measurement first, not a content edit. Run the same query repeatedly on the missing engine and check whether you appear at all lower in the results before assuming absence. If you are genuinely never returned, work causes one through three. If you are returned but never near the top, that is selection, and the reasoning behind it is in [how AI agents choose products](/how-ai-agents-choose-products/) with the full decision tree in [shown but not selected](/shown-but-not-selected/). Either way, retest after model updates: ACES documents that model updates can drastically reshuffle market shares, so an engine that carried you last quarter can change after a release. ## How to check which engine is failing, and why The differential is what makes this tractable, so run it as one procedure rather than eyeballing a single answer: 1. **Confirm the split is real.** Ask the same query on each engine several times, not once. A single miss can be sampling noise. You are looking for a consistent pattern where one engine returns you and another does not. 2. **Fetch a live product URL as the missing engine's agent would**, and confirm it returns the page, not a block. If it returns a 403 or a challenge for that engine's token while another engine's fetch succeeds, you have Cause 2. The tokens to test are in the [crawler reference](/reference/ai-shopping-crawlers/). 3. **Check which rail you built for the missing engine.** No UCP profile and you are missing from Google surfaces, or no ACP feed and checkout and you are missing from ChatGPT, points at Cause 1. 4. **Inspect the source that engine reads.** For Gemini, is the Merchant Center feed present and complete? For Perplexity, do the product facts render in server HTML without JavaScript? A gap there is Cause 3. 5. **Measure per engine, never blended.** Track your [agent win rate](/glossary/agent-win-rate/) for each engine separately with a repeatable protocol, so a real absence is distinguishable from a low rank and from a coincidence. The prompts, sampling, and error bars are in [how we test agent selection](/research/methodology/). > **Do not close the gap by serving engines different content** > > The fix for a per-engine gap is never to detect one engine's agent and hand it different content, prices, or availability than you show shoppers or the other engines. Varying content by user agent at one URL is cloaking, a search-spam and trust violation. Serving the same facts in a machine-preferred format at the same URL is fine; changing the facts per engine is not. ## How to fix it: on the missing engine's own rail Once you know which engine is failing and why, the fix lives on that engine's terms, which is why this page hands off rather than restating three playbooks. Missing from ChatGPT is worked in [ChatGPT shopping optimization](/chatgpt-shopping-optimization/); from Gemini or Google AI Mode in [Gemini shopping ranking](/gemini-shopping-ranking/); from Perplexity in [Perplexity shopping optimization](/perplexity-shopping-optimization/). The protocol question underneath Cause 1 is settled in [UCP vs ACP](/ucp-vs-acp/), and the [platforms hub](/platforms/) is the map when you are missing from more than one at once. Because per-engine absence is one diagnosis pointed at different engines, run this same tree for each engine you are missing from rather than treating them as separate mysteries. And keep the neighboring symptoms straight: if you appear on every engine but keep losing the pick, that is [shown but not selected](/shown-but-not-selected/); if you are the cheapest and still lose, it is [lowest price but not recommended](/lowest-price-but-not-recommended/); and if the engines are quoting a stale price or wrong stock for you, that is a data-accuracy fault covered in [when AI shows the wrong price or stock](/ai-showing-wrong-price-or-stock/). ## Frequently asked questions ### I show up in ChatGPT but not Gemini for the same search. Is that an eligibility problem? Usually not. If you already appear in one engine for that query, your catalog is fundamentally legible, so the gap is engine-specific plumbing: a different commerce rail, a blocked crawler token, or a hole in the one feed or page source the missing engine reads. Diagnose the missing engine on its own terms. ### Do I need a separate protocol for each AI shopping engine? For transactional surfaces today, largely yes. ChatGPT's checkout runs on ACP; Gemini and Google AI Mode run on UCP layered over the Merchant Center feed; Perplexity leans on pages its crawler can fetch and cite. Implementing one rail does not enroll you on the others, so a full cross-engine presence means covering each engine's rail. ### Why is this one page instead of a separate 'not in Gemini' and 'not in Perplexity' page? Because they share one diagnosis: find the engine-specific rail, crawler, or data-source gap for whichever engine is missing. A page per engine would repeat the same four checks. The different case, where you appear in no engine at all, is total absence and has its own flow.