Build the Map of What an Engine Actually Cites
Everybody says get cited on the sources AI trusts. Nobody shows you how to work out what those sources are for one specific query set. This is the procedure, including the boring parts that decide whether the output is real.
- Published top-domain lists answer somebody else's queries. Peec ranks Reddit the most cited domain across 30 million sources; Yext found Reddit at roughly 2 percent once location context and commercial intent were applied. Both are correct, and neither describes your client.
- The output is a matrix with one column per engine, never a single list. Writesonic's 161,286-prompt study found 72 to 73 percent of cited domains appear on exactly one engine and nowhere else.
- Rank domains by query reach, meaning the count of distinct queries where the domain was cited at least once, not by total citation volume. Volume rewards one verbose answer. Reach identifies a structural source.
- Normalization is not housekeeping. Lowercase the host, strip www, strip tracking parameters, resolve redirects, and cluster syndicated copies by content rather than URL, or your frequency ranking is measuring your capture process instead of the engine.
- The column that makes the map useful is reachability. Sort every cited domain into reachable, pay to enter, or structurally closed, then only work the top left quadrant.
The top domain lists are answers to a question you did not ask
To analyze AI citation sources, capture every cited URL for a defined query set on each engine, normalize those URLs into one comparable unit, rank domains by how many distinct queries they appear in rather than by raw citation volume, then classify every domain as reachable, pay to enter, or structurally closed. The output is a matrix with one column per engine, not a single ranked list, because most cited domains appear on only one engine.
Two credible studies put Reddit in opposite places. Peec AI's analysis of 30 million cited sources ranks Reddit the single most cited domain in AI search, ahead of YouTube, LinkedIn and Wikipedia. Yext's study of 6.8 million citations found Reddit and comparable platforms accounted for about 2 percent of citations once location context and query intent were applied.
Neither is wrong. Peec sampled broadly across US queries on five surfaces. Yext ran 1.6 million queries per model across retail, financial services, healthcare and food service, with location context, between July 1 and August 31 of 2025. Same web, different question, different answer.
That gap is the whole argument for doing this by hand. A published top-domain list describes the head of a distribution generated by somebody else's queries. The fifty to two hundred prompts that decide whether your client gets shortlisted have their own head, and it usually looks nothing like the global one.
I call the finished artifact the Citation Source Graph. It is the MAP stage of the Cited Method, and it sits between measuring and earning for a reason. Until you know who is holding the slots, every outreach decision is a guess wearing a strategy costume.
Published guidance stops well short of this. The best-ranking walkthrough I could find, Similarweb's citation analysis guide, covers baseline metrics, domain and URL level source analysis, gap identification and influence scoring. It says nothing about URL normalization, syndicated duplicates, how to weight breadth against depth, or whether the domains it surfaces can be reached at all. Those four omissions are where the method actually lives.
Step 1: freeze the query set and the run budget first
The query set is the instrument. Change it and you change the map, which is why it gets frozen and version-stamped before a single capture runs. Everything about building a defensible one is in the prompt set post; the part that matters here is that the set determines the answer, not the engine.
Run budget is the second decision, and it is the one most audits get catastrophically wrong by running each prompt once. Ronald Sielinski of IQRush collected 374,052 citations in a daily regime and 379,276 in a high-frequency regime, then computed how many runs it takes before a citation share estimate stops moving. His uncertainty framework puts it at roughly 40 to 50 queries for Gemini, about 100 for Perplexity, and at least 150 for SearchGPT before a 95 percent confidence interval narrows to five percentage points.
Citation visibility metrics must be accompanied by uncertainty estimates, or they are liable to mislead.
Sielinski also measured how much the cited source set churns between identical runs: median Jaccard similarity of 0.29 to 0.31 for Gemini, 0.33 to 0.40 for SearchGPT and 0.50 for Perplexity. Read the Gemini figure carefully. Two runs of the same prompt on Gemini share under a third of their sources. A single-run screenshot of Gemini's sources is closer to a die roll than a measurement. SparkToro reached the same conclusion from the brand side across 2,961 prompt runs, finding less than a 1 in 100 chance that ChatGPT or Google's AI returns the same list of brands in any two responses.
Here is my working rule, and I will label it as judgment rather than a published threshold. Multiply prompts by runs and target at least 300 engine-query observations per engine before ranking anything. Under that, build the graph anyway but publish only the top decile, because the tail is noise. The full argument for that arithmetic is in the sample size post.
One prerequisite, easy to forget, expensive to skip: run the AI crawler access audit first. Mapping who holds the citation slots while your own site returns 403 to OAI-SearchBot produces a map with a hole in it exactly where you are standing.
Step 2: capture at citation level, not answer level
Most captures record one row per answer with a comma-separated list of sources. That row cannot be normalized, cannot be weighted, and cannot be joined to anything. Record one row per citation.
The minimum viable schema, which is what I run:
| Field | Values | Why it earns its column |
|---|---|---|
run_id | timestamp plus set version | Lets you separate real movement from run-to-run churn |
engine | the specific surface, not the vendor | AI Overviews and AI Mode are different surfaces from the same company |
query | verbatim prompt text | Frozen with the set version |
position | ordinal within the citation list | Depth diagnostics, and it is free to capture |
raw_url | exactly as emitted | Never edit this field. Normalize into a new one |
norm_url | output of step 3 | The join key for everything downstream |
domain | registrable domain plus your subdomain policy | The unit you actually rank |
brand_named | boolean | Separates a citation from a mention |
owner | you, competitor, or third party | Turns the map into a competitive read |
The brand_named column is the one people cut, and cutting it destroys the analysis. Semrush and Growth Memo found that 61.7 percent of AI citations were ghost citations, where a page was used as a source link but the brand name never appeared in the answer text. If you do not capture that boolean, you cannot tell the difference between a domain that gets named and a domain that gets quietly harvested, and those are two completely different targets. That distinction gets its own treatment in citations versus recommendations.
Brands need to map not just which topics they want to appear in, but which phrasing patterns produce mentions versus ghost citations.
One mechanical warning about what you are capturing. The URL you see is frequently answering a subquery the engine wrote, not the prompt you typed. Ahrefs' study of 1.4 million ChatGPT prompts found cited URL titles matched ChatGPT's internally generated fan-out queries more closely than the user's original prompt, at cosine 0.656 against 0.602, while retrieved-but-not-cited URLs matched at only 0.484. So a domain in your graph may be there because it owns a subtopic you never typed. That is a feature, not a bug, and it is why the graph beats intuition. Surfer's analysis of 10,000 keywords and 33,000 extracted fan-out queries found pages ranking for both the head term and its fan-outs were 161 percent more likely to be cited than pages ranking only for the head term. The mechanism is covered in query fan-out.
Step 3: normalization, the step nobody publishes
This is the part that separates an analysis from a screenshot, and it is almost entirely absent from published guidance. Two of the best studies in this space did publish their rule, which tells you it matters: Writesonic computed similarity at the domain level with URLs lowercased and www prefixes stripped, and Kai-Cheng Yang's news citation paper states plainly that for each citation the team extracted the domain for further analysis.
Write your rule down, apply it to every row, and keep raw_url untouched so the decision is reversible.
- Resolve redirects to the final 200 response before anything else, because engines cite shortened, syndicated and proxied URLs constantly.
- Lowercase the scheme and host. Leave the path case alone, since paths are case sensitive on most origins.
- Drop the scheme entirely for the join key. An engine citing http and another citing https is not two sources.
- Strip www. Keep every other subdomain by default and only collapse one when you write down why.
- Strip tracking and session parameters: utm_ everything, gclid, fbclid, msclkid, ref, source, and any parameter that does not change the rendered content.
- Keep parameters that do change content, such as product variants, pagination and search queries. Deleting those merges genuinely different pages.
- Strip fragments, with one exception. Text fragments are an engine artifact, not a distinct source, so they collapse into the base URL.
- Fold AMP paths, m. subdomains and print views into the canonical URL.
- Do not fold country and language variants together. A .co.uk citation and a .com citation are separate placement opportunities.
- Normalize the trailing slash in one direction and stay consistent across every run.
The hardest case is syndication, and no tool solves it for you. A single press release lands on forty wire domains with forty URLs and near-identical bodies. A guest column gets republished by three trade titles. A manufacturer spec sheet appears on every distributor site in the category. Grouped by URL, those are forty sources. Grouped by content, they are one.
Which grouping is right depends on the objective, and this is where most analysis quietly goes wrong. If the objective is understanding what the engine retrieved, count them separately, because forty retrieved documents genuinely did compete for the slot. If the objective is a work order, and it always is by the end, collapse them into one cluster and record the cluster's total reach. A syndication cluster is one action to buy, not forty. Ranking forty wire domains as forty individual targets creates a work order with thirty-nine duplicates in it.
Step 4: rank by reach, not by volume
Raw citation count is the default ranking in every tool and it is the wrong one. A domain cited eight times inside a single verbose Perplexity answer outranks a domain cited once in each of forty separate queries, and the second domain is enormously more important. One is a formatting artifact. The other is a structural source the engine returns to across your entire topic.
So compute three numbers per domain and rank on the first.
Query Reach
Distinct queries where the domain was cited at least once, divided by total queries in the set. This is the primary ranking. It answers the only question that matters at this stage: how much of my topic does this domain sit across?
Engine Breadth
Number of engines citing the domain, divided by engines measured. Use it to break ties on reach. A domain with reach on three engines is worth more work than one with identical reach on a single engine.
Citation Depth
Total citations divided by the queries where the domain appears. Never rank on this. Use it as a diagnostic. High depth with low reach means one page carried one answer, which is interesting but rarely actionable.
A scalar score [...] is defensible only when the weights [...] correspond to an explicit objective.
That sentence is why I refuse to publish a single blended influence score. Every vendor sells one. None of them tell you the weights, and a weight is a business decision about what you are willing to buy, not a property of the data.
The last thing to compute is concentration, because it tells you how long your work order will be before you write a word of it. Yang's analysis of over 366,000 citations from the AI Search Arena covering more than 24,000 conversations and 65,000 responses gives you the benchmark. He measured Gini coefficients of 0.83 for OpenAI models, 0.77 for Perplexity and 0.69 for Google, with the top 20 news sources taking 67.3 percent of all OpenAI citations against 31.9 percent for Google and 28.5 percent for Perplexity.
Run the same top-20 share on your own graph. Above roughly two thirds and you are looking at an oligopoly of sources, which is bad news for entry and good news for focus. Below a third and the citation slots are diffuse, which means more targets, cheaper individually, and a slower payoff.
Step 5: one column per engine, because a merged list is a lie
Merging every engine into one ranked list is the single most common error in this work, and the evidence against it is now overwhelming.
Writesonic ran 161,286 prompts across ChatGPT, Gemini, Perplexity and Google AI Overviews in May and June of 2026, with 70,879 of them returning citations from all four. Domain-level Jaccard similarity across the six engine pairs ranged from 0.119 for ChatGPT against Gemini to 0.237 for Perplexity against AI Overviews. The closest pair of engines in the study shared under a quarter of their sources.
A brand earning a citation on Perplexity has not, statistically, earned anything on the other three.
The Answer Bubbles paper from Michelle Huang, Agam Goyal, Koustuv Saha and Eshwar Chandrasekharan ran 11,000 real search queries through vanilla GPT, Search GPT, Google AI Overviews and organic Google Search and found the same shape from a different angle. Search GPT's top 100 domains overlapped 24 percent with AI Overviews and 25 percent with organic Google, while AI Overviews and organic Google shared 68 percent of theirs. The unique domain pools were nowhere near comparable either: 7,606 for Search GPT, 14,279 for AI Overviews, 26,891 for organic Google.
The composition differs as sharply as the membership. Search GPT drew 0.1 percent of citations from social platforms against 8.5 percent for AI Overviews and 13.4 percent for organic Google, while pulling 27.3 percent from encyclopedic and reference sources against roughly 10 percent for both Google systems.
Our analysis reveals that models within the same family exhibit similar citation patterns. Specifically, models from the same family tend to cite similar proportions of news sources among all citations.
Yang quantified the family effect: cosine similarity of 0.82 to 0.99 between models inside one provider, against 0.11 to 0.58 across providers. He also counted unique news domains at 1,430 for Perplexity, 881 for Google and 707 for OpenAI, which is the same diversity gradient the Answer Bubbles paper found on a different dataset a year later.
So the matrix has one column per engine and one row per normalized domain, and the cell is that domain's query reach on that engine. Sorting the matrix by any single column tells you a different story, which is the point. This is also the honest answer to why cross-engine tooling disagrees so much, a topic I take apart in AI visibility tracking tools. The tools are not all broken. They are sampling different engines with different prompt sets and reporting the result as one number.
MAP is stage three for a reason. It comes after access is proven and measurement is stable, and it exists to make the earning stage a list of named targets instead of a content calendar.
See where MAP sits in the method→Step 6: reachability triage turns the map into a work order
A frequency-ranked list of domains is not a plan. Half of what sits at the top of a typical graph is not available to you at any price, and the industry keeps publishing those domains as if they were tactics.
Look at what actually leads the global lists. Ahrefs' 50 most-cited websites in Google AI Overviews for July 2026, drawn from over 3 million US queries, puts YouTube at 21.1 percent mention share, Reddit at 18.5 percent, Facebook at 10.7 percent, Google at 7.1 percent, Instagram at 5.8 percent, Quora at 5.0 percent and Wikipedia at 4.8 percent. Peec's top ten adds LinkedIn, Forbes, G2, Yelp, Medium and TechRadar.
Those are not one category. Sort them.
And do not assume your own organic rankings hand you a seat. Ahrefs' March 2026 update across 863,000 SERPs and 4 million AI Overview URLs found only 38 percent of AI Overview citations come from pages ranking in the top 10, down from roughly 76 percent in its own July 2025 measurement. Ranking is table stakes for the reachable column, not a substitute for building it.
| Class | Definition | Examples from the lists above |
|---|---|---|
| Reachable | You can publish, be listed, or participate under published rules, with no gatekeeper veto | YouTube, your own site, business listings, G2, Yelp, Medium, LinkedIn, subreddits that permit disclosed participation |
| Pay to enter | A placement exists and is bought or brokered, disclosed or otherwise | Affiliate and advertorial best-of pages, sponsored roundups, review platform premium tiers, paid wire distribution |
| Structurally closed | No legitimate path exists for a self-interested party | Wikipedia, editorial newsrooms, academic journals, government pages, competitor domains |
Wikipedia is the cleanest example of closed, and it is closed by written policy rather than by difficulty. The conflict of interest guideline states that editors with a conflict are strongly discouraged from editing affected articles directly, that the Wikimedia Foundation requires all paid editing to be disclosed, and that a subject does not own the article or have any right to dictate what it may or may not say. Wikipedia sits in the top ten of every list above. It is also, for your client, a read-only row.
Closed does not mean irrelevant. It means the lever is second order. You cannot write the Wikipedia article. You can become the kind of source Wikipedia editors cite, which is slow, uncertain, and occasionally worth it. Log it as an outcome of the earning work rather than a task in it.
Competitor domains deserve their own read. If a meaningful share of your graph's reach sits on competitor-owned properties, the problem is not placement, it is displacement, and that is an entirely different workstream covered in how to get cited by AI.
Now the good news, which the Reddit-first discourse buries. Yext's 6.8 million citation study found websites at 44 percent and business listings at 42 percent, with reviews and social at 8 percent, meaning about 86 percent of citations in that query set came from sources the brand already controlled. Gemini favoured websites at 52.1 percent while OpenAI leaned on listings at 48.7 percent. For commercial, location-qualified query sets, most of the graph is in the reachable column. Run the triage before you conclude you are locked out, because the global lists will tell you that you are and your own map frequently disagrees.
What the Citation Source Graph cannot tell you
Five limits, stated plainly, because a method that hides its limits is a sales deck.
It is descriptive, not causal. The graph records where citations landed. It does not explain why, and copying a cited page's attributes is not a mechanism. The cautionary example is schema: Ahrefs tracked 1,885 pages that added JSON-LD against 4,000 matched controls and found no meaningful citation uplift, at minus 4.6 percent in AI Overviews. Cited pages have schema. Adding schema did not produce citations. The graph is vulnerable to exactly that class of error, which I unpack in does schema help AI citations.
Citation is not absorption. A framework paper from Zhang Kai, He Xinyue and Yao Jingang, built on 602 controlled prompts and 21,143 search-layer citations, separates citation selection from citation absorption and finds the two diverge: Perplexity and Google cite more sources on average while ChatGPT cites fewer but shows substantially higher average citation influence among fetched pages. A slot in the source list is not proof the answer was built from it.
Citation is not a mention. Ghost citations run at 61.7 percent. A domain with high reach in your graph may be feeding the answer without ever being named to the user, which matters enormously if the goal is brand recall rather than referral. That distinction drives brand mentions and AI visibility.
The whole thing is sampled and noisy. Beyond Sielinski's per-engine Jaccard medians, the GEO survey reports daily source-level Jaccard scores of roughly 0.34 to 0.42 across four engines over 45 days, and 9 to 28 percent of decisions changing across repetitions even at controlled temperature. Rebuild the graph on a fixed cadence, compare like for like, and treat any rank movement inside that band as weather rather than climate. What survives that filter is what belongs in the client report.
There is no first-party share of voice. No engine publishes your citation share. Everything here is reconstructed from sampled outputs, and anybody quoting you a precise share of voice figure inside ChatGPT is quoting you an estimate with the error bars removed.
One last framing point. Google's own guidance on generative AI features says these features are rooted in its core ranking and quality systems and that no special markup or machine readable files are needed. That is the general answer to where these systems get their information, and my agency wrote the long version of it in AI Overviews, AI Mode and ChatGPT are not the same thing. This post is the per-query-set answer, which is a different and much narrower question: not where the machine gets information, but who is currently holding the slots on the forty prompts your client's revenue depends on.
Work the top left quadrant. Re-run the map quarterly. Publish the error bars. The rest of the series is at the insights index, and the stage-by-stage version of this sits inside the Cited Method.
Frequently asked questions
How many prompts do I need before a citation source analysis is reliable?
Ronald Sielinski's uncertainty framework puts it at roughly 40 to 50 queries for Gemini, about 100 for Perplexity and at least 150 for SearchGPT before a 95 percent confidence interval narrows to five percentage points. My working rule is 300 engine-query observations per engine before publishing any ranking.
Should I rank cited domains by citation count or by number of queries?
By number of distinct queries, which I call query reach. Raw citation count rewards a single verbose answer that cited one domain eight times. Query reach identifies a domain the engine returns to across your whole topic, which is the only pattern worth building a work order around.
Can I merge all engines into one list of cited sources?
No. Writesonic's 161,286-prompt study found 72 to 73 percent of cited domains appear on exactly one engine, and only 3.8 percent are cited by all four. A merged list averages away the engine-specific structure that determines where your effort should go.
How do I handle syndicated copies of the same article in a citation analysis?
Cluster them by content rather than URL once you are building a work order, and count the cluster's combined reach as one target. Counting forty wire domains separately produces a task list with thirty-nine duplicates. Keep them separate only when you are studying what the engine retrieved.
Which URL parameters should I strip when normalizing citation data?
Strip anything that does not change rendered content: all utm_ parameters, gclid, fbclid, msclkid, ref and source. Keep parameters that do change content, such as product variants, pagination and internal search queries. Deleting those merges genuinely different pages into one row.
What does reachability triage mean in a citation source analysis?
It is the classification of every cited domain as reachable, pay to enter, or structurally closed. Wikipedia's conflict of interest guideline strongly discourages self-interested editing, so it is closed no matter how often it is cited. Triage stops teams from building strategies around domains they can never enter.
Is my brand locked out if the top cited domains are Reddit and Wikipedia?
Usually not. Yext's 6.8 million citation study found 44 percent of citations came from websites and 42 percent from business listings, both controllable, with Reddit-type platforms at about 2 percent once location and commercial intent were applied. Your query set decides, not the global list.
Does being cited mean the AI actually used my page?
Not necessarily. Research separating citation selection from citation absorption across 602 controlled prompts found the two diverge by platform, with ChatGPT citing fewer sources but showing higher average citation influence. A source list slot is evidence of retrieval, not proof the answer was built from your page.
How often should I rebuild the citation source graph?
Quarterly for a stable topic, monthly if the category is moving. The GEO survey reports daily source-level Jaccard scores around 0.34 to 0.42 across four engines over 45 days, so rebuild on a fixed cadence and treat rank movement inside that churn band as noise rather than a result.
Sources
- Writesonic (Samanyou Garg). Do AI Engines Cite the Same Sources? We Studied 161,286 Prompts Across 4 Platforms (2026-07-22)
- Kai-Cheng Yang (arXiv 2507.05301). News Source Citing Patterns in AI Search Systems (2025-07-07)
- Kai-Cheng Yang (arXiv HTML). News Source Citing Patterns in AI Search Systems (full text) (2025-07-07)
- Michelle Huang, Agam Goyal, Koustuv Saha, Eshwar Chandrasekharan (arXiv 2603.16138). Answer Bubbles: Information Exposure in AI-Mediated Search (2026-03-17)
- Ronald Sielinski, IQRush (arXiv 2603.08924v2). Quantifying Uncertainty in AI Visibility: A Statistical Framework for Generative Search Measurement (2026-06-09)
- Zhang Kai, He Xinyue, Yao Jingang (arXiv 2604.25707). From Citation Selection to Citation Absorption: A Measurement Framework for Generative Engine Optimization Across AI Search Platforms (2026-04-28)
- Olivier Martinez (arXiv 2607.14035). Optimizing Visibility in Generative Engines: A Critical Survey of Generative Engine Optimization (2023-2026) (2026-07-15)
- Ahrefs (Si Quan Ong). The 50 Most-Cited Websites in Google AI Overviews (July 2026) (2026-07-21)
- Peec AI (Tomek Rudzki). Top domains cited by AI search: Analysis based on 30M sources (2026-03-31)
- Yext. Yext Research: 86% of AI Citations Come from Brand-Managed Sources (2025-10-14)
- Semrush with Growth Memo (Kevin Indig). The Ghost Citations Study (2026-06-09)
- Ahrefs. Why ChatGPT Cites Some Pages and Not Others (2026-04-15)
- Ahrefs (Louise Linehan, Xibeijia Guan). Does Schema Markup Help AI Citations? We Studied 1,885 Pages (2026-05-11)
- Ahrefs (Louise Linehan). Update: 38% of AI Overview Citations Pull From The Top 10 (2026-03-02)
- Google Search Central. Optimizing your website for generative AI features on Google Search (2026-07-10)
- Wikipedia (English) guideline. Wikipedia: Conflict of interest (2026-07)
- Similarweb. How to Perform AI Citation Analysis: Guide & Template (2026-06)
- SparkToro (Rand Fishkin) with Gumshoe.ai. New Research: AIs Are Highly Inconsistent When Recommending Brands or Products (2026-01-28)
- Surfer (Joshua Hardwick). The Impact of Query Fan-Out on AI Overview Citations (2025-12-06)
Want me to run this on your site and show you the before and after?
One call, no pitch deck. We look at what is actually blocking you and tell you the truth about whether we can help.
Book a free consultation →