Citations are a verification affordance, not a trust badge.
A citation nobody opens does not make an answer more correct — it makes the reader more confident, which is the opposite of what you wanted. The Stanford audit of four generative search engines found only 51.5% of generated sentences fully supported by their citations and only 74.5% of citations supporting the sentence they were attached to, which means a quarter of the footnotes in a well-funded product were decorative. The design job is not to display sources. It is to make checking one specific claim cost about three seconds, and then to measure whether anybody does it.
Decide what the citation is for, because the two purposes need different UIs.
Every citation in an agent product is serving one of two jobs, and teams that have not separated them build one UI that does neither well.
- Verification. The reader wants to check a claim they are about to rely on. They need to reach the exact supporting text quickly, in context, and get back. Speed of the round trip is the entire product.
- Attribution and audit. Somebody later — a reviewer, a regulator, the person whose name is on the output — needs to reconstruct where a statement came from. They need a stable, durable identifier and a record that survives the session, which is a different artefact from a link in a chat bubble.
The failure mode of conflating them is the design that everyone ships: a superscript number at the end of a paragraph linking to a domain homepage. It is too coarse for verification — the reader must find the claim inside the page themselves, which is exactly the work they were trying to avoid — and too ephemeral for audit, because the page changes and the link rots. It succeeds only at signalling that sources exist, which is the one job that actively causes harm when the underlying support is weak.
The uncomfortable framing that should drive the rest of this page: an unverifiable citation is worse than no citation. Absent sources, a reader applies their normal scepticism to a fluent answer. Present-but-uncheckable sources suppress that scepticism without supplying evidence — a trust transfer with nothing behind it, and the precise over-trust failure catalogued in designing for trust.
Attach the citation during generation, not after it.
There are two ways to get citations onto an answer, they look identical in the UI, and only one of them can be faithful.
- Post-hoc attribution writes the answer first, then searches for a source that matches each sentence. The retrieval target is a claim the model has already committed to, so the search finds the closest available text and attaches it. When the claim is wrong or synthesised, the nearest neighbour is still returned — which is exactly how you get a citation that is topically relevant and does not support the sentence. This is the mechanism behind that 74.5% figure.
- Grounded generation puts the retrieved passages in context first and requires the model to emit a span identifier alongside each claim as it writes. The citation is then a record of what the model was looking at, not a justification assembled afterwards.
The engineering consequences of choosing the second are specific, and they land in the retrieval layer rather than in the front end.
- Chunks need stable, addressable IDs that survive re-indexing, because a citation pointing at chunk 4,117 of an index you rebuilt last night points at something else now. Carry document ID, version and character offsets — the parsing decisions in document parsing for RAG determine whether you can.
- Cite at the span level, not the document level. "This claim came from these two sentences of that page" is verifiable in seconds; "this answer used that page" is not verifiable at all.
- Keep the retrieved text, not just the URL. The snippet the model actually read is the evidence. The live page is a different object that may already have changed, and for an audit trail the difference matters more than it seems.
- Multi-hop answers need per-hop provenance. An agentic retrieval loop that searched four times and synthesised across them cannot honestly attach one citation to the conclusion. Either cite each supporting step or mark the conclusion as inference — see the next step but one.
Design for the cost of one check, and drive it toward zero.
The metric that decides whether your citation UI works is how long it takes a reader to confirm a single claim they doubt. Every design choice either lowers that number or raises it. Most products raise it without noticing, because they optimise the look of the answer rather than the ergonomics of doubt.
- Show the supporting quote in place. Hover, tap or inline expansion that reveals the actual sentences — not a title, not a domain, not a summary of the source. This single change does more than everything else on this list combined, because it removes the context switch entirely.
- Deep-link to the exact position when the reader does leave: text fragments, page and paragraph anchors, timestamped positions in media. Landing a reader on page one of a 90-page PDF is a refusal to help disguised as a citation.
- Anchor to the claim, not the paragraph. A marker at the end of a four-sentence block tells the reader that something in there is sourced, and leaves them to guess which. Per-claim markers are more visual noise and much less work.
- Do not make verification a mode. If checking a source means leaving the conversation, opening a panel, and losing scroll position, verification competes with continuing — and continuing wins every time.
- Preserve the citation through the copy-paste. Most agent output leaves the product immediately, pasted into a document, a ticket or an email. If the provenance does not survive that transition, the claim arrives downstream stripped of everything that made it checkable, and the next reader has no idea it came from a model at all.
Consider deliberately raising the cost in one place: when the answer is about to be acted on rather than read. A destructive or irreversible step justifies making the human open the source before the confirm button activates, which is the same reasoning as the friction placement in approval and confirmation UX. Cheap verification everywhere; mandatory verification exactly where the cost of being wrong is high.
Make unsupported claims look different from supported ones.
The design that footnotes every sentence and the design that footnotes none convey the same amount of information, which is none. The signal is in the contrast, and most products destroy it by treating uniform citation density as a quality goal.
- Distinguish three kinds of sentence. Quoted or directly supported; synthesised across sources; and model knowledge with no retrieval behind it. All three are legitimate, and merging them visually is what lets an unsourced inference inherit the credibility of the sourced sentences around it.
- Render the third kind honestly. A sentence the model produced from its own weights should not carry a citation-shaped marker, and it should be visibly distinguishable from one that does — this is also where knowledge cutoffs bite, since unsourced claims are exactly the ones that may be years stale.
- Let the agent say the sources do not support an answer. "The retrieved documents do not cover this" is a correct output, and if your UI has no way to render it, the model will produce a confident answer instead. Abstention needs a place to live in the interface before it can be trained for.
- Show conflict rather than resolving it silently. When two sources disagree, an answer that picks one and cites it is less honest than one that presents both — and the disagreement is often the most valuable output, particularly for the research patterns in research agents.
- Resist the density arms race. Citation count is a metric that goes up when you attach a source to "the sky is blue", and each decorative footnote makes the load-bearing ones harder to find. This is a progressive disclosure problem: surface the citations that a sceptical reader would actually challenge.
Provenance is more than the link, and the link is an attack surface.
A citation asserts that a claim came from somewhere. Two things it does not assert — that the somewhere is trustworthy, and that it still says what it said — are the ones users read into it anyway.
- Show retrieval time and source date. A citation to a page fetched eight months ago, or written in 2019, is doing different work from one fetched this morning, and the interface usually hides both. Staleness is invisible in a link and decisive in an answer.
- Do not launder authority through uniform styling. A regulator's PDF, a vendor's marketing page and a forum comment render as identical superscripts. If your corpus mixes tiers, the tier belongs in the citation, because the reader is otherwise being told that all evidence is equal.
- Treat a citation to attacker-controlled content as a live risk. Any web page an agent retrieves can contain instructions aimed at the model, and the citation UI is the second half of that problem: rendering a fetched title, a link or a remote image gives the retrieved content a channel into your interface. Sanitise what you render, and read prompt injection with the citation renderer in mind rather than only the model.
- Distinguish "the agent read this" from "the agent recommends this". A source that was retrieved and contradicted the answer is still a source, and users routinely interpret any listed link as an endorsement.
- Keep the disclosure that a machine wrote it attached to the claim. Provenance of the source and provenance of the output are different obligations, and the second is increasingly a legal one — see disclosure and content provenance.
Measure faithfulness in the pipeline and detection in the user.
Citation quality is one of the few UX properties with a clean automated check, and almost nobody runs it. There are two measurements and they answer different questions.
- Citation faithfulness, offline. For each claim–span pair, does the span actually support the claim? This is a natural-language-inference problem and a judge model does it well, with the usual caveats about calibrating the judge in LLM-as-judge. Two numbers fall out, and you need both: the share of claims that are supported, and the share of citations that support their claim. The Stanford audit reported those two separately for a reason — they fail independently, and an average hides which one is broken.
- Citation coverage. What fraction of load-bearing claims carry any support at all? A high faithfulness score on a page that cites three of its fifteen assertions is not a good result.
- Detection rate, with users. The only measurement that tells you the affordance works: plant a claim that its citation does not support, and see how many readers catch it. Click-through on citations is a proxy that flatters you — a click that lands on a homepage taught the reader nothing.
- Watch the false-confidence direction too. Ask readers how confident they are before and after seeing sources. If confidence rises more than accuracy does, your citation UI is producing over-trust, and the fix is verification cost rather than more footnotes.
- Gate on it. Citation faithfulness belongs in the same regression suite as answer quality, per evaluating RAG. It degrades quietly when the retriever, the chunker or the prompt changes, and nothing in the interface will look different when it does.
Ship the hover-quote before anything else. Replace every citation that opens a page with one that reveals the supporting sentences in place, and instrument how often readers expand them. That single change converts a trust badge into a verification affordance, and it usually exposes an unpleasant fact within a week: some meaningful fraction of your citations do not contain the claim, and nobody had noticed because nobody was opening them. Measure citations in verifications performed, never in citations displayed — and treat any footnote a reader cannot check in three seconds as an over-trust generator rather than a feature.
Related: transparency and explainability for why a reasoning trace is not evidence in the way a source is, hallucination and grounding for the failure this is bounding, research agents for the domain where a fabricated citation voids the whole deliverable, and evaluating RAG for the harness that keeps the numbers honest.