Citations are not mentions, and neither is a rank
Three distinct events get blurred into “visibility” and must be logged apart. A mention is the brand named in answer prose. A citation is a URL surfaced as a source for the answer. A referral is a user actually clicking through, which lands in analytics. An answer can mention you without citing you, cite a third-party page about you, or cite you while describing you wrongly, and each of those is a different finding demanding different work.
The cross-engine problem is that each platform surfaces sources differently: inline links, footnotes, expandable source lists, and grounding panels are all “citations” in the loose sense while being differently visible to the user. Google’s own documentation commits only to AI Overviews and AI Mode surfacing relevant links, and its Search Console reporting counts AI-feature traffic inside the ordinary Web search type per the AI features documentation, so no engine hands you a clean, comparable citation feed. The schema handles this with a citation_type field per record instead of pretending the surfaces are equivalent, and by never summing across engines: a ChatGPT citation rate and an AI Overview citation rate are two columns forever.
The four-table schema
The worksheet defines four small tables, and the discipline is in what they refuse to merge.
observation_log is the unit of everything: one row per saved answer, with platform, surface, account state, prompt id, stratum, run number, date, and a brand_present flag. Absence rows stay in the log because they are the denominator.
citation_records holds one row per cited URL per observation: the full URL, the domain, ownership (owned, influenceable, third party), the citation type, and whether the citation supports a brand mention or stands alone. The unit is the URL, not the domain, because a roadmap can only target pages someone can edit.
mention_records holds the sentence naming the brand and its accuracy grade against the client’s approved fact ledger. Grading accuracy against memory instead of a ledger is how audits ship compliments instead of findings.
sampling_plan pins the wave: panel version, prompts per stratum, runs per prompt, spacing, and the denominator rule every reported rate must name. Answers vary between identical runs, so single runs are anecdotes; the measurement method behind these rules, including the rate formulas, is the measurement protocol.
Cross-engine citation tracking schemaEvery column of the four tables with its type, allowed values, and the reason it exists, plus the sampling plan fields with example values. Build it as spreadsheet tabs or impose it on a tool’s exports; the schema is the part that keeps waves comparable.
CSV schema and sampling worksheetWhat the tracking tools actually claim to cover
The tool market is loud, so here is what the major platforms state on their own pages, recorded as vendor claims rather than verified behavior.
Every tool above samples prompts it chooses, on a cadence it chooses, from accounts it controls, and each composes its metrics differently. That does not make the tools useless; it makes them incomparable with each other and with your panel. The schema is how you stay sane using any of them: tool numbers land in their own labeled columns, your frozen-panel observations land in theirs, and no rate is reported without its denominator. How to interrogate a vendor’s sampling before trusting its trendline is covered in the AI visibility tools guide.
The classification checks carry weight three in the audit modelMention and citation classified separately, absences logged, accuracy graded against an approved ledger: the interactive checker scores whether your tracking discipline would survive an audit review.
Score your tracking protocolRunning an AI citation audit with the schema
A citation audit is the point-in-time version of tracking: one wave, fully classified. Run the frozen panel, log every observation including absences, then classify each engine-answer pair into one of four states: cited (an owned URL appears as a source), mentioned without citation, cited via third party (a page about the brand, owned by someone else), or absent. The third state is the one that changes roadmaps, because it tells you which external pages currently carry your visibility and whether you can influence them.
Two rates per engine per stratum summarize the wave honestly: mention rate and owned citation rate, each over valid observations. Resist the composite score. A single blended number hides exactly the difference the audit exists to surface, and the report template shows how to present the two rates with their limits attached. Referral traffic joins the picture from analytics separately; ChatGPT referrals are attributable through the utm_source=chatgpt.com parameter documented in OpenAI’s publisher FAQ, and Microsoft’s side has its own first-party reporting covered in the Bing AI performance guide.
Citation tracking cannot promise citations, and nothing in this workflow makes an engine cite anyone; the schema only guarantees that whatever happens is recorded well enough to act on. The honest promise is smaller and more useful: comparable waves, defensible rates, and a clear view of which sources actually carry the brand’s presence in AI answers.