Joshua Opolko

GEO: 0 to 1,800 AI Citations in 120 Days

Claude SEO GEO audit dashboard showing NowServingTO score 74 out of 100

GEO is what happens when you stop optimizing for an algorithm that counts backlinks and start optimizing for an AI assistant deciding whether to cite you in front of 900 million weekly ChatGPT users. Three audit runs, ten fixes, and the actual Bing data showing what happened.

The Model Has Changed

Traditional SEO is a decade-long domain authority accumulation game. AI assistants don’t play it. ChatGPT’s citation algorithm cares whether your answer is specific, structured, and verifiably sourced. A six-week-old government-data directory beats a ten-year-old review aggregator if it answers the query more precisely.

SEO signals that still matter in GEO: schema markup, server-side rendering, clean robots.txt. Legacy infrastructure – necessary but not sufficient. The new work is citability: 134–167 word self-contained answer blocks, question-based headings, declared data provenance. That’s the entire game.


The Audit Machine

Claude Code’s claude-seo plugin runs GEO and legacy SEO subagents in parallel – 7 dimensions simultaneously. Three runs on NowServingTO, a Toronto restaurant directory built from City of Toronto licence data, cross-referenced with social media and Toronto Public Health.

$ /claude-seo:seo-geo https://nowservingto.com
  ⎿  robots.txt – 17 AI crawler directives, all explicitly allowed
  ⎿  llms.txt – 223 lines, RSL 1.0 licensed, query-intent declared
  ⎿  FAQPage schema – 44 cuisine + neighbourhood pages, 50+ Q&A pairs on /answers
  ⎿  Passage citability – testing 134–167 word extraction windows
  ⎿  Platform scoring – Google AIO, ChatGPT, Perplexity, Bing Copilot
  ⎿  Done (30 tool uses · 59.9k tokens · 3m 47s)
GEO Readiness: 81/100
   Google AI Overviews  82/100  (+19 from baseline)
   Bing Copilot         75/100  (+18 from baseline)
   Perplexity          72/100  (-5 – Reddit gap)
   ChatGPT Search     68/100  (-6 – Wikipedia gap)

GEO Score: Three Runs

Run 1 was discovery. Run 2 verified the fixes. Run 3 (June 2026) reflects 120 days of operation and two full optimization passes.

Run 1 67/100 Run 2 72/100 Run 3 81/100 0 50 100

Platform Breakdown: Before vs After

Google AI Overviews and Bing Copilot improved sharply – schema fixes, CollectionPage @id, iterated answer content. Perplexity and ChatGPT Search declined slightly. That’s not a regression – it’s the Reddit and Wikipedia gap. Perplexity weights Reddit at 46.7% of citation sources; ChatGPT at 11.3%. Zero Reddit presence means zero citation pathway on those platforms regardless of technical quality.

0 50 100 Google AIO 58 82 ↑+24 Bing Copilot 52 75 ↑+23 Perplexity 74 72 ↓ Reddit gap ChatGPT 71 68 ↓ Wikipedia gap Run 1 baseline Improved (schema/technical) Off-site gap

The Outcome: 0 to 1,800 Citations in 120 Days

Bing Webmaster Tools AI performance data – joshuaopolko.com, Nov 2025 to Mar 2026. Zero citations through November 12. First citation November 13. Hockey stick through February – 97/day peak on Feb 23, then sustained 40–95/day through March.

0 50 100 Nov Dec Jan Feb Mar 97/day Feb 23 95 Mar 2 Bing AI Citations / Day – joshuaopolko.com

Agent Zero content drove the spike. VR content (military applications, architectural visualization, elderly care) is the durable floor – cited steadily across different queries. Claude Code spec workflow content is the next spike loading.


Who’s Actually Crawling

Two categories of AI bot. Indexing crawlers – GPTBot, ClaudeBot, OAI-SearchBot – build the knowledge index in the background. Users see nothing. Live citation bots – ChatGPT-User and Claude-User – fire only when a real user query triggers a real-time page fetch. Every hit is a citation served to a real user.

AI bot traffic – nowservingto.com – last 30 days
ClaudeBotindexing1,383 hits GPTBotindexing1,073 hits Amazonbotindexing1,002 hits OAI-SearchBotindexing254 hits ChatGPT-Userlive citation ←81 hits · +15 today Claude-Userlive citation ←56 hits · +39 Jun 8 PerplexityBotindexing35 hits

10 Fixes, One Session

  1. 21 neighbourhood pages un-404’d – SXO agent found a 2.1 MB GeoJSON file never deployed to prod. All neighbourhood pages silently dead. Invisible to standard crawl tools.
  2. foundingDateopeningDate on 253+ restaurant pages – wrong schema property, one-line fix
  3. CollectionPage @id on all cuisine, district, neighbourhood pages – entities go from anonymous nodes to referenceable graph entries
  4. itemListOrder: Descending declared – AI systems read sort semantics instead of guessing
  5. 3-day silent build failure fixed – Python 3.12 f-string syntax on a 3.10 server. Site was stale for 3 days. Zero alerts fired.
  6. Social share URL routing – lottery game was sharing wrong OG card
  7. 485 editorial blurbs regenerated – LLM output had collapsed into filler. Before: “time-honored techniques passed through generations.” After: “Kurdish shawarma rooted in Duhok, the city in northern Iraq that anchors this West Toronto kitchen.” Haiku batch, ~$0.50.
  8. LLM refusal text removed from live HTML – 3 pages were serving raw Haiku refusal responses verbatim to users and crawlers. “I need to flag a critical issue with this request before proceeding.” Live on the site.
  9. Grocery store blocked – passed every gate: social media confirmed open, website live, cuisine-tagged “Caribbean.” Caught before rendering as a restaurant.
  10. Homepage intro block removed – the listing feed is the answer.

Still Open

The remaining gap isn’t technical. Perplexity and ChatGPT weight Reddit and Wikipedia at 11–47% of citation sources. The fix is presence – monthly posts on r/toronto, r/TorontoFood. A Wikidata entity for the site (30 minutes, no notability threshold). Not SEO hacks. The actual signals those platforms use.


Run It

/plugin marketplace add AgriciDaniel/claude-seo
/plugin install claude-seo@agricidaniel-claude-seo

# Full audit (7 parallel agents)
/claude-seo:seo https://yoursite.com

# GEO only
/claude-seo:seo-geo https://yoursite.com

Requires Claude Code 1.0.33+. MIT license, no telemetry. Full source: github.com/AgriciDaniel/claude-seo

NowServingTO – Toronto’s daily-refresh directory of newly licensed restaurants across 45 cuisine categories, verified open via social media, chains excluded.