Changelog
Product updates, fixes, and improvements as GEO Tracker evolves.
- New
AI Visibility Benchmark Q2 2026 — 22 leading SaaS brands ranked in ChatGPT + Perplexity
Shipped a flagship public research artefact: a benchmark report at /benchmark that ranks 22 well-known SaaS brands (Vercel, Linear, Notion, Figma, Stripe, HubSpot, Slack, Zapier and more) by the same GEO Score we use for our own paying users. Each brand was scanned with 10 buyer-intent questions generated from its own public homepage description, asked to ChatGPT and Perplexity, and scored on mention rate × citation quality. The result is a public, single-snapshot research dataset — reproducible by anyone running our free /grader on any of the listed domains. Top of the ranking went to Supabase (70), GitHub (66), and Amplitude (61); bottom included ClickUp (27) and Mailchimp (29). The report runs again each quarter and each snapshot gets its own permanent URL.
- Full sortable ranking table (22 SaaS brands, 5 categories) at https://geotrackerai.com/benchmark — server-rendered HTML so AI engines and search crawlers can index every brand name + score as a structured fact.
- Per-brand drilldown for every entry: which 10 questions were asked, the per-engine mention rate, the top 20 domains AI cited instead/alongside the brand, the competitors that came up most often, and the full sample of responses with mentioned/not-mentioned markers. Every section is anchor-linkable so external sites can cite a specific row.
- Aggregated cross-snapshot insights row: highest GEO Score brand, total scans, average score, snapshot date — gives the page a single skim layer above the table.
- Reproducibility built in. Anyone running our free 60-second /grader on these domains will get numbers in the same range. The exact pipeline (scripts/benchmark/run-benchmark.ts), the question-generation prompt, the engines + models, and the GEO Score formula are all documented in the methodology block. We deliberately exclude GEO Tracker AI from the ranking — we're the measurement tool, not a ranked item.
- Explicit 'single snapshot, not a tracked period' framing. The 220 questions all ran in one batch on May 18, 2026 — the next quarterly snapshot (Q3 2026) lands at /benchmark/q3-2026 with its own permanent URL so historical comparisons stay clean. Continuous tracking is what an actual GEO Tracker AI account does for the one domain you own.
- A 'What this benchmark doesn't show you' section between the ranking and the per-brand drilldown surfaces four things visible only inside Pro: per-query Why drawer with ranked flip actions, 14-day Outcome Loop that measures whether fixes actually moved the score, Citation Why per cited domain with content-angle breakdown, and the AI Crawlability Monitor (16 AI bots × robots.txt + llms.txt + JSON-LD + OG + Twitter card coverage).
- Legal positioning baked into the design. The page describes 'how AI engines cited each brand on the snapshot date' — not advice to or about those brands. Brand names appear factually for identification (nominative fair use). No competitive claims, no per-brand recommendations, no implicit 'they need our product' framing. Brand owners can contact us at support@geotrackerai.com for the underlying data on their own domain.
- Subdomain-aware self-detection. Citations to blog.hubspot.com count as self for HubSpot, docs.github.com counts as self for GitHub, etc. — the fix applies retroactively on read so existing snapshots benefit without re-running the pipeline.
- Full SEO + AEO stack: Dataset + Article + BreadcrumbList JSON-LD graph, dedicated OG image, 48-char title and 142-char description (inside Google + Bing truncation windows), keywords array, canonical pointing at the per-snapshot permalink, sitemap entries auto-generated per snapshot from the database. The page accumulates link equity across quarterly releases instead of resetting each time.
- New
Day-1 self case study — we ran our own tracker on ourselves and got GEO Score 0
Published the first build-in-public case study at /blog/our-day-1-geo-score-zero. Three weeks after launching the product, we pointed our own AI visibility tracker at our own brand. The result is in the title — across five pulse scans against ChatGPT, Perplexity, and Google AI Mode, we got zero recommendations of geotrackerai.com when buyers asked category questions like 'what tool can track my visibility on Perplexity'. The post is a transparent diagnosis (no web footprint yet, two off-target questions in our tracked set, no presence on Reddit/YouTube where AI engines pull most citations from in our category) plus a 60-day public experiment plan with five measurable interventions. Day 14, Day 30, and Day 60 follow-ups will publish the raw numbers — score went up, score went down, or score didn't move, especially if it didn't move.
- Real production data, not a fabrication. The five scans, fifteen scan results, top-15 cited domains, tracked competitors, and engine breakdown all pulled directly from the production Supabase on 2026-05-18 and rendered server-side. Anyone running our /grader on geotrackerai.com from a fresh browser sees the same data.
- Custom MDX components for build-in-public posts (CaseStudyHero, CitedDomainsList, ExperimentPlan, FollowAlongCta, HonestyBox) — reusable across the upcoming Day 14 / Day 30 / Day 60 follow-ups and any future case studies. Visual identity mirrors the dashboard's Mission Control gauge so the post reads as 'this is the actual product showing actual data', not a marketing mockup.
- Five experiments with hypothesis Δ and measure-by criteria: audit our own questions through Confidence Coach, Reddit/IndieHackers/HN presence (5 posts in 14 days), aggressively publish our 7 comparison pages, AI Crawlability audit on ourselves, weekly progress posts.
- External authoritative citations: Tinuiti Q1 2026 Perplexity citation study (24% of all Perplexity citations come from Reddit), Google's May 6 2026 'Community Perspectives' AI Mode update, BrightEdge benchmarks. Pillar cross-links to /blog/what-is-geo, /blog/ai-search-visibility-hygiene-2026, /blog/reddit-inside-google-ai-mode, /blog/ai-visibility-tools-action-gap, /blog/question-confidence-coach.
- Pillar-grade SEO depth — BlogKeyTakeaways with five skim bullets, BlogSources panel with three external sources + six internal cross-links, 14 topical tags, BlogPosting + BreadcrumbList JSON-LD, OG image, canonical, sitemap + RSS, all auto-wired through the existing blog infra.
- Fixed
Seven user-reported V11 production bugs — billing ladder, dashboard 500s, support card, timestamps, changelog
Same-day fix batch for the bugs users hit after the V11 dashboard launch on May 17. Two pages were crashing with a server error, the billing tab only showed one upgrade option, Mission Control didn't show when the last scan ran, and the Help section's Support card didn't actually do anything on mobile. Root cause for the page crashes was a React Server Components serialization edge case (passing a Lucide icon component as a prop into a 'use client' card — fine in React, breaks in RSC). Fix applied surgically: the two affected cards became server components since they had no client behavior anyway. Then we backfilled the billing tab to show the full upgrade ladder (Starter / Pro / Business / Scale rather than just one card), added last-cron-run timestamps across Mission Control, rewrote the Help Changelog to consume the same curated public copy as the marketing /changelog page, and replaced the dead mailto link with a real /dashboard/help/support page that pre-fills the user's email and plan.
- /dashboard/crawlability and /dashboard/tools both rendered as 500 ERROR 1621801304 for some users. Removed the 'use client' directive on ComingSoonCard and ToolCard since neither had any client-side behavior — fix is one line each, addresses 4+ surfaces that import the same primitives.
- Billing tab on Settings now shows the full upgrade ladder for whatever tier you're on. Free sees Starter+Pro+Business+Scale, Pro sees Business+Scale, Business sees Scale, and so on. Previously the billing tab only ever rendered Pro+Business cards no matter what tier you were on — Starter and Scale upgrades were invisible. Refactored to a data-driven layout pulling directly from LANDING_PLANS.
- Mission Control now shows when each background job last ran. Engine Pulse header reads 'Pulse cron last ran 3h ago', Visibility Trace adds 'Last scan 12m ago · Pulse cron 3h ago', and the AI Referral Truth widget shows 'GSC last synced 8h ago' when applicable. Lets users tell the difference between 'no data yet' and 'data is stale'.
- /dashboard/help/changelog now renders from the SAME curated entries as the public /changelog marketing page (lib/marketing/changelog-data.ts) so the in-dashboard changelog stays plain-English and never drifts into internal release notes.
- /dashboard/help/support is now a real page (was a bare mailto: that silently failed on mobile, in private windows, and inside corporate environments). The new page prefills your email + plan + structured template into the mail composer, with a copy-paste fallback if your browser blocks mail handlers, plus quick links to billing / methodology / glossary / changelog for self-serve common cases.
- Improved
Day-1 dashboard rescue and homepage comparisons strip — solving the empty-state problem
Two improvements that close the gap between signing up and seeing live data. Before today, a new user who added their domain and saved their first questions landed on a Mission Control where every cell read 'Awaiting scan' or 'Trend unlocks after 7 days' — the dashboard looked broken before they ran their first scan. We added a clear next-action banner above the hero for that cohort (Run scan now), and rewrote the cold copy on Engine Pulse and Visibility Trace so empty states say 'click Run scan above to wake this up in 30 seconds' instead of just 'awaiting'. Same day we added a side-by-side comparisons strip to the homepage so visitors landing from cold outbound or paid traffic see /compare/profound, /compare/athena, /compare/otterly above the FAQ — links to existing comparison pages that were previously buried in the footer.
- FirstScanBanner mounts in Mission Control when hasDomain && monitoredQueries > 0 && latestScanAt === null. Rocket mascot, hero copy explaining 'first scan takes about 30 seconds', and a Run scan now button that reuses the existing scan dialog flow.
- Empty-state coaching across the cells. Visibility Trace empty state is now concrete: 'Trend needs 1 more scan — you have 1 of 2 today' rather than the previous static 7-day message that read like a long wait even when the user was one click away from the first data point.
- LandingComparisonsStrip section between Pricing and FAQ. Three featured comparisons (vs Profound, vs Athena, vs Otterly.ai) plus an 'all comparisons' link. Triple win: SEO link equity from the homepage to /compare/{slug} pages, cold-outbound landing context for visitors arriving via 'considering Profound?' DMs, and explicit competitor brand co-occurrence on the homepage to help AI engines place us in the right category.
- Did NOT auto-fire the first scan on the server. Scans cost money and consume rate-limit budget on Free / Starter — letting the user click explicitly keeps consent in their hands and avoids races with concurrent tabs.
- Improved
PostHog same-origin proxy + complete funnel instrumentation
Soft-boost prep work for measuring conversions across the launch period. PostHog was set up but events were being silently dropped for roughly 25-35% of indie SaaS visitors (uBlock Origin, AdGuard, Brave Shields, Safari ITP all match *.i.posthog.com on their default tracker block lists). Built a same-origin reverse proxy at /ingest that routes through next.config.mjs rewrites — ad blockers don't recognise same-origin requests as third-party tracking, so the funnel report stops missing the cohort we care about most. Then wired five missing funnel events at the right call sites so we can see where users drop off in the signup → first scan → trial flow, plus ?ref= attribution tags across every signup CTA on the marketing site for outbound channel attribution.
- Reverse proxy via Next.js rewrites — /ingest/static/* → eu-assets.i.posthog.com/static/*, /ingest/* → eu.i.posthog.com/*. The 'eu.i.posthog.com' string never appears in the bundle, so ad-blocker DOM scanning can't detect the analytics script via static analysis.
- Five funnel events wired into call sites: signup_started fires on /signup mount with source = ?ref= query parameter, first_scan_run fires once per browser profile when the first manual scan completes, why_drawer_opened fires when Query Intelligence panel opens with new query id, trial_started fires on Stripe checkout redirect with ?success=true, and resetAnalytics fires on sign-out + delete account so shared devices don't conflate sessions.
- ?ref= attribution on every signup CTA across the marketing site: landing-hero, landing-pricing-{starter,pro,business,scale}, landing-final-cta, nav, nav-mobile, pricing-page, compare-{slug}, compare-{slug}-final, landing-free-audit. Cold outbound DMs can use ?ref=outbound-twitter-jan26 style tags for per-cohort attribution without extra plumbing.
- Supabase session-refresh middleware now skips /ingest paths via the negative-lookahead matcher. Analytics events fire dozens of times per session — running the auth round-trip on each one wasted real DB load + occasionally raced with Set-Cookie writes on real navigations.
- New
New pricing structure — Starter $39, Scale $899, bumped Pro / Business limits, and a 14-day Pro trial with payment upfront
We rebuilt the dashboard from scratch so the first 30 seconds answer the three questions every user has: Where do I stand? What should I do next? And is the picture I'm seeing actually fresh? Mission Control is now a single bento layout with GEO Score, today's top 3 actions, live engine pulse, question quality, competitor watch, and a 30-day visibility trace — all on one screen. The three different 'Why?' surfaces that used to be scattered across the app are now one Query Intelligence panel with four tabs you can swipe between on mobile. Actions are a real Kanban board with drag-and-drop and a confetti burst when you mark something Done — and every Done action gets a 14-day Outcome Loop measurement attached so we can tell you whether it actually moved the needle. The Insights, Help, and Tools surfaces all got reworked into clear 4-card hubs. Underneath the polish, the same engines and scoring logic that powered the previous dashboard are still doing the work — this release is purely about how the data reaches you.
- Mission Control is a bento grid — your GEO Score gauge, today's top 3 actions, live per-engine pulse with next-scan countdown, question quality donut, competitor watch with deep-dive treemap, and a 30-day visibility trace. Cards stagger in with subtle motion that respects prefers-reduced-motion.
- Click any tracked question and a single Query Intelligence panel opens with four tabs: Confidence (trust score + bottleneck + forecast + suggested action), Competitor (3 ranked flip actions per query, evidence-backed), Citations (aggregated 30-day view of who is being cited and why), and Actions (Playbook filtered to this question). The three older "Why?" surfaces are gone — everything you need to understand a single question is in one place.
- Actions is now a Kanban board — drag cards between To Do, In Progress, Snoozed, and Done. Drop on Done and a confetti burst fires; behind the scenes we schedule a 14-day measurement so we can tell you whether your fix actually moved the GEO score, not just whether you marked it done.
- Insights is a 4-card hub — Outcome Loop, AI Referral Truth, Competitive Intel, Demand Signal — each card shows a live stat and links to its own sub-route. The Competitive Intel sub-route now has a real Share-of-Voice treemap with a per-competitor deep-dive drawer.
- Help & Methodology is a 4-card hub — Methodology, Glossary, Changelog, Support. The Glossary defines every term the product uses; the Methodology page is the existing 'what we measure' matrix moved to its rightful home.
- A Tools page for power users — MCP setup placeholder, embeddable GEO badge, public shareable report, and the comparison-page links. Three of these are roadmap placeholders so the upcoming features are visible, not surprises.
- Sidebar search trigger (⌘K / Ctrl+K) is now visible in the sidebar header — Vercel/Linear pattern. Press it from anywhere to jump to any surface or recent question.
- Every empty state now has a friendly mascot illustration and a concrete next step — gone are the gray 'no data yet' placeholders that made the dashboard feel broken on day one.
- Old URLs keep working — /dashboard/home, /dashboard/reports, /dashboard/citations, /dashboard/settings/data all 308-redirect to their new home with query params and hashes preserved.
- New
New pricing structure — Starter $39, Scale $899, bumped Pro / Business limits, and a 14-day Pro trial with payment upfront
Reshaped the pricing structure from three tiers (Free / Pro / Business) into five (Free / Starter / Pro / Business / Scale). The lowest-friction paid entry point is now $39/month for indie founders who want a real tracking benchmark without the Pro price tag; the highest tier covers high-volume agency and enterprise use. Pro stays at $129 and remains the centre of the product. Business moves from $299 to $349 for new customers; existing Business customers on $299 are grandfathered indefinitely (no auto-upgrade, no billing surprise). Pro / Business / Scale also got real limit bumps to match the new positioning — Pro 50 → 100 saved questions and 15 → 50 monitored slots, Business 150 → 300 saved questions and 40 → 150 monitored, with manual scan caps lifted to match. Multi-domain support, additional AI engines (Claude, Gemini, and a second ChatGPT surface that captures the chat-app view including carousels and local results), and multi-region tracking are on the near roadmap — see the bullets for the honest breakdown of what is live today vs landing soon.
- Starter at $39/month (or $390/year — 17% off via annual) is the new lowest-friction paid entry point. One tracked domain, 30 saved questions, 15 monitored slots, weekly fresh refresh cadence (the scheduler enforces a weekly floor on Starter so this is honest, not aspirational), ChatGPT + Perplexity engines, competitor tracking up to 3, weekly content audits, citation drafts, the Why? drawer (10 analyses/week), and AI Crawlability Monitor. The brand-new wedge between Free (one-shot audit) and Pro (production benchmark).
- Pro at $129/month gets a real volume bump: 100 saved questions (was 50), 50 monitored slots on daily pulse (was 15), 5 weekly deep audits (was 3). Manual scans / engines / Outcome Loop / Why? drawer all unchanged. The new monitored-slot count is the headline — Pro users can now track 3x more questions on the daily-fresh pulse without changing tier.
- Business at $349/month gets the biggest content bump: 300 saved questions (was 150), 150 monitored slots on daily pulse (was 40), 15 manual scans / day (was 10). Real-time email + Slack alerts, Hunter.io email enrichment, unlimited Why? drawer, 25-page weekly content audit all stay. New positioning: team-grade volume + alerts, not 'multi-domain ops' (that is on the next release — see below).
- Multi-domain is on the roadmap, not yet live. Business and Scale today still ship with 1 tracked domain — the domain switcher UI and the multi-domain query model are on the near roadmap. We chose to ship the pricing structure now and the multi-domain UI properly later, rather than ship a half-built switcher today. Pricing copy reflects this clearly ("1 tracked domain today · multi-domain coming soon").
- AI engine coverage today: ChatGPT + Perplexity + Google AI Mode for Pro / Business / Scale; ChatGPT + Perplexity for Starter; Perplexity only for Free. Claude (Business+), Gemini (Pro+), and a second ChatGPT surface that captures what users see in chatgpt.com — including product carousels and local results (Pro+) — are the next planned engine additions, shipping in their own changelog moment after this pricing release.
- Scale at $899/month (or $8990/year) is the new top tier for high-volume teams. 1000 saved questions, 500 monitored slots on daily pulse, 30 manual scans / day, dedicated onboarding call, and a private support channel. Multi-domain (10) and multi-region tracking land in the next release.
- Business legacy customers on the $299 price are grandfathered indefinitely. The subscription stays on $299, the in-product Settings → Billing UI reflects your locked-in price, and the webhook recognises the legacy Stripe Price ID without forcing migration. Only customers signing up new on or after today see the $349 list price.
- The 14-day Pro trial now requires a payment method at signup. Same 14 free days, same full Pro feature access. On day 15 the card is charged $129. If you decide Pro is not for you, downgrade from Settings → Billing before day 14 and you land on Free with all your data intact. The trial sits on Pro because Pro is the production-benchmark tier where commitment ROI matters most; Starter at $39 is direct purchase (no trial friction needed at that price), Business / Scale skip trial because they expect a sales conversation.
- Smart cadence under the hood: priority queries refresh daily on Pro / Business / Scale, stable queries decay to ~3-4 days to keep costs predictable. Starter enforces a weekly floor regardless of volatility. Average monthly compute cost stays inside the published margin model.
- Annual plans on every paid tier are billed as 10 months for the year — two months free, ≈17% effective discount versus paying monthly. One invoice instead of twelve.
- Pricing page is now a 5-card layout (mobile: vertical stack, desktop: 5 columns) so each tier reads as a peer. Pro keeps the "Most popular" anchor; Starter and Scale are positioned as the natural entry and exit points of the ladder.
- Improved
Cleaner detection, friendlier setup, fewer dead ends — a sweep of small fixes that add up
Spent the day going through real data from the last week of signups and closing the rough edges we could see in production — the places where someone landed, got slightly confused or slightly misread, and bounced. None of these on their own is a headline; together they are a noticeably smoother first hour with the product. Three groups of fixes shipped at once: how accurately we read AI answers (so the signal stops a few false positives at the door), how clearly we warn you when something about your setup is likely to limit results, and how we guide you from the targeting questionnaire to your first set of questions.
- More accurate "not mentioned" reads. We now catch a wider range of phrasing where the AI engine explicitly says it has no information about your brand ("X is not mentioned in the search results," "no mention of X was found," "X is absent from the cited sources" etc.). Previously a few of these slipped through and counted as a mention because your brand name appeared inside the disclaimer sentence itself. The detection is now more conservative in exactly the right way — fewer false positives without losing real recommendations. Existing affected rows were also corrected.
- Cleaner brand display names. A small bug was eating the first three letters of brand names that started with "The" (themeforest.net used to render as "Meforest", theneo.io as "Neo," etc.). Fixed for new scans and corrected retroactively on the affected rows. If your brand name starts with "The," it now displays correctly throughout the product.
- Demo / staging URL warning at setup. When you type a URL into "Add domain" that looks like a demo, theme template, staging environment, or free-tier hosting URL, you now get an upfront advisory before submit — "This looks like a demo / staging / template URL, most users track their main brand domain instead." Advisory only, never blocks you. The intent is to catch the case where someone signs up with a side project URL by accident and then wonders why the data feels off.
- Non-Latin / non-English homepage advisory. If your domain uses an internationalised hostname (IDN punycode) or a country TLD strongly associated with non-English content (.ru, .by, .ua, .jp, .kr, etc.), we now flag it upfront with an honest note that our analysis is English-tuned and results may be limited. If your homepage is actually in English, the warning is harmless and you can continue.
- Optional "what kind of business is this?" picker. The Add domain dialog now has an optional category dropdown (B2B SaaS, dev tool, AI product, agency, e-commerce, local service, news/media, other). It is not required — pick "Other" or skip entirely if you do not feel like committing. When a category is selected, weak-fit categories (local service, news/media) get a soft heads-up that AI engines tend to cite aggregators in those spaces rather than the source.
- Welcome banner after the targeting questionnaire. When you finish the 90-second targeting questionnaire, the Questions page now opens with a green welcome banner pointing right at your auto-generated topic suggestions — one click per chip turns each into a tracked question. Closes the "I saved my answers, where are my questions?" gap that some Free-tier users were hitting.
- Refreshed onboarding emails. The day-3 nudge for people who set up but have not scanned yet was rewritten to lead with the 90-second targeting questionnaire as the fastest path to a first scan, instead of asking you to write your own questions from scratch. Same cadence (day 1 + day 3 maximum, then we stop), better copy.
- Why all of these landed at once: a forensic look at the last week of real signups showed 4 out of 6 production users were stuck in one of four dead-end states — V2 questionnaire filled but no questions, no domain yet, wizard incomplete, or paying customer with garbage queries. Each fix above closes a specific dead-end without changing how the product fundamentally works. The detection layer is tighter, the setup layer is clearer, and the bridge from "I answered targeting questions" to "here are my first questions" is now a single explicit chip click.
- Improved
Chips as the first step — turn your targeting answers into tracked questions in one click
After the targeting questionnaire shipped (week before), some users — Free tier especially — ended up on a Questions page that was technically populated with their topic suggestions but felt empty visually. The chips were below an upgrade explainer; the upgrade explainer felt like a wall. Reorganised the empty state so the suggested topics are the primary visual element above everything else, and added a persistent compact chip strip that stays above the questions table even after the first chip is added — so you can keep one-clicking the rest of your topics in without scrolling around. Small change in code, big change in how the page reads.
- Suggested topic chips are now the headline of an empty Questions page — not buried under explainer copy. When you finish the questionnaire and land here for the first time, you see your topics as a visible row of clickable chips, each becoming a tracked question on click.
- Persistent compact chip strip above the questions table. Once you add your first question, the remaining unused topics stay accessible as a slim row at the top so you can keep adding without losing context.
- "Best {topic}" wrapper no longer duplicates "for X" — if your topic already ended with "for SaaS" or "for marketing teams," we no longer slap "for SaaS" onto it again. Small wording fix; the chip-to-question step now reads naturally on every topic.
- These edits ship the V2 targeting questionnaire as a complete loop: 90 seconds of answers → topics auto-extracted → one click per chip → tracked questions ready to scan.
- New
Free AI search visibility toolkit — four tools, eight guides, no signup
Shipped a full free toolkit for the technical part of AI search visibility — the four hygiene levers (llms.txt, robots.txt for AI bots, JSON-LD, Reddit footprint) plus per-engine playbooks for ChatGPT, Perplexity, and Google AI Mode. Everything runs in the browser. No signup, no email gate. The intent is to make sure the technical work you can do yourself is actually free; our paid product is for measurement, action drafting, and outcome attribution — the parts a static file can't do.
- Four free tools. A llms.txt generator (with editable section labels + auto-save in your browser), a robots.txt builder covering 18 AI crawlers with three preset stances ("allow all" / "block training only" / "block all AI"), a JSON-LD generator for the four schemas worth shipping first (Organization, SoftwareApplication, Article, FAQPage), and the existing free 60-second AI audit at /grader.
- Three Setup guides. llms.txt, robots.txt for AI bots, and JSON-LD — each with copy-paste-ready output, framework setup notes (Next.js / WordPress / Webflow / static), common mistakes, and a verification workflow.
- Three Per-Engine playbooks. How to get cited by ChatGPT (the GPTBot vs OAI-SearchBot split, the Bing backbone), how to rank in Perplexity (Sonar retrieves ~10 pages and cites 3–4, why Reddit is 24% of citations per Tinuiti), and Google AI Mode after the May 6 2026 Reddit + Expert Advice update.
- Two strategy guides. The Reddit citation playbook (Reddit is the single highest-leverage AI citation source in 2026 — 24% of Perplexity citations, ~17.5% Google AI Mode UGC) and the measurement guide that all the others point back to (Share of Voice, AI citations, the 14-day Outcome Loop).
- Subscribe to new guides via RSS at /guides/feed.xml if you'd rather follow them in a reader, same way the blog has worked. Adding a guide ships into the hub, the feed, and the search-engine surfaces in one step on our side.
- Improved
Metric names now match the rest of the category — so a buyer evaluating three tools reads the same vocabulary in all three
AI search visibility is a young enough category that until recently every vendor used slightly different language for the same numbers. That fragmentation cost users the most — someone reading Tinuiti research, scrolling Otterly's homepage, and then opening our dashboard had to mentally translate three names for the same metric before they could compare anything. The category has now converged on a shared vocabulary, and we have updated the labels in our product to match. Same math underneath, same database, same API — only the words on screen changed. The point is not to look like the others; the point is that you can now read across the category without a translation layer.
- "Share of Voice" (sometimes "Share of Model") is now our primary label for the percentage of tracked prompts where AI cites your brand. It is what the rest of the category publishes and what most reports you will read in 2026 cite. We previously called this "Mention Rate" — same number, less recognisable name.
- "AI citation" is now our primary label for an individual brand appearance inside an AI engine's answer. It matches the language of the Tinuiti Q1 2026 AI Citation Trends Report, BrightEdge's weekly insights, and Google's own framing in AI Mode.
- "GEO Score" stays — it is unique to us. Where a first-time reader might expect a "visibility score" label they have seen elsewhere, we now parenthesise it as "(AI Visibility Score)" so the mapping is obvious without diluting the brand.
- "Generative Engine Optimization (GEO)" and "Answer Engine Optimization (AEO)" are now cross-referenced wherever we previously used only one. The two acronyms are used interchangeably across the category; favouring one would just make us harder to find for the other.
- No data migration, no API breakage, no dashboard math change. Existing scans, history, alerts, and exports all carry through untouched. If you build on top of our data, the column names did not change — only the headings, tooltips, marketing copy, docs, blog, llms.txt, RSS, JSON-LD, and email templates that humans read.
- Improved
Agencies and AI-infrastructure products now land in the right category from the first scan
Two niches were quietly getting the wrong category — and therefore the wrong competitors and the wrong questions. A web / app development agency that mentioned "frontend" or "deployment" anywhere on its homepage was being read as a deployment platform — competing with Vercel and Netlify, which makes no sense for a services business with case studies and "free consultation" buttons. An AI gateway / LLM router product (the kind that routes ChatGPT, Claude, and Gemini through one endpoint with caching and failover) was being read as a generic developer tool — listed alongside Jenkins, CircleCI, and no-code platforms, which has no relevance to its real market. Both niches now have stronger detection signals (the structural "agency" markers — case studies, our work, completed projects, free consultation, years of experience — and the AI-infra signals — gateway, router, prompt cache, model failover, one endpoint for) and dedicated question packs that actually fit the buyer.
- Agencies are now classified as agencies regardless of what services they sell. A web design / development agency, a branding studio, a fractional-executive firm, an M&A advisory — all get the right category, the right competitors, and a question pack written for buyers shopping agencies (which agency for our v1 build, which branding studio for a Series A rebrand, which fractional CTO services for a small team).
- AI-infrastructure products now route to the AI-tooling category. AI gateways, LLM routers, prompt-cache layers, model-failover proxies, vector databases, RAG frameworks — they are explicitly distinguished from generic CI/CD and dev productivity tools. A buyer asking "best AI gateway for routing ChatGPT/Claude/Gemini" no longer gets recommended Jenkins.
- Fixed a quiet bug where category words in a brand's page title would block their own first scan. If your homepage title was "Acme Agency" or "Acme Gateway", we used to treat "Agency" / "Gateway" as part of your brand identity — and reject every category question that contained that word, leaving the user with zero suggestions. Now those words are correctly recognised as kategorial vocabulary instead.
- Concrete before / after — a web design agency that used to get "Vercel / Netlify / AWS / Cloudflare" listed as competitors now gets real other agencies (DBB Software, Vention, LeewayHertz, Clay-style design studios). An AI gateway product that used to get "Jenkins / CircleCI / Trello / Quickbase" now gets Portkey / Bifrost / Vercel AI Gateway / Cloudflare AI Gateway / LiteLLM — its actual competitive landscape.
- Why this matters: every misroute meant a user's first scan came back with competitors from the wrong universe. Outreach research built on that data was off-base by definition. Both niches now produce competitive intel that's actionable from the first run.
- New
Real competitor names, not source URLs — separate "who you compete with" from "where the answers come from"
Until now, the "competitors" data behind every scan came from one list: the URL hosts AI engines cited as their sources. That mixed two things you actually need to see separately. Some of those hosts are real competitors (your direct rivals' websites), but most are review aggregators (G2, Capterra), forums (Reddit, Hacker News), and academic libraries — places where competitors are discussed, not the competitors themselves. From now on we run a quick second pass on every answer that picks out the actual product / service / agency names recommended in the prose ("HubSpot", "NewsGuard", "Pentagram", "Lounge Lizard") — no matter whether their domain showed up in the citation list or not. Two panels going forward: the brand list (who actually competes with you), and the citation list (where to get cited next).
- Every scan now produces a clean "named competitors" list extracted directly from what the AI engine recommended in its answer, not from the source URLs underneath. Works on the first scan, with no prior list to seed from.
- Citation sources stay separate — they're the strategic targets for citation work (review sites, forums, library guides, journalism platforms, university curricula). You see both data products in their own panels, no more mixing.
- When an AI engine's answer is framework / methodology only (CRAAP test, evaluation criteria, etc.) instead of a product list, the brand panel correctly returns zero — that's itself a useful signal: the category may not yet have an AI-recognised product space, which is opportunity rather than competition.
- Cost impact: a fraction of a cent per scan. We never gate this behind a tier — every plan, including Free, gets brand-level competitor data on the first scan.
- Improved
Sharper "what does this domain actually do?" read — better category fit, more diverse questions, fewer wasted scans
A round of feedback from new signups (and a particularly sharp follow-up from one founder) made it clear that two parts of our onboarding were quietly hurting first-scan quality: how we read the website, and how we wrote the questions. A site that was clearly an editorial / fact-checking product was being read as a creator-economy tool. A site with one stray newsletter mention was being read as an email platform. And once we did pick a category, the three suggested questions tended to all start with the same opening — "Which X tools…" / "Which X tools…" / "Which X tools…" — which AI engines answered almost identically, so a Pro user running daily pulse scans was effectively paying for the same scan three times. We rewrote both halves of the pipeline this week. The "read the site" half now reads more pages on launch when available, weighs the language model's holistic read above brittle keyword matches, and recognises agencies and editorial / media-literacy products as first-class categories instead of "miscellaneous." The "write the questions" half now produces five genuinely different buyer angles — Best… / Compare… / Tools to… / How to… / Alternatives to… — instead of stylistic duplicates. The result: a tubelens-style domain that previously got three near-identical questions in the wrong category now gets a set that starts with "Best media-literacy tools for evaluating YouTube credibility," moves through "Compare media-literacy tools vs popularity-based ranking," and ends with "Tools to fact-check long-form video transcripts." Same scan budget, three completely different signals.
- Multi-page read on launch — when the site exposes /about, /pricing, /manifesto, /features (etc.), we now feed those into the category read so a one-line homepage tagline no longer dominates. Sites whose homepage is a metaphor and whose deeper pages reveal the real product now get classified from the deeper pages.
- Tighter keyword match — common single words like "email", "creator", "audience", "newsletter", "youtube" no longer hijack the category by themselves. The match now requires the keyword in real product context ("email platform", "youtube creator", "newsletter platform") so a stray mention in pricing copy or audience description can't flip the read.
- Smarter language-model trust — when the language model has a clear holistic read of the page, we now defer to it instead of letting a single noisy keyword override. The override only kicks in when the model is genuinely uncertain or when there is strong, multi-keyword evidence pointing elsewhere.
- New first-class categories — agencies (web/app dev, branding, M&A advisory, fractional executives), editorial / media-literacy / fact-checking tools, and several adjacent niches that used to fall into "miscellaneous" now get their own buyer-question packs. Same engine, more accurate first scans.
- Question diversity is now a hard rule — every set must use a different opening structure (Best / Compare / Tools to / How to / Find / Alternatives), and two questions that test the same buyer intent with different wording are flagged as duplicates regardless of phrasing. Pro pulse plans (up to 15 daily questions) benefit the most: questions fan out across angles instead of piling up on one.
- Category anchors now mix forms — buyer-language verbs ("fact-check", "detect misinformation", "verify sources"), pain-point phrases ("alternative ranking", "beyond view counts"), and noun categories ("media literacy tools") are all valid anchors. Lets one set use five different framings of the same category without breaking the scan.
- Why this matters end-to-end: a misroute used to ship three near-identical questions in the wrong category and burn a scan on irrelevant data. With both halves rewritten, products that previously got "creator-tool" or "B2B SaaS" boilerplate (when they were actually editorial, agency, or vertical SaaS) now get questions in their actual category, with their actual buyer language, from the first run.
- Improved
Lost on the dashboard? Not anymore — clearer "add a domain" path, harder-to-skip setup
Feedback from new signups was consistent: people who skip the setup wizard land on an empty dashboard and have to hunt for where to add a domain — it was three clicks deep under Settings. Some users gave up. We fixed three things at once: a permanent "add domain" banner on every dashboard page until a domain exists, a prominent empty-state card on the home view above the (still visible) score gauge, and a confirmation dialog when someone clicks the X on the setup wizard so an accidental dismissal doesn't leave them stranded.
- Persistent "Add your domain to start tracking" banner mounts above page content on every dashboard route — Home, Questions, Actions, Insights, Settings — until a domain is added. Non-dismissible by design: without a domain the dashboard does nothing useful, so we don't hide the only available next step.
- Mission Control home now shows a prominent empty-state card with a one-click "Add domain" button above the (preserved) score gauge and trend cards. The placeholder values stay visible so users see what's coming, but the next action is unmissable.
- New shared "Add domain" dialog: type a URL, the brand name auto-fills (you can override), one click and you're tracked. No more digging through Settings → Domains.
- Setup wizard X icon now opens a confirmation: "Skip setup? You can resume any time from the Add domain CTA on your dashboard. But the wizard gets you to your first scan in about 2 minutes." Accidental clicks on the close button no longer lose the wizard.
- Why this matters: skipped onboarding was a quiet leak in the funnel. The fix above turns "where do I even start?" into a single-button moment, on every page, until the first domain is added.
- Improved
Sharper ICP fit — agencies welcome, news sites and non-English homepages get an honest "not a fit" message
A burst of mixed traffic over the weekend showed what happens when our classifier tries too hard: a Russian-language clinic was asked "which healthtech tools handle multi-specialty clinic scheduling", a charity got "What does Oneday do?", a crypto news portal got generic B2B SaaS analytics questions. Embarrassing for us, useless for them. We fixed the misroutes and — more importantly — clarified who GEO Tracker is built for, so the right people get a great first run and the wrong-fit visitors are told that early instead of getting nonsense.
- Agencies, dev shops, branding studios, M&A advisors, and fractional executive firms are now first-class ICP. If you sell services to other businesses (web/app dev, branding, consulting, advisory) you compete on AI buyer-intent queries the same way SaaS does — and the classifier now routes you to the right category instead of treating you like a SaaS deployment platform.
- Non-English homepages are now caught up front. Russian / Chinese / Arabic / Hebrew / Hindi sites get a clear "we only support English homepages today" message instead of being silently routed through an English-only pipeline that would produce wrong-language, wrong-category questions.
- News sites, blogs, and content portals are detected before any scan runs. The classifier looks for publisher signals (news / magazine / portal hostnames, "covering", "the latest on", article streams) and skips question generation entirely — no more "best B2B analytics tool" suggestions on a crypto news site.
- End-user buyers (clinics treating patients, retail e-shops, charities, personal résumés) get an honest "GEO Tracker is built for products and service-vendors, not end-users" message instead of nonsense suggestions. Saves their time and ours.
- Hero copy + pricing page now state the ICP plainly: built for SaaS founders, product teams, devtools, AI products, DTC brands — and B2B service vendors. The disclaimer above pricing reads "Built for SaaS, devtools, AI products, and DTC brands. Not a fit for news sites or content portals." No more guessing.
- When in doubt between "agency vendor" and "end-user", we lean toward agency — agencies are a huge valid segment that we want to serve well, even at the cost of occasionally letting a borderline case through. Better that than blocking real customers.
- New
Real-time Business alerts — GEO Score drops + new competitor emergence (email + Slack)
The "alert_emails: true on Business but no actual alerts" honesty gap is closed. A daily cron at 06:00 UTC walks every Business domain and emails when (1) your composite GEO Score drops 10+ points week-over-week, or (2) a new competitor brand appears in 3+ of your monitored queries (last 14 days) and was absent in the prior 30 days. Each event announced exactly once — no daily spam — via a unique constraint on (user_id, kind, fingerprint). Slack mirror via Incoming Webhook ships in the same release.
- GEO drop alert fires when latest score - 7-days-ago score ≤ -10 pts. Comparison snapshot is found within ±2 days of the target date for tolerance against missing snapshots.
- New competitor alert fires when a hostname surfaces in ≥ 3 distinct monitored queries in the last 14 days AND was absent in the prior 30 days. Fingerprint is `${domain_id}:${competitor_hostname}` so each emergence is announced once.
- Email templates ship rich Block Kit + React Email shells: stat box (delta), "what to do next", deep links to Insights or Competitors view.
- Slack mirror: paste an Incoming Webhook URL in Settings → Alerts. Server validates HTTPS + hooks.slack.com host (anti-SSRF — Business users cannot point our cron at internal IPs). "Send test alert" button verifies the webhook before relying on it.
- Business tier only. Idempotency via `alert_event_log` table. Settings → Alerts page now shows live triggers + working webhook input instead of "coming next" placeholders.
- New
CSV + JSON export of scans, citations, and GEO history
Pro and Business tiers can now export their data. Three datasets, two formats (CSV for Excel/Sheets, JSON for analyst pipelines): scans (every result row with engine, mention type, quality, citations), citations (every URL that cited you with actionability badge), and GEO history (full time series). Last 365 days, hard-cap 10 000 rows per file. Free sees an upsell with the same trial CTA.
- Endpoint: `GET /api/export/{scans|citations|geo-history}?format=csv|json[&days=N]`
- Filename pattern: `geotracker-{dataset}-YYYY-MM-DD.{csv|json}` with Cache-Control: no-store.
- Tier gate: `TIER_LIMITS[tier].export_enabled` — Free false, Pro+Business true. Server-side enforced + UI-mirrored in Settings → Billing → Data export.
- Auth runs before dataset validation so we never leak dataset names to unauthenticated requests.
- New
14-day Pro free trial — honest auto-conversion, no abuse window
Pro monthly checkout now offers a 14-day free trial to first-time subscribers. Card collected up front so the subscription auto-converts at $129/mo when the trial ends — but Stripe only charges once, after a clear D12 reminder ("2 days left"). If the card fails at trial end we cancel cleanly via `trial_settings.end_behavior.missing_payment_method = "cancel"` — never silently bill. Re-subscribers don't get a second trial; we check for any prior subscription record before offering it.
- Detected first-timers via the `subscriptions` table — no second trial on a re-subscribe.
- Email sequence: D7 ("halfway through, here's what to try"), D12 ("2 days left, charge date X"), D14 ("welcome to Pro, here's your receipt"). Idempotency via Stripe subscription metadata so duplicate cron runs never double-send.
- Pricing UI: $169 strikethrough → $129 + green "Launch price · first 100 customers" pill. Most Popular ribbon on Pro card. Pure marketing display — Stripe still charges $129.
- D1 / D3 onboarding activation emails for all signups (regardless of trial): D1 "Run your first scan" if not yet activated, D3 either "Your first insights are ready" or a cold tour. Idempotency via new `onboarding_email_log` table.
- New
Citation Source Intelligence — paste-ready Reddit comments, email pitches, GitHub PRs, podcast invites
Every AI visibility tool we audited stops at "you are missing from this thread / listicle / repo." None of them draft what to send next. The new Citations tab does. For every cited URL where your brand is missing, we classify whether the venue is open (live thread, recent listicle, accepting PRs) or closed (archived, locked, defunct, login-required) and — when it is open — generate a tailored draft you can paste, with etiquette guards baked in. When it is closed, we suggest the replacement strategy instead of pretending. Frozen sources skip the LLM entirely so you do not pay for drafts to locked threads.
- Four-state actionability per cited URL — Live (act now) / Limited (degraded venue, draft with warning) / Frozen (archived / locked / defunct / Wikipedia-class informational ref — no draft, replacement strategy instead) / Manual (logged-in identity required, e.g. Twitter or YouTube — open venue with hint). Reddit JSON, HN auto-lock window, HTTP 4xx, hostname blocklist all feed into the classifier.
- Five draft generators tuned per platform: Reddit comment (value-first, disclosure baked in, subreddit-specific etiquette for r/SEO / r/SaaS / r/devops / r/programming + 7 others), Hacker News reply (technical density, no superlatives, 60-150 words), email pitch to listicle / blog / comparison / news authors (subject + soft ask + one specific data point + mailto pre-fill when we auto-detect the address), GitHub PR for awesome-list inclusion (title + body + the exact markdown line in a code block), podcast guest pitch (subject + 2-3 episode angles + one-line bio).
- Etiquette guards as hard rules, not vibes: brand-mention required, affiliation disclosure auto-checked, length capped per platform, "hop on a call" / "do you have 15 minutes" / "circling back" / superlatives flagged before you can copy.
- Frozen replacements with one-click URLs: archived Reddit thread → search r/<subreddit> for fresh threads, locked HN story → submit your own Show HN, defunct podcast feed → search Listen Notes for active shows in the same beat, Wikipedia citation → "build canonical resource on your own domain" guidance. Frozen ≠ done.
- Closed-loop outcome tracking: every action you mark posted / sent / submitted is re-evaluated 14 days later. The action card then shows "Drove +5 citations across 3 queries (high confidence)" or "No measurable change after 14 days (medium confidence)" so you know whether the work moved the needle.
- Author email auto-detect across mailto: links, obfuscated patterns ("jane [at] domain [dot] com"), plain-text "Contact:" / "Email:" labels, and footer-region scans — typically catches author addresses on personal blogs and content sites; corporate sites with contact forms fall through to a Hunter.io domain search button.
- Honest about limits: every generated draft carries a "Review before sending" banner. Source types we have not built helpers for yet (forum_thread, docs_page outreach, Twitter / X) say so explicitly instead of producing low-quality drafts.
- Free: read-only top-3 citation sources from your latest scan. Pro: 5 action drafts per week + 4-state classification on full citation history. Business: 15 drafts per week + outcome tracking surfaced on every done action.
- New
AI Crawlability Monitor — see if AI bots can actually read your site
Most "I'm invisible in AI search" problems start with a misconfigured robots.txt or a stray X-Robots-Tag header — not with content. The new Crawlability tab checks your domain against 15 AI crawlers (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-Web, PerplexityBot, Perplexity-User, Google-Extended, Googlebot, Applebot-Extended, Bytespider, Meta-ExternalAgent, CCBot, cohere-ai, Diffbot), grades the result on a 0–100 score, and gives you a copy-paste fix snippet for every blocked bot. Pure deterministic — zero LLM tokens.
- RFC 9309 robots.txt parser detects per-bot disallows, wildcard blocks, partial path blocks, and excessive Crawl-delay. Longest-match wins, Allow beats Disallow on tie, `*` and `$` wildcards supported.
- Site-wide checks: `X-Robots-Tag: noindex` headers, `<meta name="robots" content="noindex">` in your HTML, missing Sitemap directive, robots.txt unreachable (5xx / timeout), missing `/llms.txt` (informational — emerging standard).
- Search bots vs training bots are scored differently. Blocking GPTBot stops OpenAI training but does not affect ChatGPT live answers — that's a warning. Blocking OAI-SearchBot does kill ChatGPT citations — that's critical. Same logic across all vendors.
- Click any bot to open the fix drawer: markdown explanation, evidence quoted from your robots.txt, copy-paste snippet ready for `app/robots.ts` (Next.js), `public/robots.txt` (Astro / Vercel / Cloudflare), or your CDN config. Direct link to vendor docs included.
- Free: 1 manual audit per week, top 3 critical issues read-only. Pro: 5 audits per day + weekly auto-audit + full 16-bot matrix + fix snippets. Business: 10 audits per day + weekly auto-audit + email alerts.
- New
Citation excerpt search — find the exact AI answer that mentioned a term
A search box on the Reports tab runs full-text search across every AI answer your domains received in the last 90 days. Find every place a competitor was cited, every answer that mentioned a feature, every losing scan that talked about pricing — without scrolling through hundreds of rows. Backed by a Postgres tsvector + GIN index so the answer comes back in well under a second even on Business-tier scan volumes.
- Search box with Google-style operators: type a single word, wrap a phrase in quotes ("fast deployment"), or exclude a term with a leading dash (vercel -netlify).
- Filters for engine (ChatGPT / Perplexity / Google AI Mode) and mention status (you mentioned / not mentioned). Stack them with the search query to find, e.g., "every Perplexity answer about pricing where you weren't mentioned".
- Results group by day and by scan run — a single "Run scan" click on N monitored queries collapses to one card showing the time range, engine pills, and total matches. Latest run is auto-expanded; older runs stay collapsed so you focus on what just happened.
- Two-color highlighting for the full answer view: bright yellow for terms you searched (Cmd+F convention) and bright cyan for your own brand (colorblind-safe pair). When you expand "Show full answer" the scroll jumps to the first match instead of dumping you at the top of a 6 000-character response.
- Cursor-based pagination — initial 20 hits per query, "Load 20 more" appends older scans without re-running the search. Hard cap 200 hits per session prompts you to narrow the search instead of letting the page balloon.
- Brand citations are searchable too: a Postgres generated column expands `cited_domains` and `competitor_mentions` into the FTS index with `.` replaced by space, so typing `jellyfish` finds answers that only cited `jellyfish.co` in their references — same brand match the Competitors page shows. Zero AI calls, zero new infra.
- New
Competitor tracking — see who AI cites instead of you
Until now you could see whether AI answered with your brand, but not who it answered with when it didn’t. The new Competitors tab on every paid plan auto-discovers brands AI engines cite alongside or instead of yours, ranks them by share of voice, and pinpoints the exact queries where a competitor was cited and you weren’t. Zero extra LLM cost — we reuse the citation data every scan already produces.
- Auto-discovery from every scan. After each scan we read the engine-native citation arrays (Perplexity references, Google AI Mode references, ChatGPT cited sources) and persist competitor hostnames into a dedicated table. The Top-N by total mentions gets tracked automatically; the rest go into an Auto-discovered list you can promote.
- Share of voice donut. Last 30 days, your mentions vs. tracked competitors’ mentions across every monitored query and every engine — You + top 5 + "Other tracked", percentages always sum to 100.
- "Where you lose" feed. The exact queries where a tracked competitor was cited and you were not, sorted by losing-scan frequency. Each row lists the competitors that beat you and how many times.
- Pin / unpin and manual add. Promote any auto-discovered competitor to the tracked list, demote one that isn’t a real rival, or add a competitor manually before they show up in citations — we’ll start counting from your next scan.
- Strict noise control. We filter ~80 generic publishing / aggregator domains (Wikipedia, Reddit, Forbes, G2, listicle blogs), drop publishing subdomains (blog., docs., learn., news., partners., …), validate TLDs to skip pseudo-domains the regex extractor picks up (next.js, node.js), and cap untracked rows at 30 per domain to stop the long-tail flood.
- Free plan: read-only top 3 cited brands from your latest scan, no historical tracking. Pro: 5 tracked competitors. Business: 15.
- Improved
Suggested queries — grounded in your actual pages, not just your homepage
Until now the suggest engine read only your homepage to propose tracked queries. For products with deep pricing, docs, or feature pages that meant generic, vague suggestions. We now feed the suggest engine the same multi-page audit data that powers Page health — so the queries it proposes reflect what your product actually does.
- When a domain has stored page audits (about, pricing, docs, features), the suggest engine reads the title + meta description from each one and folds it into the domain understanding profile. The LLM gets a richer ground truth and confabulates less.
- Quality badges on each suggested query show provenance — “grounded in your pages” vs “category preset fallback” — so you can tell at a glance which suggestions are tailored to you and which are generic category baselines.
- A provenance warning appears when the suggest engine had to fall back to category presets (e.g. homepage scrape failed, no page audits yet). The dashboard tells you the exact reason and links to a re-run instead of silently shipping low-quality queries.
- Retry hardening: transient OpenAI errors during suggest generation now retry with exponential backoff before failing, so a hiccup in the API does not kill your onboarding flow or your “Refresh ideas” click.
- New
Google AI Mode — now scanned on Pro and Business plans
When a buyer asks a category question in Google’s AI Mode (the “Režim AI” tab on google.com), the answer sometimes mentions you, sometimes points to competitors. We now track that surface alongside ChatGPT and Perplexity — so the third place where AI-led buying decisions happen is no longer a blind spot. With Google AI Mode reaching ~1.5 billion users per month, this is the largest discovery surface in your mix.
- Pro and Business plans now include the Google AI Mode engine in every scan (manual, weekly cron, on-demand). Visibility, Share of Voice, and Top-3 metrics aggregate all three engines into one GEO Score.
- Sources cited inside the AI Mode answer (top-level references and inline links inside the response) flow into the same competitor / cited-domain extraction as Perplexity and ChatGPT — so when Google’s AI points buyers to a roundup or a competitor, you see it.
- GEO Score weights rebalanced for Q2 2026 reality — ChatGPT 0.45 · Google AI Mode 0.30 · Perplexity 0.25. Google AI Mode lifts from 0.20 (placeholder) to 0.30 because it is the highest-reach discovery surface for B2B SaaS buyers in 2026.
- Backed by a battle-tested SERP API (DataForSEO) — no fragile in-house scraping, no proxy management, no captcha cat-and-mouse with Google. Reliable enough to ship in your weekly cron without monitoring noise.
- AI Mode is a chatbot, so it almost always returns an answer; the rare empty case is recorded as a successful empty scan (mention = false) rather than a failure, so your batch never breaks.
- Fully absorbed into the subscription price; no surprise per-call charges. Average ~$0.45 of provider cost per Pro user per month at typical usage.
- Improved
“What changed” feed — less noise, no more contradictory alerts
The visibility timeline on Overview was flapping when you ran several scans in a row, surfacing both “Visibility declined” and “Visibility recovering” unread side-by-side. Four polish passes turn it into a clean audit log of meaningful movement.
- Contradictory trend pairs no longer co-exist as unread. When a new scan triggers “Visibility declined”, any unread “Visibility recovering” from the previous 24 hours is automatically dismissed (and vice-versa) — your inbox always reflects the current direction, not back-and-forth swings.
- Sample-aware thresholds. With fewer than 10 tracked queries a single result swing represents 10–20 percentage points and used to trigger noisy trend alerts. The threshold now scales with sample size: 30pp for <10 results, 25pp / 20pp for 10–19, original 20pp / 15pp for 20+.
- Stale unread (>14 days) collapses into an “Older unread” section that you can expand on demand. Forgetting to mark a 3-week-old alert as read no longer crowds out fresh signal.
- Clearer roles between feeds: “What changed” is now your audit log of movements (what + why), while concrete next steps live exclusively in the Actions tab. Each timeline entry has a “View action plan →” link that jumps you straight to the Actions view.
- Improved
Smarter content audit — sharper errors, multi-language sites, faster re-runs
Four polish passes on the page audit pipeline based on real testing across vercel.com, netlify.com, and a few sites behind Cloudflare. Same engine, sharper feedback, fewer wasted fetches.
- Specific guidance for failed fetches: 403 explains the WAF / Cloudflare angle, 429 talks about rate limits, 401 calls out auth-walled content, 404 / 410 flags dead links in your sitemap, 5xx pins the time of audit so you can grep your logs. Generic “Page fetch failed” is gone.
- Empty-body insight rewritten for client-rendered SPAs: instead of a vague hint we recommend SSR (Next.js App Router, Astro static, Remix loader) or a <noscript> fallback so non-Google AI engines can still read your page.
- Multi-language sites: the audit now reads <xhtml:link rel="alternate" hreflang="…"> entries from your sitemap. Foundation for filtering translation siblings (e.g. keep /en/pricing, drop /de/pricing) so one site does not eat all 10 audit slots with translations.
- Sitemap URL caching: once we successfully discover your sitemap, we remember the URL and use it on every subsequent audit. Re-runs are now ~6× faster (live test on netlify.com: 1070 ms → 166 ms) and the weekly cron uses noticeably less compute.
- Sitemap probe also covers /sitemap-0.xml (Astro convention) and tries both bare and www. host variants — finds sitemaps on Netlify-style sites that previously fell through to “1 page audited”.
- Improved
Dashboard reorganized — Visibility / Page health / Actions
Until now the Overview dashboard was one long scroll: hero, metrics, weekly actions, Discovery Readiness, more metrics, the trend chart. We split it into three focused tabs so you find what you need without scrolling past everything else.
- A new tab switcher under the GEO Score hero divides the dashboard into Visibility (metrics, trend chart, recent scans, engine breakdown), Page health (AI Discovery Readiness), and Actions (your weekly to-do list).
- The active tab is reflected in the URL (e.g. /dashboard?view=actions) so you can bookmark a specific view, share a deep link with a teammate, and use the browser back button as expected.
- A single “Re-run audit” button on the hero refreshes both Page health and the multi-page Content Audit in one pass — no more juggling two triggers that did almost the same thing.
- Page health and Content Audit now share one scrape pass, so the homepage row in the audit list and the 4-D Discovery Readiness scores can never disagree.
- New
Bulk JSON-LD generator — fix ten pages in one paste
Generating schema for one page at a time was fine when you had two missing schemas. With ten, it was a chore. Bulk mode batches everything.
- Tick the checkboxes next to any audit rows you want to fix and the bulk action bar appears with a “Generate JSON-LD (N)” button.
- The dialog produces one snippet per selected page, each typed for its URL pattern (Product for /pricing, AboutPage for /about, BlogPosting for /blog/*, TechArticle for /docs/*, Service for /enterprise…) and filled in with that page’s real title, description, OG image and canonical URL.
- “Copy all” bundles every snippet with an HTML comment naming the page — paste into a single doc, split per file, ship.
- Pages we refuse to generate (missing description, missing title) are listed separately in amber with the exact reason — same honest-blank-over-misleading-schema rule we apply elsewhere.
- New
Readiness trend per page — see your fixes pay off
Every audit run now appends a snapshot to history, so you can watch a page’s readiness score climb as you ship fixes.
- Click any page in the Content Audit list to open the detail drawer — the new Readiness trend section shows a mini line chart of that page’s score over time.
- Once a page has at least two snapshots the chart appears with the change highlighted (e.g. “+25 pts (50 → 75)”). Before that, you see a friendly “re-run audit to start building history” message.
- History is append-only and survives audit re-runs. The current snapshot in the audit list keeps using the replace-pattern so the UI stays fast; the trend chart pulls from a separate history table on demand.
- New
Onboarding boost — homepage audit kicks in immediately after your first scan
New users used to see their first Content Audit and Page health scores on Monday. That gap was painful. Now we run a homepage audit in the background as soon as your first scan completes.
- When your first AI scan finishes, we kick off a homepage scrape on a background task (Next.js “after” API — no extra latency on your scan flow).
- Page health and the homepage row in Content Audit are populated within ~10 seconds of finishing the scan.
- You can still wait for Monday’s weekly cron, or hit “Re-run audit” to refresh on demand — but the first impression is no longer empty.
- Improved
Domains list links straight into Page health
Page-level audits used to be reachable only from the Discovery Readiness widget on Overview. Now the Domains list deep-links into them too.
- On /dashboard/domains, the hostname column is now an internal link to the Page health audit; the external “open the live site” link sits next to it as an icon.
- Each row also has a dedicated “Page health” button in the actions column for unambiguous discovery.
- New
Multi-page content audit — every important page on your site, weekly
Until now we only graded your homepage. Most AI engines do not just cite your homepage — they cite pricing, customer stories, docs, and feature pages. The new content audit tracks all of those automatically.
- Every Monday we scan up to 10 pages on Pro and 25 pages on Business — picked from your sitemap by importance, not by accident. Pricing, customers, about, enterprise, integrations, changelog, and key docs come first.
- Each page gets a 0–100 readiness score, ranked worst-first so you see the actionable issues at the top. Pages that are already great show with a green “OK” badge so you have proof of what is working.
- Click any page to open the detail drawer with all insights, the metadata we scraped (title, description, OG, H1, lang, robots), and which schema types are detected.
- Need a result faster than Monday? Hit “Run now” to refresh on demand — same engine, instant results.
- New
Copy-ready JSON-LD generator — paste once, get cited
When the audit finds a page without schema, you now get a working JSON-LD snippet generated from your real page content. No more staring at schema.org docs trying to figure out the right type.
- We pick the right schema type from the URL pattern: pricing → Product, /about → AboutPage + Organization, /blog/post → BlogPosting, /docs → TechArticle, /enterprise → Service.
- The snippet uses your real metadata — title, description, OG image, canonical URL, brand name — not generic boilerplate. Paste it into <head> and you are done.
- Switch between alternative types (e.g. Service vs Organization for a sales page) with one click; each type comes with a one-line explanation of why it suits the page.
- Honest by default: when key metadata is missing (no description, no title), the generator refuses and tells you what to fix instead of producing a misleading schema.
- New
What to do this week — concrete actions pulled from your scans
Your dashboard now tells you exactly what to fix this week, with a one-line first step you can act on today. No more generic SEO advice — every recommendation is grounded in your latest AI answers.
- A new “What to do this week” panel on Overview shows up to three prioritized actions based on your most recent scans.
- The highest-impact action is also pinned next to your GEO Score, so you always know the single thing to fix first.
- Each action shows where it came from — which query, which engine, when — so you can trust the recommendation before you act.
- Mark actions as done and they stop nagging you. Your progress persists between sessions.
- Improved
Sharper competitor signals — less noise, more truth
When AI engines cite legal advisories, news wires, or academic sources alongside your competitors, those used to clutter your “who you are competing against” view. Now they are filtered out automatically.
- Competitor chips no longer surface law firms, regulatory blogs, news outlets, or generic encyclopedias as if they were rivals.
- The “sharpen your why-us” action now picks the dominant rival in the answer (the one cited first and most often), not a random competitor.
- Listicle outreach targets only real publications that actually rank for your category, so your pitches land with the right editors.
- Fixed
Copy-ready FAQ schema that never lies for you
When you click “Copy JSON-LD,” what you paste into your site has to be true. We tightened how the FAQ answer is built so you only ever publish content that genuinely matches your brand.
- If the AI response actually mentions your brand in a complete sentence, that sentence becomes your FAQ answer — ready to paste into <head>.
- If the response is generic or only cites competitors, you now get a clean editable placeholder instead of misleading text. Better an honest blank than a confident lie.
- Mid-sentence cuts, section headings (“Step 1: …”), and citation noise no longer leak into your answer text.
- Improved
More reliable scheduled monitoring
Automated monitoring now follows a clearer schedule model across saved queries.
- Daily pulse and weekly deep checks are handled separately.
- Recurring tracking is easier to configure.
- Plan limits are shown more directly when you set up monitoring.
- Improved
Clearer plan structure across the app
Free, Pro, and Business use the same labels in pricing, checkout, and the product.
- Tier names stay consistent before and after you subscribe.
- Plan changes are easier to read in account and billing screens.
- Improved
Improved recurring query tracking
Each query supports off, daily pulse, or weekly deep within your plan limits.
- Pulse slots and weekly deep quota are counted separately.
- Schedule types are labeled plainly in the query list.
- New
GEO Tracker is live
Domains, stored queries, scans, and dashboard views now sit in one continuous workflow.
- Add a domain, save queries, run scans, and review results from the dashboard.
- Pro and Business monitor ChatGPT and Perplexity; Free runs Perplexity checks within weekly limits.
- Pro and Business add GEO Score, answer snippets, and AI suggested questions.