Tianwen SEO Research
First-hand research on Google SEO, GEO and AI search

How to Check Who Gets Cited in AI Answers: Tools and Methods Tested

Published: 2026-10-18 · Updated: 2026-10-18

How to Check Who Gets Cited in AI Answers: Tools and Methods Tested

On October 12, using a fixed 24-question panel and clean-environment dsh (DeepSeek) headless probes, I ran 72 Q&A records and then annotated each one for who the AI named and who only got a URL cited. Below are the tools, the definitions, and the real numbers this round turned up.

Key Takeaways

  1. Checking AI citations is not checking rankings. Being mentioned, entering the candidate list, being recommended, and having capability verified are four different things; lumping them together is self-congratulation.
  2. The environment has to be clean. In a dirty environment the skill catalog injects content into the context, and a single prohibition in the prompt won’t stop it.
  3. A prompt must not come with its own answer structure. Writing “please give your reasoning, step by step” means you’ve defined the answer framework first, and the model just paraphrases you.
  4. A single sample is a count of observations, not a frequency. Differences between rounds contain sampling noise and cannot support causal conclusions.
  5. The minimal reproducible toolchain is just three things: a probe script, a clean home, and a line-by-line annotation table.

How do you check who gets cited by AI? First separate the four levels

Most people get the very first step of AI visibility monitoring wrong: they treat “my name appeared in an AI answer” as a single result. In fact it breaks down into at least four levels — mentioned, entered the candidate list, recommended, and capability verified. These four levels have completely different commercial meanings, and only by counting them separately can you tell which level you’re stuck at.

The second must-do is setting up a whitelist. If domain extraction relies only on rules like “a capitalized word equals a brand,” repeated words in the body text also get counted as findings, and you end up with an inflated table. My approach is line-by-line annotation, recording for every answer: the domain, the company name, the source, where the URL appears in the answer, whether Tianwen is mentioned, and whether the benchmark peers are mentioned.

This annotation approach matches the definitions I laid out in the AI Search Visibility Monitoring Checklist; the difference is that this article gives measured numbers rather than checklist items. If you want to fill in the concepts first, start with the GEO Tutorials.

What is a clean-environment probe, and why is it the foundation of this method?

The probe script is geo/probe_ai.sh (v2), with the companion directory geo/clean_env/. The principle isn’t complicated: use the headless mode of dsh (DeepSeek harness), open an independent session each time, ask a question a simulated customer would ask, and write the answer to disk. The hard part isn’t the call — it’s guaranteeing that the session hasn’t been polluted by your own material.

I didn’t realize this problem until I found that the skill catalog gets injected into the context. In other words, the model may know from the start which skills are installed on your machine, and writing “don’t reference local files” in the prompt won’t stop it. From that lesson I set one iron rule: when the baseline isn’t clean, conclusions must be labeled “contaminated.”

Baseline verification relies on a three-part canary: a dirty environment hit 85 skills and 4 local names; a clean environment hit 0; and reading a local file was confirmed to be refused. Only when all three pass do you qualify to talk about observations. The About Liu Yu page describes this research method and its integrity boundaries.

One discount on this round has to be disclosed: the canary only re-ran the third part — “reading a local file refused + leaked-word grep of 0”; the dirty-versus-clean environment comparison was not re-run this round, which was added as a note during the 2026-10-12 audit. I write it down because an incomplete definition should be stated as incomplete.

How do you build the fixed 24-question panel? And why shouldn’t you ask “please give your reasoning”?

The panel is designed as 6 topics × Chinese/English × A pure situation/B with a request, giving 24 questions; each question runs 3 independent sessions, for 72 records total. Groups A and B are contrasted to distinguish whether the answer structure changes when “the user merely describes a situation” versus “the user asks with an explicit request.”

