Initial commit: moreminimore-service content pipeline

- 9 mm* skills (orchestrator, article, social, publish, analytics)
- 6 dependency skills (content-writer, geo-optimizer, etc.)
- 3 analytics scripts (GSC, Google Ads, Meta Ads)
- Config template + setup guide
- SOUL-MM.md persona extension
- OrbitOS integration reference
This commit is contained in:
Kunthawat Greethong
2026-07-02 10:01:53 +07:00
commit 7b5af16f6d
36 changed files with 7803 additions and 0 deletions

View File

@@ -0,0 +1,314 @@
---
name: geo-optimizer
argument-hint: "<URL, file path, or topic to optimize for AI search>"
description: >
Generative Engine Optimization (GEO) — make content rank in AI search
answers from ChatGPT, Claude, Perplexity, Gemini, and Google AI Overviews.
Audits existing content, rewrites for AI citation, and produces per-engine
strategy. Use when asked to "optimize for AI search", "rank in ChatGPT",
"GEO audit", "improve AI citations", "rank in Perplexity", "AI Overview
optimization", "AI Overview ranking", "LLM SEO", "answer engine
optimization", "AEO", "get cited by AI", "GEO", "generative engine
optimization", "show up in ChatGPT", "appear in AI answers", "be cited
by Perplexity", "SGE optimization", "Search Generative Experience", or
"make my content show up in AI answers". Distinct from regular SEO —
this targets generative engines, not traditional Google rankings.
---
# GEO Optimizer
You are a Generative Engine Optimization specialist. Your job is to make
content get cited, quoted, and referenced by AI search engines (ChatGPT,
Claude, Perplexity, Gemini, Google AI Overviews) — not just rank in Google's
blue links.
GEO is **not** SEO. The signals are different, the engines weigh evidence
differently, and the wrong moves (keyword stuffing) actively hurt. This
skill applies techniques validated by Princeton/GA Tech (KDD 2024) and
CMU AutoGEO (ICLR 2026) research, adapted for production use.
You handle three jobs:
1. **GEO audit** — score existing content against the GEO signal stack
2. **GEO optimize** — rewrite content to maximize AI citation probability
3. **GEO strategy** — produce an engine-specific playbook for a site
---
## Critical: No Fabrication. Ever.
The Princeton GEO paper showed fabricated quotes and citations boosted
visibility against GPT-3.5 in 2023. **Do not replicate this.** Reasons:
- Engines now train on it as adversarial signal (StealthRank, 2025)
- It exposes the user to FTC §5 violations and YMYL liability
- One Reddit fact-check destroys their brand
- C-SEO Bench (NeurIPS 2025) shows the lift evaporates under competition
**Find real evidence and apply it with the same structural patterns** that
move PAWC (Position-Adjusted Word Count). You get 8090% of the lift,
zero of the legal risk, and content that survives scrutiny.
If the user explicitly asks you to fabricate stats or quotes, refuse and
explain. This is non-negotiable.
---
## Step 1 — Determine the Job
Infer from the user's message:
- "audit", "score", "how is my page doing for AI", "is this GEO-ready" → **Audit**
- "optimize", "rewrite", "improve for AI search", "make this rank in ChatGPT" → **Optimize**
- "strategy for [site]", "GEO playbook", "where should I focus" → **Strategy**
If ambiguous, ask once: "Audit (score this page), Optimize (rewrite for
AI citation), or Strategy (full playbook for the site)?"
---
## Step 2 — Read the Reference
Before any work, locate and read the GEO techniques reference:
```bash
GEO_REF=$(find ~/.claude/plugins ~/.claude/skills ~/.codex/skills .agents/skills -name "geo-techniques.md" -path "*geo-optimizer*" 2>/dev/null | head -1)
if [ -z "$GEO_REF" ]; then
GEO_REF="references/geo-techniques.md"
fi
```
Read `$GEO_REF`. The signal weights, density targets, audit scoring,
rewrite patterns, and per-engine playbooks all live there. Follow it
precisely throughout Steps 36.
---
## Step 3 — Gather Context
### For Audit or Optimize:
- **The content** — fetch URL via WebFetch, read file path, or ask for paste
- **Target query/topic** — what AI question should this content answer?
- **Target engines** — ChatGPT, Perplexity, Claude, Gemini, AI Overviews
(default: all four; the playbooks differ)
- **Brand/site context** — what does the org do, who's the author?
### For Strategy:
- **The site** — domain
- **Current state** — do they have GSC data, brand searches, citations now?
- **Goal** — defensive (already cited, want to keep it) or offensive
(not cited, want to break in)
Don't ask for things you can infer. If the user pasted a URL, just fetch it.
---
## Step 4 — Execute
### Mode A: Audit
Score the content against the **GEO Signal Stack** in `geo-techniques.md`.
Output a **GEO Score (0100)** broken into four pillars:
1. **Evidence Density (35%)** — quotations, statistics, citations, named entities
2. **Structure & Position (25%)** — front-loading, scannability, schema
3. **Authority Signals (25%)** — author identity, originality, freshness
4. **AI Crawlability (15%)** — SSR, robots.txt, schema, llms.txt
For each item, return: ✅ pass / ⚠️ partial / ❌ fail + **what to fix**.
Apply **veto checks** (auto-cap score at 60):
- Self-contradictory data on the page
- Title-content intent mismatch (clickbait)
- Missing author / no first-party identity
- Blocked AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended)
- YMYL content (health, finance, legal, safety) without appropriate
disclaimers or qualified-author byline
- Fabricated citations, statistics, or expert names detected — this is
a hard fail, not a cap. Refuse to produce the audit and explain.
Output format:
```
# GEO Audit: [URL or title]
## GEO Score: [N]/100
### Pillar Breakdown
- Evidence Density: [N]/35
- Structure & Position: [N]/25
- Authority Signals: [N]/25
- AI Crawlability: [N]/15
### Top 5 Fixes (Highest Lift First)
1. [Fix] — Expected lift: [N points] — Effort: [low/med/high]
[Specific, actionable change with location in content]
...
### Detailed Findings
[Item-by-item pass/partial/fail with explanation]
### Vetoes Triggered
[Any. Or "None."]
### Recommended Next Step
- "Run /geo-optimizer optimize on this page" to apply the fixes, OR
- [Strategic guidance if structural issues block on-page work]
```
### Mode B: Optimize
Rewrite the content applying the techniques in priority order:
**Priority 1 — Front-load the answer.**
The first 150 words must directly answer the target query. PAWC's exponential
decay means sentence #1 is worth ~5× sentence #20.
**Priority 2 — Real evidence at density.**
Targets (per `geo-techniques.md`):
- ≥5 specific numbers with units (%, $, ms, days, kg, etc.)
- ≥1 external citation per 500 words, ≥3 source types
- ≥2 direct quotes from named experts (real ones — search for them)
- ≥3 named entities (people, orgs, products) with full names
**The Evidence Hunt is mandatory before rewriting.** If you have web access
(WebSearch, WebFetch, browse), find real sources. If not, ask the user for
their internal data or pause and request sources. Never invent.
**Priority 3 — Structure for extraction.**
- TL;DR or Key Takeaways box near top
- Comparison data → HTML tables
- Sequential steps → numbered lists
- Definitions → defined on first use, ideally in a definition block
- FAQ section with `FAQPage` schema
**Priority 4 — Add JSON-LD.**
`Article`/`BlogPosting` + `FAQPage` minimum. `HowTo` for procedural content.
`Product` for commercial. Author with `sameAs` to Wikipedia/LinkedIn/ORCID.
**Priority 5 — Strip GEO anti-patterns.**
- Remove keyword stuffing (8% PAWC)
- Remove filler ("In today's digital landscape…")
- Remove unsupported superlatives ("the best", "leading provider")
- Remove vague entities ("a company", "experts say")
Output format:
```
# GEO Optimization: [Title]
## Changes Applied
- [Fluency rewrite, +X% expected]
- [Statistics added: N stats from M sources]
- [Citations added: N citations]
- [Quotations added: N expert quotes]
- [Front-loaded answer in first 150 words]
- [Schema added: types]
- [Removed: keyword stuffing in section X, filler in section Y]
## Sources Used (verify before publishing)
1. [Real URL] — used for [stat/quote]
2. ...
## Rewritten Content
[Full markdown]
## SEO + GEO Metadata
- Title tag: [< 60 chars]
- Meta description: [120-160 chars]
- URL slug: /[slug]
- Target query: [primary]
- Target engines: [list]
## Structured Data
[JSON-LD]
## Pre-Publish Checklist
- [ ] All sources verified (URLs work, quotes accurate)
- [ ] Author byline + sameAs links present
- [ ] Last-updated date set to today
- [ ] AI crawlers allowed in robots.txt
- [ ] FAQPage schema renders in https://search.google.com/test/rich-results
- [ ] No fabricated stats/quotes (re-read once more)
```
### Mode C: Strategy
Produce a 30/60/90 day GEO playbook for the site, structured by `geo-techniques.md`
section "Per-Engine Playbooks". Required sections:
1. **Current state** — if you have web access, check: is the site cited
in ChatGPT/Perplexity for its core queries? Run a few brand + category
queries and note results.
2. **30 days — On-site fixes** — pages to optimize, in ranked order by
traffic potential × current GEO score gap
3. **60 days — Authority building** — Wikipedia, Reddit, Stack Overflow,
industry media, original-data publications
4. **90 days — Engine-specific moves** — per ChatGPT, Perplexity, Claude,
Gemini, AI Overviews
5. **Measurement** — what to track and how (cite gego, llmopt patterns)
---
## Step 5 — Quality Gate
Before delivering, run these checks. Fix failures before presenting.
### Fabrication Check (mandatory)
- Every stat has a real, verifiable source URL
- Every quote attributed to a real, named person at a real org
- No "according to a 2024 study" without the actual study citation
- No invented expert names
If any fail → don't deliver. Find real evidence or flag the gap to the user.
### PAWC Front-Loading Check
- Does the first sentence after the H1 directly answer the target query?
- Could a reader who only saw the first 150 words walk away with the answer?
### Evidence Density Check
- Count: numbers with units, citations, quotes, named entities
- Compare against the targets in `geo-techniques.md`
### Anti-Pattern Check
- No keyword stuffing (search for the target keyword — appears > 1% of word count?)
- No vague entities or unsupported superlatives
- No filler intros
### AI Crawlability Check (Optimize mode only)
- robots.txt allows: GPTBot, ClaudeBot, PerplexityBot, Google-Extended,
PerplexityBot, Bytespider, anthropic-ai, ChatGPT-User
- Critical content is server-rendered (not behind JS-only)
- Schema validates
### Schema Check
- JSON-LD parses
- Required fields present (`@context`, `@type`, `headline`, `author`,
`datePublished`, `dateModified`)
- `author.sameAs` includes verifiable identity links
---
## Step 6 — Hand Off
After delivering, suggest the natural next step:
- **Audit completed** → "Want me to optimize this page? Run me with `optimize`."
- **Optimize completed** → "Want a strategy for the rest of the site? Run me with `strategy`."
- **Strategy completed** → "Want me to start optimizing the highest-priority page from the list?"
If a CMS is configured and the user wants to push the rewritten content,
use the `seo-analysis` CMS push flow (currently supports Strapi). For
other CMSes, the user manually applies the markdown output.
---
## Coordination With Other Skills
- **`content-writer`** writes for Google's blue links (E-E-A-T, helpful content).
This skill writes for AI engines (PAWC, evidence density). Use both for
pages that need to win both surfaces.
- **`seo-analysis`** identifies which pages to optimize. Use it first if
the user hasn't picked a page.
- **`schema-markup-generator`** can produce the JSON-LD if the rewrite
needs complex schema (HowTo, multi-entity Article).
- **`meta-tags-optimizer`** finalizes title + meta description after rewrite.

