Course outline · lesson 18 of 20
Module 01 · 0/3
How AI Answers Get Made
Module 02 · 0/3
Measure What AI Says About You
Module 03 · 0/3
Open the Door: Crawler Access
Module 04 · 0/4
Fix the Facts AI Repeats
Module 05 · 0/4
Engine Playbooks
Module 06 · 0/3
Operate and Prove It
Final exam
Unlocks when every lesson is passedCertificate
Earned, not given
Module 06 · Operate and Prove It · Lesson 1 of 3
Competitor Analysis for GEO
Most competitor reports measure brand size and call it GEO. Compare like-sized rivals on mentions, cited sources and crawler access, and copy only what has evidence behind it.
By the end of this lesson you can
- Stratify competitors by size so brand prominence does not swamp the comparison
- Measure share of answer with the same comparison prompts across platforms and runs
- Sort the sources engines cite for each competitor into own-site and third-party pages
- Read a competitor's robots.txt and snippet directives to compare crawler access
- Separate the competitor habits worth copying from the tactics on the drop list
The standard competitor slide looks like this: the category leader is named in most AI answers, you are named in a few, and the gap is labeled a GEO problem. Usually it isn't one. The leader has ten years of press, thousands of reviews and a name every buyer knows, and AI engines name brands like that. The gap is mostly brand size, and nothing you ship this month closes it.
A useful competitor analysis asks a narrower question. Among brands your own size, who gets named, which sources do the engines cite for them, and can the engines' crawlers reach their pages? Each of those answers points at something you can fix. The slide with the giant on it points at nothing.
By the end of this lesson you will have a competitor grid: three like-sized competitors, the same comparison prompts for each, the sources cited for each, and each one's robots.txt posture. You will also know which of their habits are worth copying and which are not.
Compare with brands your own size
Brand prominence is the strongest pattern in the AI citation data. It is an association, not a lever. Big brands get named because they are big: more press, more reviews, more forum threads, more of everything an engine might retrieve or a model might have trained on.
Evidence: An analysis of AI Search Arena data (arXiv:2507.05301, collected March to May 2025) found the 20 most frequent news sources took 67.3% of all citations for OpenAI models. Semrush's index of 126 million prompts (January to April 2026) found 36 brands visible on all four AI surfaces it tracks in every month, among them YouTube, Google, Reddit, Amazon and Walmart. That finding is brand size wearing a GEO label.
Because size drives so much of the result, it is the dominant confounder in any comparison you run. Put a 70-person SaaS next to a public company and every metric will say the public company is better at GEO. It is not doing anything you can copy. It is famous.
So stratify. Compare against brands in your size band and keep the giants out of the average:
- Set the band with business measures: headcount, revenue range, funding stage, years in market, customer count, branded search volume. Two or three that agree are enough.
- Do not use Domain Authority or Domain Rating as the yardstick. They are vendor estimates built from backlinks and traffic, which are themselves proxies for brand size. Matching on them hides the confounder instead of controlling for it.
- Keep one giant as a labeled reference row, so nobody asks why it is missing. Never average it in.
- Find your AI competitors in the answers. Run a handful of category prompts and note every brand named. Some will be sales competitors, some will be review sites or adjacent tools. Keep the ones in your band that a buyer could pick instead of you.
Stratifying reduces the size effect. It does not remove it: two companies with the same headcount can differ tenfold in press coverage. Treat any gap you find as a lead to investigate, not a verdict.
Ask comparison prompts, the same way every time
Share of answer is the share of answers that name a brand. Ask 10 prompts on 4 platforms, get 40 answers back, and a brand named in 12 of them has a 30% share of answer. Compute it per platform. The platforms retrieve differently, and a blended number hides where the gap sits.
Use prompts where competitors are supposed to show up:
- Category: "best invoicing software for small agencies"
- Alternatives: "alternatives to [competitor]"
- Head-to-head: "[your brand] vs [competitor] for recurring billing"
- Use case: "invoicing tool that handles multi-currency for contractors"
Run the identical set for every brand on the grid, on the same day, under the same conditions. Log out or turn memory off: OpenAI documents that ChatGPT may use saved memories when it rewrites a search query, so a logged-in answer is partly about the person asking. Run each prompt more than once. Retrieval is per query and discretionary on every platform, so the same prompt can be answered from the web on one run and from the model's memory on the next. One run per prompt measures luck.
If you compare 99Visibility scores instead of raw counts, remember that the overall score weights platform coverage by market share (ChatGPT 36%, Google AI Overviews 18%, Perplexity 18%, Google AI Mode 10%, Gemini 9% and Claude 9%). Two brands with the same number of mentions can land far apart if one is named only on ChatGPT and the other only on Claude. Put per-platform mention counts in the grid, not one blended score.
Myth: "Find the exact prompts your customers type and optimize for them." OpenAI's help center says ChatGPT search typically rewrites your query into one or more targeted queries before sending them to search providers, and the Gemini API generates its own search queries. Your prompt set is a proxy for an input nobody outside the engine can see. That is fine for comparing brands on equal terms. It is not a map of what the engines search.
Leave position out of the grid. "We were mentioned third" is not a stable measurement, and for Google's AI surfaces there is nothing to check it against: Google states that third-party tools do not have access to its internal ranking data.
See which sources engines cite for them
On the platforms that show sources (Perplexity, Google AI Overviews, and ChatGPT in its own app when it searches), record every cited URL in the answers that name a competitor. Sort each one into two piles:
- The competitor's own pages. Which page types get cited: pricing, comparison pages, docs, a plain about page?
- Third-party pages. Review sites, directories, "best tools" listicles, forum threads, press.
Own-site citations show you which page types the engines retrieve for these prompts. If Perplexity keeps citing a competitor's pricing page for "cheapest invoicing tool for freelancers", check whether you have a page that states your prices plainly, in server-rendered HTML, at a URL a crawler can reach. Topical relevance to the query is the one content factor that C-SEO Bench, a 45-study survey (arXiv:2607.14035) and a large factorial experiment (arXiv:2605.25517) agree on, though it was mostly measured on documents already retrieved. A competitor page cited on a topic you have no page for is a real gap.
Third-party citations show you where corroboration lives. Open each one. Does it mention you? Does it describe you correctly? A listicle that names three competitors and lists your discontinued plan is a correction request, covered in Building Off-Site Corroboration.
Two limits apply. First, citation is not use. OpenAI's API documentation says the number of sources a model consulted is often greater than the number it cites, so a competitor can shape answers from pages that never appear as links. Second, a citation does not come with a reason. You can see which page was cited, never why the retrieval system picked it.
Bing Webmaster Tools will not do this part for you. Microsoft describes its Citation Share metric as "an observational metric – not a ranking system or a competitive scoreboard" and says it does not expose competitor domains. Competitor sources get collected by hand.
Read their access posture
A competitor's robots.txt is public. Open competitor.com/robots.txt and read the rules for each agent that matters. The full list is in AI Crawlers and robots.txt, Bot by Bot:
- Retrieval bots: OAI-SearchBot (ChatGPT search), PerplexityBot, Claude-SearchBot, Meta-WebIndexer, Googlebot, bingbot.
- Training bots: GPTBot, ClaudeBot, Google-Extended.
- The wildcard: a
User-agent: *group withDisallow: /catches every bot not named in a group of its own.
Then view the source of their pricing and comparison pages. Look for <meta name="robots" content="noindex">, nosnippet, max-snippet:0 and data-nosnippet attributes. Check whether their prices appear in the raw HTML or only after JavaScript runs: the crawlers behind ChatGPT, Claude and Perplexity do not execute JavaScript, as Rendering, noindex and Snippet Controls explains.
What you cannot see from outside is their firewall. robots.txt says what a site permits; the CDN decides what actually gets through. Do not test a competitor's firewall by sending requests under a spoofed crawler user-agent. It is their infrastructure, your own IP will get blocked, and one result from your network would not tell you what the real crawler sees. Mark that column "unknown" and move on.
Myth: "Competitor X blocks GPTBot, so it has vanished from ChatGPT." OpenAI states that each of its crawler settings is independent: a site can disallow GPTBot, which governs training, and still allow OAI-SearchBot and appear in ChatGPT search. Read the retrieval rows before you conclude anything.
Access posture tells you the floor, not the ceiling. A competitor that blocks OAI-SearchBot will not be shown in ChatGPT search answers, per OpenAI, though it can still appear as a navigational link. A competitor that allows everything has bought eligibility and nothing more. If they are cited where you are not and you are the one blocking the bot, the fix is on your side.
Build the grid
One row per brand, one column per question you can answer from outside. Keep it small enough to redo every month.
Worked example
Ledgerly is a fictional B2B invoicing SaaS with about 70 staff and Series A funding. It picks three competitors in its band: Duebird, Tallyhop and Paywren, all fictional, all between 40 and 120 staff. Octobooks, a fictional accounting suite with thousands of staff, goes on a reference row. The team runs 10 comparison prompts on Perplexity, Google AI Overviews and ChatGPT, three runs each, logged out, and fills in the grid below.
| Brand | Share of answer | Most-cited sources | Retrieval bots in robots.txt | Notes |
|---|---|---|---|---|
| Ledgerly | 14% | Two blog posts, one directory | Blocked by a blanket AI rule | Pricing table loads by script |
| Duebird | 22% | Own comparison pages, two listicles | Allowed | nosnippet on its pricing page |
| Tallyhop | 38% | Own pricing page, a review site, a forum thread | Allowed (GPTBot disallowed) | Every plan in raw HTML |
| Paywren | 11% | One listicle | Allowed | Has llms.txt and FAQPage markup |
| Octobooks (reference) | 81% | Everywhere | Allowed | Not averaged in |
Reading it: Ledgerly's robots.txt carries a rule from 2023 that disallows OAI-SearchBot, PerplexityBot and Claude-SearchBot along with the training bots. That is fix one, and it is entirely Ledgerly's. Tallyhop's most-cited own page is its pricing page, which states every plan in plain HTML; Ledgerly's pricing renders from a script, so the crawlers that matter see an empty table. Two listicles cited for Duebird still list Ledgerly's discontinued free plan, so they go on the correction list. Paywren has llms.txt and FAQPage markup and the lowest share on the grid. That proves nothing about those tactics in either direction, which is the point: one row cannot tell you why a brand is cited.
What to copy and what to leave
Copy what has a documented mechanism:
- Access hygiene. Retrieval bots allowed, a firewall that lets verified crawlers through, no stray
noindexornosnippeton the pages that state your facts. - Fact clarity. A pricing page that states every plan in server-rendered text. A comparison page that is accurate about both products. The same facts on every page that mentions them.
- Topic coverage. If a competitor has a page answering a question your buyers ask and you have none, write one, for the buyer and about the actual topic.
- Presence on the pages engines cite. If a review site or directory keeps getting cited, make sure you are on it and described correctly.
Leave what fails scrutiny, however popular it is:
- llms.txt. Google says Search ignores such files, and no other engine documents reading one.
- FAQPage markup and schema-for-citations. Google deprecated FAQ rich results in May 2026. Ahrefs' matched-control study (May 2026) found adding schema produced no major uplift in citations on any platform and a significant 4.6% drop on AI Overviews.
- "AI-friendly" rewrites, chunking and long-tail variants. Google's AI optimization guide says you don't need to write in a specific way for generative AI search.
- Anything justified by an E-E-A-T score or Domain Authority. Google says E-E-A-T isn't a specific ranking factor, and no engine publishes an authority score.
Evidence: C-SEO Bench (arXiv:2506.11097, NeurIPS 2025, v3 October 2025) tested content-rewriting methods for AI citation and found most "not only largely ineffective but also frequently have a negative impact on document ranking." It also found that as more competitors adopt a method, the gains shrink, "depicting a congested and zero-sum nature of the problem." Copying a rival's rewriting tactic in a crowded category erodes whatever it gave.
"They have it and they are cited" is a correlation with everything else about them, starting with their size. Copy the mechanism, never the decoration.
Common mistakes
- Benchmarking against the category giant. You end up measuring fame and setting targets nobody can hit.
- One run per prompt, logged in. The result is noise plus your own chat history.
- Reporting a rank inside the answer. There is no ground truth for it, least of all on Google.
- Treating a citation as the reason. You saw which page was cited, not why.
- Copying markup instead of access. A competitor's llms.txt is the visible part; its open robots.txt and plain-HTML pricing are the part with evidence.
- Probing their firewall with spoofed user-agents. It gets you blocked and tells you little.
- Reading their robots.txt once. Sites change it, and CDN defaults change underneath it. Redo the grid monthly.
Key takeaways
- 01Brand prominence is the strongest association in AI citation data, so compare only with like-sized brands and keep giants on a labeled reference row.
- 02Share of answer needs the same prompts, the same settings, several runs and per-platform counts, and never a rank.
- 03The sources engines cite for competitors show which page types get retrieved and where third-party corrections are needed, but not why a page was chosen.
- 04A competitor's robots.txt and snippet directives are public and its firewall is not, so mark the firewall unknown instead of probing it.
- 05Copy access hygiene and fact clarity, and leave llms.txt, schema-for-citations and AI-style rewrites, which the evidence does not support.
Your win · about 10 minutes
Know where three like-sized competitors beat you, and why
- Pick three competitors in your size band and write down the measure that puts each one there.
- Run five comparison prompts, logged out, on two platforms that show sources, and record who is named and which URLs are cited.
- Open each competitor's /robots.txt and note the rules for OAI-SearchBot, PerplexityBot, Claude-SearchBot and GPTBot.
- Put it all in one grid and mark the single gap you can close this month.
Knowledge check · 4 questions · pass with 3
Pass this to complete the lesson
Graded on our server. Get 3 of 4 right to mark the lesson complete and move your timeline.
See what AI says about your brand
Run a free audit across ChatGPT, Perplexity, Google AI, Gemini and Claude, and check which AI crawlers can reach your site.
Start for Free