AI Citation Tracking: How to Log Which URLs AI Engines Cite

Every vendor reports a citation percentage and almost none reports the denominator behind it. This is the capture schema, the URL rules that decide whether one page counts once or four times, the citation-rate formula with its denominator written down, and what the number still cannot tell you.

G
Written byGan Liu
Read Time12 min
Posted onSeptember 11, 2026
AI Citation Tracking: How to Log Which URLs AI Engines Cite

TL;DR: AI citation tracking means logging, for every prompt you run, which URLs an answer engine listed as its sources - then normalising those URLs, tagging each one by owner, and counting how often the client's own domain appears. It is not the same as tracking brand mentions: a citation is a URL in the source list, a mention is the brand name in the answer text. Two numbers survive a client challenging them - a citation rate with its denominator written down, and the split of citations across the client's domains, competitors and everyone else. Composite visibility scores, sentiment on citations, and borrowed industry-wide citation percentages do not, because none of them open back to a specific answer.

One disambiguation before anything else, because the phrase is overloaded. This page is about citations inside AI answer engines - the source chips under a Perplexity answer, the linked sources under a Google AI Overview, the URLs ChatGPT lists when it browses. It is not about bibliometrics or academic citation analysis, where a citation is one paper referencing another. Different field, different tools, same two words.

This post owns the process. For the scoring rules on what counts as a citation and what counts as a mention, use the mention vs citation glossary entry. For why an engine cites a page and still drops the brand name, read why AI cites your content but never names your brand. For what to do once the pattern is on the table, the moves live in the source gap vs conversion gap framework.

A citation and a mention are different fields

Keep them in separate columns forever. A citation is a URL the engine attached to its answer as a source. A mention is the brand's name appearing in the prose a reader actually reads. They move independently, and merging them into one number deletes the only thing worth acting on.

The reason to track citations specifically is that they are the more concrete of the two. A mention is a string match with judgement calls attached. A citation is a URL: you can open it, check whose domain it is, and see which page earned the slot. That precision is also the trap, because URLs arrive in several shapes, and any sheet that counts strings rather than pages will read those shapes as separate sources.

Which AI engines show their sources?

Citation tracking only works where the engine publishes its sources, and coverage is uneven and changes without notice. Siftly's own comparison, checked on 2026-09-11, describes Perplexity as showing sources on every answer, Google AI Overviews as showing linked sources, ChatGPT as showing them only when it is browsing, and Gemini and AI Mode as partial and rolling out (Siftly's citation-rate comparison). Our own engine-specific method posts reach the same conclusion for Perplexity, and for Google AI Overviews they add the prior boolean this schema calls source_list_present: did an Overview trigger at all.

Do not take any table's word for it, this one included. Behaviour differs by run, by account state and by whether the model chose to browse. So the schema below has a field for it: record per run whether a source list was present. A run with no source list is not a zero. It is a run with no citation surface, and folding it into the denominator quietly deflates every rate you report afterwards.

Step 1: capture the answer, the sources and the run metadata

One row per prompt, per engine, per run. Nothing aggregated at capture time - aggregation is reversible only if the raw record survives.

FieldWhat goes in itWhy it exists
run_idDate, time, timezoneTwo runs of the same prompt are two observations, not one
promptThe exact wording sentReword the prompt and you have started a new series
engineChatGPT, Perplexity, Gemini, Google AI Overviews, Google AI Mode or CopilotRates are never comparable across engines
source_list_presentYes / NoSeparates "not cited" from "no citation surface on this run"
answer_textVerbatim, not a summaryThe only thing that survives a client asking how you know
cited_urls_rawEvery URL, exactly as servedYou cannot re-derive the original from a cleaned one
cited_urls_normalisedThe output of step 2The column you actually count
owner_tagOne tag per normalised URL (step 3)Turns a URL list into a competitive read
brand_namedYes / NoThe mention boolean, kept beside the citations
own_domain_citedYes / NoThe citation boolean at the answer level

Run logged out, in a clean browser profile, from the region the client sells into. Personalisation contaminates the result, and nothing removes that entirely - it is a defined slice, and slices are fine as long as you name yours.

