Which Sources Do AI Engines Cite? 2,525 Citations Compared

Which sources do AI search engines cite? We compared 2,525 citations from ChatGPT, Gemini, Perplexity and Claude: 80% of domains were cited by one engine only.

BugViso

13 min read

Mostly different ones. Across 2,525 citations in 400 answers from ChatGPT, Gemini, Perplexity and Claude, 80% of the 692 cited domains were cited by only one engine. No two engines shared more than 16% of their sources. On unbranded buyer questions, third-party pages carried 76% of all citations, and the brand's own site only 2.2%.

So "get cited by AI" isn't one goal. Each engine reads a different slice of the web, and a page that feeds Perplexity may never reach Claude.

Below is the full breakdown: how many sources each engine cites, how little they overlap, which source types win, and a script to run the same comparison on your own answers.

Method: 50 buyer prompts (35 unbranded, 15 branded) ร— 4 engines ร— 2 runs on 2026-10-20, all with web search on. The brand is ours (bugviso.com, website-audit software), tracked against five anonymised competitors. Third-party sites aren't named.

The Dataset

BugViso's AI Visibility Tracker stored every answer with its citations, as the engines returned them:

EngineModel and retrievalHow citations arrive
ChatGPTgpt-6-luna + web_search toolurl_citation annotations on the answer text
Geminigemini-3.5-flash-lite + Google Search groundingGrounding chunks that support specific sentences
Perplexitysonar, Agent APIAnnotations and numbered [n] source markers
Claudeclaude-haiku-5-5 + web search toolweb_search_result_location citations

Google AI Overviews was tracked too, but no overview was captured for these queries, so it's excluded.

We count a citation as one cited URL in one answer. A domain is the URL's host with www. removed.

How Many Sources Each Engine Cites

The engines differ by a factor of seven before you even look at which sources they pick.

text
engine       answers  median words  mean cites  0 cites  domains  brands/answer
chatgpt          100           153         2.1        3       84           0.78
claude           100           365         4.1       18      214           1.40
gemini           100           527         4.6       11      221           1.40
perplexity       100           144        14.4        4      376           0.88

Perplexity is a citation machine: 14.4 sources per answer on short (144-word) answers, and 376 distinct domains over 100 answers. ChatGPT is the opposite: about two sources per answer, from just 84 domains in total.

Claude answered without any citation 18 times in 100. In those answers it relied on what it already knew or used search results without attaching them. Gemini wrote the longest answers by far (527 words at the median) yet cited fewer sources than Perplexity.

๐Ÿ’ก What this means for you: on ChatGPT, the competition for a citation slot is brutal: two slots per answer. On Perplexity, being one of 14 sources is easier, but each source carries less weight in the answer.

Engines Barely Share Sources

Here is the pairwise Jaccard similarity of each engine's cited domains: shared domains divided by all domains either engine cited, over the same 50 prompts.

text
Pairwise Jaccard similarity of cited domains
                chatgpt     claude     gemini perplexity
chatgpt            1.00       0.09       0.09       0.10
claude             0.09       1.00       0.16       0.13
gemini             0.09       0.16       1.00       0.13
perplexity         0.10       0.13       0.13       1.00

The most similar pair, Claude and Gemini, shares 16% of its sources. ChatGPT shares 9โ€“10% with each of the others.

Counting how many engines cited each domain:

Cited byDomainsShare of all 692
Exactly 1 engine55680%
2 engines8612%
3 engines335%
All 4 engines172%

Only 17 domains were cited by all four engines, and they fall into three groups:

GroupDomains cited by all 4 engines
Brand sites in the categoryOur site and the sites of all five tracked competitors
Public documentation and standardsw3.org, web.dev, developer.chrome.com, react.dev, github.com
Other tool vendors6 domains of smaller vendors in adjacent categories

That's the closest thing to a universal source list. Every engine reads the established vendors' own sites and the primary documentation of the web platform. Everything else is engine-specific.

The practical takeaway: your own site is the one source you control that all engines read. For established competitors, their site was cited everywhere, even on prompts that didn't name them. Making your site the clearest primary source in the category is the move that pays off on every engine at once.

The overlap is low even within a single question. For each prompt, we took every domain cited by any engine and counted those used by two or more engines. The median was 17%. Ask four engines the same question, and five out of six sources are unique to one engine.

What Kinds of Sources Get Cited

The tracker labels every cited domain: own (the brand's site), competitor (a tracked rival's site), review, forum, news, reference, directory, or other (any other third-party page: blogs, comparison articles, documentation, other vendors).

On unbranded prompts, where the buyer doesn't name you:

Source typeAll enginesChatGPTGeminiPerplexityClaude
Other third-party pages75.9%71%83%71%87%
Competitor sites12.2%18%6%16%5%
Review sites4.7%3%3%6%4%
Forums2.5%2%4%2%2%
Own site (ours)2.2%4%1%3%1%
Reference1.4%3%1%2%0%
News0.6%1%0%1%1%
Directory0.6%0%2%1%0%

The figures are shares of 1,776 unbranded citations; per-engine columns are rounded.

Three patterns stand out:

  1. Third-party pages dominate everywhere. Comparison posts, "best tools" lists, guides and documentation make up three-quarters of what engines cite on open questions.
  2. ChatGPT and Perplexity lean on vendor sites. 18% and 16% of their unbranded citations point to a tracked competitor's own site. Gemini and Claude cite rivals' sites a third as often.
  3. Review sites and forums are a small slice. Together they're 5โ€“8% per engine. They matter, but they aren't the main road into these answers.

On branded prompts the picture flips: 68.9% of 749 citations point to our own site. When a buyer asks about you by name, engines go to your pages first, as long as those pages answer the question.

This was the cleanest result in the dataset. In unbranded answers that named our brand, our own domain was cited 21 times out of 21.

Prompt typeAnswersCited our own siteRate
Branded12011797.5%
Unbranded, brand named2121100%
Unbranded, all2803010.7%

Per engine, unbranded own-site citation ranged from 4% (Gemini, Claude) to 26% (Perplexity).

The lesson: being named and being cited arrive together. Engines name a brand when a retrieved page supports the claim, and that page is often the brand's own. Pages that state plainly what you offer, for whom and at what price are what get you both. Our post on content extractability shows how to structure them.

Why Each Engine Reads a Different Web

The low overlap follows from how the engines retrieve, not from random noise.

Different retrieval stacks. Gemini grounds on Google Search (Grounding with Google Search). The other three run their own search tooling with their own index partners and ranking.

Different query rewriting. Before retrieving, each engine turns your question into search queries. ChatGPT ran 3.26 queries per answer, Perplexity 2.77 and Claude 1.57. More queries reach more of the long tail, which is one reason Perplexity cites so widely.

Different citation policies. Gemini attaches a source to each grounded sentence. Perplexity lists everything it read. ChatGPT attaches a couple of sources to the claims it makes. The same reading list produces very different citation counts.

Different crawler access. A site that blocks one AI crawler in robots.txt can still be read by another engine's search. Our robots.txt AI bots audit covers the user agents, and OpenAI documents its own crawlers on its bots page.

Compare Citation Sources on Your Own Answers

Export your answers as CSV, one row per answer, with the engine, a prompt id and the cited URLs separated by spaces. The script needs only Python's standard library.

python
#!/usr/bin/env python3
"""Compare which domains each AI engine cites for the same prompt set.

Usage: python3 citation_overlap.py answers.csv
answers.csv columns: engine, prompt_id, cited_urls (space-separated URLs); optional run column.
"""
import csv, sys, statistics
from collections import Counter, defaultdict
from urllib.parse import urlparse

def domain(u):
    h = (urlparse(u).hostname or "").lower()
    return h[4:] if h.startswith("www.") else h

def main(path):
    per_engine, per_prompt = defaultdict(set), defaultdict(lambda: defaultdict(set))
    counts = Counter()
    with open(path, newline="", encoding="utf-8") as f:
        for r in csv.DictReader(f):
            ds = {domain(u) for u in r["cited_urls"].split()} - {""}
            per_engine[r["engine"]] |= ds
            per_prompt[(r.get("run", ""), r["prompt_id"])][r["engine"]] |= ds
            counts.update(ds)
    engines = sorted(per_engine)
    print("Pairwise Jaccard similarity of cited domains")
    print(" " * 12 + "".join(f"{e[:10]:>11}" for e in engines))
    for a in engines:
        cells = []
        for b in engines:
            u = per_engine[a] | per_engine[b]
            cells.append(f"{len(per_engine[a] & per_engine[b]) / len(u) if u else 0:>11.2f}")
        print(f"{a[:12]:<12}" + "".join(cells))
    seen_by = Counter(d for e in engines for d in per_engine[e])
    total = len(seen_by)
    print(f"\ndistinct domains: {total}")
    for k in range(1, len(engines) + 1):
        n = sum(1 for d in seen_by if seen_by[d] == k)
        print(f"  cited by exactly {k} engine(s): {n:>4} ({100 * n / total:.0f}%)")
    shared = []
    for by_engine in per_prompt.values():
        sets = [s for s in by_engine.values() if s]
        if len(sets) >= 2:
            u = set().union(*sets)
            shared.append(sum(1 for d in u if sum(d in s for s in sets) >= 2) / len(u))
    if shared:
        print(f"\nper prompt, median share of cited domains used by 2+ engines: {100 * statistics.median(shared):.0f}%")

