# AI Visibility

AI Visibility shows you where — and how often — AI engines cite your brand when
people ask them questions. Instead of guessing whether ChatGPT or Perplexity
mentions you, Terradium samples real prompts and reports the answer as a trend
over time.

## What prompt-sampling is

Search rank is a single number for a single query at a single moment. AI answers
don't work that way: the same prompt can produce different sources on different
runs, and small wording changes shift who gets quoted.

So Terradium uses **prompt-sampling**. For a set of prompts relevant to your
brand and topics, it asks the AI engines those prompts repeatedly over time and
records what comes back — whether you appeared, whether you were cited as a
source, and who else showed up alongside you.

## Why it's a trend, not a fixed rank

Because answers vary run to run, a single sample isn't meaningful — but the
**rate** across many samples is. AI Visibility metrics are therefore directional
trends, not guaranteed placements. You'll watch a line move up and to the right
as your content gets picked up more often; you won't see a brittle "position #1"
that flips every refresh.

## The metrics

Across your sampled prompts, Terradium reports:

- **Appearance rate** — the share of sampled prompts where your brand shows up at
  all (mentioned or cited).
- **Citation share** — how often you're the *named source* the engine links or
  attributes its answer to.
- **Share of voice** — your slice of the cited sources versus the competitors who
  appear for the same prompts.
- **Average position** — where you tend to land among the cited sources when you
  do appear.

Each is shown as a current value plus its trend, so you can tell whether your GEO
work is compounding.

## The engines

Terradium supports the four AI surfaces that matter most:

- **ChatGPT**
- **Perplexity**
- **Google AI Overviews**
- **Gemini**

Your plan picks how many of them a single sampling run hits — **three** on the
$29 plan. Choose them under **AI Visibility → Sampling schedule**. Metrics are
available per engine and rolled up across the ones you sample, so you can spot
where you're strong and where you have room to grow.

## What your plan samples

The $29 plan tracks **15 questions**, sampled **weekly**, across **3 engines**,
**1 run per question** — roughly 45 samples a cycle and 250 a billing period.

Those limits are enforced, not suggested. Asking for a cadence, an engine count
or a question count outside your plan is refused with a message naming the limit
rather than quietly saved as something smaller — so the settings screen always
shows what will actually run.

The **Sampling schedule** card shows the projection for your current setup
(questions × engines × runs × cycles) next to how much of the period's allowance
you have spent. Need more questions or daily sampling? Email
**company@kugie.app**.

## Which market gets sampled

Google AI Overviews are geographic: the same question returns different answers
in different countries. Your project's **brand profile** carries a language and a
country, and both are applied to AI Overview sampling — the country selects the
Google market, the language selects the answer language.

The chat engines take no market. They answer in whatever language the question is
asked in, and forcing one would stop the sample reflecting what a real user sees.

## Sample-run quota

Sampling AI engines costs real compute, so each billing period includes a fixed
quota of **sample runs**. A run is one question asked of one engine once. The
quota resets at the start of each billing period, and you can see how much of it
you have used on the AI Visibility screen and under **Settings → Billing**.

## Getting cited more

To improve these numbers, publish content that's easy for engines to quote —
clear, well-structured answers to real questions. The Terradium
[content pipeline](/docs/content-generation) is built to write exactly that, and
[Search Console](/docs/search-console) tells you which questions to target.

## Actions

**Actions** has its own item in the sidebar, just under Overview. It is the
answer to "so now what?" once your first scan has landed: one list of this
week's work, where every row is traceable to something we already measured.

Rows come from three sources, and each is labelled so you can tell them apart:

- **AI answers** — a tracked question you lose. The row names the engines where
  no sampled answer cited you, says whether a tracked competitor was cited
  instead, and lists the competitor pages that were. Those URLs come straight
  from the citations we stored when we sampled the answer — Terradium never
  fetches or crawls a competitor's page.
- **Search Console** — a query you already earn impressions for that isn't among
  your tracked questions, or one of your pages that earns impressions but that no
  sampled AI answer has cited. These only appear if you've
  [connected Search Console](/docs/search-console) for the project's domain; if
  you haven't, the page simply shows the AI-answer rows.

