# Every AI assistant reads a different web. I counted the citations in 141 answers

> Source: <https://dev.to/aliaksandrbandziuk/every-ai-assistant-reads-a-different-web-i-counted-the-citations-in-141-answers-387c>
> Published: 2026-09-14 10:37:45+00:00

I put the same 47 buying questions to ChatGPT, Perplexity and Google AI Mode on the same day, and classified every citation across the resulting 141 answers. The engineering-relevant part of the result is not the ranking. It is how differently the three engines behave as clients of your site.

**Citations per answer.** Perplexity 16.7, Google AI Mode 3.7, ChatGPT 1.6. Perplexity cited provider websites 667 times across its 47 answers. ChatGPT cited them 47 times, almost exactly one per answer.

That gap is the whole engineering brief. Against Perplexity, the page you ship is genuinely in play: it reads widely and shows its work. Against ChatGPT, at roughly one site per answer, selection happens before your page is read, and no amount of on-page work changes the shortlist you were not on.

**A trap worth naming.** ChatGPT referenced Google Maps in 23 of 47 answers, which reads as an argument for a verified business listing. It is not. All 507 Maps links were of the form `google.com/maps/search/Name,+City`, a constructed query. Links to actual listings, `/maps/place/`, numbered zero. The model finds the provider by ordinary web search and renders the map link as an affordance. Check link shapes before drawing a conclusion from a hostname.

**One implementation detail that surprised me while checking my own site.** JSON-LD rendered through Next.js `next/script` does not appear in the server HTML at all, including with `strategy="beforeInteractive"`. The content is queued into `self.__next_s` and injected after hydration. Google executes JavaScript and gets there eventually. Most of the fetchers behind assistant answers do not. On one page I could see it directly: a `FAQPage` block emitted through a plain `<script>` tag showed up in `curl` output, while a `BlogPosting` block emitted through `next/script` on the same page did not.

If you are marking up a site for this, use a plain `<script type="application/ld+json" suppressHydrationWarning>`. It is a one-line difference and it decides whether your structured data exists for non-JS readers.

**The channel split.** The Google results page for these commercial terms is roughly half listicles and half agency landing pages. Assistant answers on the same subject lean on video, professional networks, forums and established publishers. Optimising for one does not move the other.

Full method, all the tables, the sample size caveats and a section on what the data does not support: [https://www.bandziuk.com/blog/ai-assistant-recommendations-study](https://www.bandziuk.com/blog/ai-assistant-recommendations-study)
