geo-visibility — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited geo-visibility (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
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.
Use this skill when the user:
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.
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:
| 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. |
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).
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.
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.
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.
Why: every AI crawler except Googlebot reads raw server HTML without executing JavaScript. Content that exists only after rendering does not exist for them.
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).
For commercial prompts, engines often cite reviews, listicles, and videos instead of vendor sites. Be present where the citations already go (surfaces table below).
Send the prompt panel and target pages to geo-tracking. Expect movement over weeks to months, not days, and judge trends, not single answers.
Engines quote passages, not pages. Write so any single section can stand alone as a complete answer.
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.)
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.
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 links daily site reports to budgets.Checklist:
For commercial prompts, the engines often cite about the brand rather than the brand. Be present where citations already go.
| Surface | Why it matters | Action |
|---|---|---|
| Review platforms (G2, Capterra, Trustpilot) | Heavily retrieved for "best X" and "is X good" prompts | Complete profile, steady flow of recent reviews, canonical one-line description |
| YouTube | A significant share of AI answer citations, around 15% (field heuristic from 115+ agency audits); Perplexity overweights it (measured, Profound) | Product walkthroughs and comparison videos, titles phrased as the buyer question |
| Reddit and forums | Retrieved for authenticity-seeking prompts | Genuine participation where the brand is discussed; never astroturf |
| Entity corroboration, B2B prompts | Complete company page, same one-line description | |
| Your own /vs/ and /alternatives/ pages | Capture comparison fan-out subqueries | One page per major competitor pairing (seo-content-blog) |
| Third-party listicles | Comparative listicles take 32.5% of citations (measured, ALM) | Pitch inclusion and updates in existing "best X" articles that engines already cite |
Volatility warning: Reddit's share of ChatGPT citations moved from roughly 60% to roughly 10% within about a month after platform shifts (https://www.semrush.com/blog/most-cited-domains-ai/). Any single-surface strategy can be erased by one partnership or model update. Diversify deliberately across at least three surfaces.
Answer these plainly when asked; wrong beliefs here waste entire quarters.
| Claim | Verdict | Reality |
|---|---|---|
| "Add llms.txt to get cited" | No evidence | No AI engine has announced reading it. Google's John Mueller: none of the AI services say they use it, and server logs show they do not even check for it (https://www.searchenginejournal.com/google-says-llms-txt-comparable-to-keywords-meta-tag/544804/). Published log analyses measure fetches at roughly 0.1% of AI bot hits. Ship it in ten minutes if a stakeholder insists, expect nothing from it. |
| "Block Google-Extended to exit AI Overviews" | False | Google-Extended controls Gemini model training, not AI Overviews. AI Overviews are built from normal Google Search indexing (https://developers.google.com/search/docs/appearance/ai-features). Leaving search means leaving search. |
| "Keyword stuffing helps LLMs" | False | It reduced visibility in the GEO benchmark (https://arxiv.org/abs/2311.09735). Models reward answers, not token repetition. |
| "GEO replaces SEO" | False | Citation requires retrieval, retrieval requires indexation and crawlable HTML. GEO is a layer on top of working SEO. |
| "Rank #1 in Google and AI visibility follows" | False | 32% overlap between AI Mode citations and the organic top 10 (Semrush); 11% domain overlap between ChatGPT and Perplexity (AuthorityTech). Plan per engine. |
| "Blocking AI crawlers is free protection" | Trade-off, not free | Blocking OAI-SearchBot removes ChatGPT search visibility; blocking GPTBot affects training only. Decide per business goal, per crawler (crawler table in seo-technical). |
Deliver a GEO visibility plan with five blocks:
| Mistake | Consequence | Fix |
|---|---|---|
| Optimizing only the brand's own site | Absent from listicle and review citations, the most cited formats | Third-party surfaces plan, pitch existing listicles |
| Treating all engines as one | Wins on one engine, invisible on others | Per-engine plan; 11% overlap is the rule, not the exception |
| Burying answers after long intros | Model quotes a competitor's tighter passage | Answer-first blocks, 2-4 sentences within 40-60 words |
| Pronoun chains and "as seen above" | Chunks unusable out of context | Self-contained sections, restate subjects |
| Hiding content in tabs, accordions, JS | Invisible to every AI crawler except Googlebot | Server-rendered HTML, check raw source (seo-technical) |
| Churning URLs for freshness | Resets the roughly 500-day authority curve | Update in place, keep the URL |
| Stuffing statistics without sources | No lift, credibility damage | Every number gets a URL or a named source |
| Betting everything on one surface | One platform shift erases visibility (Reddit precedent) | Minimum three surfaces |
| Shipping llms.txt as the GEO strategy | Quarter wasted on a no-evidence tactic | Citability rewrites, entity work, third-party presence |
| Penalizing product pages with editorial criteria | Meaningless grades, wrong priorities | Normalize against 70 for non-editorial pages |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.