Each row has one button. **Write it** starts the same generate-for-gap run
described below, against the same 30-generations-per-period quota. **Track it**
adds a Search Console query to your tracked questions, so the next scan tells you
whether an AI answer cites you for it. **Check readiness** sends you to
[GEO Readiness](#geo-readiness-check) for a page that exists but isn't being
quoted.

### When Actions refreshes

Actions is recomputed when a scan completes — weekly on the $29 plan. There is no
separate daily job and nothing stored: the list is derived from your latest
samples every time you open it, so it can never disagree with the scan it came
from. Search Console rows follow the existing daily Search Console sync.

If your site is failing a blocking [GEO readiness](#geo-readiness-check) check,
Actions shows that one row and nothing else. Publishing more into a site an AI
crawler can't read earns nothing, so fixing the origin comes first.

### The two empty states

- **"We're scanning."** — no answers have been sampled yet. Actions appear after
  the first run.
- **"You're good."** — the scan ran and found nothing to close. The date of the
  next scan is on the page; we'll flag new gaps then.

## Content gaps

Under your tracked prompts, Terradium ranks the ones you're weakest on — never
appears, appears but isn't cited, or cited low down. Each one becomes a row on
**Actions**, with a **Generate** button that writes an article aimed squarely at
it. The generated article stays linked to the prompt, so you can see whether your
citation rate actually moved afterwards.

### Article formats

The shape of an answer matters as much as its topic. An engine answering
"best X for Y" wants a ranked list; "X vs Y" wants a comparison; "how do I X"
wants ordered steps. A generic blog post loses all three.

Each Action is suggested one of three formats, based on how the prompt is
worded:

- **Listicle** — a ranked list with explicit criteria. Best for "best X" and
  recommendation questions.
- **Comparison** — head-to-head with a real comparison table and an explicit
  "choose X if… / choose Y if…". Best for "X vs Y".
- **How-to** — numbered, genuinely ordered steps with prerequisites and
  troubleshooting. Best for "how do I…".

The suggestion is a default, not a decision — change it in the dropdown before
you hit Generate. Editorial-calendar items use their own **content type** the
same way.

## Make your content AI-readable (GEO)

Measuring citations is only half of GEO — the other half is making sure AI
crawlers can actually *read* your published content. This matters because most AI
crawlers **don't run JavaScript**: if your blog renders client-side, a crawler
sees an empty shell and there's nothing to cite.

Terradium does the hard part for you (it builds clean markdown and a JSON-LD
entity graph for every post), but those signals have to be served on **your**
site. Aim for:

- **Content in the raw HTML** — server-render or pre-render your blog so the
  article text is in the initial response, not injected after load.
- **JSON-LD in the page `<head>`** — render each post's `seoMetadata.jsonLd`
  (the `Organization` + author + `Article` graph) as a
  `<script type="application/ld+json">`. Fill your project's
  [Brand & entity](/docs/projects) fields so that graph is rich.
- **`llms.txt` and `llms-full.txt`** at your site root — a clean, link-first
  index and a full-markdown corpus for crawlers. Terradium serves ready-made
  versions you can mirror at build time.
- **A markdown alternate** per post (your post path with a `.md` suffix, plus
  `<link rel="alternate" type="text/markdown">`) — the most token-efficient way
  for an engine to read you. It follows your
  [Blog URL pattern](/docs/projects), so a site on `/artikel/{slug}` serves
  `/artikel/{slug}.md`.
- **robots.txt that welcomes AI bots** (GPTBot, ClaudeBot, PerplexityBot,
  Google-Extended) and references your sitemap.

The onboarding "install" step gives you a copy-paste prompt that sets all of this
up; you can re-run it against your AI coding agent any time.

## GEO readiness check

**GEO Readiness** has its own item in the sidebar, just under Overview. It opens
on your most recent result; **Run readiness check** fetches your live site again
and grades it across four groups:

- **Setup** — website URL, brand/entity fields, Search Console, tracked prompts,
  sampling, and whether you have published content.
- **Published page** — is a real post reachable, is its content in the raw HTML,
  is the JSON-LD present, are title/description/canonical set.
- **Discoverability files** — `robots.txt`, `sitemap.xml`, `llms.txt`,
  `llms-full.txt`.
- **Crawler access** — can an AI bot (e.g. GPTBot) fetch the page, and does it see
  the same content a browser does (no cloaking).

Every failing check explains what's wrong, links here, and gives a **copy-paste
fix prompt** you can hand to your AI coding agent. Run it after you deploy
changes to confirm crawlers can read everything.

Some checks are marked **blocks publishing**: while one of those is failing,
auto-publish holds your scheduled articles rather than pushing them into a site
AI crawlers cannot read. Overview carries a one-line readiness summary that links
here — the checklist itself lives on this page only.