Step 2: normalise the URLs before you count anything

This is the step that decides how many citations a single page is worth, and it changes the number you report. Of the four citation-tracking pages we read on 2026-09-11 - Siftly's feature page and its tools comparison, Otterly's how-to guide and Scrunch's product walkthrough - not one sets out URL-handling rules. Otterly's guide mentions UTM parameters only in the context of attributing referral traffic in GA4, not as a counting problem. One of the rules does surface elsewhere in the category: Geneo's scoring explainer tells you to collapse a page cited twice inside a single answer down to one citation, filed under data hygiene (Geneo on AI search visibility scoring, checked 2026-09-11). The whole set is the six rules below, each written out with the mechanism by which it moves the number.

It is a counting problem. The same page can appear in your log as four different strings, and a naive count will read that as four citations from four sources:

  • Tracking parameters. Answer engines append their own. Strip the known click identifiers - utm_*, gclid, fbclid, srsltid, ref - and keep anything that is genuinely part of the page's identity. Stripping the whole query string is too blunt: it merges ?page=2 into page one.
  • Protocol and host variants. http vs https, www vs bare, trailing slash vs none.
  • Fragments. #section-3 is the same document as the document.
  • Redirect chains and syndication. A link-wrapper URL and the destination are one citation, not two. Resolve, then count.
  • Canonical duplicates. Paginated, AMP, or locale variants of one article. Collapse to the canonical the client actually controls.
  • Repeat chips inside one answer. One answer citing one page is one citation, however many source chips the engine rendered for it. Some engines emit a chip per highlighted passage, so counting chips instead of pages inflates whichever engine is chattiest.

Write your rules down once, apply them to competitors identically, and keep the raw column so any decision is reversible. Skip this and the citation rate you hand a client is inflated, and it is inflated by a different factor every month, which means the trend line is noise. Our own pipeline is that rule applied to itself: it keeps the raw cited URL and normalises only when the citation table is derived, and the same rule module is shared by the emitter and by an independent validator that re-derives the table from the stored answers rather than checking the emitter against itself. That is why the UTM stripping is stated in our FAQ rather than left implied: the alternative is a number nobody can reproduce.

Step 3: tag every citation by owner

The three-way split - the client's own property, a named competitor, everyone else - is what turns a URL list into something an agency can bill against, and the two extra tags below are what stop the first of those buckets from quietly growing. This is not a gap in the market at the product level: Scrunch's platform reports citations by owner across your brand, third parties and competitors (Scrunch's citation-tracking how-to, checked 2026-09-11, and that page carries its own notice that it may not match the current product), and Siftly classifies each citation as owned, independent media, social or competitor (Siftly's citation-tracking feature page, checked 2026-09-11).

Done properly it also lets you track citations to your own site in AI results separately from the ones that only look owned. What is missing publicly is the rule sheet - the edge cases you will hit in the first hour and must decide the same way every month.

The cited URL isTagRule of thumb
The client's primary domain, a subdomain, or their docsOwnedList every domain and subdomain up front; a forgotten docs subdomain reads as a third party
A profile the client controls on someone else's platform - their YouTube channel, their app-store listingControlled, not ownedTag it separately. It is a win, but it is not a click to the client's site and it can be removed by the platform
A page the client paid for - sponsored listicle, paid directory entryPaidKeep it out of "owned" or the citation rate starts measuring media spend
A domain on the client's named competitor listCompetitorFix the competitor list before the first run; adding names mid-quarter breaks the trend
Media, Wikipedia, forums, everything elseThird partyKeep the full URL, not just the domain - the specific page is the target you would out-publish

Step 4: a citation rate with the denominator written down

