AEO AND GEO SKILL

GEO page analysis

A scored GEO analysis of one URL: citability, structure, multimodal content, authority, and technical access, with an AI-crawler table that separates training bots from search bots and cites the vendor pages.

No key, no account neededClaude Code

Install the plugin
bash install.sh   # from a clone of github.com/AgriciDaniel/claude-seo, pinned to v2.3.1

Run this in a terminal inside your project folder. Claude Code, Cursor and Codex then read the skill from where it lands.

  1. Step 01Open a terminal in your project folder
  2. Step 02Paste the command and press Enter
  3. Step 03Pick the agents to install to
  4. Step 04Ask the agent for the job; it reads the skill

seo-geoAgriciDaniel/claude-seoMIT licencev2.3.1updated 2026-09-10

It opens with Google’s AI optimisation guide as the primary source and frames every finding as SEO applied to AI surfaces, not a new discipline. When community advice contradicts Google, the skill says to defer to Google and note the contradiction in the report.

Five weighted criteria produce a GEO readiness score: citability 25%, structure 20%, multimodal 15%, authority and brand 20%, technical accessibility 20%. Each has strong and weak signals written out.

The crawler section separates training bots from search-citability bots for OpenAI, Anthropic, Google and Apple, with a table of which claim each user agent can and cannot support. This is the section to read even if you never run the skill.

When to use it

The phrases that trigger it

Say any of these and an agent that has the skill installed will usually load it; you can also call it by name. The phrases are the skill’s own, from its description.

  • AI Overviews
  • SGE
  • GEO
  • AI search
  • LLM optimization
  • Perplexity
  • AI citations
  • ChatGPT search
  • AI visibility

What’s inside

The playbook, section by section

  • Key statistics with their sources named

    Reach and coverage figures for AI Overviews and AI Mode, each tagged as Google-confirmed or third-party reporting.

  • Brand mentions over backlinks

    The Ahrefs 75,000-brand study: YouTube mentions correlate at about 0.74 with AI citations, domain rating at about 0.27.

  • The crawler claim table

    Eight claims, each paired with the one bot that supports it and the one that does not.

  • llms.txt evidence

    A reference file collecting Mueller, Illyes, the SE Ranking 300k-domain study and a server-log audit: presence is reported, no citation weight is assigned.

  • Two Google citation engines

    AI Overviews and AI Mode agree on the conclusion about 86% of the time and cite the same URLs 13.7% of the time (Ahrefs, 540k query pairs), so both are scored.

  • Quick wins, medium effort, high impact

    Three tiers of changes, from a definition in the first 60 words to original research and Wikipedia presence.

Reference files the agent loads on demand

2 files in the skill folder, read only when an instruction calls for one.

google-ai-optimization-guide.md
A synthesis of Google’s own AI optimization guide (Search Central, June 2026), with the primary sources.
llmstxt-evidence.md
The evidence that no major AI search system reads /llms.txt: Mueller, Illyes, a 300k-domain study, server-log audits.

See it in action

One real run, in full

The request on the left went to the skill as installed. On the right is everything it returned, unedited; scroll inside the box to read it all.

You ask

Run the GEO analysis on https://addition-labs.com/resources/guides/generative-engine-optimization. No DataForSEO. Produce the GEO-ANALYSIS output.

The skill delivers

GEO-ANALYSIS

URL: https://addition-labs.com/resources/guides/generative-engine-optimization Fetched: 2026-09-11 (raw HTTP + Playwright render via claude-seo runtime; robots.txt, llms.txt, llms-full.txt, sitemap.xml also fetched) Framing: per Google's AI optimization guide, this is SEO applied to AI-search surfaces, not a separate discipline. Scores below are claude-seo heuristics, not Google-internal signals (Google, "Using third-party SEO tools", 2026-06-05).

1. GEO Readiness Score: 77/100

CriterionWeightScoreBasis
Citability2521Definition in first 48 words; 16 attributed primary sources; unique data (vendor unit comparison, Cloudflare Radar readings); three blocks in the 134-167 word band
Structural readability2016Clean H1 > 9 H2 > 6 H3, TOC, 52 short paragraphs (median ~47 words), 1 table, 3 ordered lists, HTML FAQ. Only the FAQ headings are questions
Multi-modal1598 figures with descriptive alt, 1 data table. No video, no embedded interactive element. 7 of 8 images lack width/height
Authority and brand signals2013Byline is organizational ("By the Addition team"), no named person. Updated date visible (10 Sep 2026); publish date (25 Jul 2026) only in schema. Wikipedia/Wikidata: absent. LinkedIn: present. Reddit/YouTube: not measurable in this run
Technical accessibility2018Full server-side rendering; robots.txt allows every crawler; llms.txt and llms-full.txt present and list this page; no RSL licensing