View File

@@ -0,0 +1,18 @@
{
"skill_name": "geo-optimizer",
"evals": [
{
"id": 1,
"prompt": "do a GEO audit of https://example.com/blog/best-crm-software and tell me how likely it is to get cited by ChatGPT, Claude, Perplexity, and Google AI Overviews",
"expected_output": "A GEO audit that evaluates evidence density, structure, authority signals, and AI-citation readiness across major answer engines with concrete next steps.",
"files": [],
"expectations": [
"Recognizes this as a GEO audit request",
"Assesses AI-search readiness rather than traditional SEO alone",
"Discusses evidence density, structure, or authority signals",
"Differentiates considerations across multiple AI engines",
"Provides concrete recommendations without fabricating evidence"
]
}
]
}

View File

@@ -0,0 +1,592 @@
# GEO Techniques — Generative Engine Optimization Playbook
Reference for `geo-optimizer`. Derived from:
- **Princeton/GA Tech GEO** (KDD 2024, arXiv:2311.09735) — the 9 methods,
PAWC metric, GPT-3.5 / Perplexity validation
- **AutoGEO** (CMU, ICLR 2026) — automated rewriting, GRPO training,
utility-preserving rewrite rules
- **C-SEO Bench** (NeurIPS 2025) — competitive baseline, what survives at scale
- **CORE-EEAT / CITE** (community frameworks) — operational checklists
---
## Table of Contents
1. [Core Principles](#core-principles)
2. [The GEO Signal Stack](#the-geo-signal-stack)
3. [Audit Scoring](#audit-scoring)
4. [Rewrite Patterns](#rewrite-patterns)
5. [Evidence Hunt — Finding Real Sources](#evidence-hunt--finding-real-sources)
6. [Per-Engine Playbooks](#per-engine-playbooks)
7. [AI Crawlability](#ai-crawlability)
8. [Anti-Patterns](#anti-patterns)
9. [Measurement](#measurement)
---
## Core Principles
### 1. PAWC drives everything
Position-Adjusted Word Count is the metric the Princeton paper proved
correlates with AI citation:
```
Imp_pwc(c, r) = Σ |sentence| · e^(-pos/total) / total_words
```
The exponential decay is the key: **sentence #1 of the AI's answer is
worth ~5× sentence #20.** If you want to be cited, your content must
show up in the *first* part of the AI's answer, which means your
*first* sentences must be the most extractable, evidence-dense ones.
### 2. Evidence density > keyword density
Princeton's empirical ranking of techniques by visibility lift:
| Rank | Technique | PAWC lift |
|------|-----------|-----------|
| 1 | Quotation Addition | +41% |
| 2 | Statistics Addition | +30% |
| 3 | Cite Sources | +28% |
| 3 | Fluency Optimization | +28% |
| 5 | Technical Terms | +18% |
| 6 | Easy-to-Understand | +14% |
| 7 | Authoritative tone | +10% |
| 8 | Unique Words | +6% |
| 9 | **Keyword Stuffing** | **8%** (hurts) |
Best combo: **Fluency + Statistics** (≥+35%, beats any single technique).
### 3. Generative engines don't use PageRank
This is the democratization finding from the Princeton GEO paper
(arXiv:2311.09735, Table 2): rank-5 sites gained ~+115% visibility with
the Cite Sources method while rank-1 sites *lost* ~30%, averaged across
their multi-domain experiment. Numbers are representative of the paper's
test setup, not a universal guarantee. The implication still holds:
weaker-authority sites can punch up dramatically by adding evidence
signals, because the LLM doesn't apply PageRank-style domain weighting
when citing. **It cares whether your sentence is the most quotable one.**
### 4. Engines diverge
Cross-engine citation overlap is 0.110.58 (Princeton + AutoGEO data).
Optimize per-engine:
- **ChatGPT** cites Wikipedia in ~48% of top citations
- **Perplexity** cites recent web sources, weights freshness
- **Gemini** leans Reddit/Quora for opinion queries
- **Claude** weights primary sources and academic citations
- **Google AI Overviews** mirrors organic top-10 + featured snippets
### 5. Real evidence wins long-term
Princeton showed fabricated quotes worked against GPT-3.5. AutoGEO's
real-engine training explicitly says "substantiate claims with concrete
details." Engines have moved on. Build with real sources only.
---
## The GEO Signal Stack
Four pillars, weighted as in the audit scoring:
### Pillar 1 — Evidence Density (35%)
| Signal | Target | Why |
|--------|--------|-----|
| Numbers with units | ≥5 per article | LLMs preferentially extract specific numerics |
| External citations | ≥1 per 500 words, ≥3 source types | Authority + verifiability |
| Direct expert quotes | ≥2 from named individuals | Quotation Addition is the +41% method |
| Named entities | ≥3 with full names + roles | Specificity beats vagueness |
| First-party data | ≥1 original stat or framework | Becomes the only-citable source |
### Pillar 2 — Structure & Position (25%)
| Signal | Target |
|--------|--------|
| Direct answer in first 150 words | Required (PAWC) |
| TL;DR or Key Takeaways near top | ≥1 box |
| Heading hierarchy (H1→H2→H3) | No level skipping, single H1 |
| Comparison/spec data in tables | Required if comparison content |
| Sequential steps in numbered lists | Required if procedural |
| FAQ section with question-format H2/H3 | Required for informational |
| Average paragraph length | 24 sentences |
| JSON-LD schema | `Article` minimum, `FAQPage` if FAQ, `HowTo` if procedural |
### Pillar 3 — Authority Signals (25%)
| Signal | Target |
|--------|--------|
| Author byline | Real name, role, ≥30-word bio |
| `author.sameAs` JSON-LD | Wikipedia, LinkedIn, ORCID, Google Scholar |
| Last updated within 60 days | Recency (3× citation lift per Princeton + amplifying-ai data); 6090 days is the boundary, target 60 |
| Methodology disclosed | Sample sizes, criteria, dates |
| Limitations acknowledged | Counter-LLM-hallucination signal |
| First-party experience markers | "We tested", "Our analysis of N…" — not vague "experts say" |
| External validators | Featured in / cited by named outlets |
### Pillar 4 — AI Crawlability (15%)
| Signal | Target |
|--------|--------|
| robots.txt allows AI bots | GPTBot, ClaudeBot, PerplexityBot, Google-Extended, anthropic-ai, ChatGPT-User, Bytespider |
| Server-side rendered content | Critical content not JS-only |
| `llms.txt` at site root | Optional but adopted by 784+ sites as of mid-2025 |
| HTTPS + HSTS | Required |
| Canonical URLs | Required |
| `<time>` tags + `dateModified` | Required for freshness signal |
| Schema validates | Use Rich Results Test |
---
## Audit Scoring
For each item in the signal stack, score:
- **Pass (full points)** — meets target
- **Partial (50%)** — partial implementation
- **Fail (0)** — missing or wrong direction (e.g., keyword stuffing present)
Sum to a 0100 GEO Score with the pillar weights.
### Veto items (auto-cap at 60)
These either kill citation or expose the user to liability:
1. **Self-contradictory data** — internal inconsistency on the page
2. **Title-content intent mismatch** — clickbait
3. **No identifiable author** — anonymous content rarely gets cited as primary source
4. **AI crawlers blocked** in robots.txt or CDN/WAF
5. **Fabricated citations or stats** detected — hard fail, not a cap
6. **YMYL content without disclaimers** — health/finance/legal without appropriate warnings
### GEO Score interpretation
- **80100** — well-positioned for AI citation; iterate on per-engine playbooks
- **6079** — solid foundation, missing 13 high-leverage signals
- **4059** — structural fixes needed before per-engine work pays off
- **039** — rewrite from outline; current content unlikely to be cited
---
## Rewrite Patterns
Apply in this priority order. Stop when the content is at quality bar; not
every page needs every pattern.
### Pattern 1 — Front-Load the Answer
**Before:**
> "In today's rapidly evolving digital landscape, businesses are constantly
> seeking ways to optimize their online presence. This article will explore
> the various strategies and considerations involved in [topic]."
**After (template — replace bracketed values with real, verified data
before publishing):**
> "[Topic]'s ROI averages [REAL_NUMBER]× ([REAL_SOURCE_WITH_URL], [YEAR])
> when implemented with [specific approach]. Three steps drive that lift:
> [step 1], [step 2], [step 3]. Below: how to implement each in 2 weeks."
The first sentence carries: a specific number, a unit, a real-source
citation, a year, and a concrete preview. PAWC will weigh this sentence
~5× any conclusion paragraph. **Do not ship the template values** — every
bracketed value must be replaced with a real, verifiable fact before this
content goes live. Run the Evidence Hunt section below to source them.
### Pattern 2 — Statistics Addition (real)
**Before:**
> "Many companies struggle with onboarding."
**After (template):**
> "[REAL_PERCENT]% of [defined population] report [specific finding]
> ([REAL_SOURCE_NAME_WITH_URL], [year], n=[real sample size])."
Rule: every claim that can be quantified, must be. Hunt for the real stat
before falling back to vague language. If the stat doesn't exist publicly,
follow the "What to do when the stat doesn't exist" section below — never
keep the claim as a vague unsourced statement.
### Pattern 3 — Quotation Addition (real)
**Before:**
> "Experts agree that retention is more cost-effective than acquisition."
**After (template):**
> "'[Verbatim quote from a real, named person],' [wrote/said]
> [Real Name] in *[Real Publication Title]* ([Publisher], [Year]),
> [one-line context establishing why this person is authoritative]."
A real working example for the retention claim above: Frederick Reichheld
& Earl Sasser's "Zero Defections: Quality Comes to Services" (Harvard
Business Review, SepOct 1990) is the canonical retention-economics
citation. Verify the quote and URL before publishing.
Rule: cite a real person at a real org with a real publication. If you
can't find one for the claim, the claim probably isn't load-bearing.
### Pattern 4 — Citation Addition (real)
**Before:**
> "Search behavior has shifted toward AI assistants."
**After (template):**
> "[Specific stat]% of [defined activity] now [specific behavior]
> ([Real Research Firm], [Month Year], [URL]) versus [historical stat]
> in [comparison year], with [observed pattern]."
Rule: ≥1 citation per 500 words, ≥3 source types per article. Source types
include: peer-reviewed papers, government data, industry research firms,
named publications, primary first-party data. Every citation must include
a URL the reader can click — citations without verifiable URLs do not
count toward the density target and trigger the fabrication veto.
### Pattern 5 — Fluency Optimization
The +28% lift from this method requires no new facts. It's just rewriting
for flow. Apply it last, after you've added evidence.
Rules:
- One idea per paragraph
- Sentence variety: alternate short/medium/long
- Active voice by default
- Cut every word that doesn't earn its place
- Read aloud test — if you stumble, rewrite
### Pattern 6 — Schema Markup
Minimum for any article-style content:
```json
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "[H1]",
"author": {
"@type": "Person",
"name": "[Real name]",
"url": "[Author page URL]",
"sameAs": [
"https://en.wikipedia.org/wiki/[Author]",
"https://www.linkedin.com/in/[handle]",
"https://orcid.org/[id]"
]
},
"datePublished": "[ISO date]",
"dateModified": "[ISO date]",
"publisher": {
"@type": "Organization",
"name": "[Org]",
"logo": {"@type": "ImageObject", "url": "[Logo URL]"}
},
"mainEntityOfPage": "[Canonical URL]"
}
```
Add `FAQPage` if FAQ section present. Add `HowTo` if procedural. Validate
at `search.google.com/test/rich-results` before publishing.
---
## Evidence Hunt — Finding Real Sources
Before any rewrite, build a source list. Tools in priority order:
1. **WebSearch** — for recent stats and named studies
2. **WebFetch on primary source pages** — verify the stat exists at the URL
3. **Google Scholar** (`scholar.google.com/scholar?q=...`) — academic
4. **Government data portals**`data.gov`, `bls.gov`, `eurostat.ec.europa.eu`,
`data.gov.uk`
5. **Named research firms** — Pew, Forrester, McKinsey, Gartner, Statista
(cite the firm + publication date + report name)
6. **Primary publications** — NYT, FT, WSJ, The Economist, trade press
relevant to the topic
7. **First-party data from the user** — ask: "Do you have any internal data
that supports this claim?" Original first-party data is the strongest
GEO signal.
### Verification rules
- **Every stat must trace to a URL you've actually fetched**
- **Every quote must come from a real publication you can cite by name**
- **Every named expert must be a real person at a real org**
- If you can't verify, reframe the claim or remove it
### What to do when the stat doesn't exist
If you genuinely can't find a real source for a claim, in order of preference:
1. **Anchor to a related, verifiable stat** — "the broader [parent category]
grew 12% in 2024 (Source, URL)" with a real source for the parent number.
This is acceptable because the citation is real and the relationship is
stated honestly.
2. **Run an internal analysis** — if the user has data, use it. First-party
data is the strongest GEO signal anyway.
3. **Drop the claim** — if it's not load-bearing, cut it.
**Do not** keep the claim as a vague directional statement ("growing
rapidly", "increasingly common", "many companies"). That violates the
vague-entity anti-pattern below — vague unsourced statements are still
fabrication-adjacent and dilute the page's evidence density.
Never invent. Not "according to a 2024 study", not "experts estimate", not
"surveys show". Real source with URL, or no claim.
---
## Per-Engine Playbooks
Cross-engine citation overlap is 0.110.58. Tailor the strategy.
### ChatGPT (OpenAI)
**Citation pattern:** Wikipedia ~48% of top citations; reputable publications;
moderate freshness preference.
**Optimization moves:**
- Build/maintain a Wikipedia presence for the entity (brand, person, product)
- Get listed in Wikidata with structured properties
- Earn coverage in citations Wikipedia accepts (NYT, FT, BBC, Reuters,
industry trade press)
- Strong author-as-entity signaling (`sameAs` to Wikipedia)
- Comprehensive reference articles outrank thin "answer" pages
### Perplexity
**Citation pattern:** Heavy on recent web; cites primary sources directly;
fewer "synthesis" citations.
**Optimization moves:**
- Recency matters most — pages updated within 90 days outperform
- Original first-party data gets cited disproportionately
- Clear thesis sentences in the first paragraph
- Industry blog content with named author + date stamps
- Tracking: Perplexity Sonar API exposes which URLs were cited
(gego repo automates this); use it to verify
### Gemini (Google)
**Citation pattern:** Reddit / Quora prominent for opinion / advice queries;
Google search index parity.
**Optimization moves:**
- Reddit presence: maintain authoritative subreddit comments under named
account; AMA-style threads
- Quora answers from credentialed account
- Strong on-page Google SEO — Gemini citations correlate with organic
top-10
- Google AI Overviews specifically: structured data + featured-snippet
format wins
### Claude (Anthropic)
**Citation pattern:** Primary sources, academic citations, well-structured
explanatory content.
**Optimization moves:**
- Long-form, well-cited articles outperform short-form
- Named author with verifiable credentials in `author.sameAs`
- Citations to peer-reviewed sources where applicable
- Limitations and methodology disclosed (counter-hallucination signaling)
- Avoid marketing language — Claude weights informational tone heavily
### Google AI Overviews
**Citation pattern:** ~85% overlap with organic top 10 + featured snippets.
**Optimization moves:**
- Win the featured snippet for the query (definition box, list, table)
- Schema markup (`Article`, `FAQPage`, `HowTo`)
- Direct answer in 4060 words near top of page
- Page must already rank top 10 organically — GEO doesn't bypass SEO here
### Cross-engine moves (do these first)
- llms.txt at site root with content map
- Author entities with strong `sameAs` linkage
- Original data publications quarterly
- Wikipedia / Wikidata presence for the brand
- Reddit + Stack Overflow + relevant community presence
---
## AI Crawlability
### robots.txt — must allow
```
User-agent: GPTBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: anthropic-ai
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Perplexity-User
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: Bytespider
Allow: /
User-agent: Applebot-Extended
Allow: /
User-agent: cohere-ai
Allow: /
User-agent: meta-externalagent
Allow: /
```
If the user is currently blocking these (often inherited from default
"block all bots" templates), this is the single highest-leverage fix.
### Optional: llms.txt
Adopted by 784+ sites as of mid-2025; not yet a confirmed ranking signal
but trending. Place at site root:
```
# Site Name
> One-paragraph description of the site, what it does, who it's for.
## Core content
- [Page Title](URL): One-line summary
- [Page Title](URL): One-line summary
## About
- [About](URL)
- [Contact](URL)
## Optional
- [Old content](URL): Archive
```
### CDN / WAF
Cloudflare, AWS WAF, and Akamai often block AI bots by default. Verify
in the CDN dashboard separately from robots.txt — robots.txt being
permissive doesn't help if the WAF returns 403.
### Server-side rendering
JS-only content (CSR-heavy SPAs without prerendering) is invisible to
most AI crawlers. Use Next.js / Nuxt / Astro / Remix server rendering
or static generation for any page that should be cited.
---
## Anti-Patterns
These either don't work or actively hurt:
### Hard fails (will cause penalties or removal)
- **Fabricated citations / quotes / stats** — see Step 5 of SKILL.md
- **Hidden text optimization** — old SEO trick; AI engines detect and demote
- **Doorway pages** — single-purpose pages targeting near-duplicate queries
- **AI-generated mass content with no human review** — both Google and
AI engines now penalize
- **PBN backlink networks** — CITE framework veto item
### Soft fails (waste of effort)
- **Keyword stuffing** — Princeton: 8% PAWC. Stop.
- **Generic AI-language intros** — "In today's rapidly evolving landscape…"
Cut.
- **Vague entities** — "a leading company", "experts say", "studies show".
Specify or remove.
- **Unsupported superlatives** — "the best", "the most comprehensive".
Either back with data or cut.
- **Filler paragraphs** — every paragraph must earn its place
- **Redundant H2s covering the same subtopic** — cannibalizes extraction
---
## Measurement
GEO without measurement is a vibe. Set up at minimum:
### Citation tracking
- **gego** — open source (Go), self-host. Schedules prompts across
OpenAI, Anthropic, Gemini, Perplexity, Ollama; regex-matches brand
mentions; Perplexity Sonar URL capture is unique. Repo:
https://github.com/AI2HU/gego — clone, follow README to set API keys
and run the cron scheduler.
- **llmopt** — open source (Go + React), self-host. Richer multi-pillar
scoring (LLM knowledge testing, AEO content scoring, video authority
via YouTube transcripts, Reddit authority, search visibility), MCP
integration for Claude Code/Desktop. Repo:
https://github.com/jonradoff/llmopt — clone, follow README to
configure API keys and start the dashboard.
- **Manual baseline** — every 2 weeks, run 5 brand queries + 5 category
queries against ChatGPT, Claude, Perplexity, Gemini. Log: cited (Y/N),
position in answer, sentiment.
### Content KPIs (per page)
- GEO Score (this skill's audit)
- Citations per AI engine, per query
- Position in AI answer (1st sentence, 1st paragraph, body, footer)
- Click-through from AI answer (if engine surfaces source links)
- Organic traffic to the page (control variable)
### Brand KPIs
- Share of Model — % of category-query AI answers mentioning brand
- Cross-engine coverage — % of monitored engines citing brand
- Sentiment in AI answers — positive / neutral / negative
- Wikipedia presence + Wikidata edit recency
### Monthly review
- Which content is being cited? Why? (extract the pattern, replicate)
- Which content was optimized but isn't cited? Why? (audit fail mode)
- Which queries does the brand never appear in? (off-site authority gap?)
- Which engines diverge most from the others? (engine-specific playbook
not yet running)
---
## Quick reference: Do / Don't
### Do
- Front-load the answer in first 150 words
- Add real stats with units, sources, dates
- Quote real named experts from named publications
- Cite ≥1 external source per 500 words from ≥3 source types
- Update content every 60 days for competitive queries, 90 days minimum for stable topics
- Allow all major AI crawlers in robots.txt + CDN
- Add Article + FAQPage + HowTo schema as appropriate
- Build Wikipedia / Wikidata / Reddit presence
- Track citations across all four major engines
- Publish original first-party data quarterly
### Don't
- Fabricate stats, quotes, citations, or expert names
- Keyword-stuff (8% PAWC, actively hurts)
- Use vague entities ("experts say", "studies show")
- Block AI crawlers in robots.txt or WAF
- Ship JS-only content without SSR/SSG
- Treat GEO as identical to SEO (different signals, different weights)
- Optimize for one engine and assume the others follow
- Skip the author byline + sameAs linkage