Every vendor publishes a percentage. One page in the category does argue for normalising by prompt count (LLM Pulse on AI share of voice, checked 2026-09-11); none of the pages we read states how many runs per prompt go into the figure, and none says what to do with a run that returned no source list at all. Siftly does state a formula - cited tracked queries divided by total tracked queries, times 100, computed per engine (Siftly's citation-rate comparison, checked 2026-09-11; that page states it was last updated June 2026). Otterly's guide defines citation frequency as "how often your content is cited across" your tracked prompts, without saying how many runs per prompt go into it (Otterly's citation-tracking guide, checked 2026-09-11).

Runs per prompt is the part that matters, because these answers are not deterministic. The same prompt on the same engine an hour later can return a different source list. A one-run-per-prompt rate is a snapshot with an unstated error bar.

Report the rate as a fraction with all four parameters attached:

Citation rate, for one engine over one dated window = the number of runs in which at least one owned URL appeared in the source list, divided by the number of runs that had a source list at all. State it alongside the frame that produced it: N prompts, R runs each, one engine, these dates.

Three rules that follow from it:

  1. Runs with no source list leave the denominator. Count them separately and report that count. If half your ChatGPT runs never browsed, the rate is about the other half and the client should be told so.
  2. Never average across engines. Perplexity prints sources on nearly every answer, so its rate starts higher by construction. One rate per engine, trended against its own history.
  3. Freeze the prompt set. Change the prompts and you have started a new series. Note the date you changed it and restart the baseline rather than splicing.

The same discipline applies to the number you do not compute. We do not roll these into one visibility score - the reasoning is in evidence, not a score. Otterly's guide takes the other route: it lists a composite AI Visibility Score among its three primary metrics, with sentiment analysis as a secondary one (Otterly's citation-tracking guide, checked 2026-09-11). That is a legitimate product choice; it is not one a client can check line by line, which is the constraint we design for.

Why not just borrow an industry citation percentage

Because they are unstable enough that you cannot use one as a client baseline. Otterly's 2026 citations report, checked on 2026-09-11, gives a 52.5% / 47.5% split in two different directions on the same page: the key-findings list assigns 52.5% to community platforms against 47.5% for brand domains, while the body assigns 52.5% to brands against 47.5% for news, forums and other sources (Otterly's 2026 citations report, checked 2026-09-11). Their separate how-to guide attributes 95% of AI citations to third-party sites, crediting research it labels OtterlyAI's State of AI Search - a name the report page above never applies to its own data, so whether these are one dataset or two is not something either page lets you check.

We are not calling any of those wrong - they may be measuring different populations, and a page can be revised. The point is narrower: a headline percentage drawn from someone else's prompt set, categories and window cannot tell your client what share of their citations they own. Only their own prompt set can, which is the entire reason to run step 4.

Step 5: read the gaps off the same table

Once owner tags sit beside the mention boolean, two patterns fall out without any extra work:

  • Own domain cited, brand not named. That is a conversion gap. The content did the work and the reader never learned whose it was. The move is attribution, not a rewrite.
  • Brand named, citations point at other domains. That is a source gap. The stored answer names the exact URL that took the slot, which makes it a specific target rather than guesswork.

One distinction worth keeping straight: some platforms report whether the brand is mentioned inside a cited page. That is a different measurement from whether the brand is named in the answer itself. Both are useful; only the second one is the conversion gap.

How to track AI citations by hand, and when to stop

The manual version is a spreadsheet with the columns above, run weekly on a frozen prompt set. Twenty prompts across three engines is sixty rows a week for one client. That is fewer rows than the seventy-five our AI visibility checker budgets ninety minutes for, and you should still budget the ninety minutes rather than less, because a row here carries the ten fields above instead of the two booleans that sheet asks you to score. The checker generates a starting prompt set and a scoring sheet free in the browser, with nothing leaving the page and no score attached.

The crossover is not really about hours. It is the first month you miss a re-run and lose the comparison, because a gap in the series is worth less than the whole month of work that produced it.

Where we are the wrong buy. A single brand watching only itself is paying for roster machinery it will never use. Teams who want a headline number for a deck will find our reports uncomfortable, because we do not produce one. White-label client reporting is coming soon rather than shipped, so if rebranded PDFs are a hard requirement this quarter, take that at face value. And we are a vendor in this category writing about this category - read the method, not the recommendation.

