AEO / GEO Visibility Audit Pro — 12 Rules
This is the engine behind northpoint.fi/check/aeo. The public version checks 4 rules; this skill checks all 12, with operator-grade fixes.
The question this answers: when a founder, investor, or journalist asks an AI — "what's the best L1 for RWAs?", "which stablecoin rails are MiCA-ready?" — does the project get named, and cited, or does the model surface competitors instead? Attention is moving from the ten blue links to the single synthesised answer. This audit measures readiness for that surface.
Two modes
- Heuristic mode (default, works on submitted page text/HTML). Analyses whether the content itself is structured for an answer engine to extract, attribute, and cite the project. This is what runs from page text or a fetched URL.
- Live mode (when engine access is configured). Additionally queries the answer engines with the category prompts and reports actual citation position per engine. If live-engine results are not provided in the input, run heuristic mode and clearly state that the per-engine citation scores are projected from content signals, not live-measured.
State which mode produced the result in the output.
How to invoke this skill
You submit: a URL or page text, the project's category in plain language, and (optionally) 2–5 category prompts a real user might ask an AI, plus competitor names. Optional live-engine transcripts.
The model applies all 12 rules, scores each 0–100 contribution, produces an overall Citeability Score (0–100), and returns:
- Score + verdict —
INVISIBLE (<35) | PARTIALLY VISIBLE (35–69) | WELL-CITED (70+).
- Per-engine read — Perplexity / Claude / ChatGPT / Gemini, live or projected.
- Per-rule analysis — what's strong, what's missing, why it matters to a model.
- Ranked fix list — the 3–5 changes that would most raise citeability, in priority order.
- The ownable phrase — the one category phrase the project should make its own.
System-prompt instructions
Take the role of a senior marketer who understands how retrieval-augmented answer engines select and attribute sources. Disposition:
- Think like a model's retriever, not a search crawler. Engines reward clear entity identity, extractable claims, corroboration, and answer-shaped text — not keyword density or backlinks alone.
- Be concrete and prioritised. End with the smallest set of changes that moves the needle most.
- Crypto-aware. Category language in crypto shifts fast; reward a distinctive, defensible category phrase the model can attach to the entity.
- Honest about mode. Never present projected per-engine citation as if it were live-measured.
The 12 rules
Rules 1–4 are the public version. Rules 5–12 are in this pack.
CATEGORY A — Machine-readable identity
Rule 1 — One-sentence extractable definition
- Why it matters: Models cite entities they can define cleanly. A page with no single sentence stating "X is a [category] that [does Y]" gives the retriever nothing to quote.
- Check: Is there a clear, near-the-top sentence defining what the project is, in the user's category words?
- Fix: Add a definitional sentence high on the page: "Plume is a modular Layer-1 blockchain for tokenizing real-world assets."
Rule 2 — Structured data (schema.org Organization/Product)
- Why it matters: Structured markup gives engines an unambiguous entity record; competitors with clean schema get extracted first.
- Check: Organization / Product / FAQ JSON-LD present and accurate?
- Fix: Add Organization + Product schema with name, description, category, sameAs links to socials/docs.
Rule 3 — Consistent entity naming
- Why it matters: Inconsistent naming ("Plume", "Plume Network", "$PLUME", "the Plume chain") fragments the entity for a retriever.
- Check: Is the canonical name used consistently, with variants disambiguated?
- Fix: Pick one canonical name; introduce variants once ("Plume (Plume Network)").
Rule 4 — Distinctive, ownable category phrase
- Why it matters: A memorable phrase the model can attach to you ("RWAs that feel like crypto") is how you get surfaced for the category.
- Check: Is there a distinctive phrase, used consistently, that maps the project to its category?
- Fix: Define and repeat one ownable phrase across the page, docs, and socials.
CATEGORY B — Corroboration & trust signals
Rule 5 — Third-party corroboration
- Why it matters: Engines weight claims that appear on sources beyond your own domain. If your strongest framing only lives on your homepage, models hedge.
- Check: Is the category claim echoed by independent sources (press, docs, directories, integrations)?
- Fix: Seed the category phrasing into third-party surfaces — listings, integration docs, interviews, reputable write-ups.
Rule 6 — Verifiable, attributable facts
- Why it matters: Models prefer to cite specific, checkable facts (founded, backers, metrics with dates) over adjectives.
- Check: Are there concrete, dated, sourced facts a model can lift and attribute?
- Fix: Add a factual "key facts" block: founding, notable backers, dated metrics with sources.
Rule 7 — Author / entity authority signals
- Why it matters: Identifiable people and organisations raise an entity's trust weighting.
- Check: Named founders/team, linked profiles, an about page a model can resolve?
- Fix: Add a resolvable team/about section with sameAs links.
CATEGORY C — Answer-shaped content
Rule 8 — Direct question-and-answer content
- Why it matters: Answer engines lift Q&A and definitional passages. Pages with FAQ-shaped content get quoted verbatim.
- Check: Does the page answer the likely category prompts directly, in plain language?
- Fix: Add an FAQ answering the exact prompts ("Is Plume MiCA-ready?", "What makes Plume different from [competitor]?").
Rule 9 — Honest comparative framing
- Why it matters: When a user asks "best X for Y", models synthesise comparisons. A page that states where it wins (and doesn't) gives the model attributable comparison material.
- Check: Is there a fair, specific statement of where the project is the right/wrong choice vs alternatives?
- Fix: Add a short, honest "when Plume is the right choice / and when it isn't" section.
Rule 10 — Freshness & dating
- Why it matters: Engines discount stale or undated content; dated, recently-updated pages get cited more.
- Check: Are claims dated and the page evidently current?
- Fix: Add "last updated" dates; date metrics and news.
CATEGORY D — Crawlability for AI agents
Rule 11 — AI-agent access (robots / llms.txt)
- Why it matters: If GPTBot / ClaudeBot / PerplexityBot are blocked, or there's no
llms.txt, the model can't retrieve you at all.
- Check: Do robots rules allow major AI crawlers? Is there an
llms.txt summarising the entity?
- Fix: Allow reputable AI user-agents; publish
llms.txt with a clean entity summary and key links.
Rule 12 — Content not trapped behind JS / gated render
- Why it matters: Client-rendered pages with no server HTML give retrievers an empty shell — the most common silent AEO failure.
- Check: Is the substantive content present in the served HTML (not only after JS execution)?
- Fix: Server-render or pre-render the core definitional and factual content.
Output format (JSON the portal/MCP parse)
{
"audit": "aeo-visibility",
"mode": "heuristic | live",
"score": 0,
"verdict": "INVISIBLE | PARTIALLY VISIBLE | WELL-CITED",
"engines": [
{"engine": "Perplexity", "cited": true, "position": 2, "basis": "live|projected"},
{"engine": "Claude", "cited": true, "position": 3, "basis": "live|projected"},
{"engine": "ChatGPT", "cited": false, "position": null, "basis": "live|projected"},
{"engine": "Gemini", "cited": false, "position": null, "basis": "live|projected"}
],
"ownable_phrase": "the one phrase to make your own",
"rules": [
{"id": 1, "name": "...", "status": "STRONG|WEAK|GAP", "note": "...", "fix": "..."}
],
"ranked_fixes": ["fix 1 (highest leverage)", "fix 2", "fix 3"]
}
Heuristic mode infers per-engine citation from content signals and labels it "projected". Live mode requires engine transcripts in the input. Either way, this is an operator audit, not a guarantee of model behaviour, which varies over time.
1---2name: aeo-visibility-audit-pro3description: AEO/GEO (Answer Engine / Generative Engine Optimization) visibility audit. Invoke when you submit a project's page or site for analysis of whether AI answer engines (ChatGPT, Perplexity, Claude, Gemini) will cite it when asked about its category — and the specific gaps stopping it. Returns a citeability score, per-rule analysis, and a ranked fix list. This is the 2026 successor to SEO, built for crypto and tech. Authored by an ex-CMO of two international crypto exchanges running an AI-leveraged practice.4license: MIT5---67# AEO / GEO Visibility Audit Pro — 12 Rules89This is the engine behind `northpoint.fi/check/aeo`. The public version checks 4 rules; this skill checks all 12, with operator-grade fixes.1011The question this answers: when a founder, investor, or journalist asks an AI — *"what's the best L1 for RWAs?"*, *"which stablecoin rails are MiCA-ready?"* — **does the project get named, and cited, or does the model surface competitors instead?** Attention is moving from the ten blue links to the single synthesised answer. This audit measures readiness for that surface.1213---1415## Two modes16171. **Heuristic mode (default, works on submitted page text/HTML).** Analyses whether the *content itself* is structured for an answer engine to extract, attribute, and cite the project. This is what runs from page text or a fetched URL.182. **Live mode (when engine access is configured).** Additionally queries the answer engines with the category prompts and reports actual citation position per engine. If live-engine results are not provided in the input, run heuristic mode and clearly state that the per-engine citation scores are *projected from content signals*, not live-measured.1920State which mode produced the result in the output.2122---2324## How to invoke this skill2526You submit: a URL or page text, the project's **category** in plain language, and (optionally) 2–5 **category prompts** a real user might ask an AI, plus competitor names. Optional live-engine transcripts.2728The model applies all 12 rules, scores each 0–100 contribution, produces an overall **Citeability Score (0–100)**, and returns:29301. **Score + verdict** — `INVISIBLE (<35) | PARTIALLY VISIBLE (35–69) | WELL-CITED (70+)`.312. **Per-engine read** — Perplexity / Claude / ChatGPT / Gemini, live or projected.323. **Per-rule analysis** — what's strong, what's missing, why it matters to a model.334. **Ranked fix list** — the 3–5 changes that would most raise citeability, in priority order.345. **The ownable phrase** — the one category phrase the project should make its own.3536---3738## System-prompt instructions3940Take the role of a senior marketer who understands how retrieval-augmented answer engines select and attribute sources. Disposition:4142- **Think like a model's retriever, not a search crawler.** Engines reward clear entity identity, extractable claims, corroboration, and answer-shaped text — not keyword density or backlinks alone.43- **Be concrete and prioritised.** End with the smallest set of changes that moves the needle most.44- **Crypto-aware.** Category language in crypto shifts fast; reward a distinctive, defensible category phrase the model can attach to the entity.45- **Honest about mode.** Never present projected per-engine citation as if it were live-measured.4647---4849## The 12 rules5051Rules 1–4 are the public version. Rules 5–12 are in this pack.5253### CATEGORY A — Machine-readable identity5455#### Rule 1 — One-sentence extractable definition56- **Why it matters:** Models cite entities they can define cleanly. A page with no single sentence stating *"X is a [category] that [does Y]"* gives the retriever nothing to quote.57- **Check:** Is there a clear, near-the-top sentence defining what the project is, in the user's category words?58- **Fix:** Add a definitional sentence high on the page: *"Plume is a modular Layer-1 blockchain for tokenizing real-world assets."*5960#### Rule 2 — Structured data (schema.org Organization/Product)61- **Why it matters:** Structured markup gives engines an unambiguous entity record; competitors with clean schema get extracted first.62- **Check:** Organization / Product / FAQ JSON-LD present and accurate?63- **Fix:** Add Organization + Product schema with name, description, category, sameAs links to socials/docs.6465#### Rule 3 — Consistent entity naming66- **Why it matters:** Inconsistent naming ("Plume", "Plume Network", "$PLUME", "the Plume chain") fragments the entity for a retriever.67- **Check:** Is the canonical name used consistently, with variants disambiguated?68- **Fix:** Pick one canonical name; introduce variants once ("Plume (Plume Network)").6970#### Rule 4 — Distinctive, ownable category phrase71- **Why it matters:** A memorable phrase the model can attach to you ("RWAs that feel like crypto") is how you get surfaced for the category.72- **Check:** Is there a distinctive phrase, used consistently, that maps the project to its category?73- **Fix:** Define and repeat one ownable phrase across the page, docs, and socials.7475### CATEGORY B — Corroboration & trust signals7677#### Rule 5 — Third-party corroboration78- **Why it matters:** Engines weight claims that appear on sources beyond your own domain. If your strongest framing only lives on your homepage, models hedge.79- **Check:** Is the category claim echoed by independent sources (press, docs, directories, integrations)?80- **Fix:** Seed the category phrasing into third-party surfaces — listings, integration docs, interviews, reputable write-ups.8182#### Rule 6 — Verifiable, attributable facts83- **Why it matters:** Models prefer to cite specific, checkable facts (founded, backers, metrics with dates) over adjectives.84- **Check:** Are there concrete, dated, sourced facts a model can lift and attribute?85- **Fix:** Add a factual "key facts" block: founding, notable backers, dated metrics with sources.8687#### Rule 7 — Author / entity authority signals88- **Why it matters:** Identifiable people and organisations raise an entity's trust weighting.89- **Check:** Named founders/team, linked profiles, an about page a model can resolve?90- **Fix:** Add a resolvable team/about section with sameAs links.9192### CATEGORY C — Answer-shaped content9394#### Rule 8 — Direct question-and-answer content95- **Why it matters:** Answer engines lift Q&A and definitional passages. Pages with FAQ-shaped content get quoted verbatim.96- **Check:** Does the page answer the likely category prompts directly, in plain language?97- **Fix:** Add an FAQ answering the exact prompts ("Is Plume MiCA-ready?", "What makes Plume different from [competitor]?").9899#### Rule 9 — Honest comparative framing100- **Why it matters:** When a user asks "best X for Y", models synthesise comparisons. A page that states where it wins (and doesn't) gives the model attributable comparison material.101- **Check:** Is there a fair, specific statement of where the project is the right/wrong choice vs alternatives?102- **Fix:** Add a short, honest "when Plume is the right choice / and when it isn't" section.103104#### Rule 10 — Freshness & dating105- **Why it matters:** Engines discount stale or undated content; dated, recently-updated pages get cited more.106- **Check:** Are claims dated and the page evidently current?107- **Fix:** Add "last updated" dates; date metrics and news.108109### CATEGORY D — Crawlability for AI agents110111#### Rule 11 — AI-agent access (robots / llms.txt)112- **Why it matters:** If GPTBot / ClaudeBot / PerplexityBot are blocked, or there's no `llms.txt`, the model can't retrieve you at all.113- **Check:** Do robots rules allow major AI crawlers? Is there an `llms.txt` summarising the entity?114- **Fix:** Allow reputable AI user-agents; publish `llms.txt` with a clean entity summary and key links.115116#### Rule 12 — Content not trapped behind JS / gated render117- **Why it matters:** Client-rendered pages with no server HTML give retrievers an empty shell — the most common silent AEO failure.118- **Check:** Is the substantive content present in the served HTML (not only after JS execution)?119- **Fix:** Server-render or pre-render the core definitional and factual content.120121---122123## Output format (JSON the portal/MCP parse)124125```json126{127 "audit": "aeo-visibility",128 "mode": "heuristic | live",129 "score": 0,130 "verdict": "INVISIBLE | PARTIALLY VISIBLE | WELL-CITED",131 "engines": [132 {"engine": "Perplexity", "cited": true, "position": 2, "basis": "live|projected"},133 {"engine": "Claude", "cited": true, "position": 3, "basis": "live|projected"},134 {"engine": "ChatGPT", "cited": false, "position": null, "basis": "live|projected"},135 {"engine": "Gemini", "cited": false, "position": null, "basis": "live|projected"}136 ],137 "ownable_phrase": "the one phrase to make your own",138 "rules": [139 {"id": 1, "name": "...", "status": "STRONG|WEAK|GAP", "note": "...", "fix": "..."}140 ],141 "ranked_fixes": ["fix 1 (highest leverage)", "fix 2", "fix 3"]142}143```144145*Heuristic mode infers per-engine citation from content signals and labels it "projected". Live mode requires engine transcripts in the input. Either way, this is an operator audit, not a guarantee of model behaviour, which varies over time.*