2. Platform Breakdown

PlatformReadinessWhy
Google AI Overviews80Eligibility floor met: indexable, canonical self-referencing, no nosnippet/max-snippet, in sitemap. AIO citations track classic ranking, and this run had no rank data (no DataForSEO, no Search Console), so the number reflects eligibility, not position
Google AI Mode74Freshness strong (modified 1 day before fetch), citable passages exist beyond the fold. Entity authority is the gap: no Wikipedia/Wikidata presence, no standalone Organization entity with sameAs
ChatGPT search70OAI-SearchBot allowed; all content in raw HTML; long, structured, evidence-rich page matches the profile the page itself cites for high-influence sources. ChatGPT's citation pool leans on Wikipedia (47.9%), where the brand is absent
Perplexity66PerplexityBot allowed. Perplexity's pool leans on Reddit (46.7%); Reddit presence could not be measured (search endpoint returned 403)
Bing Copilotnot scoredIndexNow submission status not checked in this run

3. AI Crawler Access Status

robots.txt (71 bytes) contains only User-agent: * / Allow: / plus the sitemap line. No crawler is named, so every bot inherits the wildcard allow. Each line below is a separate finding.

Search citability (governs whether the page can be cited in that product's search surface)

User-agentOwnerStatusCapability governed
GooglebotGoogleAllowed (wildcard)Google Search, AI Overviews, AI Mode
OAI-SearchBotOpenAIAllowed (wildcard)ChatGPT search citations
Claude-SearchBotAnthropicAllowed (wildcard)Claude search-feature citations
PerplexityBotPerplexityAllowed (wildcard)Perplexity answers
ApplebotAppleAllowed (wildcard)Siri, Spotlight, Safari search

Training access (governs model-training use only; says nothing about citability)

User-agentOwnerStatusCapability governed
GPTBotOpenAIAllowed (wildcard)OpenAI model training
ClaudeBotAnthropicAllowed (wildcard)Anthropic model training
Google-ExtendedGoogleAllowed (wildcard)Gemini/Vertex training and grounding (not Google Search)
CCBotCommon CrawlAllowed (wildcard)Common Crawl corpus
Applebot-ExtendedAppleAllowed (wildcard)Apple Intelligence training opt-out signal
Bytespider, cohere-aiByteDance, CohereAllowed (wildcard)Vendor training

User-triggered fetchers (ChatGPT-User, Claude-User, Google-Agent, Google-NotebookLM) ignore robots.txt by design; no server-side access control was observed or tested.

No action needed for search visibility. If the owner wants to restrict training use while keeping citability, add explicit Disallow blocks for GPTBot, ClaudeBot, CCBot, Google-Extended and Applebot-Extended; leave the search bots on the wildcard allow.

4. llms.txt Status

FileStatusNotes
/llms.txtPresent, 45,025 bytesWell-formed: H1, blockquote description, H2 sections (Services, Service pages by channel, ...), one link + description per line. This page is listed once
/llms-full.txtPresent, 873,184 bytesFull text of every research page with sources. This page's URL appears 8 times (listing plus in-text cross-links)

Google Search ignores these files (Google AI optimization guide, doc updated 2026-06-29), and no major AI search system has documented consuming them. No citation weight is assigned. The site's own /resources/guides/llms-txt page states the same position, so the files are consistent with the site's editorial stance: published as optionality, not as a lever.

5. Brand Mention Analysis

PlatformResultMethod
WikipediaAbsent. A search for "Addition Labs" returned 1 unrelated hit (COVID-19 pandemic in Syria)Wikipedia API list=search
WikidataAbsent. 0 entities for "Addition Labs"Wikidata wbsearchentities
LinkedInPresent. linkedin.com/company/addition-labs returned HTTP 200 and is linked from the site footer (JS-injected chrome)HTTP HEAD + rendered DOM
RedditNot measurable. reddit.com/search.json returned HTTP 403 to this runtimecurl
YouTubeNot measurable. youtube_search.py requires a GOOGLE_API_KEY, none configuredplugin script

Wikipedia/Wikidata absence is the largest structural entity gap for ChatGPT-style citation. Google's guide explicitly rejects chasing inauthentic mentions across forums and videos, so the recommendation is limited to accurate entity records (a Wikidata item, a standalone Organization schema) and genuine primary research that others cite, not mention-seeding.

6. Passage-Level Citability

Page body: 3,410 words (parser count), 52 paragraphs, median paragraph ~47 words. The first 30% of the page (roughly the lede through "How nine tested edits performed") carries the core claim, which is where SE Ranking measured ~44% of AI citations originating.

Definition block, first 60 words (strong): > "Generative engine optimization is a named method from a 2024 KDD paper that measured edits to a document already inside an answer engine's context. Its headline gain describes share of an answer, not discovery. A later benchmark found most of those methods ineffective and often harmful to ranking." (48 words, X is ... pattern, self-contained)

Blocks already in the 134-167 word band:

LocationWordsFormSelf-contained?
"How two studies count citations", Semrush vs Zhang/He/Yao paragraph ("Semrush counts the same surface...")138paragraphYes: names both studies, the 15-vs-3 figure, the January-April 2026 window, and the conclusion
"What the platforms call unneeded", advice-vs-Google table147<table> (3 columns)Yes: each row is a claim, Google's published sentence, and a status
"Where the evidence points instead", numbered steps ("Get retrievable first...")158<ol class="art__steps">Yes: a procedure with the eligibility requirement quoted

Near-band blocks worth a light edit:

LocationWordsGap
"Where the evidence points instead" opening paragraph ("That leaves a narrow, boring instruction...")118Add the C-SEO Bench citation inline (author + year) so the sentence survives extraction without the Sources list
"Why the unit decides the answer" (Sielinski sampling)84 + 62The two paragraphs together (146 words) form one argument; merging or adding a bridging sentence would yield one extractable block
"A second result rarely quoted" (115.1% / 30.3%)63Strong data point, but "the same experiment" depends on the previous section; name the paper (Aggarwal et al., 2024) in the block

Per Google's guide there is no requirement to chunk content to a word count. The blocks above are reported because they already exist, not as a target to manufacture.

7. Server-Side Rendering Check

MeasureRaw HTTPPlaywright render
HTML size41,911 chars62,833 chars
Visible words3,3603,712
Words present only after JS0 in article158, all site chrome (nav menu, footer: "Services", "Cookie", "WY", calculator names)
is_span/aFalse
Console errors00

Every word of the article, the JSON-LD block, the FAQ <details> elements, the table and the figure captions are in the raw response. The four JS bundles (analyticsEvents, planPicker, legal, page2) inject only navigation and footer. The <h1> sits 278 bytes into <body> with zero links before it, so a crawler with a small read window (the ~5-6K character window measured for OAI-SearchBot) receives the definition and byline before any navigation. This is the strongest technical finding on the page.

8. Top 5 Highest-Impact Changes

  1. Name the author and add a Person entity. The byline reads "By the Addition team" and Article.author is an Organization. Google's Who/How/Why test expects a byline where readers expect one; an evidence-heavy research guide is that case. Add a named author with a bio page and Person schema (with sameAs to LinkedIn), keep Organization as publisher.
  2. Publish a standalone Organization entity with sameAs. Organization appears only nested inside author/publisher with name and url. Add a root-level Organization (or WebSite + Organization) carrying logo, sameAs: [linkedin.com/company/addition-labs, ...], and the Sheridan WY address already in llms.txt. This is the cheapest entity-clarity gain for AI Mode and ChatGPT, which resolve the brand by entity, not by domain rating.
  3. Put the figure data in text. Five of the eight figures are charts (method-ladder, three-of-54, what-bots-ask-and-get, crawl-to-refer, brand-tiers) whose values exist only as pixels; alt text carries the caption, not the numbers. The page's own thesis is that extractable figures help a document get used. A small HTML table under each chart (the nine edit names with their normalised values; the 3-of-54 tally; the Cloudflare shares as read on 3 Sep 2026) makes those claims quotable by a crawler that does not execute JavaScript or read images.
  4. Expose the publish date and mark up both dates. datePublished: 2026-07-25 is in schema only; the visible line shows "Updated 10 September 2026" in a plain <span>. Render both with <time datetime="...">. Freshness is one of the stronger AI Mode signals and the page already earns it; make it machine-readable in the body.
  5. Declare image dimensions on the seven figure PNGs missing width/height. Lazy-loaded figures without intrinsic size shift layout on load (CLS), which weighs on the classic ranking that feeds AI Overviews. The one screenshot (geo-cseo-bench.png, 1300x590) already has them.

Lower priority, listed for completeness: align <title> ("What the Evidence Supports") with <h1> ("What Survived Testing"); use a page-specific og:image instead of the site-wide og-image.png; RSL licensing is absent (no License: directive in robots.txt, no <link rel="license" type="application/rsl+xml">, /rsl.xml and /.well-known/rsl.xml return 404), add only if the owner wants machine-readable AI-use terms.

9. Schema Recommendations

Detected (one JSON-LD block, 3,744 bytes, valid): Article, BreadcrumbList, FAQPage (4 Question/Answer pairs), nested Organization, WebPage as mainEntityOfPage.

ChangeWhy
Article.author → Person with name, url (bio page), sameAs; keep publisher as OrganizationWho-test; author entity for E-E-A-T
Root-level Organization with logo, sameAs, addressEntity disambiguation; nothing on the page currently links the brand to its off-site profiles
Article.image (page-specific) and Article.citation (the 16 sources as ScholarlyArticle/CreativeWork with url)The Sources list is already the page's strongest authority signal; expressing it in schema makes the attribution machine-readable
Article.about / mentions for GEO, C-SEO Bench, the KDD paperTopic entity clarity for query fan-out
Keep FAQPage but expect no rich resultGoogle limits FAQ rich results to authoritative government and health sites (Aug 2023 change). The HTML <details> FAQ still serves readers and crawlers; the schema is harmless but is not a lever

Google's guide says not to over-invest in structured data specifically for AI features. The list above is standard Article/Organization hygiene, which is the part that does count.

10. Content Reformatting Suggestions

PassageIssueSuggested edit
"Everything about how Google's own AI surfaces behave..." (74 words, section 1)A navigation paragraph with three internal links carrying no claim of its own; sits inside the first 30% of the page where citable material is most valuableCompress to one sentence, or move the cross-links to the "Where to go next" list
One-line paragraphs: "The word has a paper behind it." / "Read the order, not the size." / "Two years later, the answer is narrow." / "Access comes before tactics." / "You are buying a sample size." / "One word, two different events."Six 4-7 word standalone <p> elements break the argument into fragments an extractor may drop or quote without contextFold each into the opening sentence of the paragraph it introduces, or mark them up as the figure's caption/lede rather than a body paragraph
Figure captions ("Values from the critical survey's normalised table, read 3 September 2026")Caption states provenance but not the valuesAdd a one-sentence reading of the chart in the caption (highest and lowest edit, with numbers) so the finding survives without the image
"A second result rarely quoted" (63 words)Refers to "the same experiment"Open with "In Aggarwal et al. (2024), when Cite Sources was applied, the fifth source..."
FAQ answers ("Questions people ask")The <summary> questions are the only question-form headings on the page; the H2/H3 set is descriptiveOptional: reword two or three H2s to the query form users type ("Does generative engine optimization work?" for "What a benchmark found across six domains"). Google does not require this; it only helps where the heading then matches a real query
<title> vs <h1>Two different subtitles for the same pagePick one ("What Survived Testing" is the more specific claim)

Not measured in this run: ranking position (no DataForSEO, no Search Console), Reddit and YouTube mentions, IndexNow status, Core Web Vitals field data. Content-quality heuristic (content_quality.py): overall 80/100, filler 0, AI-pattern matches 0, information density 0.366.

What this run could not do

No ranking or SERP data (no DataForSEO, no Search Console), no Reddit mentions (the request was refused with a 403), no YouTube mentions (the script needs a Google API key), no IndexNow or Bing status, no Core Web Vitals field data. Each is reported as not measured rather than estimated.

Method behind it

Where we would differ, and why

Our GEO guide reproduces the citation-overlap and recency findings this skill relies on, with the sample sizes beside each. Where the skill quotes a number, the guide shows where it came from and what it does not cover.

The 134-to-167-word passage length and the 156% multimodal figure are quoted without a source in the skill text. We could not trace either to a primary study; treat them as the author’s rules of thumb.

The skill still recommends creating llms.txt as a medium-effort item after its own reference file concludes it carries no citation weight. Do it last, if at all.

What is generative engine optimization? What testing supports

Four GEO vendors each sell a different unit on their entry plan, and only the first publishes both a price and a prompt count, so only its price per prompt can be computed.
Quoted from the four published pricing pages on 3 September 2026. This is a comparison of the published units, not a picture of the pages.From What is generative engine optimization? What testing supports

SKILL.md

The file the agent reads

Written by Daniel Agrici and published under the MIT licence. Read the full file (2,718 words) on GitHub, at the commit we reviewed: AgriciDaniel/claude-seo/skills/seo-geo/SKILL.md. The reference files are in the same folder.

Questions

Questions people ask before installing

Which bots should an ecommerce store allow?

The skill’s recommendation: allow OAI-SearchBot, Claude-SearchBot and PerplexityBot for visibility; decide GPTBot, ClaudeBot, CCBot and Applebot-Extended on licensing grounds, because they only govern training.

Does it check whether my brand is mentioned on Reddit or Wikipedia?

It reports brand mention presence as a section of the output, but without DataForSEO it works from what it can fetch and what you tell it. It does not search Reddit itself.

What is the GEO readiness score worth?

It is the plugin author’s weighting of five criteria. Useful to compare two of your own pages; not comparable with anyone else’s tool.