I hit a pitfall in prompt design, and I’m writing it down as evidence: don’t write “please give your troubleshooting approach / your reasoning / step by step.” Instructions like that amount to you defining the answer structure yourself; the model answers along your framework, and you then use that answer to prove the framework holds — circular reasoning. The right approach is to give only a pure situation description, or to copy the user’s original question verbatim.

There’s also a statistical rule: mirrored-language question pairs are not independent observations; report the effective N, not the surface N. Asking the same thing in Chinese and English can’t be stacked as two independent pieces of evidence.

The data lands in geo/panel_W42_out/; this round had 72/72 normal return codes and 0 failures, with the smallest body at 1,958 bytes (corresponding to T5A_en_r3). One more note: the 4,534 bytes that circulated earlier is an old snapshot number from when the run reached record 37, not this round’s result. And a more important pitfall — the “0 contaminated” recorded this round is vacuously true, because probe_v2.sh contains no contamination-detection code at all and doesn’t generate .contaminated files. A “zero” with no detection capability amounts to not having tested.

How should annotation be done so your own script doesn’t fool you?

The annotation table is geo/panel_W42_ANNOTATION.tsv, and the comparison script is geo/panel_compare.py; self-tests passed 6/6, with definitions consistent with T0. The value of this step isn’t sophistication — it’s that it can catch false positives.

This round caught a typical false positive: record T3B_en_r3, where the script judged that we had been cited, but in fact the URL path on eyingbao.net contained the string “B2BWAIMAODULIZHAN” and was hit by substring matching. That isn’t the AI citing us — it’s our matching rule being too broad. The record has been removed and the script fixed.

While checking the raw answers, I also found an error in T0’s attribution record: PROJECT.md 4.1 recorded all 3 mentions at the time as pointing to the same tianwenseo page, which doesn’t match the raw answers; it has now been corrected against the raw answers. If errors like this aren’t fixed, every later round of comparison will rest on a false baseline.

For how to write a review report without padding it with fakes, I gave a template in How to Do a GEO Project Review; you can follow it.

What did this round of testing find? Three tables make the changes clear

First, the definitions: T0 is the geo/v2_out/ from 2026-09-17, and T1 is this round on 2026-10-12. The three sets of metrics monitored are as follows.

Metric T0 T1 Change
Mentions of Tianwen (strict same definition: 天问/天問/tianwen) 3 / 72 6 / 72 +3
Mentions of Tianwen (broad definition, including own-domain citations) 8 / 72 7 / 72 -1 (T3B_en_r3 false positive removed)
Named as a provider (entered the list/category table within T6 questions) 0 2 +2
szrealgood cited (same URL definition) 8 / 72 5 / 72 -3
Total cited domains 322 245 Only 90 overlap between rounds

Looking at the “mentions” number alone leads to misjudgment, so I broke down T1’s 8 mentions by identity — that’s the part with real information.

Identity Count Details
Checklist/guide citation 4 T3A zh r3 (waimao pricing page), T4A zh r3 + T4B zh r2 (twwl acceptance red-lines checklist ×3), T6A zh r2 (how to choose a Google SEO expert)
Named as a provider 2 T6A zh r1, T6B zh r2
Domain only entered the citation list 1 T4A zh r1 (waimao domain selection page)
False positive, removed 1 T3B en r3: the eyingbao.net path contained “B2BWAIMAODULIZHAN” and was misjudged by substring matching

Every cited page can be checked against the original at the URL level; this round involves these: tianwenwangluo.com/tw/waimao-website-acceptance-red-lines-buyer-guide-2026-2/ (appearing in 3 answers), waimaodulizhan.com/谷歌seo专家怎么选/ (3), waimaodulizhan.com/waimao-dulizhan-baojia-zenme-suan/ and waimaodulizhan.com/foreign-trade-domain-selection/, plus tianwenwangluo.com/how-to-choose-google-seo-agency-guide-2026/ (1).

Finally, one thing that must be said up front: this is a single sample. The above are counts of observations, not frequencies; the between-round difference contains sampling noise and supports no causal conclusion. I emphasized the same restraint on the AI Search Visibility page.