What AI citation tracking cannot tell you

  • Whether a fix caused a change. We show the timeline and the stored answers before and after. We do not assert causation, and nobody honestly can.
  • Whether the answer was accurate or flattering. We do not report a sentiment score and we do not fact-check the model's prose. A citation is a yes or no on a URL appearing.
  • What to write. The measurement is output-side. Producing the content is your team's job, not the tracker's.
  • Which URLs were retrieved but not cited. An engine may read far more pages than it lists. Whether that retrieved set is available to us is not something we can document today, so treat any "retrieved versus cited" analysis as unproven, including any we might be asked for.

Questions agencies ask

Is AI citation tracking the same as citation analysis in research?

No, and the overlap in vocabulary causes real confusion in search results. Academic citation analysis counts how often papers reference other papers, using citation indexes such as Scopus or Web of Science. AI citation tracking counts how often an answer engine attaches a given URL to a generated answer, across a prompt set you chose, in a window you defined. Nothing carries over between the two: different sources, different units, different tooling. If a result in your research looks like a university library guide, you have crossed into the other meaning.

Which engines can I actually track citations on?

It varies by engine and by run, which is why the schema records it per run rather than assuming it. As of the pages we checked on 2026-09-11, Perplexity and Google AI Overviews publish source lists routinely, ChatGPT does so when it browses rather than answering from the model alone, and Gemini and Google AI Mode sit in between. Treat that as a starting expectation, not a constant: engines change the surface without announcement, and an answer with no source list is a data point about the engine rather than a zero for the brand. Record it as its own state and keep it out of the citation-rate denominator.

How do I calculate an AI citation rate?

Count the runs in which at least one URL you own appeared in the source list, then divide by the runs that had a source list at all, for one engine, over a dated window. Report it as a fraction with the parameters attached - twenty prompts, three runs each, one engine, these dates - not as a bare percentage. Three ways it goes wrong: counting one page as several because the URLs were not normalised, averaging across engines that print sources at different rates, and changing the prompt set mid-quarter so the trend compares two different studies.

How do I track AI citations without paying for a tool?

For one client and a short prompt list, a spreadsheet is enough: the fields above, filled in by hand on a frozen prompt set, give you ground truth, and that is what the platforms are approximating. Google Search Console helps for Google's surfaces, with one caveat: Google documents that pages appearing in AI Overviews and AI Mode are folded into the overall "Web" search type in the Performance report rather than broken out (Google Search Central on AI features, checked 2026-09-11), so it cannot separate your AI-surface exposure from ordinary organic, and it will not tell you who else was cited beside you. The free version breaks on scale and on discipline: four clients across six engines is a part-time job, and the value is in an unbroken weekly series rather than in any one run. Start manual, confirm the signal is worth reporting, then decide whether to automate.

What should agencies look for in AI citation tracking tools?

Vendors sell this job under three names - AI content citation tracking tools, AI citation monitoring, AI citation analytics - and they mean the same thing. We are one of the vendors in this category, so we will not rank the field. The rubric we would apply if we were buying: does it store the verbatim answer and the full source list, or only charts derived from them; does it normalise cited URLs and say how; does it keep the named and cited signals as separate fields; does it tag citations by owner with rules you can inspect; does it partition by client rather than pooling one prompt quota across a roster; and what does it cost at ten clients rather than one. Run any shortlist against your own prompt library before committing, and weight that test towards the surfaces that change most often.

See it on one of your own clients

Before the spreadsheet gets built or anything gets bought, look at what one run's output actually holds. Send us one client URL for a free audit run by a person — that URL and an email address is the whole intake. Your buyers' questions go to ChatGPT, Perplexity and Gemini by hand, and inside two working days you have each answer word for word, the full source list beneath it, and the named-versus-cited call on every one. Nothing to pay, no account. The other three surfaces - Google AI Overviews, AI Mode and Copilot - are on the paid pipeline.

See what AI says. Then fix it.

Send one brand. Get the answers, the sources, and the first gaps worth fixing.

No card. No call. No catch. Reply in 2 business days.