All documentation

Domains

What counts as a domain here, what an owned page is, and what each daily snapshot records.

Domains screen showing your domain's citations ranked against competitor and other cited domains

What counts as a domain

A Domain row is the registrable domain a URL resolves to, extracted and lowercased once and deduplicated across the whole platform, so "example.com" and "blog.example.com" collapse into the same row, shared by every project that has ever touched it, not owned by yours alone. The row appears the first time any URL under it is recorded, wherever that URL came from. Storing a citation records one (api/services/execution.py#get_or_create_domain). So does setting up a project or a competitor (api/services/project_setup.py#get_or_create_domain), so does storing a search result an engine retrieved whether or not it went on to cite it (api/services/execution.py#_store_search_result), and so does anything else that puts a URL into the platform's URL store (api/services/web_pages.py#record_url). A Domain row can therefore exist for a domain no engine has ever cited. See Citations for exactly how a URL is reduced to that domain and matched against your own.

Domains lists every domain that has been cited at least once in this project, ranked by how often it was cited (api/routers/pages.py#domains_page). A tracked competitor that has not been cited yet in this project does not appear here at all, even though it is tracked: the query behind this screen only returns a domain reached through an actual citation row, unlike Competitors, which lists every tracked competitor whether or not it has been cited.

Yours, a tracked competitor, or everyone else

Every domain on the screen gets exactly one of three labels, decided fresh on each load: yours, if it is the domain your project was set up against; a tracked competitor's, if an active Competitor row links your project to that domain; everyone else's otherwise, carrying an "External" badge. The three-way decision is made in the API response (api/routers/pages.py#domains_page); the wording on the badge comes from the screen's own markup (frontend/src/routes/(app)/domains/+page.svelte). A paused or removed competitor's domain drops out of the middle group: the join that supplies the "Competitor" badge and name only matches an active row, so pausing or removing a competitor makes its domain read here as an ordinary external domain from then on, the same way it drops out of the share-of-voice chart on Competitors.

Citations and pages, counted here

The citation count beside each domain, and the count of distinct pages beneath it, are both live totals: every citation, and every distinct cited URL, ever recorded against that domain in this project, across every engine, with no date window (api/routers/pages.py#domains_page). The column, the sort control and the hero figure at the top of the screen all read "Citations" for that reason (frontend/src/routes/(app)/domains/+page.svelte#discoveredDomains).

That is a different figure from domain-citation share of voice on the Competitors screen, which sums a separate daily snapshot over a trailing 30 days and only for domains you are tracking (api/routers/pages.py#competitors_page). The two used to share a field name, total_appearances, and nothing else; this screen's field is now called total_citations, leaving that name to the stored column on the snapshot table it always meant (api/schemas/domains_page.py#total_citations, api/models/domain_daily_snapshot.py). They answer different questions over different windows, so a domain's count here and its share on Competitors are still not meant to match.

The pages under a domain

Expanding a domain's row lists its individual CitedUrl pages, each with how many times it was cited, and when it was first and most recently seen (api/routers/pages.py#domains_page). As on Citations, neither a page nor its domain is scoped to this project: the same URL cited on a different one of your projects, or discovered through a citation on someone else's project entirely, is one shared row, so "first seen" and "last seen" mark when the platform first recorded that page or domain, not when it first showed up for you specifically (api/services/execution.py#get_or_create_cited_url).

Owned pages are a different thing

"Owned page" names a different feature, not anything shown on this screen. On a prompt's own page you can map the pages already on your own site that should rank for it; see Inside one prompt. Each mapping is a PromptOwnedPage, restricted to your project's own domain whichever way it was added, and it exists whether or not any engine has ever cited it: you add some yourself (api/services/owned_pages.py#add_owned_page), and citation gap analysis fills in others on its own, matching a prompt to one of your own cited pages or a similar one (api/services/citation_gap.py#_resolve_owned_page). Optimizations and Articles both read that list to see what you already have before recommending or drafting something new. A page under your own domain on this screen, by contrast, only appears because a citation already pointed at it: every domain here, yours included, is reached the same way.

The daily snapshot behind these numbers

DomainDailySnapshot holds one row per project, domain, engine and day, recording whether the domain is yours, its citation-weighted appearances and distinct pages for that single day, its response-weighted average and best rank, and how many of that day's prompt targets it appeared in against how many ran (api/models/domain_daily_snapshot.py). Each time an execution against one engine finishes, that whole day's rows for its project and engine are deleted and rebuilt from the raw citations recorded so far (api/tasks.py#_resume_completed_execution, api/services/snapshots.py#rebuild_snapshots_for_execution). A separate job runs per prompt target and engine (api/tasks.py#_enqueue_for_user), so that rebuild happens many times across a day, not once at the end of it. None of that table's numbers show on this screen; it exists to be summed over a window, which is what domain-citation share of voice does with it.

  • Citations: what a citation and a cited URL are, and how one gets attributed to a domain
  • Competitors: tracking a competitor, and what pausing or removing one changes
  • Metrics defined: the daily-snapshot figure this page's counts are not
  • Optimizations and Articles: where an owned page actually gets used

Last verified 2026-08-11

Start monitoring your AI visibility.

See how AI search engines talk about your brand.

Free to start. No credit card required.