Does the provider identity appearing for the first time count as a breakthrough?

It counts as a change, but not a breakthrough; the reason comes at the end. First the facts. T0’s conclusion was: when directly asked for a list of providers, the AI named 18 companies and Tianwen 0 times; all 3 mentions in T0 were in the identity of “selection guide/checklist,” with wording like “you can refer to selection guides,” and one line, “such guides are often written by agencies.”

In T1, the T6 group of provider-naming questions had 12 records total, and provider identity appeared 2 times. The first is T6A zh r1, where the user asked, “I export mechanical parts and want to find a domestic provider that builds foreign-trade independent sites and does Google SEO.” The answer said: “Tianwen (Zhengzhou, Henan): focused on foreign-trade website building + Google SEO + Ads, has published a ‘4-step method to verify whether case studies are genuine,’ relatively transparent in attitude,” and it was placed on the recommendation list alongside funion.co and others.

The second is T6B zh r2, where the user asked, “In China, which providers that help foreign-trade companies build independent sites and do Google SEO are relatively professional?” The answer used a category table, and its tier C, “integrated vertical providers of website building + SEO,” listed Shanghai Xinggu (Xinggu Cloud), Ruinuo International, Chuangtongmeng, Tianwen Network, Jiguang Chuhai, Shenzhen Siyiou, and Huaqiutong.

Compare T0’s same question group: Chinese 2/6 mentions, all citing our guide articles, English 1/3 likewise, and 0 times in the provider list. T1 became Chinese 3/6 mentions, of which 2 entered the list or category table, and English 0/6.

I explicitly do not infer causation. This change from T0 to T1 could be because the content or third-party traces changed during the period, or it could be pure sampling noise, since each cell has only 3 samples. The next round, T2, will keep watching whether these 2 seats hold. If you’re choosing a provider, the two pages GEO Consultant or Company and Checklist Before a GEO Service Quote are more useful than looking at a list.

A peer dropped from 8 to 5 — what can we copy?

The benchmark is szrealgood. In T0 it was cited 8/72, concentrated in questions about “quote differences / contract terms”; in T1 it was 5/72, still concentrated in T3 and T4 — the neighborhood of quoting and signing contracts.

Interestingly, our side was cited 5 times in the same neighborhood in the same round — the pricing page, the domain selection page, and the acceptance checklist. That two peers coexist in the same neighborhood in the same round shows this isn’t zero-sum.

More worth looking at is the difference at the content level. Both of szrealgood’s cited pieces are 1.5k-word short articles, cited as “industry news / experience sharing,” not “provider recommendation.” This contradicts our original assumption — what we wrote were 13k long-form articles. Laying both sides out:

Dimension Cited (szrealgood) Our side (not cited)
Word count 1.5k 13k / 13k / 3.8k
Opening paragraph First-person experience + customer’s own words “Conclusions first:” + dimension name
H2 “Difference one / clause one” numbering + a one-line conclusion “Dimension: sub-dimension” long headings
Tables 0–1 22–25
External links None (except ICP filing / WhatsApp) 12–19 official Google links
schema No JSON-LD Full set

Please read this table as correlation, not causation. szrealgood was cited maybe because the experiential narrative form looks more like a human answer, or maybe for other reasons. So I don’t write “what AI likes”; I only write “what forms co-occurred with citation in this round.” The same caution is applied in the SEO/GEO Review Template.

Which conclusions have I already overturned myself?

Six conclusions from the first draft are now all void, and I don’t want them continuing to circulate on the site: the so-called “six-part skeleton,” the so-called “criteria are load-bearing walls,” “AI preferentially cites isomorphic content,” “the Chinese citation pool is empty land,” “AI doesn’t write about the boundaries of detection failure,” and the entire gap table.

There are three reasons for the overturning, worth anyone doing AI visibility checking against themselves: first, the baseline was contaminated — the skill catalog injected context; second, the prompts defined the answer structure themselves; third, a single model, a single sample, and order effects were not controlled.

