Type your own name or your company's core domain into three frontier chat interfaces and you will get three plausible, subtly incompatible biographies. In my case, ungrounded models routinely merged three different people in Zürich: an electrical engineer from ETH Zürich's High Voltage Laboratory (D-ITET) leading Energy at inpeek AG, a namesake control-systems researcher at ETH's IDSC institute (D-MAVT), and a Zürich commercial attorney. Worse, interactive chat frontends hide retrieval chunks, personalize on session history, and give you no way to tell whether an outdated claim came from a missing webpage signal or frozen pre-cutoff weights.
Treating LLM visibility as an engineering control loop required fixing both sides of the equation at once. First, I turned andreasritter.ch into an explicit machine-readable source: structured ProfilePage JSON-LD carrying a formal disambiguatingDescription, a clean Markdown twin at /index.md advertised via HTTP Link response headers, a concise /llms.txt index, and Content-Signal: search=yes, ai-input=yes, ai-train=no in robots.txt. Every push to main runs automated snippet, schema and live-edge verification before pinging IndexNow.
Prompting a chat window tells you what one session improvised once. Polling five grounded and ungrounded APIs on a fixed Monday schedule tells you whether your engineering actually moved the needle. Design principle behind andreasritter-telemetry
Programmatic API probes instead of frontend spot-checks
To measure what outside systems actually retrieve, I built a second, isolated Cloudflare Worker (andreasritter-telemetry) that polls nine upstream APIs on deterministic cron schedules and writes normalized time series into Cloudflare D1. Every night it pulls verified AI crawler activity from Cloudflare's GraphQL Analytics API and query rankings from Google Search Console (signing PKCS#8 RS256 service-account JWTs directly via Web Crypto), paired with a daily GitHub Actions job that syncs Bing Webmaster and Copilot index stats outside Cloudflare's shared Worker egress IPs.
Every Monday at 06:30 UTC, the Worker dispatches a bilingual German and English benchmark across OpenAI's Responses API, Anthropic's Messages API, Google's Gemini API, Brave Search llm-context and Brave Answers. Three entity prompts verify biographical and project facts; three non-branded discovery prompts test whether inpeek AG surfaces organically when Swiss utilities ask about migrating from innosolvenergy to SAP S/4HANA Utilities or verifying mass billing runs with AI. Running OpenAI, Claude and Gemini both with live web search and without it isolates exactly what live retrieval fixes versus what parametric memory still remembers.
Separating real momentum from single-run LLM noise
Single-week LLM diffs are noisy by nature: a model may cite /index.md on Monday, paraphrase HTML on the next run, or shift phrasing after a silent provider checkpoint upgrade. Every Tuesday morning, a two-tier judge extracts structured entities, ranks and claims with Claude Sonnet 5.5 (cached in D1 so historical runs are never re-billed) and hands them, together with 28-day half-life exponentially weighted moving averages across Search Console, Bing, bot crawls and human AI referrals, to Claude Opus 5.5 (with automatic Gemini 4 fallback) in closed-book JSON mode. Stochastic one-run blips are separated automatically from confirmed multi-week shifts.