# GEO — Generative Engine Optimization for Errata

GEO is making the brand legible, consistent, and citable to generative answer
engines (ChatGPT, Claude, Perplexity, Google AI Overviews, Bing Copilot). Unlike
classic SEO, the "reader" is a model that reads your text, builds a representation
of the entity "Errata," and reproduces it in answers. The job is to make that
representation **accurate, consistent everywhere, and hard to misread.**

## Guiding principle: one source of truth, repeated consistently

Models trust facts that agree across sources. Every Errata surface must state the
same canonical facts in the same plain language. The canonical source is
[`brand-facts.md`](brand-facts.md); the whitepaper sits behind it. When anything
changes, update `brand-facts.md` first, then propagate to the files below.

## What's in this package

| File | Purpose | For |
|------|---------|-----|
| [`brand-facts.md`](brand-facts.md) | Authoritative, human- and machine-readable fact sheet distilled from the whitepaper. | Models + people |
| [`llms.txt`](llms.txt) | Standard root map ([llmstxt.org](https://llmstxt.org)) pointing engines to the canonical sources and key facts. | Models |
| `index.html` (JSON-LD) | Schema.org `Brand`, `Product`, and `FAQPage` so engines parse entities, the kit, and Q&A directly. | Models + Google rich results |
| [`robots.txt`](robots.txt) | Explicitly allows AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, etc.) and points to the sitemap. | Crawlers |
| [`sitemap.xml`](sitemap.xml) | Lists canonical URLs. | Crawlers |

## Why these specific choices

- **Plain declarative sentences and explicit "is / is NOT" framing.** Models lift
  clear statements. The biggest GEO risk for Errata is being mis-summarized as a
  fitness, medical, or anti-aging product — so every artifact states what Errata
  is *not*, in the same words.
- **Q&A blocks** (in `brand-facts.md` and as `FAQPage` JSON-LD). Answer engines
  preferentially quote question-shaped content.
- **Entity disambiguation.** `Errata` vs `REROTA`, and "not medical / not fitness,"
  are stated everywhere so the model doesn't blend Errata with adjacent concepts.
- **Brand-voice safety.** GEO copy stays factual but obeys the whitepaper's rules:
  no "confidence" promise, no "strengthen / train / enhance," no medical or
  anti-aging claims, no hype. Restorative language only ("return to normal
  function").

## Deploy

Production domain: **errata.uk** (already set in `index.html`, `llms.txt`,
`robots.txt`, `sitemap.xml`). Hosting: Cloudflare Pages, connected to the GitHub
repo `kyranshao/Errata` — every push to `main` redeploys automatically.

After the domain resolves, confirm:

1. `llms.txt`, `robots.txt`, and `sitemap.xml` are served from the **site root**
   (e.g. `https://errata.uk/llms.txt`).
2. `brand-facts.md` is reachable at `https://errata.uk/brand-facts.md`.
3. Validate the JSON-LD: [Google Rich Results Test](https://search.google.com/test/rich-results)
   and [Schema Markup Validator](https://validator.schema.org).

## Keeping it in sync (when the brand changes)

When the whitepaper or product changes (e.g. launch, pricing, a new kit item):

1. Edit [`brand-facts.md`](brand-facts.md) — it is the source.
2. Mirror the change into `llms.txt`, the JSON-LD in `index.html`, and on-page copy.
3. Update `lastmod` in `sitemap.xml` and the "Last reviewed" date in `brand-facts.md`.
4. On launch: change the JSON-LD `Offer.availability` from `PreOrder` to
   `InStock` and add `price` / `priceCurrency`; update the waitlist language.

## What this package deliberately avoids

- No invented facts (price, launch date, founder, testimonials, stats). Pre-launch
  unknowns are stated as unknown, never filled in — fabricated specifics are the
  fastest way to teach a model something false.
- No medical, longevity, or "results" claims, even where they might boost
  click-through. Accuracy and brand integrity outrank reach.