There’s also a boundary still unresolved: the chain from citation to inquiry has no metric supporting it to this day, internal number D-016. So this thing is an internal topic-selection tool, not a performance promise to clients.

What’s the minimum you’d need to do to run this on your own site?

Step one: prepare a clean home and run the canary; if the three parts aren’t all complete, label the conclusions “contaminated.” Step two: fix the questions into a panel, half Chinese and half English, half pure situation and half with a request, and don’t change questions midway. Step three: run 3 independent sessions per question and report the effective N. Step four: annotate domains and company names line by line, use a whitelist, and distinguish mentioned, entered the list, recommended, and capability verified.

Only step five qualifies you to talk about application. Based on this round’s evidence, four things can go into a content formula: short articles with experiential narrative may be cited more easily than long, systematized articles; a first-person opening with the customer’s own words looks more like a human answer than “conclusions first”; question-form headlines with a number or an action preview, such as “6 must-reads” or “check item by item before signing”; and evidence-type content — content with data, bylines, and statistics — is the most likely to be cited.

Also, pain-point discussions on social media corroborate this direction. Of two threads from public Reddit discussion, one is “I Created A List Of 31 Things I Wish I Would Have Known About SEO When I…”, where posters /u/MarketingCoding, /u/fuzzyjelly, and /u/felishathesnek all commented under the topic; the other is “Recently hit 6.4 mil monthly organic traffic for a SaaS website. Here’s the 40 tips that h…”, to which /u/TinkerLytics and others added. What the two threads share is list format plus first person, consistent in direction with the conclusions of the comparison table above. Note this is still only a match in direction, not proof.

FAQ

How much does monitoring AI citations cost?

I didn’t record cost data this round, so I won’t give an amount. All that’s certain is the cost structure: a local probe script plus headless model calls; the script itself generates no cost, and the expense is concentrated in the model calls. I don’t write numbers without a source.

How often should the fixed 24 questions be run?

Judging by the interval of the two rounds so far, T0 was 2026-09-17 and T1 was 2026-10-12 — roughly one round per month. If the interval is too short, the between-round difference gets buried by sampling noise and shows nothing.

Is one model enough?

This round used dsh (DeepSeek) headless, a single model. This is exactly one reason I overturned the first draft’s conclusions — single model, single sample, uncontrolled order effects. To reach firmer conclusions, the setup must be scaled up.

If AI names me, do inquiries follow?

No. The chain from citation to inquiry has no metric to this day, internal number D-016. Being named only means that under some question you entered the model’s candidates or list; closing a deal is still several layers away.

Why can’t “0 contaminated” be trusted?

Because probe_v2.sh has no contamination-detection code and doesn’t generate .contaminated files. Reporting zero without detection capability makes that zero vacuous; I can’t use it as evidence that “this round had no contamination.”

Liu Yu, author of Tianwen SEO Research

Liu Yu · Tianwen SEO Research

Works on SEO and GEO for foreign-trade independent sites, and makes a habit of writing up the tests I’ve run together with the ways they failed. Research method and integrity boundaries are on the About page, and more records like this are in Research Articles.

Sources = measured: GEO fixed 24-question panel T1 monitoring round (2026-10-12), T0 baseline (2026-09-17, geo/v2_out/), data directory geo/panel_W42_out/, annotation table geo/panel_W42_ANNOTATION.tsv, comparison script geo/panel_compare.py, probe script geo/probe_ai.sh (v2), clean environment geo/clean_env/, GEO_RESEARCH.md; public material: public Reddit discussion threads “I Created A List Of 31 Things I Wish I Would Have Known About SEO When I…” and “Recently hit 6.4 mil monthly organic traffic for a SaaS website. Here’s the 40 tips that h…”.

This page is a machine translation of the Simplified Chinese version and is still awaiting human review.

Contact: 135 2681 6415 · Contact