Core / Pillar 27 min read Published Updated
Why Isn't My Brand Showing Up in ChatGPT? (2026 Guide)
I wrote this as the diagnostic I actually run when a brand is not showing in ChatGPT. I start with the product, then retrieval, then why ChatGPT doesn't recommend my brand even when the site looks fine on Google.
On this page
- What brand not showing in ChatGPT actually means
- Why ChatGPT doesn't recommend my brand when Google already ranks me
- Shopping, comparison, and other surfaces that skip a brand
- Confirm ChatGPT can see the brand in the current product
- Training memory versus live pages I can retrieve
- Entity, naming, and same-brand confusion I keep finding
- Content the model never cites even when it can fetch it
- Product updates that make a visible brand disappear
- The diagnostic sequence I run when a brand is invisible
- 01
I treat a brand not showing in ChatGPT as a product-plus-entity problem, not a Google ranking problem.
- 02
I always verify query visibility inside ChatGPT’s current browse and search behavior before I change a site.
- 03
Why ChatGPT doesn't recommend my brand is often a comparison-surface and third-party-proof issue, not missing homepage copy.
- 04
I re-run the same diagnostic after OpenAI product updates because visibility is a moving target.
What brand not showing in ChatGPT actually means
<p>When I hear about a brand not showing in ChatGPT, I refuse to start with a rewrite. I first name the symptom. Absence from a shortlist, absence from a source list, and a mention I cannot reproduce are different failures. They look the same in a screenshot. They are not the same in a test. I write the surface, the prompt, and the exact wording before I open a CMS. That keeps me from fixing a page that was never the failure.</p>
Query-visible versus mentioned in passing
<p>I treat query-visible and mentioned in passing as different states. Query-visible means I can run a named or category prompt and get the brand back as a proper noun I can reproduce on a later run with the same model. Mentioned in passing is weaker: the name shows up once in a long answer, often beside another vendor, with no product fact I can check. I do not count that as presence. If I cannot get the same mention twice in a short window, I log it as noise. I also record whether the model used the legal name, a product line, or a nickname, those are different entities in my notes. A line like “tools in this space” is not a named citation. I want the brand string in a sentence I could quote, with a role attached: vendor, product, or publisher. Until I have that, I have not confirmed visibility.</p>
Recommendation, citation, and shopping fail differently
<p>Recommend, cite, and shopping fail on different surfaces, so I keep them in separate tickets. A recommendation prompt asks what to use, buy, or hire; I am looking for a shortlist with a reason. A citation prompt asks a factual question; I am looking for a named source or a URL the answer leans on. A shopping prompt sits in a commerce-shaped flow: products, merchants, offers. I have watched a brand appear as a definition source and never appear in a “best of” list on the same day, and I have watched the reverse. Collapsing those into one “invisibility” note sends me to the wrong URL. I write the surface on the log first. Only then do I decide whether the next check is an about page, a category page, or a product feed. Mixing diagnoses is how I waste a week. I do not touch copy until I know which surface failed.</p>
How I log the symptom before I guess the cause
<p>I log the symptom before I guess a cause. I paste the full prompt, the model name, the date, whether browsing was on, and the exact sentence that did or did not contain the brand. I copy the answer wording, not a paraphrase. Later I re-run that same prompt so I can tell a product change from a site change. I mark whether the name showed up as a citation, a recommendation, or a shopping card.</p>
<p>I have written more on how to track brand mentions in chatgpt, and that log format is what I reuse when I need a comparable series instead of a screenshot. Without the log, a one-off and a stable miss look identical, and I start rewriting the wrong page. I also keep the account type and any custom instructions in the same row, because those change what I retrieve. I date every row.</p>
Video: The ultimate guide to AEO: How to get ChatGPT to recommend your product | Ethan Smith (Graphite) · Lenny's Podcast
Why ChatGPT doesn't recommend my brand when Google already ranks me
<p>When a site already ranks on Google, people still ask me why chatgpt doesn't recommend my brand. I treat that as a different question from rank. Ranking says a page can appear in a results list. Recommendation says the model selected the brand in a shortlist, with a reason. I have seen both states on the same URL in the same week. I do not use a SERP export as a pass for a brand not showing in ChatGPT. I run recommend-shaped prompts inside the product and I log what it actually chose.</p>
Retrieval is not the same as a recommendation
<p>Being fetchable is not the same as being chosen. Retrieval means the browsing feature can reach a URL, or the model has the entity in memory. Recommendation means, given a shortlist-shaped prompt, the model puts that brand in the answer with a role and a reason. I have fetched official pages in a browse-backed session and still watched the shortlist skip the brand. That is not a crawl failure. That is a selection failure. I look for whether the answer names alternatives, whether it states a criterion (price, category, use case), and whether my brand meets that criterion in the text the model can quote. If the criterion is present on a third-party roundup and missing on the official site, I expect the roundup to win the shortlist even when Google ranks the official URL. I do not treat a successful fetch as a recommendation pass. I treat it as proof that access is not the remaining question.</p>
The prompts I use to separate rank from recommend
<p>I run five prompt shapes on the same brand in one sitting. I ask what the brand is, to see if a description exists. I ask what I should use for the job, with no brand in the prompt, to see if it lands on a shortlist. I add a constraint such as budget, industry, or region. I run a versus prompt against a named peer. I ask which URL supports the claim. Rank on Google can look fine while the unconstrained recommend prompt still skips the brand. I documented that split in our guide to how to rank in chatgpt, and I still run those shapes before I touch a page. A definition pass does not prove a recommend pass. I log each shape on its own row so I do not average them into one score. I also rerun the unconstrained recommend prompt in a fresh chat so prior turns do not leak the brand name into the shortlist.</p>
When a Google-strong brand still fails the recommend test
<p>When rankings look fine and the shortlist still skips the brand, I look for a handful of patterns I can test. The official site describes the company and does not state the job, the constraint, or the category in language a shortlist can quote. Third-party roundups already answer “best for X” with extractable criteria, and those pages win selection even when they sit below the official URL in Google. The name collides with a person, a place, or an older product, so the unconstrained prompt never resolves to this entity. The model’s description is stale: old product names, a dead category, a former positioning line. I treat each pattern as a different next test. I do not chase visibility in the abstract. I pick the pattern the log showed. A brand not showing in ChatGPT on recommend prompts, while definition prompts still work, is the pattern I see when a team only watches Google.</p>
Shopping, comparison, and other surfaces that skip a brand
<p>I do not treat shopping, comparison, and classic chat as one surface. A brand can appear in a definition answer and still be missing from a best-of list, a versus prompt, or a commerce-shaped card. Those are different diagnostic paths. I name the surface before I guess a site-side cause. Local, B2B, and long-tail recommend prompts fail in category-specific ways, so a miss there is not proof the whole domain is invisible. I log the surface first.</p>
Shopping answers versus classic chat answers
<p>A shopping-shaped answer is not a classic chat reply with a product name in it. Classic chat gives me prose, maybe vendors, maybe a citation. A shopping surface is organized around products, merchants, and offers. I test them separately because a pass in chat does not prove a pass in commerce layout. I ask a classic “what should I buy for X” in an ordinary conversation, then I repeat a product-seeking prompt that would reasonably surface offers if that UI is on. I log layout, not only names. If the brand appears only inside a paragraph, I do not call that a shopping pass. I keep the details on what is chatgpt shopping beside that log so I do not collapse two UIs into one ticket. I also note whether a price or merchant showed up, because that is how I mark the surface. I do not mix those tickets.</p>
Category and comparison prompts that skip you
<p>Best-of and versus prompts hide a brand that still appears in definition queries. “What is [Brand]?” returns a clean paragraph. “Best [category] for [job]” returns a shortlist that never includes it. “Brand A vs Brand B” discusses two peers and leaves this brand out, or maps the name onto a different entity. I treat definition, category, and comparison as three tests. A definition pass only proves the model can talk about the entity when I hand it the name. Category and versus prompts require the model to select the brand among alternatives. If I only run definition queries, I will think the brand is visible when the prompts that drive consideration still skip it. I log the shortlist members. The names that appear are the competitive set I have to beat in third-party copy. That pattern is a brand not showing in ChatGPT on shortlist prompts, not a total absence from the product.</p>
Local, B2B, and long-tail recommendation paths
<p>A miss is often category-specific, not site-wide. Local prompts such as “best [service] near [city]” can skip a brand that still appears in a national category answer. B2B prompts, a tool for a 200-person team, a vendor for industry procurement, select on criteria consumer pages never state: SSO, invoicing, implementation, contract terms. Long-tail job prompts skip a brand whose site only speaks in product names. I do not conclude the whole domain is invisible from one local miss. I run a national category prompt, a local prompt, a B2B constraint prompt, and a long-tail job prompt, then I compare. If three pass and local fails, the next check is local entity facts and third-party listings, not a homepage rewrite. If only the B2B constraint fails, I look for pages that state those constraints in quotable sentences. A brand not showing in ChatGPT on one of those paths is a path failure.</p>
Confirm ChatGPT can see the brand in the current product
<p>I do not rewrite a site for a brand not showing in ChatGPT until I have confirmed the current ChatGPT product can actually retrieve the brand. Google rank is not that confirmation. I open the live product, pick the model I care about, and ask whether the brand is query-visible under today’s browse and search behavior. If the answer never cites the site, I treat that as a product-side visibility check first. OpenAI documents how browsing is gated by features and settings, so I record those before I touch copy.</p>
Browse features and settings change what gets retrieved
<p>I check which browsing path is on before I call a retrieval failure. OpenAI’s ChatGPT release notes include the instruction to use “Browse with Bing” under GPT-4. That line is enough: web retrieval is controlled through documented product features and settings, not through whatever I assume from a SERP.</p>
<p>I record the account type, the model, and whether browse is enabled in that session. If browse is off, ChatGPT can answer from training memory and skip my live pages even when those URLs rank. That is not a site problem. If browse is on and the answer still has no source from my domain, I treat that as a live-retrieval miss.</p>
<p>I also note whether the UI shows citations at all. Different ChatGPT surfaces expose sources differently, so a missing citation panel is part of the log, not a guess about motive. I do not rewrite until that session log exists.</p>
I test inside the product, not only in a SERP export
<p>I run the same commercial and definition prompts inside ChatGPT itself. A spreadsheet of Google rankings does not prove the brand is query-visible in the current browsing experience. I open a fresh chat, set the model I care about, and ask for the brand by name, then by category, then against one competitor. I read the exact wording: named, cited with a URL, mentioned in passing, or absent.</p>
<p>If Google already shows my URL and the live answer never fetches it, I have separated rank from access. I screenshot the citations panel when it exists. I also retry once with browse explicitly on, because a SERP export cannot show me that toggle. I keep the date, model, and full prompt so I can rerun the same check after a product update. Until that live check is in the log, I do not treat the site as the cause of a brand not showing in ChatGPT.</p>
Release notes as a visibility checklist
<p>I treat OpenAI’s own release feed as a dated checklist, not as optional reading. The OpenAI product releases page shows a September 22, 2026 product update, which confirms that OpenAI publishes current product-level changes there. If a brand dropped out of answers near that kind of date, I log the release first and hold the rewrite. I also keep the help article on ChatGPT releases open for any feature that gates browsing or citations.</p>
<p>Product behavior can move without a site change; OpenAI documents that movement in release notes. I write the release title, the date, and whether browse or search behavior is mentioned. Then I rerun the same live prompts. A miss that appears only after a documented update is not yet a content problem. A miss that predates the last release still needs the retrieval tests below. I do not mix those two clocks. That split keeps the next test specific.</p>
Training memory versus live pages I can retrieve
<p>Once the product can browse, I still split two invisibility types. Training memory can recite a stale entity. Live retrieval can miss the page I need. Those fail differently, so I do not apply the same fix. I ask ChatGPT who we are without browsing, then I ask again with browsing on and look at sources. If the recitation is old and the live fetch never appears, I have two tickets for a brand not showing in ChatGPT, not one rewrite.</p>
Stale entity descriptions the model still recites
<p>I prompt for a company description with browse off, or on a path that does not fetch. I write down the name, product list, founding year, and category the model recites. Then I compare that block to the current site. When ChatGPT still names a sunset product or a former legal name, that is stale-entity memory. Updating the homepage does not automatically overwrite it.</p>
<p>I look for the same outdated sentence on Wikipedia, directories, and old press. If those pages still carry the old facts, I treat them as the memory the model prefers. I log the stale claims and the URLs that still publish them. I also note whether a browse-on follow-up corrects the recitation or repeats it. A correction means live pages can override memory. A repeat means the stale description is still winning. I keep both transcripts in the log.</p>
Pages the model never retrieves
<p>I list the URLs I would want cited: the product page, the comparison page, the specs page, and the about page. Then I run browse-backed prompts that should need those facts. I read the source list. If my URLs never appear, those pages exist for Google and still fail live retrieval. I check HTTP status, canonicals, and whether the HTML has the facts in the first screen, not only after a widget.</p>
<p>I do not assume a crawl-budget story. I only record: asked for X, sources were Y, my URL was absent. That is enough to separate a retrieval miss from a recommendation miss. I retry the same prompt on a second day so a one-off empty source list is not the diagnosis. If a competitor URL appears in the same answer, I note that in the log.</p>
Conflicting sources the model prefers
<p>When browse is on, ChatGPT cites a third-party page that disagrees with the official site. I collect those sources: review roundups, marketplaces, Wikipedia, news, and comparison blogs. I do not assign a motive. I only observe which URL the model actually used. If that page lists the wrong category, an old SKU, or omits us from a shortlist, the answer will follow it.</p>
<p>I put the official correction on a quotable page, then I look for the same facts on the pages the model prefers. Until those high-visibility sources agree, I expect the conflict to keep winning. I also test a prompt that names the conflict. If the model sides with the third party, I have a preference order, not a missing page. That order is often why ChatGPT doesn't recommend my brand even when the official URL is fetchable.</p>
Entity, naming, and same-brand confusion I keep finding
<p>A brand not showing in ChatGPT can be fetchable and still un-selectable if ChatGPT cannot lock the entity. Same names, mixed legal names, and disagreeing facts across the web all produce that. I treat this as an identity problem, not a word-count problem. Before I add more pages, I check whether the model can tell this company from a same-name product, person, or place, and whether the public facts agree. Those two checks decide the next test.</p>
Name collisions and weak disambiguation
<p>I ask ChatGPT to describe the brand with no extra context, then with the category, then with the city or parent company. If the first answer is a different product, a person, or a place, I have a collision. I look at how the official site writes the name in the title, the first paragraph, and the organization markup I can view in the HTML. I also search the web for the same string.</p>
<p>When other entities outrank us on that string, I do not expect ChatGPT to pick us from the name alone. I add a disambiguating phrase I can reuse everywhere: category plus geography, or product type plus parent. Then I rerun the no-context prompt. A pass is the right entity on the first try. A fail means I have a naming collision left on the pages people cite.</p>
Inconsistent facts across the web
<p>I make a table: legal name, address, category, founding year, product names. I fill it from the official site, Google Business listings, Wikipedia or Wikidata if they exist, app stores, and high-ranking reviews. I do not infer motive when they disagree. I only mark the cells that do not match. ChatGPT will pick a fact from somewhere in that set. If the category is “software” on the site and “agency” on a directory, recommendation prompts scatter.</p>
<p>I send the same corrected facts to the pages I can edit, and I request updates where I cannot. Until the high-visibility rows match, I treat inconsistency as one cause of a brand not showing in ChatGPT as a single entity. I rerun the description prompt after those rows agree, not before. A remaining miss is retrieval or recommendation, not identity drift.</p>
Publisher and organization signals I verify
<p>I view source on the homepage and the about page. I look for organization name, sameAs-style links if present, a postal address, and a publisher byline on articles. I check that the about page states what the company is in one quotable sentence. I do not invent a hidden-motive story if markup is missing. I write “Organization JSON-LD was not in the homepage HTML I fetched” or “the about page does not state a category.” Those are observable.</p>
<p>I also confirm the logo filename and the title brand string match the trading name I use in prompts. When those signals disagree, I align them to the name I want ChatGPT to select, then I retest the no-context description. I fetch the page as HTML, not only the rendered screenshot, so I am looking at what a browsing feature can read.</p>
Content the model never cites even when it can fetch it
<p>Once I know ChatGPT can retrieve the site, I stop treating crawl as the problem. I look at whether any page on it is actually quotable. A brand not showing in ChatGPT at the citation layer is often a page-shape issue: the model fetched something, then had nothing specific enough to attribute. I check three things in order: extractable facts, fetch constraints such as robots, noindex, and JS shells, and whether I myself would quote that URL in an answer.</p>
Thin category pages and unquotable claims
<p>I open the category or product page I expect ChatGPT to cite. If the body is a headline, a hero, and three adjectives, I treat it as unquotable. The model cannot attribute phrases such as industry-leading or trusted by teams worldwide without inventing a number or a date I never published. I look for claims I could paste into an answer with a source: a SKU spec, a published SLA, a named process, a dated changelog, a geographic coverage list. If those facts live only in a PDF or a sales deck, I log the URL as fetchable but not citable. That is a different failure from retrieval. Rewriting the hero copy does not fix it. I add one extractable block the model can quote without filling gaps. Empty comparison cells give the model nothing to lift. I would rather publish five dated facts than fifty slogans.</p>
Blocked, noindex, or JS-only pages
<p>I fetch robots.txt, the response headers, and a no-JS view before I rewrite copy. If Disallow covers the URL ChatGPT would need, or the HTML is a shell that only fills after JavaScript, I treat that as a fetch constraint, not a content problem. Browse-backed answers need something in the initial response they can quote. I confirm noindex, canonicals that point off the useful URL, and login walls. I do not assume Googlebot and ChatGPT browse the same way. OpenAI’s ChatGPT release notes document the instruction to use Browse with Bing under GPT-4, so retrieval is a product setting, not a SERP export. I test the live URL inside that product, then compare source HTML. If the facts I want cited exist only after a client render, I move them into the first HTML response I serve.</p>
Freshness and the pages I would actually quote
<p>I ask a blunt question: if I were writing the answer myself, would I cite this URL? A homepage with last year’s product name, an undated roundup, or a press page with no byline usually fails that test. I look for a dated, specific page: a changelog with a day, a spec sheet with units, a case with a measurable outcome. Freshness here is not a crawl recency score. It is whether the page still matches the product I just tested in ChatGPT. If the live site is current and the only citable third-party page is two years old, I expect the model to lean on the old page. I publish one page I would quote, then re-run the same prompt log against that URL. I do not ship a rewrite until that new page exists in HTML I can fetch without a login.</p>
Product updates that make a visible brand disappear
<p>I treat OpenAI product changes as a diagnostic input for a brand not showing in ChatGPT, not an afterthought. A site I checked last month can fail this month with no deploy on my side. OpenAI publishes product-level changes on its product releases page, including a September 22, 2026 update. I read that feed before I rewrite pages, because why ChatGPT doesn't recommend my brand can be a capability shift, not an SEO regression. I log the release date next to the prompt so I can tell product drift from site drift.</p>
Why I read OpenAI release feeds before I rewrite a site
<p>Before I touch copy, I open the OpenAI product-releases feed and note the latest dated item. The September 22, 2026 update is evidence that OpenAI still publishes current product-level changes in that feed. If a brand disappeared between two of my checks, I compare those dates to the feed first. A model swap, a browse-path change, or a retired UI can move citations without any sitemap change. I keep a short log: feed date, what the note said, and the prompt I will re-run. I do not start a content rewrite until I can say the product I am testing matches the product I tested last time. That saves me from shipping pages against a behavior that already moved. I also skim the ChatGPT help-center release notes for setting-level changes, because browse behavior is documented there as a product feature rather than as a ranking factor. I timestamp that skim next to the prompt log.</p>
Scheduled deprecations and broken visibility workflows
<p>I treat documented retirements as workflow risk. ChatGPT Business release notes state that Atlas is scheduled to stop working on August 9, 2026. That is a dated deprecation, not a rumor. If my visibility checks ran through a path that is on a stop date, I schedule a replacement test before that day, not after the answers go quiet. I copy the retirement date into the same log as the prompts. I do not wait for a citation drop to discover that a helper UI or export I relied on is gone. Scheduled deprecations are one reason a previously visible brand can vanish while the site is unchanged. I re-run the query-visible check on the product that remains, using the same wording I stored. I also note which account type I used, because Business notes and consumer notes are separate documents and they do not always move together.</p>
Treating ChatGPT visibility as a moving target
<p>I do not treat a single green check as permanent. OpenAI documents capability changes on a schedule, so I build a re-check cadence against the same prompt log. After a dated item on the OpenAI news product-releases list, I re-run the query-visible, recommend, and citation prompts I already stored. If the brand drops only after that date, I attribute the change to the product first and the site second. The Business product notes show that OpenAI can retire or alter capabilities on a scheduled basis. I keep the cadence boring: same model setting, same wording, same date stamp. Visibility is a moving target because the product is a moving target. I only open a rewrite ticket when the re-check still fails after the product side is accounted for. I store those re-check dates beside the original symptom log even when the site did not ship.</p>
The diagnostic sequence I run when a brand is invisible
<p>After I have named the failure type, I run one ordered sequence. I do not skip to copy edits. I log the prompt, model, date, and exact wording first, then I walk the checks below. Each pass or fail proves one thing. I use that proof to pick the next site, entity, or third-party action. The sequence is the same whether the symptom is a missing citation or a brand not showing in ChatGPT on a recommend prompt. I keep the log comparable.</p>
First checks when a brand is not showing in ChatGPT
<p>I run ten prompts in one sitting. One: “What is [brand]?” Pass is a correct entity; fail is a collision or stale memory. Two: “Official site for [brand]”, pass cites our URL. Three: “Browse [exact URL] and summarize”, pass means the live page is fetchable. Four: a category recommend, “best [category] for [job]”, pass is a named shortlist that includes us. Five: “Why choose [brand] versus [competitor]”, pass uses our facts. Six: a shopping or product-shape prompt if we sell. Seven: a local or B2B variant of the same recommend. Eight: “Sources for [claim we publish]”, pass quotes our page. Nine: the same recommend with browsing on, matching the GPT-4 Browse with Bing setting in the GPT-4 browsing release notes. Ten: repeat one through nine tomorrow with the identical wording.</p>
<p>A fail on three is retrieval. A fail on four with a pass on one is recommend, not existence. I store every answer verbatim. Nine failing while three passes is a browse-setting miss.</p>
How I choose the next fix after the tests
<p>A fail on the entity prompt sends me to naming, same-name collisions, and inconsistent facts across high-visibility sources, not to a blog post. A fail on the live URL prompt sends me to robots, noindex, and JS shells. A pass on fetch with no citation sends me to quotable facts and a dated page I would cite myself. A pass on “what is” with a fail on the category shortlist is a recommend problem: I look at third-party comparison pages the model already prefers, not at title tags. Shopping-only fails stay on the commerce surface. If the product feed moved, I do not file a site ticket. I pick one action per failure type and I do not stack rewrites until that action has a re-check date. When I still cannot see why ChatGPT doesn't recommend my brand after those maps, I re-read the symptom log before I invent a fifth hypothesis.</p>
Rechecking after a product change
<p>I repeat the same prompt log after release-note dates so I do not confuse product drift with SEO drift. When the product-releases calendar or the Business notes show a dated change, I re-run prompts one through ten with the stored wording, model, and browse setting. If the brand not showing in ChatGPT starts on that date, I treat it as product movement first. If the answers hold, I do not open a rewrite. I keep the old answers next to the new ones so the diff is visible. I also re-check after August 9, 2026 if any workflow still depended on Atlas. Cadence is part of the diagnostic, not a separate reporting ritual. I only change the site when the same log still fails after the product side is dated and checked. That is how I keep site work and product work from mixing in the ticket.</p>
Frequently asked
I treat Google ranking and ChatGPT visibility as separate systems. Ranking well on Google does not mean ChatGPT’s current browsing or search experience can retrieve you for a given query. I check whether the brand is actually query-visible inside ChatGPT, not only SERP position, because the product’s retrieval path is controlled by its own features and settings.
Description and recommendation are different jobs. ChatGPT can recall who we are from training or a page, then still omit us when the prompt asks for a shortlist or a comparison. I treat that as a retrieval and ranking problem inside the model’s answer, not a content-existence problem. I retest with the same comparison phrasing after any product change.
I open ChatGPT with browsing enabled, OpenAI’s release notes still point to “Browse with Bing” under GPT-4 as a product-controlled setting, and I ask it to fetch my URLs or search my brand plus a live query. If the session cannot retrieve the pages, I treat the brand as not query-visible in the current browsing experience, regardless of Google rank.
Yes. OpenAI publishes product-level changes on its product releases page, including a September 22, 2026 update, and documents feature deprecations in ChatGPT Business release notes, such as Atlas stopping on August 9, 2026. I check those feeds when mentions drop suddenly, because visibility can move with product behavior, not only with site-side SEO.
I run them as separate tests. Classic chat answers and shopping-style results can surface different brands for the same query, so a miss in one does not prove a miss in the other. I log which surface I used, the exact prompt, and whether browsing was on, then I compare those traces rather than treating ChatGPT as one channel.
For every prompt I store the exact wording, model or mode, whether browsing was on, date and time, the full answer, cited URLs, and whether my brand was named, omitted, or only described. I also note any OpenAI release I checked that day. That log is what lets me tell a product update from a one-off answer.