An AI answer can cite a page without that page supporting the answer's claim. If you only count citation URLs, you miss that distinction. A useful AI citation audit captures the answer and cited URL, retrieves the relevant source passage outside Jev, then asks TypeSafe AI's Jev one typed question: does this passage support this precise claim? Screpy AI Visibility can show captured answers and cited domains; the evidence-check workflow in this article is an additional process a team can build, not an existing Screpy/Jev integration. Below, two fictional examples show a supporting passage and an unrelated citation. The API example uses TypeSafe's actual request structure, while the response values are explicitly illustrative. The final decision remains reviewable because the claim, passage, source version, and selected label stay together.
Save the answer, claim, and source snapshot
Start with one claim, not a whole AI answer. Record the prompt, platform, market, language, capture time, answer text, cited URL, and the sentence or clause being checked. Store the source-page title, retrieval time, and the exact passage you plan to compare. If a page is edited later, your audit should still identify which version you saw.
For example, an AI answer might say, “Shopify automatically fixes every canonical conflict,” then cite a general migration checklist. The URL's presence tells you the answer cited that page. It does not tell you the checklist supports the word “every.” A second answer could say, “Check product-page canonical tags before a migration,” citing a checklist that actually says to audit canonical tags. These require separate support judgments.
Screpy AI Visibility tracks selected prompts and can expose the sources and domains cited in captured AI answers. That helps you choose which answers to review. Keep citation appearance, cited-domain frequency, brand mention, and claim support as different columns. A cited domain can be frequent while its retrieved passages fail to support the specific claims you sampled.
Use deterministic checks before a model call
Fetch the cited page through your own crawler or retrieval code. Check the HTTP status, redirects, canonical URL, and whether the relevant passage is actually available. Jev does not open URLs in this workflow. When the source is blocked, missing, or a JavaScript shell that yields no text, record “source unavailable” and investigate; do not ask Jev to infer the content from a title.
The official TypeSafe citation-check cookbook uses a deterministic normalized quote check before a semantic Jev question. That is a sensible order: if an AI answer quotes a sentence, first test whether the normalized sentence occurs in the fetched source. It is cheaper and more reproducible than asking a model to find exact text. But an exact quote's presence does not by itself validate a broader claim. “Audit canonical tags” appears in a checklist; it does not prove “the platform automatically fixes every canonical issue.”
Save both outcomes: quote_present as a mechanical check, and claim_support as a separate evidence judgment. If the answer makes several factual claims, split them into atomic checks. A single verdict on a whole paragraph hides which clause is unsupported. Use source passages long enough to preserve necessary context but short enough that the specific claim remains clear.
Ask Jev whether the passage supports the claim
Once the relevant text is available, a Choice question can classify its relationship to one precise claim. The following JSON has the documented model, state, and questions structure. It is a fictional SEO example, not a request we ran against TypeSafe.
{
"model": "jev-1.13.0",
"state": {
"claim": "The migration checklist recommends auditing product-page canonical tags before launch.",
"source_url": "https://example.org/shopify-migration-checklist",
"source_passage": "Before launch, audit redirects, product-page canonical tags, and duplicate collection URLs."
},
"questions": [{
"type": "choice",
"instructions": "Classify whether the supplied source passage supports the exact claim. Do not use the URL as evidence and do not generate an explanation.",
"criteria": {
"supports": "The passage provides evidence for the claim as worded.",
"contradicts": "The passage provides evidence against the claim as worded.",
"says_nothing": "The passage is available but does not address the claim.",
"insufficient_evidence": "The excerpt lacks context needed for a reliable judgment."
}
}]
}
An illustrative response could be:
{
"choice": "supports",
"probabilities": {
"supports": 0.89,
"contradicts": 0.02,
"says_nothing": 0.06,
"insufficient_evidence": 0.03
},
"confidence": 0.72
}
Now change the claim to “Shopify automatically fixes every canonical conflict.” The same passage only advises an audit; it says nothing about automatic fixes. A careful reviewer should reject a supports label for that claim. Use the counterexample in your evaluation set. Confidence expresses how decisive the typed answer is under the model, not whether the source is true or the answer is globally accurate. The API reference gives the full response envelope for implementation.
Route the verdict into citation QA
Store the selected label, probabilities, confidence, model version, claim, passage, and retrieval time. Apply a risk-based policy in code. For instance:
function routeCitation(source, result) {
if (!source.available) return "retrieve_or_review";
if (result.choice === "insufficient_evidence" || result.confidence < 0.75) {
return "human_review";
}
return result.choice === "supports" ? "provisionally_supported" : "inspect_claim";
}
The 0.75 threshold is illustrative; calibrate it against manually labeled cases. Even provisionally_supported deserves spot checks, especially for claims involving numbers, dates, medical or financial information, or wording such as “all” and “never.” A human can see whether the source is trustworthy and whether the selected passage omits contradictory context. Jev's typed response is an auditable routing signal, not a substitute for source evaluation.
Report denominators separately. “Cited domain appeared in 40 of 100 sampled answers” uses captured answers as its denominator. “12 of 20 sampled claim–passage pairs were supported” uses reviewed pairs. Do not combine those into a single AI visibility percentage. The Jev SEO hub explains why one atomic decision per call produces cleaner downstream records.
Compare claim–passage pairs, not URLs alone
The same cited URL can support one sentence and fail another. A reviewer should inspect the specific claim–passage pair, as in these fictional examples:
| Claim in the captured AI answer | Retrieved source passage | Expected review finding |
|---|---|---|
| “The checklist says to audit product-page canonicals before launch.” | “Before launch, audit redirects, product-page canonical tags, and duplicate collection URLs.” | supports: the narrow advice is stated. |
| “Shopify automatically fixes every canonical conflict.” | The same audit checklist sentence | says_nothing: the passage does not describe an automatic fix. |
| “The guide advises skipping redirect checks.” | “Before launch, audit redirects…” | contradicts: the passage recommends the opposite. |
| “This page proves the change increased organic traffic by 40%.” | Only a checklist title is available | insufficient_evidence: no result data or relevant passage was supplied. |
This table is a labeling exercise, not four actual Jev calls. It makes two implementation rules visible. First, a source page must be retrieved and the relevant passage selected by code or a reviewer before Jev sees it. Second, the exact wording matters. “Audit canonicals” is a smaller, supportable claim than “fixes every canonical conflict.” A model can still misclassify a row, especially when the relevant evidence is elsewhere on the page, so human checking remains useful.
For a pilot, sample claim–passage pairs from several prompts and source domains. Include pairs with clear support, contradiction, unrelated content, and inaccessible pages. Have a reviewer label the pairs independently. Track disagreements by claim type and source quality; decide whether a broader context window or stricter claim splitting resolves them. If the source changed after capture, mark a version mismatch instead of quietly overwriting the old evidence. This gives an auditable basis for improving the workflow without claiming that the citation audit measures every AI answer on the web.
Interpret results without overstating them
A citation may point to the right domain but the wrong page. The page can change between answer capture and retrieval. An answer may summarize multiple paragraphs, quote out of context, or cite a page that is inaccessible to your crawler. Preserve these states explicitly instead of turning them all into says_nothing.
A model can also misread a negation or an unusually broad claim. Review disagreements, retain page snapshots where permitted, and test the same questions across languages you actually monitor. TypeSafe describes Jev as a typed-decision model over provided data, not as a search engine or a free-text investigator (introduction). The citation-check cookbook is a pattern, not an accuracy benchmark for SEO content.
For the wider monitoring question, read what AI visibility in SEO measures. Citation support is a useful quality check on a sampled set of captured answers; it is not a universal score of how often a site appears in AI search.