Install
$ agentstack add skill-thibaultbm-claude-seo-geo-geo-visibility ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
GEO Visibility: Getting Cited by AI Engines
Generative Engine Optimization (GEO) is the work of becoming a source AI engines retrieve, quote, and recommend. This skill is the canonical reference in this repo for passage-level citability rules: when another skill needs "how to write so AI engines cite it", the rules live here.
One framing governs everything below: AI engines do not rank 1000 pages, they sample a short list of sources per subquery and quote passages from them. That changes the job from "rank the page" to "make every passage quotable and make the brand legible everywhere models look". GEO sits on top of SEO, never instead of it: a page that is not indexed cannot be retrieved, and a page that is not retrieved cannot be cited.
Company knowledge first (Obsidian)
If the working environment contains an Obsidian vault or any local knowledge base (a folder of .md notes, often with a .obsidian directory), read the relevant notes before acting: brand and product facts, target keywords, competitors, and the SEO action log of what was already tried. Ground every recommendation in that context instead of asking the user for facts the vault already holds. At the end of the session, append the actions taken to the vault's SEO action log so the next session starts informed. Vault structure, read-first and write-back protocols: the obsidian-brain skill.
Definitions
- GEO (Generative Engine Optimization): the practice of earning citations and recommendations inside AI-generated answers.
- AEO (Answer Engine Optimization): an earlier name for the same goal; treat the terms as interchangeable.
- Citability: how easily one passage can be lifted out of a page and quoted as a standalone, correct answer.
- Query fan-out: the engine-side decomposition of one prompt into multiple subqueries, each retrieved separately.
- Entity: the machine-readable identity of a brand (name, category, key facts) that models learn from co-occurrence across the web.
When to use this skill
Use this skill when the user:
- Asks how to appear in ChatGPT answers, AI Overviews, AI Mode, Perplexity, Claude, or Gemini.
- Asks why a competitor is recommended by AI assistants and they are not.
- Mentions GEO, AEO, AIO, LLM SEO, answer engine optimization, or AI citations.
- Wants a page or blog post optimized, scored, or audited for AI citability.
- Asks about llms.txt, blocking AI crawlers, or any rumored GEO tactic (the myths section answers these honestly).
- Wants brand entity work: consistent descriptions, schema, third-party profiles.
Boundaries: build target prompt lists with seo-keyword-research first; measure results with geo-tracking after. This skill is the middle step, improving citation rates.
How each AI engine selects sources
Treat each engine as a distinct channel with its own retrieval pipeline. Only 11% of cited domains are cited by both ChatGPT and Perplexity in a 2026 per-engine audit (https://authoritytech.io/curated/ai-citation-11-percent-platform-overlap-per-engine-audit-2026): winning one engine does not transfer automatically.
| Engine | Index and retrieval | What decides a citation | Key measured facts | |---|---|---|---| | ChatGPT search | Own index crawled by OAI-SearchBot, with Bing as a complementary gateway | Fans the prompt out into subqueries, retrieves a short list, cites roughly half of the URLs it fetches | Title and content similarity to the subquery is the top citation predictor across 1.4M prompts (https://ahrefs.com/blog/why-chatgpt-cites-pages/); OpenAI roughly tripled its crawl volume since August 2025 (https://www.botify.com/blog/openai-tripled-web-crawl) | | Google AI Overviews and AI Mode | Standard Googlebot index | Official query fan-out, answers assembled passage by passage from multiple sources | Only 32% of AI Mode cited URLs overlap the organic top 10 (https://www.semrush.com/blog/ai-mode-comparison-study/) | | Perplexity | Own index (PerplexityBot) plus real-time fetching | Retrieval-heavy, favors fresh sources and user-generated content | Overweights YouTube, Wikipedia, Reddit, and review content (https://www.tryprofound.com/blog/ai-platform-citation-patterns) | | Claude | Brave Search as web search backend plus Anthropic's own fetchers | Search-grounded answers from Brave results | Brave powers Claude web search (https://techcrunch.com/2025/03/21/anthropic-appears-to-be-using-brave-to-power-web-searches-for-its-claude-chatbot/) | | Gemini | Google Search grounding | Same index and fan-out family as AI Overviews | Optimize through the same Googlebot index and passage rules |
Read the table offensively:
- The 32% overlap number is the central GEO opportunity. A page ranking 15th (or a page with no ranking head term at all) gets cited when it answers one fan-out subquery better than anything in the top 10. Passage relevance beats page rank. This is why niche, precisely-titled pages punch above their domain authority in AI answers.
- ChatGPT citing about half of what it fetches means retrieval is necessary but not sufficient: the passage must then be the easiest one to quote. The citability rules below exist for that second step.
- Perplexity's UGC bias means some prompts are won on YouTube, Reddit, or review platforms, not on your domain. Plan surfaces per engine, not one site-only strategy.
- Bing still matters: it feeds ChatGPT as a gateway, so verify indexation in Bing Webmaster Tools, not only Google.
Per-engine playbook
| Engine | First moves | |---|---| | ChatGPT | Verify Bing indexation (Bing Webmaster Tools) and OAI-SearchBot access in robots.txt. Title and slug pages to match fan-out subqueries. A page must be fetchable first, quotable second. | | Google AI Overviews and AI Mode | Target subqueries, not only head terms. Restructure target pages answer-first. Top 10 ranking is not required (32% overlap), indexation and passage relevance are. | | Perplexity | Publish dated, recently updated content. Build YouTube and review platform presence; monitor the Reddit threads where the category is discussed. | | Claude | Search the target queries on Brave Search (search.brave.com); Brave has its own index, and a site invisible in Brave is invisible to Claude's web search. | | Gemini | Inherits the Google work; confirm AI Overviews presence first, then check Gemini separately in geo-tracking. |
Workflow
Step 1: Verify the foundation
No indexation, no citation. Before any GEO work, confirm with seo-technical: page indexed (Google and Bing), clean canonical, present in the sitemap, no accidental blocking of AI crawlers in robots.txt, and content present in raw server HTML (every AI crawler except Googlebot skips JavaScript rendering).
Step 2: Pick target prompts and pages
Take the buyer prompt panel from seo-keyword-research (50-100 prompts mapped to pages). Prioritize prompts where geo-tracking shows competitors mentioned and the brand absent: those are winnable gaps with proof of demand.
Step 3: Rewrite pages passage by passage
Apply the citability rules from the Rules and thresholds section to each target page. Work section by section: each H2 block must survive being lifted out of the page and quoted alone.
Step 4: Score and prioritize
Score each page with the 5-pillar GEO rubric (below), manually or with the bundled audit script from the seo-geo-audit skill (scripts/seo_audit.py). Fix the largest point gaps first; citability gaps usually pay back fastest because they change what models can quote.
Step 5: Check the AI crawler view
Why: every AI crawler except Googlebot reads raw server HTML without executing JavaScript. Content that exists only after rendering does not exist for them.
- Fetch the raw HTML of the page (view-source or curl) and search for the page's key answers verbatim.
- Compare with the rendered page in a browser.
- Classify what is missing from the raw HTML: JS-injected sections, tab and accordion content loaded on click, iframes, Shadow DOM components.
- Apply the nuance: content present in the HTML but collapsed by CSS is still readable by text crawlers; content injected by JavaScript on interaction is not. The first is a UX choice, the second is invisibility.
- Surface every answer that must be retrievable in server HTML; rendering fixes (SSR, prerendering) live in seo-technical.
Step 6: Enforce entity consistency
Models learn brands from repeated co-occurrence of the brand name with its category and facts. Make every surface tell the same story (checklist below).
Step 7: Build third-party presence
For commercial prompts, engines often cite reviews, listicles, and videos instead of vendor sites. Be present where the citations already go (surfaces table below).
Step 8: Hand off measurement
Send the prompt panel and target pages to geo-tracking. Expect movement over weeks to months, not days, and judge trends, not single answers.
Rules and thresholds
Passage-level citability rules (canonical)
Engines quote passages, not pages. Write so any single section can stand alone as a complete answer.
- Answer-first blocks. Phrase every H2 as a real question a buyer asks, then answer it directly in 2-4 sentences (40-60 words), then develop. Why: the model lifts the first complete answer it finds; burying the answer after 300 words of context hands the citation to someone else.
- Self-contained chunks. One idea per paragraph. Ban "as mentioned above" and pronoun chains across paragraphs; restate the subject noun. Why: retrieval pulls chunks out of context, and a chunk that only makes sense inside the page is unusable alone.
- Clean definitional sentences. Give every important concept one quotable "X is Y" sentence near the top of its section. Why: definitional sentences are the easiest passages for a model to reuse verbatim, and they anchor what the model believes the entity is.
- Evidence density. In the GEO study's controlled benchmark across 10,000 queries (Princeton et al., https://arxiv.org/abs/2311.09735), adding expert quotes lifted generative visibility by about 41%, adding statistics by about 32%, citing sources by about 30%, and improving fluency by about 28%, while keyword stuffing reduced visibility. Honest framing: these lifts were measured in the paper's benchmark of generative answers, not guaranteed on live engines, but the direction is corroborated by live citation pattern studies. Practical rule: every major claim gets a number with a source or a named expert quote.
- Tables and lists. Comparison tables are the most extractable format for "best X" and "X vs Y" prompts. Measured citation share by format: comparative listicles ("Best X for Y") 32.5% of citations, other listicles 21.9%, articles 16.7%, product pages 13.7% (https://almcorp.com/blog/ai-citations-listicles-articles-product-pages/). If the site has no comparison content, it is absent from the single most cited format.
- Descriptive natural-language slugs. Pages with descriptive slugs were cited at 89.78% vs 81.11% for non-descriptive ones in Ahrefs' dataset (https://ahrefs.com/blog/why-chatgpt-cites-pages/). Slug the page like the question it answers.
- Freshness without churn. Maintain dateModified in JSON-LD plus a visible date, and make substantive updates every 60-90 days on commercial and comparison pages (prices, versions, screenshots). At the same time, the median cited page is roughly 500 days old in the same Ahrefs dataset: URL authority accumulates. Update in place, never rotate URLs for fake freshness.
Example: rewriting a passage for citability
Before (typical, not citable):
Many construction teams struggle with project visibility. As we discussed
above, the landscape has evolved considerably, and there are many factors
to consider. Our platform takes a different approach to this problem,
building on the insights from the previous section.
Why it fails: no question, no answer, references to content outside the chunk ("as we discussed above"), no definition, not one fact a model can quote.
After (citable):
## What is construction project management software?
Construction project management software is a tool that centralizes
schedules, budgets, subcontractors, and site documents for building
projects. Mid-size contractors use it to replace spreadsheets and email
threads with one shared system. Typical plans cost 30 to 60 USD per user
per month (pricing survey: [source URL]).
Why it works: a question H2 matching a fan-out subquery, a definitional "X is Y" first sentence, fully self-contained, a sourced number, and the whole direct answer inside 40-60 words. (Illustrative figures: replace with real, sourced ones.)
The GEO scoring rubric (0-100)
Five pillars, raw score out of 80. Adapted from a scoring model used in production audit tooling; apply it as an evaluation grid, manually or via the bundled audit script from the seo-geo-audit skill (scripts/seo_audit.py).
| Pillar | Points | What earns points | |---|---|---| | Citability | /20 | Numerous H2s phrased as questions, lists, tables, statistics, definitional sentences, paragraphs of 10-80 words | | E-E-A-T signals | /20 | Visible author with bio, datePublished and dateModified, outbound links to authoritative sources | | Structured data | /20 | JSON-LD present, key types correct (Article or Product, plus Organization), BreadcrumbList | | AI accessibility | /10 | Indexable, clean canonical, in the sitemap, content present in server-rendered HTML | | Multi-format | /10 | Descriptive image alts, at least one table, video where relevant |
Detailed grid (keep pillar totals fixed even when adapting sub-items):
| Pillar | Sub-item | Points | |---|---|---| | Citability /20 | H2s phrased as questions, roughly one per 150-300 words | 4 | | | Direct 2-4 sentence answer immediately under each H2 | 4 | | | At least one comparison or data table | 3 | | | Bulleted or numbered lists wherever enumerations exist | 2 | | | Statistics with sources in the body | 3 | | | One definitional "X is Y" sentence per key concept | 2 | | | Paragraphs mostly between 10 and 80 words | 2 | | E-E-A-T /20 | Visible author with a real bio | 6 | | | datePublished present (visible and in JSON-LD) | 3 | | | dateModified present and honest | 4 | | | Outbound links to authoritative sources | 7 | | Structured data /20 | Valid JSON-LD present | 8 | | | Correct primary type (Article or Product) | 6 | | | Organization with sameAs | 3 | | | BreadcrumbList | 3 | | AI accessibility /10 | Indexable (no noindex, no accidental robots block) | 3 | | | Clean self-referencing canonical | 2 | | | Present in the XML sitemap | 2 | | | Full content in raw server HTML | 3 | | Multi-format /10 | Descriptive image alts | 4 | | | At least one table | 3 | | | Video embedded where the topic warrants one | 3 |
Normalization, and why it exists: editorial pages are scored against the full 80; non-editorial pages (product, collection, service) are scored against an attainable maximum of 70, because full editorial E-E-A-T (author bios, citation apparatus) is structurally out of reach for a product page, and a grade that punishes a page for its template teaches nothing. Normalized score = raw score divided by the attainable maximum, times 100.
| Grade | Normalized score | |---|---| | A | 90 or above | | B | 75 to 89 | | C | 60 to 74 | | D | 40 to 59 | | F | below 40 |
Report the pillar breakdown with every grade: the gaps, not the letter, drive the fix list.
Entity consistency rules
The training and retrieval signal models learn from is co-occurrence: "brand + category + same facts" repeated across independent surfaces. Inconsistency dilutes the entity; a model that has seen three different one-line descriptions trusts none of them.
Template for the canonical one-line description:
[Brand] is a [category] for [audience] that [one differentiator].
Example: SitePilot is construction project management software for
mid-size contractors that link
…
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [Thibaultbm](https://github.com/Thibaultbm)
- **Source:** [Thibaultbm/claude-seo-geo](https://github.com/Thibaultbm/claude-seo-geo)
- **License:** MIT
- **Homepage:** https://sorank.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.