if __name__ == "__main__":
    main(sys.argv[1])

Our dataset produced this output:

text
distinct domains: 692
  cited by exactly 1 engine(s):  556 (80%)
  cited by exactly 2 engine(s):   86 (12%)
  cited by exactly 3 engine(s):   33 (5%)
  cited by exactly 4 engine(s):   17 (2%)

per prompt, median share of cited domains used by 2+ engines: 17%

Two notes: the run column is optional but keeps runs apart, so one engine's two runs don't count as two engines. And hosts aren't merged into registered domains, so blog.example.com and example.com count separately. If you want them merged, use a public-suffix list.

Turning the Data into a Source Strategy

Since engines read different sources, plan per engine:

EngineWhat it cited hereWhere to focus
ChatGPT~2 sources per answer; 18% vendor sitesYour own product and pricing pages, plus the few comparison pages that rank for your category
GeminiGoogle-grounded; 83% third-party pagesClassic organic SEO for the queries it generates: if a page ranks on Google, Gemini can read it
Perplexity14 sources per answer, the widest netBreadth: guides, documentation and third-party mentions across many sites
Claude87% third-party pages; 18 answers with no citationAuthoritative explainers and reference-style pages that state facts plainly

Whatever the engine, the cross-engine finding stands: optimising one page for one engine won't carry over. A generative engine optimization framework works across engines only if it targets the source types they all use.

How BugViso Tracks Citation Sources

BugViso's AI Visibility Tracker records citations on every answer from every engine and turns them into metrics:

  • Every citation is typed. Domains are classified as own, competitor, review, forum, news, reference or directory by rules first, with a cached AI classification for the rest. Multi-label suffixes such as co.uk are handled when extracting the registered domain.
  • Citation coverage per engine. The engine scorecard reports the share of answers that cite your own domain, next to mention rate and share of voice.
  • By-engine sources in reports. Reports list which sources each engine cited, so you can see that Perplexity's sources aren't Claude's.
  • Source gaps. The tracker lists third-party sources that cite your competitors but not you. That's the most direct to-do list for outreach and content.
  • Engine-specific details are handled. Gemini's grounding redirect URLs are resolved from their Location header without fetching the page, and only the sources Gemini actually used to support a sentence are kept.

The per-engine source view is on the AI visibility tracker page.

Misreadings to Avoid

"Our citation share went up on Perplexity, so we're winning AI search." Perplexity cites 14 sources per answer. A gain there says little about ChatGPT, which cites two from a different pool.

Counting citations instead of answers. One Perplexity answer can cite your site three times. Report the share of answers that cite you at least once, so engines with long source lists don't dominate.

Treating "other" as noise. The unlabelled third-party bucket is 76% of unbranded citations. It holds the comparison pages and guides that decide shortlists. Open it, sort it by frequency, and read the pages.

Measuring once. In repeat runs only about a fifth of answers cited exactly the same domains. We measured that in how consistent AI answers are. Use rates over many answers, not a list from one.

FAQ

Which sources does ChatGPT cite most?

In our data, ChatGPT cited about two sources per answer, from 84 distinct domains over 100 answers. On unbranded questions, 71% were third-party pages and 18% were the sites of competitors in the category.

Do Perplexity and ChatGPT cite the same sources?

Rarely. Their cited domains had a Jaccard similarity of 0.10, meaning about one domain in ten appeared in both engines' answers over the same 50 prompts.

Does my own website get cited by AI engines?

On branded prompts, almost always: our site was cited in 97.5% of branded answers. On unbranded prompts, it was cited in 10.7% of answers, but in 100% of the unbranded answers that named the brand.

Are review sites important for AI citations?

They're a small share: 3โ€“6% of unbranded citations per engine in our data. Third-party comparison pages and guides were cited far more often.

Why does Claude sometimes give answers without citations?

Claude answered 18 of 100 questions without attaching any citation. It can answer from its own knowledge or choose not to attach sources, so track citation rates on Claude separately from mention rates.

Conclusion

AI engines draw on largely separate sets of sources, so citation work has to be planned and measured per engine, which is what BugViso's AI visibility tracking reports on every run.

Found this useful? Share it.

See where your site stands

Run a free BugViso audit for SEO, speed, accessibility and AI search readiness โ€” with fixes you can ship today.