# This site is our GEO lab: the stack, the data, the experiments

> GeoSalience measures its own AI-crawler traffic, tracks whether LLMs cite it, and runs controlled experiments on its own pages. Here are the first real numbers: an 898-request crawler footprint, a measured 0% citation baseline, and an honest account of where data is still thin.

Canonical: https://geosalience.com/case-studies/geosalience-as-its-own-case-study
Published: 2026-05-31T00:00:00.000Z
Updated: 2026-06-07T00:00:00.000Z
Pillar: case-studies
Authors: geosalience

---
GeoSalience is a publication about Generative Engine Optimization, so it has to be the best live example of GEO we can build — and a place where we test GEO methods on ourselves instead of describing them in the abstract. That means measuring our own AI-crawler traffic, tracking whether large language models cite us, gating every page on a GEO checklist, and running controlled before/after experiments on our own pages. Operating the site is, itself, our primary research.

This page is the running account of that lab. It is dated, it uses only numbers we have actually measured, and where a measurement is still thin it says so rather than guessing. The launch-day section below is preserved as history; the **[2026-06-07 update](#update--2026-06-07-the-first-real-measurements)** carries the first real numbers from the live pipelines.

**Key takeaways (as of 2026-06-07):**

- The site went live on **2026-05-31** and now runs **5 live articles** plus 6 glossary terms, with a full GEO surface — `llms.txt`, `.md` aliases, JSON-LD, canonical URLs — verified returning 200 over HTTPS.
- We track four things no off-the-shelf analytics tool reports for us: AI-crawler hits, AI **citation rate** (our North Star), a self-audit GEO gate, and on-site experiments. All four are now **live and streaming** — not pending.
- **The crawler and citation pipelines have produced their first real data.** In the first week (2026-05-31 → 2026-06-07) we logged **898 AI-crawler requests from 18 distinct crawlers**, and our first citation run measured **0% (0 of 50 prompts)** — a real, honest day-zero baseline, not a placeholder. See the [citation rate](/glossary/citation-rate) definition for what we count.
- The first experiment, [exp-001](/lab/experiments/exp-001), records the day-zero baseline. Three more are [drafted and waiting](/lab/experiments) for a decision on which to run.

## Why a publication about GEO should experiment on itself

The thing that makes a claim about GEO credible is data nobody else can reproduce. "We added FAQPage schema to one page and its AI-crawl frequency changed by this much over 30 days" is a finding that needs our server logs and our measurement harness — a competitor cannot copy it. Every page we publish is a unit we control, which makes the whole site a sample frame.

This is the same logic behind open-metrics companies that published their own numbers and got linked and cited for it. Our version is a public lab: the citation rate, the crawler footprints, and the experiment log are all on [/lab](/lab), updated as the data lands.

## The stack, component by component — and its real status

The honest part of a build-in-public report is the status column. Here is the same stack as on launch day, with the status column brought current to **2026-06-07** — every "pending" replaced by a real, dated state.

| Layer | What it measures | Status on 2026-06-07 |
|---|---|---|
| GEO surface (`llms.txt`, `.md` aliases, JSON-LD, canonical, sitemap) | discoverability + machine-readability | **Live** — verified 200 over HTTPS |
| AI-crawler tracking (nginx log → daily dataset) | which LLM bots read us, how often, which pages | **Live** — 898 requests / 18 crawlers logged, first bots seen 2026-05-31 |
| Citation-rate harness (50 prompts × 4 LLMs) | our North Star: do LLMs cite us | **Live** — baseline 0% (0/50) on 2026-06-07, prompt set v1 |
| Self-audit GEO gate (40-point Playbook) | every page obeys our own GEO rules | **Automated** — `pnpm verify:geo` runs in the pre-deploy gate |
| Experiment framework + public log | controlled before/after tests on our pages | **Live** — see [/lab/experiments](/lab/experiments) |
| Traffic (privacy-friendly analytics) | human visitors, referrers | **Live** — Plausible self-hosted, first-party (early/low traffic) |

Two of these — crawler tracking and citation rate — are the GEO-native metrics that make the lab worth running. Both now produce dated data we publish under [`/datasets`](https://geosalience.com/datasets/citation-rate.json); the next two sections report the first real numbers and the caveats that go with them.

## The launch-day baseline (the real numbers)

You can only prove a curve moved if you wrote down where it started. On **2026-05-31** the verifiable state was:

- **Corpus:** 2 live articles — [What is GEO?](/foundations/what-is-geo) and [The llms.txt spec: adoption and setup](/technical/llms-txt-spec-adoption-setup) — plus 6 glossary terms. Ten further articles exist as drafts, gated on primary research and hidden from listings.
- **Crawler policy:** `robots.txt` welcomes the major AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others), and Cloudflare runs DNS-only, so those bots reach the origin directly instead of being filtered at the edge.
- **Quality:** the cornerstone pages score 99/100/100/100 on Lighthouse (performance / accessibility / best-practices / SEO).
- **One published dataset already:** our [llms.txt adoption study](/technical/llms-txt-spec-adoption-setup) found **37 of 100** surveyed domains served a valid `llms.txt` when we crawled them on 2026-05-19. That is real primary research about other sites; the lab described here turns the same lens on ourselves.

On launch day the two GEO-native numbers — total AI-crawler hits and citation rate — were recorded as **pending first run**, because we do not write down a measured number we did not collect. [exp-001](/lab/experiments/exp-001) is the formal record of that baseline. The next section replaces those two "pendings" with real measurements.

## Update — 2026-06-07: the first real measurements

One week after launch the crawler parser and the citation harness have each produced their first dated run. Both numbers are public datasets; neither is rounded or spun.

### AI-crawler footprint: 898 requests from 18 distinct crawlers

Between **2026-05-31 and 2026-06-07**, our nginx logs recorded **898 requests from 18 distinct AI-related crawlers** ([dataset](https://geosalience.com/datasets/ai-crawlers.json)). The traffic is concentrated, and the mix is more interesting than the total:

| Crawler | Operator · type | Requests | First seen |
|---|---|---|---|
| GoogleOther | Google · mixed (training/research) | 395 | 2026-06-05 |
| ClaudeBot | Anthropic · training | 249 | 2026-05-31 |
| Googlebot | Google · search | 102 | 2026-05-31 |
| bingbot | Microsoft · search | 24 | 2026-06-01 |
| Applebot | Apple · search | 24 | 2026-06-04 |
| Google-Extended | Google · training | 15 | 2026-06-06 |
| Meta-ExternalAgent | Meta · mixed | 14 | 2026-06-06 |
| CCBot | Common Crawl · training | 12 | 2026-06-06 |
| ChatGPT-User | OpenAI · on-demand | 11 | 2026-06-06 |
| PerplexityBot | Perplexity · search | 10 | 2026-06-06 |
| GPTBot | OpenAI · training | 8 | 2026-06-06 |

The remaining seven (Bytespider, OAI-SearchBot, Amazonbot, anthropic-ai, cohere-ai, Claude-User, Perplexity-User) trail in single digits. The honest reading: a brand-new GEO site is crawled within hours, but early volume is dominated by **training and generic fetchers** (GoogleOther, ClaudeBot), while the **on-demand "answer" fetchers** that signal a live citation (ChatGPT-User, Perplexity-User) are still a trickle. That gap is exactly what the citation rate measures next.

### Citation rate: a measured 0% (0 of 50) — and why that number is credible

Our first citation run, on **2026-06-07** with prompt set **v1** (50 prompts across the four GEO pillars, run against ChatGPT, Claude, Gemini and Perplexity), returned **0% — 0 of 50 prompts cited or mentioned geosalience.com** ([dataset](https://geosalience.com/datasets/citation-rate.json)). Per provider, every rate is 0%.

A zero is only worth publishing if you can show it is real rather than an empty pipeline. Ours is real: across the run the four models grounded their answers in **1,105 source URLs** (870 unique) — and **not one** pointed to geosalience.com. The models were answering GEO questions with sources; we simply were not among them yet. That is the honest starting height, and it matches the crawler picture above: we are being read for training, not yet retrieved for answers. This is the baseline the [citation rate](/glossary/citation-rate) curve climbs from.

We turned those same captured sources into a first real finding: [who LLMs actually cite for GEO](/measurement/who-llms-cite-for-geo) maps the 927 attributable citations to 417 domains — led by YouTube and SEO-tool blogs, with geosalience.com nowhere in them yet.

### Methodology caveat: grounding coverage was uneven

The 0% headline is a confident "no LLM cited us." But per-provider **retrieval coverage was not uniform**, and that has to be stated plainly. Web grounding actually fired on:

- **Perplexity — 50/50** prompts (always searches),
- **Claude — 35/50** (searches at the model's discretion),
- **Gemini — 13/50** (a free-tier `429` quota capped the run partway through),
- **ChatGPT — 3/50** (searched only when the model chose to).

So while no provider cited us on any prompt where it *did* search, ChatGPT and Gemini searched on few prompts, so their slice of the baseline is thin. We run grounding at model discretion on purpose — it mirrors how real users get answers — but a stricter follow-up run (forced search, a higher-quota Gemini key) is a stated next step before we read too much into per-provider deltas. The 0% overall stands; the per-provider confidence varies.

## The self-audit gate

Every article on GeoSalience is meant to pass a 40-point [GEO Playbook](/methodology): answer-first opening, standalone-coherent sections, dense dated facts, inline primary-source citations, Schema.org markup, a working `.md` alias, internal links. As of 2026-06-07 that gate is **automated**: `pnpm verify:geo` runs the machine-checkable subset of the Playbook against every `state: live` page in the pre-deploy step, and refuses the deploy if any page drops below its threshold (cornerstone 100%, spoke ≥85%, pulse ≥60%). A page that breaks our own rules cannot ship. The tool is deliberately honest about its limits — it never claims a page is "GEO-perfect," only that it has not regressed on the checkable subset; the research-quality points (A and B of the Playbook) still need a human. At this update every live page passes its threshold — the same gate had to pass for this very cornerstone to ship, and the running self-compliance figure is on [/lab](/lab).

## The experiments

The framework treats each experiment as a citable page with a protocol, a status, and — only at conclusion — a result. The analysis is deliberately modest: it reports descriptive before/after deltas with explicit caveats and **computes no statistical significance**, because a handful of pages with noisy, slow metrics does not justify it. When the data is too thin to say anything, the analyzer returns *inconclusive* and says why. We publish that as readily as a positive result.

- [exp-001 — Baseline established](/lab/experiments/exp-001): concluded. The day-zero snapshot above.
- Three candidates are drafted and **not started**, pending a decision on which to run and how to pair control and treatment pages: a [FAQPage schema test](/lab/experiments/exp-002), an [answer-first rewrite](/lab/experiments/exp-003), and an [llms-full.txt inclusion test](/lab/experiments/exp-004).

One limit is worth stating here because it shapes what these experiments can show: our citation harness measures the **whole domain**, not individual pages. So a page-level citation experiment cannot be cleanly attributed, and the framework says so — it falls back to per-page crawler re-fetch frequency as a proxy and treats citation movement as site-wide context. Sharpening that into true per-page citation attribution is on the list.

## How we test (disclosure)

The methodology here is the dogfooding loop itself: publish a page, audit it against the GEO Playbook, measure which AI crawlers read it, measure whether LLMs cite the site, change one variant and measure the delta, then publish the finding — which becomes another page in this lab. We disclose that the site is our own subject. Numbers come from our nginx logs (bot rows only, no visitor PII) and from our own harness querying public LLM APIs with our own prompts.

The citation harness runs a locked **50-prompt set (v1)** — spread across the four GEO pillars and the same intents we write about, from "what is GEO" to "[GEO vs AEO vs LLMO](/foundations/geo-vs-aeo-vs-llmo-vs-sge)" — against four models (ChatGPT, Claude, Gemini, Perplexity). Grounding is left at **model discretion**, not forced, so the measurement reflects how a real user gets an answer; the trade-off is the uneven per-provider coverage disclosed in the [2026-06-07 update](#methodology-caveat-grounding-coverage-was-uneven) above. Datasets are published under `/datasets`; the experiment log is at [/lab/experiments](/lab/experiments).

## Frequently asked questions

**Is the citation rate really 0% right now?**
Yes. On 2026-06-07 our harness measured **0% — 0 of 50 prompts** cited or mentioned geosalience.com across all four models. It is a measured zero, not a guess: the models grounded those answers in **1,105 source URLs and none were ours**. The expected first value was always near zero, and that is fine — the point is the curve, not the starting height. Track it on [/lab](/lab).

**Doesn't experimenting on your own site bias the results?**
Yes, and we say so. These are quasi-experiments on a small, single-domain corpus, not randomized controlled trials. We disclose the confounders — page-type differences, tiny samples, site-wide-only citation data, and the uneven grounding coverage noted above — on every experiment.

**Where can I check these claims?**
Every figure is public: fetch [`/robots.txt`](https://geosalience.com/robots.txt), [`/llms.txt`](/llms.txt), or any article's `.md` alias; open the [citation-rate dataset](https://geosalience.com/datasets/citation-rate.json) and the [crawler dataset](https://geosalience.com/datasets/ai-crawlers.json); read [exp-001](/lab/experiments/exp-001); follow the [citation rate](/glossary/citation-rate) definition. Nothing in the baseline depends on private data. If you are new to the terms, start with [what GEO is](/foundations/what-is-geo) and [how knowledge cutoffs and live web access interact](/foundations/knowledge-cutoff-and-web-access).

## Limitations

This is still a young lab, but the gaps have shifted. Resolved since launch: both GEO-native metrics now stream (898 crawler requests; a measured 0% baseline), and the self-audit gate is automated in the deploy step. Still open, and stated plainly:

- **Per-page citation attribution does not exist** — the harness measures the whole domain, so a page-level citation experiment falls back to crawler re-fetch frequency as a proxy.
- **Grounding coverage is uneven** — ChatGPT searched on 3/50 prompts and Gemini on 13/50 (a quota cap) this run, so per-provider numbers carry less weight than the overall figure until a stricter run lands.
- **The corpus is small** — five live articles is a thin sample frame, and traffic is early/low.

Each is a reason a later entry here will be worth reading. This is, for now, the only entry in our [case studies](/case-studies) pillar; the next one will be a delta, not a baseline.