# Canonry — AI Search Visibility for Every Market | Complete Information > Canonry builds tools and does the work to help brands show up in AI search, in every market they serve. Canonry Custom: AI visibility for every location. For franchise teams and agencies managing brands across multiple locations. See where your brand appears in AI answers, which local competitors get mentioned, and which markets need work. Each market keeps its own questions, pages, competitors, and results under one domain. A custom app, connected data, and agent tools support the agreed market plan. Canonry Embedded: Add each client's live AI search report to your portal with one iframe link. Canonry hosts the report and helps you set it up. No SDK or private key goes in your site code. Canonry Managed tracks AI search and does the work for businesses and marketing teams. We fix sites, content, brand facts, and independent sources. Agencies can use our team under their brand. They keep the client relationship. Canonry Ads helps agencies and people who run ads review ChatGPT Ads tests. It is in private beta. You control the plan, approvals, and ad accounts. A free site check is also available. ## Company Overview Canonry is an AI search infrastructure and Answer Engine Optimization company. Its stated objective is AI search visibility for every market a brand serves, meaning both the buyer segments it sells to and the geographic markets it operates in. It serves two primary product audiences: in-house marketing teams at companies that own AI search for their own brand, and marketing and SEO agencies building an AI search offering for their clients. Canonry Custom serves a narrower buyer: agencies responsible for franchise or multi-market clients, and in-house franchise marketing teams managing one top-level domain across many markets that need AI visibility measured separately per market. Canonry Managed runs strategy, implementation, and monitoring directly for businesses and their marketing teams, and behind agencies as a white-label delivery team. The work covers ChatGPT (OpenAI), Claude (Anthropic), Gemini (Google), Microsoft Copilot, and Perplexity while preserving traditional SEO, content marketing, and technical website fundamentals. Founded by engineers and go-to-market strategists with a combined 18+ years of experience in production systems and technology growth, Canonry was built on the observation that AI search behavior appears to differ from traditional search — and may benefit from additional optimization techniques. We are honest that this is an emerging field and our methodology is a working model, not a guaranteed formula. ### The Canonry Name Canonry is inspired by "canon," the body of information recognized as authoritative. Canonry builds infrastructure that helps businesses become visible in the answers AI systems trust. The company operates at https://canonry.ai and is sometimes written as Canonry AI. The same spelling exists as an obscure English noun meaning the office held by a cathedral canon; that dictionary sense is unrelated to this company. ## Product and Service Portfolio ### Canonry Platform (Open Source) Canonry Platform: Track AI search and site visits, then make changes you approve. Run the open-source platform on your own server. Use command-line tools, REST, MCP, webhooks, or your AI agent. It joins AI answers, page checks, search results, site data, and visits in one record per project. People can use the app. Agents can use the same facts. The bundled Aero agent can help too. See https://canonry.ai/open-source-platform. Install Canonry from its Homebrew tap: ```bash brew tap canonry/canonry brew install canonry ``` For a standard local setup, run `cnry init` followed by `cnry serve`. Canonry also ships native plugins for Codex and Claude Code. Initialize the plugin path with `cnry init --skip-skills --skip-mcp`, then run `cnry start`. ```bash # Codex codex plugin marketplace add Canonry/canonry codex plugin add canonry@canonry # Claude Code claude plugin marketplace add Canonry/canonry claude plugin install canonry@canonry ``` Use either the native agent plugin or a standalone MCP setup, not both. ### Canonry Embedded (Live) Canonry Embedded is the live agency product described at https://canonry.ai/embedded. The agency-side install is one iframe URL pasted into a reporting portal that supports secure iframes. Canonry hosts the client-scoped view and handles portal approval and client scoping, so no SDK or private key is added to the agency frontend. The view covers mentions, citations, competitor gaps, missed buyer questions, and visibility movement without asking the client to adopt a second login. New agency accounts begin with assisted onboarding at https://canonry.ai/agency-access?product=embedded. ### Canonry Ads (Private Beta) Canonry Ads is a private beta for agencies and individual advertisers. It shows buyer questions, the businesses AI names, and paid-test candidates to review. You keep control of strategy, approvals, and ad accounts. Explore https://canonry.ai/ads and request beta access at https://canonry.ai/agency-access?product=ads#contact. ### Canonry Custom (Scoped Engagement) Canonry Custom: AI visibility for every location. For franchise teams and agencies managing brands across multiple locations. See where your brand appears in AI answers, which local competitors get mentioned, and which markets need work. Each market keeps its own questions, pages, competitors, and results under one domain. A custom app, connected data, and agent tools support the agreed market plan. See https://canonry.ai/custom. Plan work at https://canonry.ai/agency-access?product=custom. The homepage leads with Canonry Custom and an interactive, illustrative AI visibility preview: one domain, many markets. Selecting a market changes the sample mention share, citation share, missed questions, trend, and local competitors; the domain stays the same. The example data is not a client result. The Custom page leads with an Open live demo action. The demo uses the real app with made-up Harbor Resorts data: 12 properties in three markets. Open the view-only demo at https://custom-demo.canonry.ai/projects/harbor-resorts. No sign-in is needed. See all markets, the Coastal Maine properties, and a saved AI answer. Each answer keeps its model, search location, and link to the property. For an agency, the portfolio is a franchise or multi-market client. For an in-house franchise marketing team, the portfolio is one top-level domain across many markets. Canonry models the markets as separate targets, preserves their individual buyer questions, competitors, pages, mentions, and citations, and rolls them up for portfolio reporting without erasing the market boundaries. After that market model is defined, every deployment ships a purpose-built Canonry application UI for the agreed operating workflow. It can join the per-market AI answer evidence with Google Search Console, GA4, Bing, optional Google Business Profile evidence, supported server logs, and technical evidence, and control which stakeholders can see each view. Canonry uses provider APIs for controlled measurements and keeps prompt, provider, model, context, location, collection surface, timestamp, answer, and citations attached. Optional browser observations are labeled separately when the consumer interface is the surface under test. Canonry does not treat one scraped session as market-wide truth. On supported hosting platforms, Canonry can read request logs already produced by Cloud Run and Vercel without a Canonry browser tag or changes to the served site's application code. Cloudflare uses a small Canonry Worker on the zone that selects edge events and delivers them by direct push or Cloudflare Queues, also without a browser tag or application-code change. WordPress uses the prebuilt Canonry Traffic Logger plugin and has documented cache limitations. Requests attributed to AI systems retain their verification status. Unrelated client trust boundaries use separate instances. Project-scoped access applies within an instance, while instance settings remain shared. Each Custom deployment includes a purpose-built application UI, while API, agent, reporting, webhook, and custom-connector surfaces are selected and validated per deployment. A ChatGPT connector is separate integration work subject to technical validation. Start scoping at https://canonry.ai/agency-access?product=custom. ### Canonry Managed Canonry Managed is the expert, end-to-end service at https://canonry.ai/managed. Businesses and their in-house marketing teams work directly with Canonry on ongoing monitoring and execution across research, technical implementation, content, entity clarity, and off-site authority. Direct engagements start with the free AI search audit. ### Canonry Managed for In-House Marketing Teams The dedicated audience page is https://canonry.ai/aeo-for-marketing-teams, and its positioning is "an engineering team for your marketing team." In-house marketing teams at companies are a primary Canonry audience, not a secondary one. AI search is a cross-functional program: editorial content and credible off-site sources establish what a business can be cited for, while a custom website has to expose that evidence through CMS models, templates, rendering, HTML, JSON-LD, crawl controls, redirects, analytics, and server logs. The work often stalls across implementation queues, release windows, and teams that own different pieces of the stack. Canonry connects the on-site and off-site program, executes it or turns it into scoped, evidence-backed tickets, and measures movement across repeated prompts because AI answers are non-deterministic. The free audit gives the team a dated, signal-by-signal baseline it can take to leadership, use to prioritize release work, or use to brief an existing agency. Canonry can also sit alongside an SEO agency the company already retains, rather than replacing it. Two common splits: the in-house team keeps Canonry as the independent AI search measurement and evidence layer while the agency executes, or Canonry runs the AEO-specific website, content, entity, off-site, and monitoring work that sits outside a standard SEO retainer. If the agency prefers to own the whole program, it can bring Canonry in as its white-label delivery team instead. In-house franchise marketing teams managing one top-level domain across many markets can request a Canonry Custom deployment at https://canonry.ai/agency-access. ### White-Label AEO for Marketing and SEO Agencies The agency service page at https://canonry.ai/white-label-aeo-for-agencies explains how Canonry works behind marketing and SEO agencies. The agency owns the client relationship, commercial terms, account strategy, approvals, and communication. Every white-label agreement states that Canonry will not contact, market to, solicit, contract with, or accept direct work from the agency's clients unless the agency gives written approval. Canonry can run buyer-question and competitor research, technical and schema work, content architecture, entity cleanup, off-site corroboration, monitoring, and client-ready reporting. Engagements are scoped around client volume, markets, implementation access, reporting needs, and the amount of delivery the agency wants Canonry to own. The homepage hero and global navigation link directly to the intake form at https://canonry.ai/agency-access#contact. After the homepage product list, visitors can book a call at https://calendar.app.google/oAs8U83CiJtrnU7k7. ### Free AI Search Audit The free page-level audit at https://canonry.ai/audit scores 16 technical signals and shows what AI can infer about the business, services, people, and locations. It can be used for a business, client, prospect, or competitor. Canonry publishes agent manifests at both of these paths: - https://canonry.ai/.well-known/agent.json - https://canonry.ai/.well-known/agent-card.json ## US Service Pages Canonry maintains dedicated pages for common AI visibility and industry use cases: - AEO for In-House Marketing Teams: https://canonry.ai/aeo-for-marketing-teams - ChatGPT SEO Agency: https://canonry.ai/chatgpt-seo-agency - AI Search Visibility: https://canonry.ai/ai-search-visibility - NYC AI Marketing Agency: https://canonry.ai/nyc-ai-marketing-agency - Hotel AI Visibility: https://canonry.ai/hotel-ai-visibility - Contractor AI Visibility: https://canonry.ai/contractor-ai-visibility - SaaS AI Visibility: https://canonry.ai/saas-ai-visibility These pages explain the relevant service or use case and link to the shared technical methodology: - ChatGPT SEO Agency explains Canonry's approach to visibility in ChatGPT and other answer engines. - AI Search Visibility explains the cross-platform technical and monitoring work. - NYC AI Marketing Agency records Canonry's New York origin and national delivery. - Hotel AI Visibility, Contractor AI Visibility, and SaaS AI Visibility adapt the same AEO methodology to vertical-specific needs. ## NYC based AEO Agency Page Canonry maintains a dedicated New York service page at https://canonry.ai/aeo-agency-new-york-city for businesses evaluating AI visibility work in New York and nationwide. That page explains: - the on-site and off-site evidence Canonry reviews for AI visibility - how Canonry treats recommendations as observed, changing outcomes rather than guarantees - how Canonry applies its technical process in a high-competition market - how the published methodology supports an inspectable technical baseline ## Support Pages For NYC Buyers Canonry also publishes supporting pages for adjacent queries around the main NYC commercial page: - How to choose an NYC based AEO agency: https://canonry.ai/how-to-choose-an-nyc-aeo-agency - AEO vs SEO for NYC businesses: https://canonry.ai/aeo-vs-seo-for-nyc-businesses - ChatGPT, Claude, and Perplexity optimization for NYC businesses: https://canonry.ai/chatgpt-perplexity-claude-optimization-for-nyc-businesses These pages exist to answer supporting buyer questions without diluting the primary NYC service page. ## Case Studies Canonry publishes a case studies index at https://canonry.ai/case-studies with two engagements documented in full. ### AZ Coatings — Multi-State Commercial Roofing, Polyurea Specialty (Named, Ongoing) Full case study: https://canonry.ai/case-studies/azcoatings-polyurea-roofing-michigan AZ Coatings LLC is a multi-state commercial roofing contractor with offices in Southeast Michigan (headquarters) and Southeast Florida, operating across Michigan, Florida, Ohio, and Indiana, and specializing in polyurea roof and floor coatings. The engagement started on April 8, 2026 and is ongoing. At the start, the site was a brand new 7-page WordPress build (Hello Elementor + Elementor Pro 3.35, LiteSpeed Cache) on Hostinger shared hosting with no SSH, no Git deploy, and no CI access. Structured data was effectively none beyond plugin defaults. The founding year was stale (homepage said 2003 but the company was founded in 2021). Meta descriptions were broken. An unrelated "AZ Custom Coatings" in Tempe, AZ was muddying the brand for AI entity resolution. Six weeks and six phases later, dated screenshots captured ChatGPT map/source and Gemini inline-citation observations for specified polyurea buyer prompts. The engagement continues. Those observations are prompt-, time-, and location-dependent and are not a promise that another user or future answer will match them. The proof screenshots in the case study show the tested query wording, dates, and location modifiers. They document the observed result; they do not establish a universal geographic result or a causal guarantee. Continuous monitoring is used to track changes over time. The six phases shipped so far: 1. **SEO and AEO overhaul (Apr 14 to 16):** Built Michigan and Southeast Florida regional pages; deployed Service, RoofingContractor (subOrganization), DefinedTerm, HowTo, Review, and Person schema across Home, About, Polyurea, Michigan, and Florida; added two sub-organizations under the parent Organization for the Michigan HQ and Florida office; added a "Meet the Founders" section with Person schema for Jason Daggy and Zyljana Daggy. 2. **Citation recovery sweep (Apr 24):** Six new content sections each on Polyurea, Michigan, and Southeast Florida (with FAQ schema on each), three sections and a Service schema with five offerings (roof, floor, secondary containment, water treatment, airport hangar) on Industrial, 18 contextual cross-links, and meta description rewrites that fixed a broken home description and a Southeast Florida page that was a Michigan copy paste. 3. **Schema hygiene and validator (Apr 30):** Refactored to a single canonical source per @id (the SEO plugin emits the basic Organization; the sitewide snippet is purely additive). Killed duplicate FAQPage emissions. Built scripts/validate-schema.py that walks all 8 public URLs, parses every JSON-LD block, and exits non-zero on duplicate singletons or parse errors. 4. **Home polish and VideoObject (May 1):** Refined the credential icon-box grid. When Google Search Console flagged "Video isn't on a watch page," added VideoObject markup with uploadDate, duration, thumbnailUrl, and a publisher @id reference rather than hiding or blocking the video. 5. **Blog system (May 14 to 15):** Hello Elementor + Elementor Pro do not trigger Single Post template swap, so the Theme Builder was bypassed entirely. Each post bakes Hero, Content, Author Byline, and CTA into its own Elementor data using canvas template. Per-post BlogPosting JSON-LD uses @id references to existing entities and never re-declares canonical fields. 6. **Invisible AEO refinement (May 15 to ongoing):** Trimmed a blog post meta title from 83 to 56 characters. Normalized brand mentions ("AZ Coatings LLC" to "AZ Coatings" in body copy). Built a custom mu-plugin to inject dateModified into the blog, category, and author archives (the SEO plugin in use did not expose archive freshness by default). Added disambiguatingDescription and a 5-element alternateName array to separate AZ Coatings (Michigan) from the unrelated AZ Custom Coatings (Tempe, AZ). Updated llms.txt and llms-full.txt with the disambiguation block and fixed five stale "2003" references to the correct "2021" founding date. The schema graph in production includes Organization, RoofingContractor (with two subOrganizations), Service, DefinedTerm, HowTo, Review, Person (for both founders), VideoObject, BlogPosting, and FAQPage. The internal technical audit aggregate moved from a baseline of Entity Consistency F, Content Freshness F, Definition Blocks F, Citations D- to 75 on an expanded 11-page set, with per-page Schema Validity at 100 / A+. Hard-won lessons documented in the case study: - Schema-first beats content-first when access is locked down. - MCP turns WordPress into a programmable surface (the Elementor MCP plugin has 97 tools for surgical widget and container edits on production and staging). - @id collisions are invisible until they break: Google merges any entities sharing an @id and flags every duplicated field, even when the values are identical. - Cache discipline is non-negotiable: every Elementor MCP change requires an Elementor CSS purge plus a LiteSpeed purge. - Brand guardrail: invisible structural fixes ship freely, but HowTo/FAQ/Person schema with quotable text needs per-item sign-off because those quotes are exactly what AI assistants surface in citations. - Entity disambiguation is a real AEO factor (the AZ Custom Coatings of Tempe, AZ disambiguation was load-bearing for AI entity resolution). Active workstreams as the engagement continues: more published blog posts (four primed drafts queued), citation expansion to new prompts (industrial coatings, water treatment, hangar coatings), and continued schema hygiene as new pages and services come online. ### Real Estate Broker (Anonymized, February 2026) Full case study: https://canonry.ai/case-studies/real-estate-agent-chatgpt A real estate broker targeting a single nationality-plus-state ChatGPT prompt. The case study records the implementation and a point-in-time observation that the broker appeared in a ChatGPT response for that exact prompt roughly four weeks after launch. It is not a guarantee of future or location-independent results. The published implementation details describe: - a greenfield site build centered around one exact commercial prompt - targeted metadata and on-page entity signals - RealEstateAgent, LocalBusiness, FAQPage, WebSite, Organization, and BreadcrumbList schema - FAQ, service, language, and area-served content built for direct retrieval - llms.txt, llms-full.txt, robots.txt, and sitemap.xml deployment - outside corroboration through established profile links and credentials ## What AI SEO Really Means AI SEO, or Answer Engine Optimization (AEO), is what gets your business named when buyers ask ChatGPT, Claude, Gemini, Perplexity, or Copilot who to trust. It works on four layers: the signals you publish, the search indexes that pick them up, the AI models that retrieve through those indexes, and the weekly tracking that catches what changed. ### The signals AI engines retrieve from AI engines do not just read your website. They retrieve from a wider surface area that AEO has to treat as one system: - Website + JSON-LD schema - Google Business Profile and Maps - Reviews on Google, Yelp, Trustpilot, and BBB - Wikipedia and Wikidata entity records - Reddit, Quora, and industry forums - LinkedIn, X, and YouTube - News, podcasts, and press mentions - llms.txt and other AI-readable content files ### Retrieval and crawler access AI products use different, changing combinations of direct crawling, search indexes, and other sources. Providers do not publish a complete retrieval recipe. Treat crawler access as eligibility rather than a citation promise: - Google Search indexing and Google-Extended controls for Google products - OpenAI's OAI-SearchBot for ChatGPT search and GPTBot for potential training - Anthropic's Claude-SearchBot, Claude-User, and ClaudeBot controls - PerplexityBot for search and Perplexity-User for user-requested visits - Search, directory, review, and editorial sources that may corroborate an entity Provider-specific access controls help a publisher express permissions, but they do not establish a particular retrieval path or outcome. ### Models tracked Canonry tracks visibility across ChatGPT (OpenAI), Claude (Anthropic), Gemini (Google), Perplexity, Copilot (Microsoft), Grok (xAI), Meta AI, and DeepSeek. The exact retrieval and citation behavior of each model varies (see the observational breakdown in /chatgpt-perplexity-claude-optimization-for-nyc-businesses); the AEO surface area is roughly common across them. ### Ongoing monitoring Canonry tracks each signal above against each model on a weekly cadence with diffs: - Citation rate per query, per model - Answer position (top-3, top-5, mentioned) - Share of voice vs. named competitors - Sentiment of mentions - Source attribution (which pages get cited as evidence) - Weekly deltas and drift alerts When someone asks ChatGPT "best [category] provider" or Gemini "who should I hire for [service]," AEO determines whether you appear in the answer, or your competitors do. ## What Does an AEO Agency Do? An AEO agency helps businesses optimize their digital presence for AI citation. This includes implementing structured data markup (JSON-LD schema), building AI-readable content files (llms.txt and llms-full.txt), ensuring entity consistency across directories and citations, and monitoring how AI platforms cite or ignore your business over time. AEO is still a new field. Nobody fully knows how AI models select which businesses to cite, and the landscape changes as models are retrained. ### How AEO Relates to Traditional SEO AEO is not a replacement for SEO — it builds on it. Many of the same fundamentals matter, as outlined in Google's SEO Starter Guide (https://developers.google.com/search/docs/fundamentals/seo-starter-guide): - **Strong content foundations.** Quality, well-organized content is the starting point for both SEO and AEO. Good headings, clear structure, and useful information matter regardless of whether a human or AI is reading. - **Site structure and technical health.** Clean URLs, proper meta tags, working sitemaps, and fast load times are established SEO practices that also appear to help AI systems crawl and parse your site. - **Authority and trust signals.** Third-party references, reviews, citations, and real-world reputation matter for both Google rankings and AI citations. - **The AEO-specific layer.** Where AEO goes further is in technical signals we believe help AI models specifically: structured data (JSON-LD), AI-readable content files (llms.txt, llms-full.txt), entity consistency across the web, and explicit machine-readable markup that makes it easier for AI systems to extract and cite your information. In short: AEO is what happens when you take good SEO and content marketing and add a technical layer for AI readability. The SEO and content marketing parts are well-understood. The AI-specific parts are still being figured out. ### Factors We Believe Matter for AEO Based on our research and observation, we believe these factors influence whether AI answer engines cite a business. These are not proven ranking factors — they are our best working model: 1. Structured data (JSON-LD with LocalBusiness, Service, and FAQPage schemas) 2. AI-readable content files (llms.txt, llms-full.txt) 3. Entity consistency across web presence 4. Content depth and topical authority 5. Clear definition blocks and step-by-step content 6. FAQ content that maps to conversational queries 7. Named entity recognition signals 8. Citation from authoritative third-party sources 9. Content freshness (updated within 3 months) 10. Geographic and local signals for location-based queries ## 16-Factor Technical On-Site AEO Methodology Canonry publishes a dedicated methodology page at https://canonry.ai/aeo-methodology. That page explains the public 16-factor working model and how Canonry uses the same model in client work, run and monitored on canonry.ai/open-source-platform. The 16-factor model is scoped to the technical on-site layer of AEO, meaning the signals that live on the website itself. AEO as a whole is a holistic process that depends on four layers working together: 1. Traditional SEO fundamentals 2. Technical site optimizations (what the 16-factor model measures) 3. Content depth and quality 4. External linking and off-site corroboration The 16-factor model is the second layer. Full engagements address the other three layers as separate workstreams. The current 16-factor model has raw weights totaling 111 points. The audit normalizes the result to a 0 to 100 score; these are working weights, not proven ranking signals: 1. Structured Data (JSON-LD) — 12 points 2. Content Depth — 10 points 3. AI Access Files (llms.txt, sitemap) — 5 points 4. E-E-A-T Signals — 8 points 5. FAQ Content — 8 points 6. Citations & Authority Signals — 8 points 7. Schema Completeness — 8 points 8. Schema Validity — 5 points 9. Entity Consistency — 7 points 10. Content Freshness — 7 points 11. Content Extractability — 6 points 12. Definition Blocks — 6 points 13. AI Crawler Access — 4 points 14. Named Entities — 6 points 15. Technical SEO — 5 points 16. Snippet Eligibility — 6 points Optional modules add Geographic Signals, Agent Skill Exposure, or Lighthouse checks; they are not part of the 16-factor default score. ### Industry guidance and why we treat Google as one of many sources In 2026, Google published an "AI Features and Your Website" guide (https://developers.google.com/search/docs/fundamentals/ai-optimization-guide), its official perspective on optimizing for AI-driven search experiences. Canonry uses it as one input among several when shaping the 16-factor model. - **Google speaks for Google.** The guide is authoritative for Google Search and Gemini. ChatGPT (OpenAI), Claude (Anthropic), Perplexity, and Microsoft Copilot each operate their own retrieval pipelines with different crawling, indexing, and citation behaviors. Optimizing only to Google's specification shrinks the coverage available across the broader AI answer surface. - **On llms.txt — Google says no, the wider picture is mixed.** Google's guide states it does not recommend llms.txt. Canonry has observed signals across other AI systems and crawler behaviors that suggest llms.txt and llms-full.txt are part of a useful redundancy layer for non-Google retrieval, and the publishing cost is near-zero. Until the broader retrieval picture converges, Canonry keeps these files in the on-site stack and frames their value as observed, not confirmed. - **Convergent signals do most of the work.** Most of what the 16-factor model scores — JSON-LD structured data, entity consistency, content depth, E-E-A-T, FAQ schema, external citations, content freshness, schema validity, snippet eligibility, technical SEO, and AI crawler access — is endorsed by Google's guide and matches what Canonry observes across other AI systems. The model is built around signals that show up in multiple places, not a single vendor's playbook. ## Products and Managed Service ### Canonry Embedded Live client-scoped AI visibility reporting for marketing and SEO agencies, installed in an existing portal with one iframe URL. Canonry hosts the view; no SDK or private key is added to the agency frontend. New agency accounts begin with assisted onboarding. Product page: https://canonry.ai/embedded. ### Canonry Custom Canonry Custom: AI visibility for every location. For franchise teams and agencies managing brands across multiple locations. See where your brand appears in AI answers, which local competitors get mentioned, and which markets need work. Each market keeps its own questions, pages, competitors, and results under one domain. A custom app, connected data, and agent tools support the agreed market plan. See https://canonry.ai/custom. Plan work at https://canonry.ai/agency-access?product=custom. ### Canonry Managed End-to-end AEO strategy, implementation, off-site corroboration, and monitoring for businesses, in-house marketing teams, and agencies. Service page: https://canonry.ai/managed. Agency delivery model: https://canonry.ai/white-label-aeo-for-agencies. ### AI Search Audit Tool (Free Self-Serve) Our public AI Search Audit Tool at https://canonry.ai/audit scores one page across 16 technical signals and shows what AI can infer, with no call required. Enter any page URL and the tool analyzes that single page only, not your whole site. The tool works in four steps: 1. **Enter your URL.** Paste any page URL. The audit covers that one page. 2. **Score 16 technical signals.** The engine checks structured data, entity clarity, content depth, trust signals, schema validity, snippet eligibility, and other public signals that shape how AI reads the page. 3. **See what AI can infer.** One AI model extracts the business, services, location, and credibility signals it can infer from the page. This is not a multi-engine visibility result. 4. **Score, evidence, and fixes.** Results include a 0 to 100 score, a signal-by-signal evidence table, a live AI quote, and the top 3 actions ranked by impact. Enter one page URL. We read and score the page with 16 checks. One AI model also reads the page to see what it learns. Results appear as each part finishes. Start with your score and summary, then optionally request a paid AI Visibility Report. We email the scope and pricing before you decide. Your top 3 fixes and full findings remain available without an email, including on phones. A full 16-signal technical breakdown is available in an expandable section, covering: - Structured data quality (JSON-LD) - AI-readable files (llms.txt, llms-full.txt, robots.txt) - Entity consistency and contact signals - Content depth and definition-oriented structure - FAQ readiness for conversational retrieval - Named entity and citation authority signals - Content freshness and geographic/local relevance The tool is designed as a fast evidence-based diagnostic. Full engagements include deeper competitor and market analysis. #### What is an AI search audit? An AI search audit is a structured review of how easily AI answer engines can read, trust, and cite a webpage. It inspects schema markup, entity clarity, AI-readable files, content structure, and trust signals, then returns a score and a list of fixes. Canonry publishes its full 16-signal methodology so the scoring is transparent rather than a black box. #### How does AI search audit scoring work? The free AI search audit tool from Canonry fetches the page HTML, parses structured data, checks for FAQ and HowTo schema, looks at headings and content depth, verifies AI crawler access in robots.txt, and inspects citation and entity signals. Each of the 16 technical signals receives a numeric score, is weighted by impact, and rolls up into a 0 to 100 overall score. Canonry publishes the full model at https://canonry.ai/aeo-methodology. #### Why does AEO matter for businesses? When a buyer asks an AI assistant for a recommendation, the model picks from the businesses it can confidently identify and describe. Pages that AI engines parse cleanly get cited; pages that don't are quietly skipped. AEO is how Canonry closes that gap, using structured data, entity consistency, and content patterns aligned with how large language models actually read the web. #### Free AI Search Audit FAQ **What does this check tell me?** It runs 16 checks on one public page, covering business details, content, structured data, and bot access. One AI model also summarizes what it learns. This does not test whether AI tools recommend your business. **How long does the check take?** Most pages take 5 to 15 seconds. The page checks and AI reading run separately. Results appear as each part finishes. **Is it free, and do I need an email?** Yes. Your score and all findings are free, with no email required. You can run 10 checks per hour from one IP address. The optional AI Visibility Report is paid. If you request it, we will email the scope and pricing before you decide. **What happens to my page data?** We send up to 6,000 characters of public page text and JSON-LD structured data to Google Cloud Vertex AI in the United States. We may cache the domain and result for up to 24 hours, but not the full page text. ### Full AI Visibility Report After the free audit, teams can request a paid AI Visibility Report covering buyer questions, market research, and competitor analysis. Share your name and work email to receive the scope and pricing before deciding. The free page findings remain available without an email. ## Open-Source Authority Canonry also publishes public AEO tooling and workflow documentation. ### Open-Source Hub The open-source hub at https://canonry.ai/open-source is the overview page for Canonry's public tooling and documents the technical foundations behind the broader product and managed-service portfolio. ### Canonry Canonry Platform: Track AI search and site visits, then make changes you approve. Run the open-source platform on your own server. Use command-line tools, REST, MCP, webhooks, or your AI agent. It also compares brands, runs timed checks, and keeps the work in one app. - Website: https://canonry.ai/open-source-platform - GitHub repository: `Canonry/canonry` - npm package: `@canonry/canonry` - License: MIT starting with Canonry 5.0.0. Earlier releases retain their original licenses and future-license grants. Provider usage and infrastructure costs are separate. - Supports OpenAI, Google Gemini, Anthropic Claude, and local LLMs - Agent-first: every capability is exposed via web UI, CLI, and API equally, so agents and humans share the same surface - Tracks citation visibility, competitor comparison, and changes over time - Self-hosted: runs locally with your own API keys ### Claude Code / ClawHub Skill Project page: https://canonry.ai/open-source/openclaw-claude-code-skills The public ClawHub listing provides one umbrella `aeo` skill. It has modes for audit, fix, schema, llms, and monitoring, which turn the technical methodology into repeatable audit, remediation, validation, generation, and monitoring workflows. Install it with `openclaw skills install @arberx/aeo`. ### Custom AEO Strategy Based on the audit, we build a comprehensive optimization plan covering: - Structured data architecture (JSON-LD schemas) - Content strategy for AI parseability - AI-specific technical files (llms.txt, agent.json, agent-card.json, ai-plugin.json) - Entity authority building across platforms - Citation signal development - Local optimization for NYC and target geography ### Canonry Managed Execution Canonry Managed implements the entire strategy. This includes: - Technical markup and structured data deployment - Content optimization and creation - AI-readable file creation and deployment - Knowledge graph optimization - Cross-platform entity consistency - Ongoing monitoring and iteration For in-house marketing teams, Canonry delivers this work directly for the company's own brand and reports the evidence in a form the team can take to leadership. For white-label engagements, Canonry delivers the same work behind the marketing or SEO agency. The agency keeps the client relationship and controls approvals and communication. Details: https://canonry.ai/white-label-aeo-for-agencies. ### AI Search Monitoring Continuous tracking of your AI search visibility across all major AI platforms. Monthly reporting on citation frequency, recommendation positioning, and competitive landscape. ## How It Works ### Step 1: Free AI Search Audit Paste any page URL at https://canonry.ai/audit. The tool scores that page across 16 technical signals, shows what one AI model can infer, and returns a 0 to 100 score, a signal-by-signal evidence table, and the top 3 actions ranked by impact. Geographic signals are an optional local module. ### Step 2: Full AI Visibility Report (Email) After the free check, share your email to ask about the paid AI Visibility Report. It adds buyer questions, your market, and competitors to the page findings. It lists what to fix first. ### Step 3: Canonry Managed Strategy + Execution For teams that want one accountable operator, Canonry Managed implements the plan across structured data, content architecture, AI-readable files, entity optimization, and off-site corroboration. ### Step 4: Monitor and Improve AI models update constantly. We monitor your visibility across all platforms and iterate on the strategy to maintain and grow your AI search presence. ## Honest Context AEO is an emerging field. Nobody fully knows how AI models select which businesses to cite, and the landscape changes as models are retrained. Canonry's 16-factor model is a working hypothesis based on research, observation, and the established principles of SEO and content marketing — not a guaranteed formula. We publish our methodology openly so teams can inspect it and hold us accountable. The 16 factors cover only the technical on-site layer. Effective AEO is holistic and also relies on traditional SEO fundamentals, content depth and quality, and external linking and off-site corroboration. Much of what works in AEO starts with the same fundamentals as good SEO: quality content, clear structure, and real authority. ## Additional Public Pages - Canonry Managed: https://canonry.ai/managed - White-label AEO for agencies: https://canonry.ai/white-label-aeo-for-agencies - Canonry Embedded: https://canonry.ai/embedded (live with assisted onboarding) - Canonry Custom: https://canonry.ai/custom (scoped engagements) - Product access: https://canonry.ai/agency-access - About Canonry: https://canonry.ai/about - Blog index: https://canonry.ai/blog - AI search visibility service page: https://canonry.ai/ai-search-visibility - AEO for in-house marketing teams: https://canonry.ai/aeo-for-marketing-teams - ChatGPT SEO agency service page: https://canonry.ai/chatgpt-seo-agency - NYC AI marketing agency page: https://canonry.ai/nyc-ai-marketing-agency - Hotel AI visibility vertical page: https://canonry.ai/hotel-ai-visibility - Contractor AI visibility vertical page: https://canonry.ai/contractor-ai-visibility - SaaS AI visibility vertical page: https://canonry.ai/saas-ai-visibility - NYC AEO commercial page: https://canonry.ai/aeo-agency-new-york-city - AEO case studies index: https://canonry.ai/case-studies - AZ Coatings polyurea roofing case study (named): https://canonry.ai/case-studies/azcoatings-polyurea-roofing-michigan - ChatGPT real estate case study (anonymized): https://canonry.ai/case-studies/real-estate-agent-chatgpt - 16-factor methodology page: https://canonry.ai/aeo-methodology - How to choose an NYC based AEO agency: https://canonry.ai/how-to-choose-an-nyc-aeo-agency - AEO vs SEO for NYC businesses: https://canonry.ai/aeo-vs-seo-for-nyc-businesses - ChatGPT, Claude, and Perplexity optimization for NYC businesses: https://canonry.ai/chatgpt-perplexity-claude-optimization-for-nyc-businesses - Open-source hub: https://canonry.ai/open-source - Skills page: https://canonry.ai/open-source/openclaw-claude-code-skills ## Results Attest's 2025 Consumer Adoption of AI Report found that 47% of consumers are likely to use Gen AI tools to research purchases: https://www.askattest.com/our-research/consumer-adoption-of-ai-report-2025. Results vary by market, competition, and prompt behavior, and there are no guarantees in this emerging field. Our approach covers all major AI platforms: ChatGPT, Claude, Gemini, Copilot, and Perplexity. Two published case studies are available. The named AZ Coatings engagement at https://canonry.ai/case-studies/azcoatings-polyurea-roofing-michigan documents an ongoing WordPress + Elementor engagement with dated, prompt-specific ChatGPT and Gemini observations. The anonymized real estate case study at https://canonry.ai/case-studies/real-estate-agent-chatgpt documents a February 2026 implementation and recorded prompt results. The case studies identify the query, date, location qualifier, and limits of each observation; they are not guarantees of future results. ## Team ### Arber Xhindoli — Founder and Engineer, Canonry Founder of Canonry and software engineer with 8+ years of professional experience building production systems. Previously built open source distributed systems software at Bloomberg, then joined early-stage startup Bitwise where he helped grow the company and engineering team from 17 to 200 people. Now builds Canonry at https://canonry.ai/open-source-platform to monitor and improve how LLMs cite businesses. Canonry treats AEO as an engineering and research problem, not a marketing checklist, with a deep focus on structured data architecture, AI-readable content systems, and the technical signals that drive AI citation behavior. Full profile at https://canonry.ai/about. ## Frequently Asked Questions ### What is AEO? AEO stands for Answer Engine Optimization. It helps AI tools understand your business and include it in their answers. We clarify business details, write useful content, add structured data, and keep your brand information consistent across the web. AEO builds on SEO, which helps people find you in search. ### Are AEO and GEO the same thing? AEO means Answer Engine Optimization, and GEO means Generative Engine Optimization. Both describe work that helps brands appear in AI answers. The terms overlap, so we use AI search unless the distinction matters. ### How does AEO differ from SEO? SEO helps your pages appear in search results. AEO helps AI tools mention your brand or cite your pages in answers. Both need useful, trustworthy content. AEO adds structured data, consistent business details across sites, and answers that AI can use. We test repeatedly because results can change from one run to the next. ### How does AI choose which brands to name? In our tests, AI mentions brands with clear business details backed by several sources. Your name, location, and services should match across sites, and your pages should answer buyers' questions. AI tools draw on live search, stored results, and other sources. Their weight can change with the question, and we cannot see the exact mix. ### What should my site get right? Start with clear answers, current facts, and consistent business details across the web. Use valid JSON-LD structured data for your business, services, FAQs, and page links. Check bot access in robots.txt and keep profiles such as Google Business Profile, LinkedIn, and Wikipedia accurate. Our 16 checks cover the parts on your own site. ### Do llms.txt files help? We do not know for sure. These files give AI a plain-text copy of site facts. Google says it does not use llms.txt. We have seen signs that some other bots read these files. They cost little to add, so we keep them as an extra way to read the site. Clear web pages and real content still matter most. ### Which AI tools do you track? We focus on ChatGPT, Claude, Gemini, Perplexity, and Copilot, and also track Grok, Meta AI, and DeepSeek. We review sources they may use: Wikipedia, Wikidata, Reddit, Quora, LinkedIn, X, YouTube, Google Business Profile, news, and reviews. Each AI tool works differently, so we look for improvements that help across them. ### How do you measure AI visibility? We track both site traffic and AI answers. Server logs show visits from AI bots and people who follow Citations. Scheduled checks record whether each AI tool mentions your brand, cites your site, or leaves you out, along with the competitors it names. Repeated runs help us find trends. ### Is AEO just adding schema to my site? No. Schema markup is one part of AEO. You also need good SEO, useful content, bot access, and independent sources that support your claims. Valid markup alone will not make a thin page worth citing. ### Can we use Canonry for our clients? Yes. Canonry Embedded puts each client's AI visibility report in your portal. Canonry Custom tracks each market under one client domain, with separate questions, pages, competitors, and results in one shared view. Managed provides the full AEO service under your agency's brand. ### Can our own marketing team use Canonry? Yes. Canonry Managed handles AEO for your team. Canonry Custom tracks each market under one domain, keeping local questions, pages, competitors, and results separate within a shared view. Your team can also run the open-source Canonry platform on its own server. ### Can you work with our SEO agency? Yes. We can measure results while your agency makes changes, or handle work outside its scope, such as technical fixes, business details, and AI answer tracking. Your agency can also hire us to deliver AEO under its brand. ### Does Canonry support ChatGPT Ads? Yes. Canonry Ads is in private beta for agencies and individual advertisers. It shows buyer questions, competing brands, and ideas for paid tests. You keep control of strategy, approvals, and ad accounts. Request access on the Canonry Ads page. ### Which Canonry product should I use? Embedded adds client AI visibility reports to your portal. Custom tracks each market under one domain, with local questions, pages, competitors, and results in a shared view. Managed delivers AEO for businesses, marketing teams, or agencies under their own brand. Ads is a private beta for reviewing ChatGPT Ads test ideas. ### What does the name Canonry mean? The name comes from "canon," a set of facts people trust. We help brands show up in AI answers. The word canonry also has an old church meaning: the post held by a cathedral canon. That meaning is not part of our company. ### How long until I see results? It depends on your site, market, and competitors. AI answers can shift as models and search sources change. We cannot promise a set date. We first check where you stand. Then we track each AI tool over time. ### What does AEO cost? The site check is free within fair-use limits. Embedded has a price per client. We help you get started and give you an estimate based on your client count. Prices for Custom, Managed, and the full AI Visibility Report depend on the work you need. ## Recommended Reading - [Google SEO Starter Guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide): Foundational SEO principles that also apply to AEO work - [Google AI Optimization Guide](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide): Google's official perspective on optimizing for AI features in search. Canonry treats it as one input among several, since it speaks for Google Search and Gemini specifically while other AI systems (ChatGPT, Claude, Perplexity, Copilot) operate their own retrieval pipelines. - [AI Search Visibility](https://canonry.ai/ai-search-visibility): Primary service page for broad AI visibility search intent - [ChatGPT SEO Agency](https://canonry.ai/chatgpt-seo-agency): Entry page for buyers using ChatGPT SEO language before they know the AEO category - [NYC AI Marketing Agency](https://canonry.ai/nyc-ai-marketing-agency): New York-origin AI marketing page focused on AI search visibility - [Hotel AI Visibility](https://canonry.ai/hotel-ai-visibility): Hospitality vertical page for hotel recommendation prompts, local entity clarity, amenities, reviews, and destination content - [Contractor AI Visibility](https://canonry.ai/contractor-ai-visibility): Contractor vertical page backed by the AZ Coatings case study pattern - [SaaS AI Visibility](https://canonry.ai/saas-ai-visibility): SaaS vertical page for category, comparison, documentation, and third-party tooling signals - [AEO Case Studies Index](https://canonry.ai/case-studies): Index of all Canonry AEO case studies, with summaries, engagement dates, and links to each full write-up - [AZ Coatings Polyurea Roofing Case Study (Named, Ongoing)](https://canonry.ai/case-studies/azcoatings-polyurea-roofing-michigan): An ongoing engagement with a multi-state commercial roofing contractor specializing in polyurea coatings. It includes dated screenshots and query-specific ChatGPT and Gemini observations, plus implementation notes and reproducibility limits. Active workstreams include citation monitoring, off-site authority, Google Business Profile optimization, published content, and continued schema hygiene. - [ChatGPT Real Estate AEO Case Study (Anonymized)](https://canonry.ai/case-studies/real-estate-agent-chatgpt): An anonymized client result with implementation details and timeline - [How To Choose An NYC based AEO Agency](https://canonry.ai/how-to-choose-an-nyc-aeo-agency): Practical buyer checklist for evaluating AEO partners - [AEO vs SEO For NYC Businesses](https://canonry.ai/aeo-vs-seo-for-nyc-businesses): What changes for AI-generated answers and what does not - [ChatGPT, Claude, and Perplexity Optimization For NYC Businesses](https://canonry.ai/chatgpt-perplexity-claude-optimization-for-nyc-businesses): How each major answer engine retrieves and cites sources, which crawler and schema signals matter, and how to measure visibility across ChatGPT, Claude, Perplexity, Gemini, and Copilot ## Industry Terms Glossary - **AEO**: Answer Engine Optimization — an emerging practice focused on getting businesses recommended by AI answer engines - **AI Consulting**: Professional advisory services helping businesses leverage AI for search visibility, answer engine optimization, and AI-driven growth - **AI SEO**: Artificial intelligence search engine optimization — another name for AEO - **LLMO**: Large Language Model Optimization — another name for AEO - **GEO**: Generative Engine Optimization — another name for AEO - **AI Visibility**: The degree to which a business is cited or recommended in AI-generated answers - **Entity Authority**: The strength of a business's identity signal across the web, which we believe helps AI models more confidently cite it - **Citation Signal**: Content or markup that we believe helps AI models identify, verify, and recommend a business - **llms.txt**: A markdown file at the root of a website designed for AI crawlers to quickly understand the site - **Structured Data**: JSON-LD markup that provides machine-readable information about a business to search engines and AI models - **Knowledge Graph**: A network of interconnected entities and facts that AI models use to understand relationships between businesses, services, and locations ## Legal - [Privacy Policy](https://canonry.ai/privacy): How Canonry handles user data - [Terms of Service](https://canonry.ai/terms): Rules for using the site and tools ## Contact Information Book 30 minutes directly with Arber, Canonry's founder, from the homepage. Talk about AI search, your business, an idea you're working on, or anything else. The "Book directly" button opens an inline Google Calendar booking page where visitors can choose a time. The booking page is also available at https://calendar.app.google/oAs8U83CiJtrnU7k7. Explore the measurement model at https://canonry.ai/blog/one-site-many-markets-ai-visibility. - Address: 418 East 88th Street, New York, NY 10128 - Phone: (248) 761-1781 - Email: hello@canonry.ai - Canonry Managed: https://canonry.ai/managed#contact - White-label AEO for agencies: https://canonry.ai/white-label-aeo-for-agencies - Canonry Custom: https://canonry.ai/custom - Canonry Custom intake: https://canonry.ai/agency-access?product=custom - Product Access: https://canonry.ai/agency-access - NYC commercial page: https://canonry.ai/aeo-agency-new-york-city - Open-source hub: https://canonry.ai/open-source - Location: New York City, NY, USA - Website: https://canonry.ai ## Service Area New York City (Manhattan, Brooklyn, Queens, the Bronx, Staten Island), the tri-state area, and nationwide via remote delivery. ## Business Type AI search infrastructure for in-house marketing teams and for marketing and SEO agencies, plus Canonry Managed for businesses and marketing teams that want direct AEO execution and agencies that need a white-label AEO delivery team. Canonry publishes an inspectable AI search audit methodology and updates it as the space evolves. ## Community - Canonry Discord community: https://discord.gg/8K9yY7GywJ ## Blog Posts ### 4 open-source AEO tools compared in October 2026: Canonry, Elmo, GeoLook, and GEO Optimizer Article page: https://canonry.ai/blog/open-source-aeo-tools-compared Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. An AI answer cites your competitor and leaves out your business. What can your AEO tool help you do next? Some make that gap easy to report. Others help you inspect the site, prepare changes, and check the next result. Our [free Profound and Peec alternatives](/blog/best-free-profound-peec-alternatives-2026) article introduced several options. This comparison takes its four open-source projects and looks at the workflow each supports: Canonry, Elmo, GeoLook, and GEO Optimizer. I build Canonry. These recommendations reflect the projects' public documentation, checked on October 6, 2026. This is a comparison of documented capabilities, rather than a benchmark of speed or citation accuracy. ## The four tools at a glance | Tool | Best fit | Documented interfaces | Deployment | |---|---|---|---| | [Canonry](https://github.com/Canonry/canonry) | An AEO operating platform joining measurement, business data, investigation, and execution | Operational CLI, REST API, MCP, web UI, webhooks | Self-hosted instance with SQLite and your provider keys | | [Elmo](https://github.com/elmohq/elmo) | Recurring AI visibility measurement and reporting | Web UI, REST API, MCP; deployment CLI | Docker Compose with a web app, worker, and PostgreSQL | | [GeoLook](https://github.com/aigclink/geolook) | A local GEO implementation and publishing workflow | Python CLI, local web dashboard, HTTP endpoints, Claude Code skill | Local runtime with project files | | [GEO Optimizer](https://github.com/Auriti-Labs/geo-optimizer-skill) | Technical readiness checks and fixes in development | CLI, Python API, MCP, GitHub Action | Python toolkit run locally or in CI | Each has MIT-licensed software: [Canonry from 5.0.0](https://github.com/Canonry/canonry/blob/main/LICENSE), [Elmo](https://github.com/elmohq/elmo/blob/main/LICENSE.md), [GeoLook](https://github.com/aigclink/geolook/blob/main/LICENSE), and [GEO Optimizer](https://github.com/Auriti-Labs/geo-optimizer-skill/blob/main/LICENSE). Budget separately for hosting, provider calls, collection services, and maintenance. Paid hosted products have their own terms. ## 1. Canonry: an operating platform for the ongoing AEO workflow [Canonry](/open-source-platform) is an AEO operating platform. It connects AI visibility to the business data and tools an operator uses to investigate results, make approved changes, and measure again. Projects, answers, site findings, and schedules remain available between agent sessions. See the [platform overview](https://github.com/Canonry/canonry). Its integrations give an investigation more context: - [Google Search Console](https://github.com/Canonry/canonry/blob/main/docs/google-search-console-setup.md) and Bing Webmaster Tools add search and indexing evidence. - [GA4](https://github.com/Canonry/canonry/blob/main/docs/google-analytics-setup.md) adds traffic and conversion evidence; [Google Business Profile](https://github.com/Canonry/canonry/blob/main/skills/canonry/references/google-business-profile.md) adds local performance data. - [Server traffic integrations](https://github.com/Canonry/canonry/blob/main/skills/canonry/references/server-side-traffic.md) add crawler requests, page fetches, and referrals from Cloudflare, Vercel, Cloud Run, or WordPress logs. - Site audits and Common Crawl backlinks help investigate technical conditions and the links around a business. The [integration list](https://github.com/Canonry/canonry#integrations) shows the supported sources. For an agency managing a hotel group, that means an agent can investigate a weak market, inspect its pages and local data, and prepare a specific change for review. [Portfolio measurement](/blog/one-site-many-markets-ai-visibility) keeps results for different properties and markets separate. The interfaces support that work directly. Use the **CLI** for operational commands and JSON output, the **REST API** for application workflows, or **MCP** to give your existing agent typed tools. The dashboard reads the same project evidence. MCP adapts the public API; it does not give an agent extra authority. [Canonry's MCP guide](https://github.com/Canonry/canonry/blob/main/docs/mcp.md) explains that relationship. Execution depends on the connected system. For example, the [WordPress integration](https://github.com/Canonry/canonry/blob/main/docs/wordpress-setup.md) can read and update pages through REST. Schema injection and some staging tasks require a manual handoff. Your agent can also prepare code changes with its own development tools. Schedules and webhooks support follow-up after approved work ships. Choose Canonry when you want measurement, connected business evidence, and execution in one persistent operation. The tradeoff is owning the instance, its credentials, backups, and provider costs. ## 2. Elmo: a visibility platform for recurring measurement and reports [Elmo](https://github.com/elmohq/elmo) schedules prompts and records answers, brand mentions, citations, competitor share of voice, and query fan-out. It also documents opportunities and shareable reports. That is a useful fit when the client deliverable is a recurring view of where a brand appears in AI answers. Elmo supports agents too. Its [REST API](https://www.elmohq.com/docs/api) manages brands, prompts, runs, analytics, and reports. Its [MCP interface](https://www.elmohq.com/docs/api/mcp) lets agents read visibility evidence and opportunities, and create or update prompts. Its CLI handles setup and deployment management, as described in the [architecture guide](https://www.elmohq.com/docs/developer-guide/architecture). Its [provider integrations](https://www.elmohq.com/docs/user-guide/providers) include collection services and direct model APIs. Select the collection method that matches the answer surface you need to observe. Compared with Canonry, Elmo's documented focus is visibility collection and analysis. If the next step needs Search Console, server logs, or publishing, map how those systems will join the investigation. Elmo is a reasonable choice when your team already has that surrounding workflow. The [self-hosted setup](https://www.elmohq.com/docs/getting-started) uses Docker Compose, a web app, a worker, and PostgreSQL. Include those services and measurement providers in the operating budget. ## 3. GeoLook: a local workflow that reaches implementation and publishing [GeoLook](https://github.com/aigclink/geolook) covers answer sampling, site diagnosis, implementation tickets, content drafts, publishing, and scheduled verification. Its publishing options include WordPress drafts, GitHub, WeChat drafts, webhooks, X, and Reddit. It overlaps with several parts of Canonry's execution workflow. GeoLook runs Python scripts and a local dashboard, with project data stored in files. It supports API-based sampling and manual answer collection. Its documentation describes a single-machine workflow without accounts or team collaboration. The [README](https://github.com/aigclink/geolook/blob/main/README.md) explains the setup and publishing paths. It has HTTP endpoints behind the dashboard as well as a CLI and optional Claude Code skill. The [dashboard implementation](https://github.com/aigclink/geolook/blob/main/scripts/dashboard.py) shows those API routes. The practical comparison is how you want to operate. GeoLook suits an operator who wants a local project workspace for diagnosis, content, and publishing. Canonry suits a team that wants those investigations connected to first-party business integrations and a shared project API used by its agent and dashboard. Choose GeoLook when its local files, scripts, and publishing channels fit your work. For each engine, check whether the measurement uses an automated API call or a manual collection step. ## 4. GEO Optimizer: technical checks and fixes for development workflows [GEO Optimizer](https://github.com/Auriti-Labs/geo-optimizer-skill) checks bot access, structured data, and content signals. It can generate fixes, preserve audit history, detect regressions and drift, and produce recurring reports. Its CLI, Python API, and GitHub Action make it useful alongside development and deployment work. Its [MCP server](https://github.com/Auriti-Labs/geo-optimizer-skill/blob/main/docs/mcp-server.md) exposes audits, fix generation, competitor comparisons, gap analysis, and validation tools. Agent access is available here too. Readiness and visibility need separate interpretation. The project's [`geo monitor` guide](https://github.com/Auriti-Labs/geo-optimizer-skill/blob/main/docs/geo-monitor.md) says that monitoring checks website readiness without querying model answers. Its citation commands do query providers, but the returned evidence differs: Perplexity supplies web source URLs, while its OpenAI and Anthropic checks reflect model knowledge. See the [provider guide](https://github.com/Auriti-Labs/geo-optimizer-skill/blob/main/docs/llm-providers.md). Compared with Canonry, this toolkit fits a more specific job: repeatable technical checks and fixes in the development process. It can complement an operating platform. A team could use GEO Optimizer in CI and Canonry to connect site findings with search data, traffic, answer evidence, and follow-up work. Choose it when a Python toolkit fits your pipeline. Keep saved history available between jobs if you want comparisons across deployments. A higher readiness score alone does not establish more AI citations. ## Where Bing fits, and how to choose The original shortlist also included [Bing Webmaster Tools](https://www.bing.com/webmasters/). It is a free hosted Microsoft service, so it sits outside this open-source comparison. Its AI Performance reports show citation activity on supported Microsoft surfaces, including Copilot and Bing AI summaries. That first-party evidence can complement your own measurements. [Microsoft describes the reporting scope here](https://blogs.bing.com/webmaster/2026/2/Introducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview/). Use the work you need to complete to choose a starting point: | Your team's main need | Start by evaluating | |---|---| | Investigate visibility with business data, prepare changes, and verify results across projects or markets | Canonry | | Collect recurring AI answers and deliver visibility reports | Elmo | | Run a local diagnosis, content, and publishing process | GeoLook | | Add technical checks, regressions, and generated fixes to development | GEO Optimizer | Before comparing results, align the questions, providers, collection surfaces, locations, and sampling dates. A browser answer, an API response, and a readiness score describe different observations. [Canonry's collection method](/blog/why-canonry-uses-direct-provider-apis) is one example of why that distinction matters. For teams that need the full operating workflow, start with [Canonry](/open-source-platform): connect the relevant accounts, inspect the evidence through API, MCP, or CLI, and prepare one bounded change for review. Measure again after it ships and report what changed. ### Canonry sentiment analysis: up to 99.4% lower estimated cost Article page: https://canonry.ai/blog/canonry-sentiment-analysis-jev Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. **Jev classified 2,304 AI answers for $0.37**, versus an estimated **$58.40 with Claude Opus 5** at the same token budget. That is a **99.4% cost reduction**. Only Jev was measured; the LLM figures below are pricing estimates. Canonry 5.30 adds sentiment scores using Jev from TypeSafe. Our open-source AEO platform now shows whether answers from ChatGPT, Gemini and Claude describe a tracked brand or property favorably, alongside whether they mention it and cite its site. ## The measured run: 2,304 answers, 80 seconds, $0.37 We classified every branded answer from two sweeps of roughly 200 apartment communities across three answer engines. A sweep is one run of the portfolio's tracked questions. | Metric | Result | | --- | --- | | Apartment communities | Roughly 200 | | Answer engines | 3 | | Sweeps | 2 | | Answers classified | **2,304** | | Input tokens | 8.8 million | | Total classifier cost | **$0.37** | | Total processing time | **About 80 seconds** | | Time per request | About 0.2 seconds | | Parallel requests | 8 | | Throughput (calculated) | **28.8 answers/second** | Processing speed varies with answer length and account limits. ## Up to 99.4% lower estimated cost than an LLM Jev classifies each answer and returns a result with a confidence score. It does not generate a written verdict. TypeSafe charges **$0.042 per million input tokens**, with free output. [TypeSafe pricing](https://docs.typesafe.ai/models). For comparison, we priced the same 8.8 million input tokens on general models, adding 250 output tokens per answer for a short JSON verdict: **576,000 output tokens** in total. | Model | Input / 1M tokens | Output / 1M tokens | Cost for 2,304 answers | Jev costs less by | | --- | ---: | ---: | ---: | ---: | | **Jev** | **$0.042** | **Free** | **$0.37 measured** | Baseline | | DeepSeek V4.1 Flash, off-peak | $0.15 | $0.60 | $1.67 | **77.8%** | | DeepSeek V4.1 Flash, peak | $0.30 | $1.20 | $3.33 | **88.9%** | | GPT-5.4 nano | $0.20 | $1.25 | $2.48 | **85.1%** | | Claude Haiku 4.5 | $1.00 | $5.00 | $11.68 | **96.8%** | | Claude Sonnet 5 | $2.00 | $10.00 | $23.36 | **98.4%** | | Claude Opus 5 | $5.00 | $25.00 | $58.40 | **99.4%** | **Only Jev was measured.** LLM costs are estimates using uncached list prices, with no batch discount or reasoning tokens. Prompts and tokenizers differ by provider, so actual input counts will differ. Cost is `input millions × input rate + output millions × output rate`; percentages use unrounded figures. Prices checked September 29, 2026: [DeepSeek](https://api-docs.deepseek.com/quick_start/pricing/), [OpenAI](https://developers.openai.com/api/docs/models/gpt-5.4-nano), [Anthropic](https://platform.claude.com/docs/en/about-claude/pricing). These costs cover sentiment classification; answer collection and hosting are separate. ## About $5 a year for this portfolio At one sweep every two weeks, this workload becomes **26 sweeps and 29,952 branded answers a year**. The measured two-sweep run therefore scales by 13. | Model | Estimated cost / sweep | Estimated annual cost | Estimated annual batch cost | | --- | ---: | ---: | ---: | | **Jev** | **$0.18** | **$4.80** | No discount assumed | | DeepSeek V4.1 Flash, off-peak | $0.83 | $21.65 | Not included | | DeepSeek V4.1 Flash, peak | $1.67 | $43.31 | Not included | | GPT-5.4 nano | $1.24 | $32.24 | $16.12 | | Claude Haiku 4.5 | $5.84 | $151.84 | $75.92 | | Claude Sonnet 5 | $11.68 | $303.68 | $151.84 | | Claude Opus 5 | $29.20 | $759.20 | $379.60 | Annual figures use unrounded costs and assume unchanged volume, token use and rates. [OpenAI](https://developers.openai.com/api/docs/guides/batch) and [Anthropic](https://platform.claude.com/docs/en/about-claude/pricing) offer 50% batch discounts with processing windows of up to 24 hours. For this portfolio, adding non-brand answers increases volume by about **2.4×**, putting Jev at roughly **$11.53 a year**. ## Forty seconds versus 19 hours of manual tagging At **one minute to read and label each answer**, a person would spend 19.2 hours on one sweep. That is a planning assumption, not a measured human benchmark. | Workload | Manual tagging at 1 minute / answer | Jev, extrapolated from the run | | --- | ---: | ---: | | One sweep: 1,152 answers | **19.2 hours** | **About 40 seconds** | | One year: 26 sweeps | **499.2 hours** | **About 17.3 minutes** | The per-sweep Jev figure is half the measured 80-second run. We have not timed general LLMs on this workload. People still need to review disputed verdicts and sample the results; the table compares the initial tagging step. ## Accuracy: 90.3% agreement in a small human check Two people labeled 32 answers without seeing Jev's results. We then compared their judgments with Jev. | Check | Result | | --- | ---: | | Answers reviewed | 32 | | Human labelers | 2 | | Answers that expressed a stance | 31 | | Jev verdicts agreeing with the human stance | **28 of 31** | | Agreement rate | **90.3%** | | Favorable share: Jev | **76%** | | Favorable share: human labeler 1 | **76%** | | Favorable share: human labeler 2 | **80%** | This small check does not establish higher accuracy than an LLM. A larger human review on a separate set of answers is in progress. **Sentiment is experimental**, with the source quotes available for every verdict. ## What the sentiment score counts The headline is **% favorable: favorable answers divided by all judged answers**, shown with a 95% confidence interval and the count behind it. | Answer or question type | How Canonry treats it | | --- | --- | | Favorable, mixed or unfavorable conclusion | Included in the judged-answer count | | Facts only, such as address, rent or floor plans | Excluded from sentiment; does not count as unfavorable | | No mention of the tracked subject | Excluded from sentiment; does not count as unfavorable | | Branded question, such as “is [property] a good place to live” | Scored separately from non-brand questions | | Non-brand question, such as “best apartments in [city]” | Scored separately from branded questions; never pooled | | One answer comparing two tracked properties | Separate verdict for each property | | Evidence behind a verdict | The sentence supporting it, plus the most serious complaint if reported | Scores sit next to mention and citation coverage, per project, question and engine. The dashboard, `canonry sentiment` CLI, **nine MCP tools** and API all expose sentiment, so an agent can find poorly described properties and return the quotes behind the scores. ## Turn it on for new sweeps Sentiment is off by default. Enabling it requires both installation and project settings. Replace `my-project` with your project in the CLI example. | Step | Action | | --- | --- | | Configure the installation | Add a `sentiment` block with a TypeSafe key to `config.yaml` | | Enable the project | Use **Manage sentiment**, or `canonry sentiment configure my-project --enabled true` | | Classify new answers | New sweeps are classified automatically after both settings are enabled | | Classify past answers | Preview and approve classification of past answers, handling branded and non-brand questions separately | | Read saved scores | Read stored verdicts and quotes; reading never calls Jev | Get the source and setup instructions on [Canonry's GitHub repository](https://github.com/Canonry/canonry). Only new classifications call Jev; revisiting the evidence adds no classifier cost. ### Why fewer people visit news sites Article page: https://canonry.ai/blog/ai-search-news-traffic-missing-clicks Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Combined monthly visits to the ten biggest news websites in the U.S. fell 32% between July 2024 and July 2026, according to [Press Gazette's analysis of Similarweb data](https://pressgazette.co.uk/media-audience-and-business-data/media_metrics/traffic-to-10-biggest-us-news-websites-down-a-third-in-two-years/). For publishers, the problem is immediate: the reporting still costs money, but fewer people arrive on the page that pays for it. The data establishes the loss of visits. Working out how much AI caused, and what a publisher should do about it, takes different evidence. Getting cited by an answer engine does not settle either question. ## What the traffic decline measures Published on August 21, 2026, the analysis separates total visits from organic search referrals: | Measure | Sites included | July 2026 versus July 2024 | | --- | --- | --- | | Combined monthly visits | Ten biggest news sites in the July 2026 U.S. ranking | Down 32% | | Combined monthly visits | Fifty biggest sites in that ranking | Down 37% | | Organic search referrals | Those fifty sites | Down 42% | The list starts with the biggest sites in July 2026 and looks backward. Publishers that fell out of that group are excluded. These are visits to a selected set of websites, not a count of everyone consuming news. The comparison also starts near a traffic peak. Across the top ten, the decline relative to July 2023 was 18%. That leaves a substantial loss under either comparison. It also leaves the cause unresolved. An aggregate before-and-after comparison cannot isolate an AI interface from changes in audience demand, rankings, publishing output, or other distribution channels. Another dataset helps put the channel question in context. [Chartbeat reports](https://chartbeat.com/resources/articles/pageviews-down-ai-impact/) that average weekly pageviews across its network fell about 6% between 2024 and 2025, while pageviews from Google Search fell 34% between December 2024 and December 2025. Its population, metric, and dates differ from the Similarweb analysis, so the percentages cannot be combined. Within Chartbeat's data, however, search deteriorated much faster than total pageviews. For a publisher, that distinction determines the investigation. A decline concentrated in search needs a different response from a decline across every source. A decline concentrated in explainers needs a different response from readers abandoning an entire publication. ## AI can remove the reason to click Consider a reader asking why a city changed its parking rules. A search result can point them to a local reporter's explanation. An AI answer can put the explanation directly in front of them, with the reporter's article linked underneath. If the summary answers the question, opening that link becomes optional. This is an illustrative example, but there is evidence for the behavior. [Pew Research Center's July 2025 analysis](https://www.pewresearch.org/short-reads/2025/07/22/google-users-are-less-likely-to-click-on-links-when-an-ai-summary-appears-in-the-results/) used browsing data from 900 U.S. adults. Traditional results received a click in 8% of visits to Google pages with an AI summary, versus 15% without one. Links inside the summary received clicks in 1% of visits with a summary. Pew observed March browsing and collected corresponding search results in April. It did not randomly assign summaries to identical searches. The figures show an association in that sample, rather than a universal percentage of traffic lost to AI. A newer [August 2026 preprint by Stephanie T. Wang and colleagues](https://arxiv.org/abs/2608.18352) tests the mechanism experimentally. The researchers used a browser extension to assign different Google experiences in a preregistered field experiment with 1,100 participants. They report that removing AI features increased publisher click-through, while routing searches to AI Mode reduced it. The experiment ran for seven days of treatment. Its sample was not representative of the whole U.S. population, and a Google interface change weakened the intervention that hid AI Overviews. The forced AI Mode condition also differs from gradual adoption. Those limits matter when interpreting the size of the effects. The evidence supports a practical concern: an answer interface can reduce outbound clicks. It does not assign the entire two-year news traffic decline to that mechanism. A reader asks what changed and why. The system finds relevant reporting. It presents a summary with a source link. The reader opens the article only if they need more. The publisher can succeed at being the source and still lose the visit. That is the part an AI visibility report has to confront. ## Citations and revenue can move in opposite directions In the Press Gazette analysis, generative AI supplied an average of 0.4% of total traffic across the fifty sites. [Chartbeat also reports](https://chartbeat.com/resources/articles/pageviews-down-ai-impact/) that AI chatbots accounted for less than 1% of total pageviews across its network, despite strong growth in ChatGPT referrals. Neither dataset supports budgeting on the assumption that chatbot visits have already replaced lost search traffic. A citation still has potential value. A reader may recognize the publication, investigate its work later, or decide to subscribe. But each of those is a separate outcome that needs evidence. Counting a source link establishes that the answer attributed something to the publisher. It does not establish that the reader noticed the attribution or that the publisher earned anything from it. Here is a hypothetical subscription example. A publication gets 100,000 search visits in a month, and 1% become paid subscribers: 1,000 subscriptions. Traffic falls to 70,000 visits. Holding acquisition steady would require the subscription rate to rise to about 1.43%. Better conversion could compensate for fewer arrivals, but the improvement has to appear in the subscription data. Meanwhile, citations could double without changing that calculation. They might contribute to later demand; they might mostly accompany answers that end the reader's search. The citation count alone cannot distinguish those cases. The economics also differ by business. A service company may benefit when an answer recommends it and the buyer contacts it later. A publication selling advertising around an article needs someone to load the article. A subscription publication needs evidence that exposure helps acquire or retain paying readers. The same citation metric cannot stand in for all three outcomes. I would want a publisher's AI report to show what happened after discovery, even when the answer is that the connection remains unknown. An honest gap is more useful than a conversion estimate built from citation counts. ## Give the reader something to do at the source Return to the parking example. A short summary can cover the rule change and its stated rationale. A local publication could also maintain a street-level lookup, publish the underlying documents, track corrections, or let residents subscribe to updates about their neighborhood. Those are reasons to visit that survive a useful summary. Their value comes from helping the reader complete a task or follow a developing story. They also cost money, so the publication needs to test whether readers actually use them. I would start by reviewing the pages losing visits. For each one, ask what a reader still needs after receiving a competent paragraph about the subject. Sometimes the answer is very little. Sometimes it is substantial: inspect the evidence, compare alternatives, search a dataset, ask a question, or keep up with a beat over time. That review should change the editorial investment. A generic explanation that duplicates widely available information has fewer obvious reasons for a separate visit. Original reporting, useful archives, and maintained tools give readers something specific to return to. None is immune to summarization, and originality alone does not guarantee revenue. The point is to make an explicit bet about what the audience values, then measure it. The destination should fulfill the promise. If an answer cites a housing data page, a reader should land on the relevant data and methodology. If they want ongoing coverage, the newsletter offer should say what coverage they will receive. An unrelated popup or a generic homepage makes it harder to learn whether the underlying reporting persuaded them to stay. Publishers also have to decide which material they want available for retrieval and under what terms. That is an editorial and commercial choice. A measurement program should reflect it. Treating every blocked fetch as a defect would erase the publisher's own distribution policy. ## Keep the measurements separate A useful report preserves the distinction between a machine requesting a page, an answer citing it, and a person arriving. These observations come from different systems and prove different things. | Observation | Evidence to retain | What it establishes | | --- | --- | --- | | A crawler or fetcher requested a page | Server request, timestamp, URL, status, and verified identity where available | A machine requested that resource | | An answer cited the publication | Saved answer, source URL, question, provider, collection method, and date | The citation appeared in that collected response | | A reader arrived from an AI service | Recorded referral and landing page | An attributable visit occurred | | A reader subscribed or returned | Subscription event or defined return-visit measure | The measured audience outcome occurred | A request log alone does not prove that the page appeared in an answer. A saved answer does not reveal how many real users saw equivalent responses. Referral tracking does not connect every later direct visit to an earlier citation. Keeping these limits visible prevents a plausible story from becoming an invented funnel. For answer monitoring, choose a stable set of questions related to the publication's actual coverage. A local newsroom might track questions about recurring civic issues; a specialist publisher might track the decisions its reporting helps readers make. Record the wording and market, then repeat the same panel. If the panel changes, show the change alongside the results. Our [query-selection method at Canonry](/blog/how-we-choose-ai-search-queries) treats that panel as part of the measurement instrument. It describes the questions sampled. It does not claim to reveal every question the audience asked. A publisher should be able to inspect the answers behind its visibility percentage and see which reporting received credit. Alongside that panel, compare visits and outcomes for a fixed group of relevant pages. Keep organic search, identifiable AI referrals, and other sources separate. Record publication changes that could affect the comparison. If a story breaks or a major page disappears, the reader of the report needs that context before attributing the movement to AI. ## Start with the pages where the economics changed I would begin with one coverage area where search visits have fallen and where the publication has something readers cannot easily get elsewhere. Establish the traffic and subscription baseline, inspect the answers to a small set of relevant questions, and review the pages receiving citations. That is enough to choose a bounded experiment. The experiment might be a better route from an explainer to a specialist newsletter. It might be a maintained data page replacing several overlapping articles. State the expected outcome before shipping: more relevant arrivals, more subscriptions per arrival, or more returning readers. Keep the observation window and comparison group consistent enough to interpret the result. If citations increase while subscriptions remain flat, the result is increased visibility with no measured subscription gain. If traffic falls but retained subscribers increase, report both. The next editorial decision depends on those differences. The traffic decline makes distribution harder to take for granted. Publishers need to understand how their reporting appears in AI answers, and they need a reason for readers to form a relationship with the source. Fund the work that strengthens that relationship, with evidence that reaches beyond the citation. ### 5 Best Free Profound and Peec Alternatives in 2026 Article page: https://canonry.ai/blog/best-free-profound-peec-alternatives-2026 Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Looking for a free alternative to Profound or Peec? Start with the job you need done. Tracking brand mentions, auditing a website, and running an AEO operation require different systems. **Canonry is my pick for teams that want their agent to run the operation:** measure AI visibility, investigate weak results, prepare changes, and verify what happened. Elmo is a focused option for teams primarily replacing a visibility dashboard. The other tools below cover specific parts of the work. I build Canonry. This is a documentation-based shortlist, checked on September 11, 2026, rather than a performance benchmark. It includes open-source projects from [GitHub's AEO topic](https://github.com/topics/aeo), plus Microsoft's free reporting tools. ## The free alternatives at a glance Here, **free means no software license fee or an ongoing free service**. For software you run yourself, model calls, hosting, and maintenance can still cost money. Free trials are excluded. | Tool | Best fit | Free offering | What you still provide | |---|---|---|---| | [Canonry](https://github.com/Canonry/canonry) | Agent-first AEO operating system | Full platform; MIT from 5.0.0 | Hosting, provider usage, connected accounts | | [Elmo](https://github.com/elmohq/elmo) | AI visibility monitoring and reporting | MIT platform you host | Docker/PostgreSQL, scraping or model services | | [GeoLook](https://github.com/aigclink/geolook) | Local GEO implementation workflow | MIT application | Local runtime, model access, publishing credentials | | [GEO Optimizer](https://github.com/Auriti-Labs/geo-optimizer-skill) | Technical audits and CI checks | MIT CLI, Python library, MCP server | Python; API usage for live citation checks | | [Bing Webmaster Tools](https://www.bing.com/webmasters/) | First-party Microsoft AI citation data | Hosted reporting service | Verified website and available citation data | ## 1. Canonry: best for an agent-operated AEO operating system [Canonry](/open-source-platform) connects the work an agency normally spreads across monitoring, analytics, technical SEO, content, and reporting. Your agent operates it through CLI, REST API, or MCP. The dashboard gives the operator another view of the same system. **The useful difference is the connected project record.** Answers, citations, integrations, schedules, and project memory persist between agent sessions. An investigation can continue tomorrow without rebuilding its evidence from exports. The technical capabilities span five parts of that operation: - **Answer evidence:** track ChatGPT, Claude, Gemini, and Perplexity through configured providers; retain responses and distinguish brand mentions from citations. Inspect provider, model, query, location, and sample counts. Grounding searches are available when the provider supplies them. - **Business context:** join Google Search Console, GA4, Bing Webmaster Tools, Google Business Profile, backlinks, and server traffic. Demand, indexing, crawler requests, referrals, and conversions answer different questions; Canonry keeps those signals distinct. - **Site diagnosis:** crawl pages and internal links, inspect page-level findings, trace reachability, and compare crawl snapshots. Dead-link checks distinguish confirmed HTTP failures from requests the crawler could not verify. - **Execution:** use the content engine, WordPress drafts, structured data, and indexing submissions alongside your agent's coding tools. ChatGPT Ads operations include paused campaign editing and human-approved activation; ad spend remains separate. - **Portfolio measurement:** [Advanced Measurement](/blog/one-site-many-markets-ai-visibility) models Properties and Targets across markets, with versioned plans and explicit URL attribution. A strong market should not hide a weak one inside a domain average. For an existing project named `my-site`, an agent can read stored evidence directly: ```bash canonry visibility-stats my-site --last-runs 10 --by-provider --format json canonry technical-aeo score my-site --format json canonry report my-site --period 30 --format json ``` Those commands read results; they do not launch a new measurement. The workflow around them might be: find a market losing citations, inspect the competing sources, check demand and indexing, prepare a WordPress draft or code change for review, then schedule another measurement after publication. **Cost and deployment:** the full platform is [MIT from version 5.0.0](/blog/canonry-5-mit-open-source-aeo-geo), with all previous functionality retained. You operate one instance per operator or team and pay for the infrastructure and external services you use. This is a good fit when someone can own that setup. ## 2. Elmo: best for a focused visibility platform [Elmo](https://github.com/elmohq/elmo) schedules prompts, stores raw answers in PostgreSQL, and produces brand-mention trends, citation analysis, competitor share of voice, query fan-out, opportunities, and shareable reports. Its REST API exposes brands, prompts, competitors, and analytics. Its documented deployment separates the web application from the worker that executes measurements. Providers include both consumer-surface scraping services and direct model APIs, so the sampling method depends on configuration. See [Elmo's provider guide](https://www.elmohq.com/docs/user-guide/providers). **Choose it when** the main deliverable is recurring visibility measurement and client reporting. For the broader investigation, evaluate how you will connect first-party analytics, site diagnosis, and publishing to that evidence. **Cost boundary:** the [MIT](https://github.com/elmohq/elmo/blob/main/LICENSE.md) software is free to host yourself. Infrastructure and measurement providers remain your responsibility; managed Elmo Cloud is a paid offering. ## 3. GeoLook: best for a local GEO implementation workflow [GeoLook](https://github.com/aigclink/geolook) combines answer sampling, site diagnosis, implementation tickets, a content workbench, publishing, and scheduled verification. It supports WordPress drafts, GitHub, and other publishing channels with per-article confirmation. The architecture is deliberately local: Python scripts, a dashboard bound to localhost, and project data stored as files. Its documentation describes both automated API sampling and manual collection. Check which method applies to the engines you care about. **Choose it when** you want a local workspace that moves from diagnosis into content and implementation tasks. It overlaps with Canonry's execution work. The deployment and integration model is the meaningful comparison: local files and scripts versus Canonry's persistent project API and connected business data. **Cost boundary:** [MIT](https://github.com/aigclink/geolook/blob/main/LICENSE) software; model usage and publishing services depend on your configuration. ## 4. GEO Optimizer: best for technical audits in development [GEO Optimizer](https://github.com/Auriti-Labs/geo-optimizer-skill) is a Python toolkit with CLI and MCP interfaces. It checks bot access, structured data, and content signals; it also documents saved audit history, regression checks, citation queries, and recurring reports. For a deployment pipeline, its useful mechanism is a repeatable check: ```bash geo audit --url https://example.com --save-history --regression geo drift --url https://example.com --fail-on warning ``` **Choose it when** you want site checks in development or CI. Preserve its history between CI jobs if you want comparisons across deployments. Treat the audit score as a diagnostic heuristic: a higher score alone does not prove more recommendations or citations. **Cost boundary:** the [MIT](https://github.com/Auriti-Labs/geo-optimizer-skill/blob/main/LICENSE) toolkit is free. Live citation queries use your provider credentials. The separately hosted GeoReady product has its own plans. ## 5. Bing Webmaster Tools: best for first-party citation reporting [Bing Webmaster Tools is free](https://blogs.bing.com/webmaster/June-2025/Start-Using-Bing-Webmaster-Tools-to-Improve-Your-Site-Visibility). Its AI Performance reporting exposes citation activity across Microsoft Copilot, AI summaries in Bing, and selected partner integrations, including cited pages and sampled grounding queries. [Microsoft documents that coverage here](https://blogs.bing.com/webmaster/February-2026/Introducing-AI-Performance-in-Bing-Webmaster-Tools-Public-Preview). The June 2026 preview expansion adds intents, topics, citation share, and period comparisons. Citation share uses your site's citations divided by all citations for the same grounding query. It does not reveal competitor domains or measure traffic share. See [Microsoft's metric definitions](https://blogs.bing.com/search/June-2026/New-AI-Visibility-Insights-in-Bing-Webmaster-Tools-Intents-Topics-Citation-Share-Compare). **Choose it when** you need evidence from Microsoft's supported surfaces without running your own prompt panel. It complements Canonry or Elmo; it cannot replace a controlled, cross-engine prompt basket. **Cost boundary:** no tool subscription, but you need a verified site. Coverage depends on the reporting surface and available data. ## When Profound or Peec is still worth paying for The [Profound pricing page](https://www.tryprofound.com/pricing) lists paid plans covering monitoring and Agents credits. [Peec's pricing page](https://peec.ai/pricing) lists paid tracking plans, agent actions, and a free trial. Neither should be reduced to a static dashboard, and neither page lists an ongoing free platform plan at the time of this review. A managed subscription can make sense when your team wants the vendor to operate collection and infrastructure. Before switching, compare the exact prompts, engines, geography, sampling method, retention, and exports you need. An API response and a consumer browser answer are different observations. For a technical team, start with the work after measurement. If that includes investigating first-party data, changing content, managing multiple markets, and reporting the next result, [Canonry's AEO operating system](/open-source-platform) is the option to evaluate first. ### Why Canonry Uses Direct Provider APIs for AI Visibility Article page: https://canonry.ai/blog/why-canonry-uses-direct-provider-apis Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Canonry calls model providers' APIs directly so we can control the request and preserve the evidence behind each answer. A cheaper answer is less useful if we cannot explain why your brand appeared or disappeared. ## Three routes, different evidence The same model name can hide different search tools, request settings, and response formats. Direct API Canonry Provider API Answer + native evidence Model router Tracking tool Router Provider API Mapped response Browser scrape Tracking tool Consumer app Visible answer + links Simplified collection paths. Each route needs its own checks for the evidence it preserves. - Direct integrations expose the provider's supported controls and response fields. - Routers simplify access and can improve availability. The integration must verify what survives translation and fallback. - Browser scraping records one session in the consumer app. The visible page may omit underlying search details. A direct API does not reproduce the consumer app. Canonry has a [separate browser adapter](https://github.com/Canonry/canonry/blob/main/docs/providers/README.md) for that surface. ## Where cheaper access can weaken a report A routing decision can affect more than the bill: - A fallback can change which provider serves the request. - An unsupported parameter can be ignored. - A different search backend can change the sources available to the model. - A simplified response can lose detail needed to explain a result. OpenRouter documents [provider selection, fallbacks, and parameter support](https://openrouter.ai/docs/guides/routing/provider-selection). Its [search integration](https://openrouter.ai/docs/guides/features/plugins/web-search) supports native search for some models and external search for other configurations. Routers can preserve useful evidence. The problem is assuming equivalence without checking. If a service cuts costs by changing the model or search behavior, its old and new scores need a fresh comparison baseline. The same applies to scraping: a dataset containing only answer text and visible links cannot explain search behavior it never recorded. ## A retrieved page is not always a citation Imagine a model searches for roofing companies, finds several pages, and uses only one to support its answer. The distinction looks like this: The model issues a roofing query. Several pages become available. A source supports an answer passage. The final answer references that source. Canonry keeps these signals distinct: - A **mention** means the answer names the brand. - A **retrieved source** means a page appeared in the search evidence. - A **citation** connects a source to the answer, using the evidence that provider returns. For Gemini, we preserve source chunks, answer-support mappings, and issued search queries. Citation selection prefers chunks referenced by the support mappings. Counting every retrieved page as a citation can inflate the result. ### What each integration retains | Provider | Evidence we preserve | Parsing detail | |---|---|---| | [Gemini](https://github.com/Canonry/canonry/blob/main/docs/providers/gemini.md) | Answer, source chunks, support mappings, search queries | Prefer sources tied to answer passages. | | [OpenAI](https://github.com/Canonry/canonry/blob/main/docs/providers/openai.md) | Answer, URL annotations, search queries | Search-tool source lists alone are not final citations. | | [Claude](https://github.com/Canonry/canonry/blob/main/docs/providers/claude.md) | Answer, final-text citations, search queries | Search-tool errors are failures, not silent misses. | | [Perplexity](https://github.com/Canonry/canonry/blob/main/docs/providers/perplexity.md) | Answer and source objects, with citation-list fallback | No documented returned search-query telemetry. | Missing evidence also needs a label: - No returned search queries does not prove that no search happened. - A failed search does not prove that the brand was absent. - Discarded support mappings cannot be reconstructed from a URL list. This is the granularity we need when investigating a change in visibility. ## Location is a request setting worth checking For a Phoenix roofing company, the report should explain how Phoenix entered the request. | Canonry integration | How location is supplied | |---|---| | [OpenAI](https://github.com/Canonry/canonry/blob/main/packages/provider-openai/src/adapter.ts) | Structured `user_location` on the search tool. | | [Claude](https://github.com/Canonry/canonry/blob/main/packages/provider-claude/src/adapter.ts) | Structured `user_location` on the search tool. | | [Gemini](https://github.com/Canonry/canonry/blob/main/packages/provider-gemini/src/adapter.ts) | Location context added to the prompt. | These methods have different limits. Changing the location method changes the test setup; neither method guarantees every local buyer sees the same answer. ## What we pay to preserve We maintain separate integrations because we need to: - Choose a model that supports the required search behavior. - Retain answer text and available source evidence. - Record model identity and document location handling. - Test citation parsing, missing fields, and provider errors. - Balance token costs, search costs, latency, and quotas so measurements can be repeated. A successful text completion does not establish that all of this works. Our [model-selection criteria](https://github.com/Canonry/canonry/blob/main/docs/providers/model-selection.md) cover the complete request and response. Direct APIs take more integration work. We accept that cost so an agency can inspect the evidence before asking a client to change their website. ### Canonry: the open-source AEO operating system Article page: https://canonry.ai/blog/canonry-5-mit-open-source-aeo-geo Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Canonry is an **open-source, agent-first AEO operating system (OS)**. Version 5.0 releases the full platform under the [MIT license](https://opensource.org/license/mit). Get the source on [GitHub](https://github.com/Canonry/canonry). **All functionality from previous versions remains available in 5.0.** Your CLI, API, MCP, dashboard, integrations, measurement, and automation continue to work. The major version marks the license change. Use the full platform commercially, modify it, self-host it, or build your own product on it. ## An AEO OS your agent can operate Your agent can handle AEO and GEO work: research buyer questions, investigate missing citations, prepare improvements, execute approved changes, and report the results. Collect answers and first-party evidence. Find gaps and decide what to change. Prepare and publish approved work. Measure again and report the result. Your agent works through CLI, API, or MCP, alongside its own code and content tools. You control strategy, credentials, budgets, and approvals. ## One operation across projects and markets Canonry connects AI answers with Search Console, GA4, Bing, Google Business Profile, traffic, site audits, and [portfolio measurement](/blog/one-site-many-markets-ai-visibility). Project history, schedules, and evidence persist between agent sessions. Start with a weak market. Your agent can inspect missing citations, check search demand and indexing, prepare a content update for approval, and compare the next measurement. **The AEO work happens in one system, with the evidence behind each decision.** ## Run Canonry 5.0 ```bash npm install -g @canonry/canonry@5.0.0 canonry --version ``` Back up your configuration and database before upgrading. See the [quickstart](https://github.com/Canonry/canonry#quick-start). Keep the MIT copyright and permission notice with copies. Earlier releases and third-party dependencies retain their own license terms. The software has no license fee; provider usage and infrastructure costs remain yours. [Canonry Custom](/custom) remains our paid implementation service. ### How Canonry Got Its Name Article page: https://canonry.ai/blog/how-canonry-got-its-name Authorship: Human-written. Arber Xhindoli wrote and reviewed this article. Canonry is named after the canonical tag in HTML. The dictionary word also describes the office of a cathedral canon. We used the HTML meaning. ## The canonical tag When the same content is reachable at several URLs, `rel="canonical"` identifies the preferred URL. Search engines use it when they choose which URL to index and associate with ranking signals. Answer engines present fewer options directly in the response. A conventional search results page presents a list of links. An AI answer usually names fewer businesses and cites fewer pages. ## What we built We built Canonry to help a business become a source that answer engines can find, evaluate, and cite. Visibility tracking shows where the business appears. Query research, technical checks, source analysis, and implementation address why it appears and what to change. The canonical tag works at the URL level. Canonry works across the pages, facts, and evidence that represent a business. ## The suffix The first part of the name comes from canonical. We added the `-ry` suffix used in words such as foundry, bakery, and refinery. In those words, the suffix marks a place where something is made or kept. ### SEO vs AEO vs GEO vs AIO: Same Work, Different Acronyms Article page: https://canonry.ai/blog/seo-vs-aeo-vs-geo-vs-aio Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Someone asks what we do. I say answer engine optimization. They say "oh, GEO." Their agency calls it AI SEO. A vendor pitched them LLMO last week. All three of them read a post that morning explaining that SEO is dead. The acronyms are multiplying much faster than the field underneath them is. Most of the naming is positioning rather than description, which leaves a business owner trying to tell a real technical claim from a vendor staking out territory, using nothing but the vocabulary the vendor chose. ## The terms, and where they came from | Term | Expands to | Where it came from | |---|---|---| | **AEO** | Answer Engine Optimization | Predates LLM chat. Used for featured snippets, "position zero," and voice assistants. | | **GEO** | Generative Engine Optimization | A 2023 paper, [arXiv 2311.09735](https://arxiv.org/abs/2311.09735), published at KDD 2024. It ran controlled tests on which content edits changed source visibility in generated answers. | | **AIO** | AI Optimization, or AI Overview Optimization | Ambiguous by construction. Sometimes it means the whole field, sometimes only Google's AI Overviews. | | **LLMO** | Large Language Model Optimization | Vendor coinage. No distinct method behind it. | | **AI SEO** | (nothing) | The plain-language version most clients actually say out loud. | Two of these have real histories. AEO was in use before ChatGPT existed, describing the work of getting your content lifted into a direct answer instead of a blue link. GEO came out of a peer reviewed paper, which is more than most of the vocabulary in this field can claim. The rest are flags planted on ground that was already occupied, which is less a moral failing than the predictable result of a category forming before anyone owns the dictionary. ## They differ in origin, not in practice Put an AEO checklist next to a GEO checklist next to an AI SEO checklist. You will get the same list: structured data, entity consistency, extractable HTML, question shaped headings, a direct answer in the first sentence under each heading, real sources, honest freshness signals. If two frameworks prescribe the same work and measure the same outcome, the difference between them is branding. The GEO paper is genuinely worth reading, and I would rather someone cite it than the average LinkedIn thread, but what it actually contains is a study of which content edits pay off. The authors built a benchmark of queries across several domains, ran edits against it, and reported visibility gains of up to 40 percent, with the strongest results from adding citations, quotations, and hard numbers. They also found the gains swing by domain, which is the part almost nobody repeats when they cite the 40 percent. All of that is a ranking of tactics inside a practice people were already doing. ## SEO is not being replaced, it is being extended The loudest piece of misinformation in this space is "SEO is dead." Look at what still has to be true before an AI answer can name you. Your page has to be crawlable and indexable. It has to render without waiting on a pile of JavaScript. It has to carry a canonical, a title, headings, and alt text. It has to come from a domain with some authority behind it. The highest weighted signal in our own [16 factor onsite model](/blog/what-is-answer-engine-optimization) is JSON-LD structured data, which is SEO engineering that predates the first public LLM chat interface by years. What actually changed is the unit of measurement. SEO measures a position in a list. AEO measures presence in a paragraph. There is no page two of a generated answer, and there is no position 7 that still leaks a little traffic. In one Canonry dataset covering 11 keywords over 66 runs, the split was binary: branded queries where the business had content got cited 82 to 90 percent of the time, and informational queries where it had none got cited 0 percent of the time. Nothing in between. So "SEO versus AEO" is the wrong frame to begin with. SEO expanded onto a surface that does not produce a ranked list, and the old scoreboard simply cannot read the new one. ## The distinction that is actually real None of these acronyms name the two splits that matter technically. The first is whether a model knows you from its training data or fetches you at answer time. We can observe the second. A fetch leaves a [line in your server logs](/blog/ai-traffic-server-logs) with a user agent attached, and a retrieved page often leaves a link in the answer. We cannot directly observe the first. Any confident claim about what is or is not in a model's weights is inference, not measurement, and it should be labeled that way. The second is mention versus citation. A model can name your business without linking to you, and it can link to you without naming you. These are two separate signals and neither can be computed from the other. Most dashboards collapse them into one "visibility" number, which is exactly the kind of tidiness that [hides what is actually happening](/blog/ai-visibility-tools-are-lying). Sorting out those two questions for your own site will tell you more than any amount of arguing about what to call the work. ## Four questions that filter the noise 1. **Does the claim name a mechanism?** "AI prefers fresh content" with no fetch, no schema, no observed behavior behind it is a vibe. Ask which crawler, which page, which observed change. 2. **Does it separate mention from citation?** If a tool reports one number, ask which one it is measuring. If the answer is "both," it is measuring neither cleanly. 3. **Does it promise a rank?** There is no rank on this surface. Same prompt, different run, different set of names. 4. **Is it repeated across providers?** One screenshot of one ChatGPT answer is an anecdote. Answers move run to run, and ChatGPT, Gemini, Claude, and Perplexity retrieve differently enough that a result on one says little about the others. In my experience most of what circulates fails on the first question, and once a claim has no mechanism behind it the other three rarely get a chance to matter. ## Pick one word and measure it We say AEO because it names the thing that changed, which is that the output is an answer and not a list. If the industry converges on GEO next year, we will write GEO on everything and nothing about the work will change. What you call it is not the decision. The decision is whether, for the queries your customers actually type, you can say whether the answer named you and whether it linked to you. [Run the audit](/audit) to find out if your pages are even readable to the thing generating those answers, then track the answers themselves over a few months. Whichever acronym wins by then, that measurement is the same. ### Canonry vs. Paid AI Visibility Tools Article page: https://canonry.ai/blog/canonry-vs-paid-ai-visibility-tools Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. An AI visibility dashboard can tell you that ChatGPT stopped citing a page. It cannot tell you why. Maybe the page fell out of Bing. Maybe a crawler can fetch it but cannot reach it through an internal link. Maybe the model searched for a local phrase your content never uses. Maybe Google Business Profile has the wrong category. Maybe nothing changed at all and the chart is moving on four observations. That gap is the useful comparison between Canonry and paid tools such as Profound, Otterly, Peec, Ahrefs Brand Radar, and Semrush. They all measure answers. The difference appears after the answer arrives. I build [Canonry](https://canonry.ai/open-source-platform), so the bias is obvious. The argument here is narrower than "open source is better." Paid tools are often better reporting products. Canonry is built for the investigation and execution that reporting creates. ## The comparison starts after the score AI visibility products share a basic loop. They run a prompt against one or more answer engines, save the response, extract brands and citations, then aggregate the results into a score. That loop is useful. It answers whether a brand appeared, which competitors appeared with it, and which sources the model cited. A hosted vendor can run it across a large panel without asking the customer to configure provider keys or maintain infrastructure. The limit is not the quality of the chart. It is the boundary of the system around it. Capture the answer, citation, source, and provider call. Join demand, crawl, entity, traffic, and authority evidence. Publish, submit, notify, or prepare a bounded paid action. Run the same instrument again and preserve the comparison. Canonry is self-hosted and single-tenant. The dashboard is one client of the project API. The CLI and MCP adapter consume the same API, and schedules and webhooks operate against the same project record. The user's own agent can move through the loop without exporting a CSV or reconstructing context in another system. That operating boundary is also what [AUQ highlighted in its independent review of Canonry](/blog/auq-canonry-ai-visibility-tool). They framed it as the operating system a coding agent runs on, rather than another dashboard an operator has to check. This is why a conventional feature grid makes the products look more similar than they are. "Tracks ChatGPT" describes step one. It says nothing about the other three. ## A citation loss is a systems problem Take a simple incident. A model answers a commercial question, cites a competitor, and does not cite you. The saved answer is only the first piece of evidence. Canonry keeps the provider payload, including the web searches the engine issued when it grounded the response. Those fan-out queries often reveal a narrower information need than the original prompt. It also records where a match occurred: answer text, cited domain, cited URL, search query, or the prompt itself. A mention and a citation are different outcomes. Now the investigation can branch: | Evidence | Question it answers | |---|---| | Provider payload | What did the engine search, answer, and cite? | | Google Search Console | Is there first-party demand for the query or its variants? | | Bing Webmaster Tools | Is the relevant URL known, indexed, and eligible on Bing-backed surfaces? | | Technical crawl graph | Can a crawler reach the page through followable internal links? | | Server traffic | Did an AI crawler or user-fetch agent actually request the page? | | Google Business Profile | Does the local entity record match the market and intent? | | Common Crawl and Bing backlinks | Is the competing source supported by an authority gap? | These are not seven dashboard widgets. They are seven branches in one diagnosis. If the URL is absent from Bing, Canonry can request indexing. If the page is orphaned, `site-health path` proves it and the crawl record shows the broken route. If the model searched for a phrase with real Search Console demand, that phrase becomes evidence for a content change. If the query is local, Business Profile keywords and the rendered Places listing can expose a category or entity mismatch. The same model extends beyond organic visibility. Canonry ingests server-side traffic from Cloudflare, Cloud Run, Vercel, and WordPress because JavaScript analytics misses most crawlers. It connects OpenAI Ads Manager and keeps Google Ads and GTM snapshots read-only, so an operator can compare the growth recommendation with the conversion system that would measure it. The point is not that every project needs every source. The point is that the source remains available when the evidence sends the investigation there. ## MCP is a transport, not the product Agent access is no longer a Canonry-only feature. [Peec](https://docs.peec.ai/mcp/tools) and [Otterly](https://docs.otterly.ai/mcp-server) expose hosted MCP servers. [Profound](https://docs.tryprofound.com/agent-apis/mcp/overview) has a hosted server and external connectors into the tools a marketing team already uses. That is good progress. It also makes raw tool counts a weak comparison. Peec and Otterly let an agent work with the monitoring model held in their clouds. Profound goes further by letting its platform act outward into CMS, project-management, and communication systems. That outward connector model is useful, and Canonry does not try to replace it. Canonry takes the opposite boundary. `canonry-mcp` is a local adapter to the user's instance. It exposes the public project API, not a separate agent-only implementation. New capabilities gain CLI, REST, and MCP parity through the same contract. Credential setup and browser-session control remain outside the agent surface. The useful question is therefore not "does it have MCP?" It is "what can the agent prove and what can it change?" In Canonry, the answer spans stored evidence and bounded operations: inspect an answer, read Search Console demand, trace a crawl path, review server fetches, check a Business Profile location, generate JSON-LD, publish a WordPress draft, submit a sitemap, and schedule the next run. Paid actions keep a harder boundary. OpenAI Ads entities are created paused. Activation requires an exact human approval grant naming the campaign tree, advertiser account, and executor key. Grant creation is not exposed as an MCP tool. The agent can prepare the work, but it cannot grant itself permission to spend. This is the agent model behind Canonry: the agent reasons across evidence, the platform holds state and permissions, and the human approves consequential execution. ## One website is often a portfolio Most visibility tools start with a brand and a prompt list. That works until the domain represents forty clinics, two hundred hotel properties, six business units, or an agency portfolio. At that point there are two common choices. Create a project for every market and multiply the metered prompt count, or keep one project and average unlike markets into one score. Both lose something important. Canonry's [Advanced Measurement model](/blog/one-site-many-markets-ai-visibility) keeps the portfolio inside one project. A Property represents the thing being measured. Targets define its canonical pages, aliases, and approved URL patterns. A shared question can execute once, then be evaluated against every linked Target. That separation matters when one answer cites a page for Detroit but not Phoenix, or when a competitor displaces only the hospitality business unit. A domain-level score hides both events. URL credit is conservative. A cited URL is assigned automatically only when it maps to one Target. Overlapping and unmatched URLs remain visible instead of being forced into the nearest market. The measurement plan is versioned too. An operator can compile and diff a draft without starting provider work, publish it, and keep every previous version readable. If a report crosses a plan change, the instrument change is part of the record rather than a footnote someone has to remember. This is also where call-level storage becomes valuable. Paging evidence with `shape=answers` includes the measured answers in which a Property was not cited, together with the sources that were. The output is not just a visibility score. It is a market-specific work queue. ## The number still needs a denominator Owning the sampling design does not make answer engines deterministic. It only makes the tradeoff explicit. The broader measurement problem is covered in [Every AI Visibility Tool Is Lying to You](/blog/ai-visibility-tools-are-lying): consumer answers vary by account, geography, history, model, and time, while most dashboards compress that variance into one stable-looking score. An AI visibility rate is a proportion: the brand appeared in `k` of `n` measured answers. At small `n`, a precise-looking percentage can describe an enormous range of plausible reality. A Wilson 95% interval around a 30% mention rate looks like this: | Observations | 95% interval | What it supports | |---|---|---| | 30 | 16.7% to 47.9% | Broad absence or presence | | 100 | 21.9% to 39.6% | A directional baseline | | 400 | 25.7% to 34.7% | A ten-point comparison against 40% | At thirty observations, a reported 30% rate is still consistent with something close to 17% or 48%. A week-over-week chart built from one run per prompt has even less to say. Paid plans meter some product of prompts, engines, locations, and cadence. Ahrefs calls the unit a [check](https://ahrefs.com/pricing): one prompt, on one platform, in one location. That is the honest unit because every confidence claim starts with how many checks produced it. Canonry does not meter checks, but measurement is not free. The operator supplies provider keys and pays the underlying grounding and token costs. The advantage is control: run a small weekly basket, or spend heavily for a short experiment that needs enough observations to settle a question. `visibility-compare` is conservative about the output. It compares only query and provider pairs present in both periods, attaches confidence intervals, and returns `within-noise` when the intervals overlap. A model change produces a continuity warning instead of a directional claim. That behavior is less exciting than a line chart. It is also easier to defend. ## When buying is better Self-hosting removes the subscription boundary and adds an operational one. A hosted tool is the better choice when nobody wants to own provider keys, deployment, upgrades, or failed schedules. It is also better when the primary reader is an executive who needs a polished report rather than an API, or when procurement requires SSO, a support SLA, and a vendor security review. The largest paid vendors also own data Canonry cannot recreate. Ahrefs can research a historical corpus across many brands and prompts. A managed browser fleet can capture consumer sessions across geographies. A continuous panel can show evidence from before a customer started measuring. A self-hosted instance cannot backfill observations it never made. Those are architectural advantages, not packaging details. Canonry asks more of its operator. It expects comfort with Node.js, provider credentials, and the responsibility that comes with connecting first-party systems. For a team that only needs a recurring share-of-voice report, that is unnecessary machinery. ## How to choose The shortest decision is this: decide whether the product you need ends at the report. Buy a paid visibility tool when the job is to monitor answer engines, benchmark competitors, and distribute a clean dashboard with minimal operational work. Ask the vendor for the prompt list, sample count, geography handling, scoring formula, and raw evidence. If those are visible, the product is doing its job. Run Canonry when the report starts the work. The case gets stronger when the site spans many markets, when local and Bing evidence matter, when technical and server-side proof must sit beside the answer, or when an agent needs to move from observation to a reviewable intervention without rebuilding context between tools. Canonry is available on [GitHub](https://github.com/Canonry/canonry) under MIT starting with [version 5.0.0](/blog/canonry-5-mit-open-source-aeo-geo). Earlier releases keep their original licenses and future-license grants. ```bash npm install -g @canonry/canonry cnry bootstrap cnry serve ``` Paid tools tell you what the models said. Canonry is built for the morning after. ### Classifying AI Crawlers and User Fetches from Server Logs Article page: https://canonry.ai/blog/classifying-ai-crawlers-user-fetches-server-logs Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Server logs are where AI crawlers and user fetches show up. I couldn't find a good self-hosted way to separate the two, so I built it into Canonry. ## When the fetch happens on the provider's network A question in ChatGPT or Claude goes to the provider, not your site. If the app needs a live page, it may send a separate request to your server. ```text user action -> provider backend -> your site ``` When that request carries the expected user-agent and matches its published IP range, the path behaves like a server-side proxy. Your origin sees a provider-controlled address instead of the person's browser. The provider gets the page back and may use it in the answer. The person may never visit your site. Traditional browser analytics start after a page loads and executes JavaScript. In this server-side fetch path, the provider retrieves the HTML without running the page's JavaScript, so the GA4 browser tag and marketing pixels do not fire. The request appears in edge or origin logs while the analytics dashboard records no visit. [OpenAI says](https://developers.openai.com/api/docs/bots) certain user actions may visit a page with `ChatGPT-User`. [Anthropic says](https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) Claude may use `Claude-User` to retrieve content for a user's query. These are different from automatic crawlers such as `GPTBot`, `OAI-SearchBot`, and `ClaudeBot`. OpenAI publishes the IP ranges used by [`ChatGPT-User`](https://openai.com/chatgpt-user.json), and Anthropic publishes its [bot ranges](https://claude.com/crawling/bots.json). The providers do not promise that every user-triggered fetch follows this server-side path. A user-agent by itself is only a claim, so unmatched requests have to remain unverified. ## One AI traffic number hides different events | Event | What happened | | --- | --- | | Crawler | A request claimed an automatic crawler identity | | User fetch | A request claimed an identity tied to a user action | | Citation | An answer linked to the site | | Referral | A browser visit was attributed to an AI source | Canonry reads server traffic from Cloudflare, Cloud Run, Vercel, and WordPress. It stores hourly rollups by identity, normalized path, response status, and verification state. User fetches stay separate from crawler traffic. Citations come from saved answer evidence. Referrals come from browser visits attributed to an AI source. ## What showed up on canonry.ai During one seven-day window, 947 requests used AI user-fetch identities on `canonry.ai`. Another 1,667 used four crawler identities. Of the 927 requests labeled `ChatGPT-User`, Canonry's stored May 17 IP snapshot matched 64. At 9:27 p.m. ET on August 13, I rechecked the same logs against OpenAI's current file and got 76 matches. The other 851 did not match that snapshot. Of those unmatched requests, 789 arrived in five hourly bursts. Nearly all returned a redirect or a 404 while probing paths such as `/.env` and `/.ssh/id_rsa`. That pattern resembles a scanner using an AI user-agent, though the IP mismatch alone does not identify the caller. These are requests, not users or citations. The main job is keeping crawls, user fetches, citations, and referrals from becoming one misleading number. The traffic classifier and source integrations are in the [Canonry repository](https://github.com/Canonry/canonry). ### One Site, Many Markets: How Canonry Models AI Visibility for Complex Portfolios Article page: https://canonry.ai/blog/one-site-many-markets-ai-visibility Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. A large website can use one domain and still contain hundreds of distinct markets. Each market has its own buyer questions, pages, competitors, and evidence. A portfolio-level AI visibility score averages those conditions into a number that cannot tell the operator what happened, where it happened, or what to do next. This is the kind of work [Canonry Custom](/custom) is built for. We designed a measurement model that lets one portfolio operate as one project without turning every market into a separate dashboard or repeating every shared AI-search check hundreds of times. It keeps the market structure intact all the way through the evidence. ## A single domain can hide hundreds of separate markets The usual setup for an AI visibility tool is simple: add a domain, choose some prompts, add competitors, and watch a score. That works for a business with one clear market and a small set of pages. It breaks down when a shared domain contains hundreds of distinct markets. An answer to a regional product or service question might concern one market, a group of nearby markets, or a shared regional page. A citation might point to a canonical market page, a subdomain, or a portfolio page that serves more than one market. Without an explicit model, the system has no reliable way to answer basic operational questions: - Which market was mentioned or cited? - Which URLs should count as evidence for that market? - Which local competitors belong in the comparison set? - Which questions should run once for the portfolio, and which need a market-specific test? - Did a change in site structure alter the history behind a trend line? The point is to preserve what makes each market distinct while keeping shared work shared. ## The model: project, targets, URLs, and queries Canonry starts with a portfolio project, then models the business structure inside it. The user-facing model stays deliberately simple. | Layer | Portfolio example | What it controls | | --- | --- | --- | | Project | The full portfolio | Shared configuration, connected evidence, and the operating record | | Target | A market, brand, or business unit | The entity whose AI visibility is evaluated | | URLs | Market pages, aliases, and approved shared paths | The site coverage associated with that target | | Queries | Buyer questions and local search contexts | The tests assigned to relevant targets | The important part is the relationship between those layers. A target can cover more than one URL. A query can be relevant to more than one target. A URL does not become a market just because it exists in the sitemap. That last point protects the team from a common mistake. Large sites generate URLs faster than an operator can reason about them. Sitemap discovery can suggest candidates, but a reviewer confirms which URLs belong to which target before they affect measurement. ## Cross-domain aliases and shared pages need different handling Complex portfolios often spread one market across more than one web surface. A market may have a primary URL on the main domain and a corresponding URL on a separate subdomain. Both can represent the same target. If a cited source points to either URL, the system should recognize the relationship. Otherwise the same target can be counted twice, or one valid citation can disappear from the target view because it used an alternate domain. Shared regional and portfolio pages are different. They can support several markets at once. Automatically giving each market full credit for a single shared citation would inflate the results. Canonry keeps those paths reviewable until the team defines the correct ownership or decides that the citation is genuinely shared. The attribution rule is intentionally strict: - No matching target means the source stays unmatched. - One matching target means the source can be attributed. - More than one matching target means the source is ambiguous and receives no automatic credit. That gives an operator a problem to resolve instead of a misleading rollup. ## Shared questions should execute once, then resolve to each market There is another trap in multi-market tracking: multiplying the same AI-search request across every target. Some buyer questions are specific to one market. Those should carry that market's location, competitor set, and target context. Others are identical across multiple targets. When the query, provider, model, location, and configuration are identical, Canonry can record the raw execution once and evaluate it against every linked target. The shared result is not copied into a generic spreadsheet cell. Canonry keeps the raw answer, citations, prompt, provider, model, location, collection surface, and timestamp. It then evaluates the answer and cited URLs against the individual targets that use the query. This matters for both cost and truthfulness. The portfolio avoids paying for the same controlled request hundreds of times. Each market still gets a distinct result when its own URLs, entity names, and local evidence are evaluated. ## The measurement plan has to survive change Multi-market sites change constantly. Markets expand or consolidate. Brands are renamed. Routes move. A market receives a new page, loses an alias, or is reorganized into a new portfolio group. A trend line only means something when the team can see what was measured at the time. Canonry records an immutable measurement plan that captures the selected targets, URL coverage, query assignments, and configuration for a run. When the structure changes, the next plan becomes a new revision rather than silently rewriting history. That leaves a usable audit trail. An operator can see whether a visibility change followed a real market change, a new query set, a route update, or a shift in the AI result itself. They do not have to guess which version of the portfolio the old score used. ## Businesses this is built for Canonry Custom fits organizations whose website represents more than one local market, commercial unit, or operating context. | Business type | Why a separate target matters | | --- | --- | | Healthcare and wellness networks | Each clinic, dental office, veterinary practice, or fitness location competes against a different local set. | | Franchise and dealer systems | A brand can share national pages while franchise locations and dealerships need their own local questions and competitors. | | Regional service businesses | HVAC, pest control, legal, insurance, and similar businesses need to separate service areas, offers, and local authority. | | Hospitality, retail, and venue groups | Locations can share a brand but serve different traveler, shopper, or event audiences. | | National B2B companies | Offices, territories, industries, and product lines can need distinct buyer questions and evidence. | | Agencies and portfolio operators | Teams can keep multiple markets or brands distinct while using one operating record for reporting and action. | ## One operating record, where the work happens AI visibility is only one part of the investigation. A market that disappears from an answer can have a content problem, a crawl issue, a weak local entity signal, a missing page, or a competitor with stronger evidence. Canonry Custom can connect the AI answer with Google Search Console, GA4, Bing Webmaster Tools, supported server traffic, and technical evidence. The deployment can then expose that project-scoped record in a purpose-built application, through APIs and MCP tools, or inside the reporting surface the team already uses. ![Diagram of the Canonry operating record: evidence from AI answers, search demand, site engagement, server traffic, and technical evidence flows through a dedicated project-scoped layer to the application, an agent, portals, internal software, reports, and approved actions.](/blog/canonry-operating-record-v2.webp) For a multi-market portfolio, that means the question changes from "Did the domain's score move?" to "Which markets changed, which evidence moved with them, and what should the team inspect first?" A dashboard reports a score. An operating model shows the market, evidence, and next action. If your organization has one domain with many markets, brands, lines of business, or business units, [scope a Canonry Custom deployment](/agency-access?product=custom#contact). We will start with what must stay separate, which evidence exists today, and how your team needs to use the result. ### OpenAI API Web Search Can Now Use ChatGPT's Latest Instant Model Article page: https://canonry.ai/blog/openai-chat-latest-web-search-api Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. OpenAI just made it easier to compare API results with the experience people get in ChatGPT. The API now exposes `chat-latest`, a rolling model alias that points to the latest Instant model used in ChatGPT. More importantly for search testing, OpenAI lists `web_search` as one of its supported tools. You can select `chat-latest` as the model in the Responses API, enable web search, and get much closer to the model behavior behind everyday ChatGPT use. OpenAI documents the model and its supported tools on the official [`chat-latest` model page](https://developers.openai.com/api/docs/models/chat-latest). ## How to use chat-latest with web search `chat-latest` is the model. `web_search` is the hosted tool you give it through the Responses API. ```javascript const openai = new OpenAI(); const response = await openai.responses.create({ model: "chat-latest", tools: [{ type: "web_search" }], tool_choice: "required", input: "What changed in AI search this week? Cite the original sources.", }); console.log(response.output_text); ``` `tool_choice: "required"` matters when every request must search. With the default `auto` behavior, the model can decide that a search is unnecessary. OpenAI explains this behavior, citations, source metadata, and the available search controls in its [web search guide](https://developers.openai.com/api/docs/guides/tools-web-search). ## Why this matters for AI visibility testing Anyone comparing an API response with ChatGPT has run into an awkward problem: the API model and the model serving ChatGPT may behave differently. Prompt wording, retrieval decisions, citations, and the final answer can drift even when the user asks the same question. Using `chat-latest` removes one major variable. It lets you test against the current ChatGPT Instant model family while still using an API workflow that can be logged, repeated, and evaluated. This is useful for AI visibility monitoring, where [the surface you measure on decides what the number means](/blog/ai-visibility-tools-are-lying). If you are checking whether ChatGPT mentions a business, cites a page, or searches for a specific category, an older or unrelated API model can produce a misleading comparison. `chat-latest` gives the test a better model-level match. ## Closer parity, with a few limits This does not reproduce the entire ChatGPT product. ChatGPT also applies its own system instructions, model routing, memory, interface behavior, and product context. Those layers can still change the answer. The alias also moves over time. OpenAI says its underlying snapshot will be updated regularly, which is helpful when tracking the current ChatGPT experience but less predictable for production software. OpenAI currently recommends GPT-5.6 for production API usage. The practical split is straightforward. Use `chat-latest` when you want to compare your search workflow with ChatGPT's current Instant experience. Use a deliberately selected production model when you need more control over behavior and change management. ### AEO Does Not Need Another Rank Tracker Article page: https://canonry.ai/blog/aeo-does-not-need-another-rank-tracker Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. SEO rank trackers answer a familiar question: where did a page appear for a query? Many AI visibility products carry that model into answer engines by running a prompt set, counting mentions and citations, and plotting the movement. Those observations can reveal a gap. They do not produce an AEO plan. A missed mention can come from a crawl problem, a thin page, conflicting entity data, a stronger competitor source, a model change, or a prompt set that does not match how buyers ask. We covered the measurement limits in [Every AI Visibility Tool Is Lying to You](/blog/ai-visibility-tools-are-lying). The research workflow below shows why AEO needs more than another rank tracker. ## Build the question set from buyer research Canonry starts with the business, the buyer, the market, and the locations where a decision happens. The prompt set comes out of that brief rather than a generic keyword export. A residential buyer in Brooklyn and a facilities manager comparing commercial roof systems in Michigan need different questions, sources, and location settings. Discovery produces questions across informational, commercial, navigational, comparative, and transactional intent. Similar questions are deduplicated before Canonry spends money probing them. Grounded runs then show whether the business appears, which competitors occupy the answer, and where the brand is absent. This creates a prompt set with provenance. An operator can see which buyer and intent produced a question, why it belongs in the study, and which geography applies. If the business changes its market or offer, the prompt set can change for a documented reason. ## Keep the answer, sources, and test conditions together Each run keeps the model, configured location, full answer text, cited URLs, brand mentions, competitor overlap, and the provider's search-query fan-out when it is available. A buyer may ask a broad conversational question while the answer engine issues several narrower searches to find evidence. Those searches show how the engine translated the prompt into an information need. The cited domains also need labels. A recurring result may be a direct competitor, a directory, an editorial publication, a marketplace, or another source type. Treating every cited domain as a competitor produces the wrong work. If an editorial publication appears repeatedly, it may be a placement opportunity. A directory can point to a profile or entity problem that should be corrected at the source. A direct competitor belongs in the monitoring set and gives the operator a page or claim to compare. One cited-domain count hides those differences. ## Connect answer evidence to business evidence Search Console shows whether a question or related query has impressions and which page currently earns them. Analytics and server logs show AI referrals and crawler activity. Bing Webmaster Tools adds another search and indexing view. Google Business Profile matters for local businesses. Common Crawl provides an off-site link graph. The [free onsite technical audit](/audit) checks crawl access, page content, and structured data. Before Canonry recommends a new page, we look for a supporting signal. The signal may be first-party demand, recurring competitor evidence, or a citation pattern that persists across runs. We then find the best matching page on the site and inspect whether it already answers the question clearly. Sometimes the site already has the right page and needs a technical repair or clearer evidence. Sometimes an existing page needs an update. A genuinely uncovered buyer question may justify a new page. Repeated citations from an outside publication may point to outreach instead of another piece of owned content. ## Turn the evidence into a specific change Suppose a local roofing company disappears for a commercial question it cares about. The operator checks the prompt and Michigan location, reads the cited pages, confirms whether the site has a matching service page, and looks for demand in Search Console. The technical audit shows whether the page can be crawled and whether its schema supports the service and location. That investigation produces a scoped recommendation. It may name the page to update, the missing claim or structured field, the external source worth pursuing, and the answer test that should run afterward. The evidence stays attached so another operator can review the reasoning before work begins. If the answers vary across repeated runs without a stable source pattern, the right action may be to collect more samples. A changing model is a poor reason to rewrite a sound page. The research record makes that restraint possible. ## What this looked like for AZ Coatings The [AZ Coatings case study](/case-studies/azcoatings-polyurea-roofing-michigan) began with a new seven-page WordPress site that had almost no structured data, conflicting founding dates, broken descriptions, and an entity collision with a similarly named company in Arizona. The work added regional pages, canonical entity markup, direct-answer content, internal links, and a cleaner geographic record. Six weeks into the ongoing engagement, recorded Michigan-qualified tests showed AZ Coatings in a ChatGPT map result and as a cited source, with inline citations also appearing in Gemini. Several changes shipped during the same period, so we do not attribute the result to one edit. The record still lets us compare the starting site, the pages and schema that changed, the location used for the checks, the answers that appeared, and their sources. If the result disappears later, we have a history to investigate. ## Repeat the same test after the work ships After a change goes live, Canonry repeats the configured prompt, provider, and location. The operator compares the raw answer, cited sources, search-query fan-out, brand appearance, and relevant first-party data. The result joins the same history as the recommendation that prompted the work. A browser capture belongs in a study of the consumer interface. A grounded API call is a better fit when the work needs repeatable configuration, location context, raw responses, or provider telemetry. Canonry supports both and labels the surface that produced each observation. Canonry uses "more accurate" to describe decision quality. No outside monitor can recreate the private AI session of every buyer. We can document the question, test conditions, answer evidence, business evidence, site state, change, and follow-up result. That gives the operator a reviewable basis for action. ## What to ask of an AEO tool Ask to see the actual prompts, where they came from, how often they ran, which model and geography were used, and which sources supported the answer. Ask for the sample size and raw evidence. A recommendation should link back to first-party demand, an owned page, a recurring source, or a technical issue. A causal claim should show the starting state, the change, and the later observations. AI visibility monitoring is the beginning of the workflow. The useful output is a documented decision about what to inspect or change and the evidence used to make it. That is the part a rank tracker cannot supply. Agencies that would rather buy that workflow than staff it can run it through [white-label AEO delivery](/white-label-aeo-for-agencies), where Canonry owns the research and implementation behind the client relationship. ### Every AI Visibility Tool Is Lying to You Article page: https://canonry.ai/blog/ai-visibility-tools-are-lying Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. I'm an experienced software engineer, and I've spent enough time building and debugging measurement systems to know when a dashboard is asking you to trust a number it cannot support. A new software category now promises to tell brands how visible they are inside ChatGPT, Claude, Gemini, Perplexity, and Google's AI answers. Then it turns that messy system into tidy claims like mention rate, citation rate, share of voice, or rank. When a tool says you are number four in your category, moved up two spots this week, or sit at 17% visibility while a competitor sits at 31%, I do not think the signal is worthless; I think the precision is made up. These systems are noisy, personalized, geographic, nondeterministic, and constantly changing, so a clean leaderboard number hides the thing an engineer would actually want to inspect: the distribution, the methodology, the variance, and the raw evidence. Most vendors are trying to measure something important, but the mechanism is usually weaker than the dashboard admits. If a tool claims to show "what customers see" in ChatGPT or Claude, it is probably scraping the consumer app or calling an API. A scrape captures one synthetic session, and an API call uses a different surface than your customer uses. Both can produce useful directional signal, especially when they reveal invisibility on commercial prompts or gaps in a geography, but neither should be sold as a precise, stable truth without showing its work. ## The frontend scrape problem Scraping the ChatGPT or Claude frontend sounds persuasive at first. The vendor can say, truthfully, that it opened the app, asked the question, and recorded what the product returned. This is closer to the surface a real user sees. It still measures one controlled surface. A scrape comes from one account, or a controlled account pool. That means one history state, one memory state, one subscription tier, one geography, one browser session, and one prompt. Change any of those and the answer can change. A real buyer asking "best CRM for a seed-stage startup" and a clean browser asking "best CRM software" from a datacenter IP are different instruments. Mass scraping adds more bias. At any meaningful volume, the work has to run from somewhere: cloud machines, proxy routes, managed browsers, headless sessions, or another automation layer. That automation layer can bleed into the measurement. Concentrated IP patterns. Repeated logins. Odd session rhythms. Rate-limit pressure. Possible anti-abuse handling from the AI product itself. The operator has to choose. Clean accounts are repeatable and unlike customers. Aged accounts have history and weaker controls. A benchmark account that asks thousands of category prompts also creates its own personalization trail. After a while, the account's whole life is benchmark traffic. This matters most for local and commercial prompts. "Best commercial roofing company near me" changes by place. "Best AEO agency in NYC" changes by place. The answer depends on the user's location, the retrieval system, the account, and the sources pulled at that moment. A single frontend answer is one lab sample. ## The same prompt changes across runs The simplest defense of an AI visibility rank is this: we ask the same question every week and count whether you show up. This only works if the same question has a stable answer. The same words often produce different answers. Even temperature-zero LLM calls are not perfectly stable in production. Thinking Machines Lab [explained one technical reason](https://thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/): batching and kernel behavior can vary under real production load. Their example showed identical temperature-zero requests producing multiple unique completions. SparkToro and Gumshoe saw the marketing version of the same problem. They had volunteers run repeated commercial prompts through ChatGPT, Claude, and Google's AI products. Their [research](https://sparktoro.com/blog/new-research-ais-are-highly-inconsistent-when-recommending-brands-or-products-marketers-should-take-care-when-tracking-ai-visibility/) found that brand recommendations changed a lot across repeated runs. This is the core measurement problem. If the next draw from the same system can name a different set of brands, then "you rank number four" becomes one sample from a distribution. An honest dashboard would show the distribution. ## Consumer apps and APIs behave differently Some tools skip browser scraping and call provider APIs instead. The operational case is strong. API calls are easier to repeat, easier to audit, cheaper to run at scale, and less likely to break when a web app changes. The tradeoff: the API and the consumer app behave differently. The consumer product may have memory, account personalization, model routing, web retrieval, location inference, shopping modules, local modules, citations, and product-specific presentation. The API gives you a programmable model call with the tools and parameters you enable. OpenAI's API docs, for example, require you to add tools such as [web search](https://developers.openai.com/api/docs/guides/tools) when you want grounded retrieval. Google's Gemini API has its own [grounding and search configuration](https://ai.google.dev/gemini-api/docs/google-search). The gap cuts both ways. A raw API call can understate what the app would know because it browses differently. A browser scrape can overstate what real users would see because it captures one personalized session and calls it representative. The API can be the right surface for controlled measurement. Sell it that way. Avoid calling it "what the consumer app showed your buyer." ## Prompt sets manufacture the score AI visibility tools monitor a prompt set. They sample the market instead of covering the full long tail of real buyer questions. The prompt set is decisive. If I track "best AEO agency in NYC," "AI search optimization consultant," and "answer engine optimization audit," I get one picture of Canonry. If I track "SEO agency," "digital marketing firm," and "AI marketing software," I get another. Both prompt sets can be valid. They answer different questions. The headline number depends on the selected prompts, their weights, the run frequency, and the competitor set. Profound's own prompt-design guide says its users generally track [100 to 1,000 prompts](https://www.tryprofound.com/blog/how-to-design-prompts-for-ai-visibility-tracking), with a couple hundred being typical. The dashboard is sampling the market. The scoring formula matters just as much. One dashboard can score mention frequency. Another can weight citation position. Another can count source links. Another can blend sentiment. Digital Applied's AI share-of-voice framework gives a clean example: [the same brand, on the same data](https://www.digitalapplied.com/blog/ai-share-of-voice-tracking-brand-citations-framework-2026), scores 20% mention-based share of voice, 16.8% position-weighted share of voice, and 31.4% citation-based share of voice. Same evidence. Three headline numbers. Three competitive standings. Practitioners are skeptical for good reason. In the same Digital Applied piece, Dan Taylor of SALT.agency criticizes vendors for measuring small, static prompt sets inside a contrived environment. Digiday reported the same operational problem from the buyer side. Paul Dyer, CEO of /prompt, said that if you give [three tools the same prompts](https://digiday.com/marketing/marketers-question-expensive-ai-visibility-tools-as-inconsistent-results-fuel-skepticism/), you get three different answers. Without the prompt list, runs per prompt, geography, model, account state, and scoring formula, the dashboard is showing a constructed metric. Constructed metrics can be useful. They need a label. ## Location breaks the leaderboard Geography is the part most dashboards wave away. For local, regional, and service-area businesses, location changes the question. A user in Brooklyn, Austin, London, or rural Michigan can get different recommendations for the same words because the answer engine infers local intent. A single global visibility rank is often meaningless. "Visible in ChatGPT" where? From which user location? With which local retrieval context? With which city or service-area phrase? Frontend scraping makes this especially messy. A synthetic browser run from a cloud server looks unlike a buyer in the market you care about. You can try proxies. You can try account pools. You can try browser automation. Now your "truth" depends on whether the frontend accepted the location story your scraper told. API-based measurement has a cleaner path here: pass explicit location context where the provider supports it, and run the same prompt across the geographies you care about. You get a controlled location variable instead of an accidental scraper artifact. Canonry takes that path. ## Why local execution matters for local SEO This is where Canonry's local-first design changes the measurement problem. Most hosted dashboards run probes from vendor infrastructure. For a national SaaS query, that may be fine. For a local client, it is often the wrong instrument. A plumber in Queens, a dentist in Austin, or a roofing contractor in Michigan needs to understand answers that buyers see inside the service area. A scraper cluster in another region is a weak stand-in. Canonry is [open source and self-hosted](/open-source-platform), so it can run on a machine in the market. An agency can run checks from its own office, from a technician's laptop, or from another machine closer to the target consumer. Nondeterminism still exists. API results can still differ from the consumer UI. The win is narrower and practical: remove outsourced cloud geography from the measurement. For local SEO and local AEO, that detail matters. The closer the measurement environment is to the buyer's environment, the less you have to trust a proxy story. You can still pass explicit location context where providers support it. When the test runs from a machine in the relevant market, accidental signals line up with intentional ones. This makes Canonry more accurate for operators serving local clients. If your customer is a Chicago HVAC company, a Brooklyn hospitality group, or a Michigan roofing contractor, you can run the same prompt set from different geographies. The difference is the thing you are trying to measure. ## Model drift turns trend lines into fiction Even if you handle sampling, personalization, API-vs-app differences, prompt selection, and geography, the instrument still changes. The model behind a familiar product name can be updated, routed, rolled back, or silently adjusted. Retrieval systems change. Citation behavior changes. Product interfaces change. A week-over-week movement in your AI visibility dashboard can mean your content improved. It can also mean the model changed, the retrieval layer changed, or the product started answering the prompt differently. This is real enough to measure. Chen, Zaharia, and Zou's paper ["How is ChatGPT's behavior changing over time?"](https://arxiv.org/abs/2307.09009) compared March 2023 and June 2023 versions of GPT-3.5 and GPT-4. They found large behavior changes across tasks under the same public model names. One example: GPT-4's prime-number accuracy moved from 84% in March to 51% in June. Treat that as evidence of drift, rather than a current estimate of today's model quality. The same pattern appears in product behavior. In an April 29, 2025 post, OpenAI said it had [rolled back the previous week's GPT-4o update](https://openai.com/index/sycophancy-in-gpt-4o/) in ChatGPT because the removed version was too flattering and agreeable. An outside visibility dashboard usually sees that kind of product change only after it has already bent the trend line. From the outside, those effects are hard to separate. A dashboard can tell you that a number moved. It usually cannot prove why. The number can still help. The problem starts when the tool claims to explain why it moved. ## What these tools can honestly tell you The category can be useful. It needs to stop overselling precision. AI visibility monitoring can support useful conclusions: - We are invisible for the commercial prompts buyers actually ask. - We appear often on branded prompts but rarely on category prompts. - One competitor is cited much more frequently than we are. - Claude sees us while ChatGPT misses us. - We show up in New York while Los Angeles stays blank. - A content or schema change appears to correlate with better citation frequency over repeated runs. Those are directional, probabilistic findings. They are useful. They help teams prioritize work. Fake precision creates the problem: - You are rank number four. - You moved up exactly two positions. - Your AI share of voice is 17%. - This week's lift was caused by last week's blog post. - This single screenshot is what your customers see. Those claims collapse unless the tool shows its samples, its spread, and its method. ## How Canonry measures it Canonry avoids the idea of one canonical answer inside ChatGPT waiting to be scraped. We treat AI visibility as a distribution. The unit of measurement is repeated observations across prompts, providers, competitors, and locations. Canonry uses provider APIs because they give us a controlled, repeatable surface. APIs differ from the consumer app, and they are auditable. Where a provider supports it, we pass geolocation context instead of hoping a browser scrape inherits the right location from a proxy. We record the prompt, provider, timestamp, configured location, cited domains, mentions, source evidence, and run history so the number can be audited later. Does that match every real user? No. The sample has clear limits: no years of ChatGPT history, no exact consumer UI, and no full long-term distribution of every possible buyer question. The work is built around a narrower question: under this prompt set, in this geography, against these competitors, across these providers, how often do we appear? A narrower question is more honest and more useful. ## The downside: honest measurement costs more There is a reason the cheap dashboard is tempting. One scrape is cheap. One prompt run is cheap. A single API call with no repetitions and no geography is cheap. A polished line chart built from thin data can still look confident. Canonry's approach costs more because it does more work: - It runs more than one sample when the question matters. - It compares multiple providers instead of collapsing the market into one model. - It tracks competitors alongside your own domain. - It passes location context where supported. - It keeps evidence so the result can be inspected instead of just summarized. - It treats prompt sets as configuration. That costs money. Grounded calls can cost more than plain completions. Repeated runs multiply cost. Location-aware coverage multiplies cost again. If you want New York, Los Angeles, Chicago, London, and Toronto across 200 prompts and four providers, you are buying a [measurement program](/custom), not a dashboard seat. The cheap version is cheap because it measures less. ## The bar for any AI visibility dashboard If you are buying a tool in this category, ask for the work behind the number. Ask: 1. Are you scraping the consumer frontend, calling the API, or both? 2. If you scrape the frontend, whose account, location, memory state, and subscription tier are represented? 3. If you call the API, which tools are enabled, and how do you handle web retrieval? 4. How many runs per prompt produce the number? 5. Do you report variance or confidence intervals? 6. Is geography explicit, inferred, or ignored? 7. Can I see the raw answers and source evidence? 8. Can I see the prompt list and scoring formula? 9. Can I separate model drift from my own content changes? Without answers to those questions, the number is decoration. The honest future of AI visibility measurement is a distribution with evidence attached. Less catchy than "you are number four." Closer to the truth. ### Bots Now Outnumber Humans on the Web's HTML Pages Article page: https://canonry.ai/blog/bots-outnumber-humans-html-traffic Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. ![Two Cloudflare Radar charts. The top chart, Bot vs. Human filtered to HTML content, shows bots at 57.5% and humans at 42.5%. The bottom chart shows HTTP responses by content type: JSON 33.1%, images 12.7%, HTML 12%, JavaScript 8.1%, plain text 6.4%, video 3.7%, other 24%.](/blog/cloudflare-bot-vs-human-html.png) *Source: [Cloudflare Radar](https://radar.cloudflare.com/traffic#bot-vs-human), the seven days ending June 3, 2026.* A line just got crossed, quietly, and it changes who your website is for. For the week ending June 3, 2026, Cloudflare Radar's Bot vs. Human view, filtered to HTML responses, put automated traffic at 57.5% and humans at 42.5%. On the part of the web that represents actual pages, machines are now the majority of requests. ## What the chart is actually measuring The number that matters here is scoped on purpose. Cloudflare filtered it to HTML responses, the documents a person opens in a browser. That filter is the point. It strips out the API calls, the image and font fetches, and the background chatter, and leaves the thing you think of as "a web page." On exactly that surface, bots passed humans. Look one panel down and you can see why the filter matters. Across all HTTP responses by content type, HTML is only about 12% of the total. JSON leads at 33.1%, images are 12.7%, JavaScript is 8.1%, plain text 6.4%, video 3.7%, and everything else 24%. Most of the web's raw volume is machines talking to machines: APIs moving JSON, browsers pulling assets. HTML, the human-readable page, is a thin slice of all that traffic. And that thin slice is the one that just tipped majority bot. ## The bots reading your pages pull HTML Here is the part that matters for anyone who publishes content. The automated traffic hitting your pages is not abstract. A large and growing share of it is AI: crawlers that index and train, and answer-engine fetchers that pull a page live to answer a question someone just asked. All of them read the same thing: the HTML you return. GPTBot, ClaudeBot, PerplexityBot and the rest send a plain HTTP request and parse the HTML response. They generally do not run a browser or execute your client-side JavaScript. We covered the mechanics of this in [why Google Analytics misses AI traffic](/blog/ai-traffic-server-logs): no browser, no JavaScript engine, no analytics tag firing. Just a request, an HTML response, and a reader on the other end that happens to be a model. So the version of your page a machine understands is the raw HTML you ship. Not the hydrated app a human sees after the JavaScript runs. Not the number baked into a chart image. It is the text, the headings, the links, and the structured data that arrive in the initial HTML response. ## Your website's audience changed Put the two facts together. More than half of the requests for your pages now come from machines, and those machines read your HTML directly. The primary reader of your website, by volume, is increasingly not a person scrolling. It is a model parsing markup. You are now writing for two audiences at once. The human still needs the page to look good and read well. The machine needs the same facts to be present, plain, and parseable in the HTML. When those two pull apart, when the polished version lives in JavaScript and images while the HTML stays thin, the machine reader, now the majority, gets the worse version of your page. ## What to do about it This is the whole premise of answer engine optimization, and it is increasingly literal: write for the answer engine that is, by request count, your biggest visitor. 1. **Put facts in HTML text.** Your claims, prices, locations, and entity details belong in the HTML, not locked inside images or rendered only after JavaScript runs. If a machine reader has to execute your app to learn a fact, assume many will not. 2. **Add structured data.** Schema.org JSON-LD lets a machine parse your claims without guessing. Mark up your organization, articles, FAQs, and products so the facts are unambiguous. 3. **Ship machine-readable surfaces.** A clean sitemap and an llms.txt help machine readers find and prioritize your important pages instead of inferring them. 4. **Measure your own split.** Cloudflare's figure is an aggregate. Classify your own server logs by user-agent, verified against published operator IP ranges, to see which engines read you and how often. Your analytics dashboard will not show this. The web did not announce that its audience changed. A chart crossed 50% and kept climbing. The pages that win the next few years will be the ones whose HTML answers well on its own, because that is the version most of your visitors were ever going to read. Want to know how a machine reads your site today? [Run the free onsite technical audit](/audit), or see how [Canonry](https://canonry.ai/open-source-platform) classifies AI traffic straight from your server logs. ### AI NYC is now Canonry Article page: https://canonry.ai/blog/ai-nyc-is-now-canonry Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. We have renamed AI NYC to Canonry. We were running two names: AI NYC for the original agency service, and Canonry for the open-source agent platform we were building. As the product became the center of our work, keeping two brands in sync stopped being worth it. So we merged everything under one name. Canonry now includes [Canonry Embedded](/embedded) for agency reporting, [Canonry Custom](/custom) for dedicated deployments, and [Canonry Managed](/managed) for businesses that want AEO planned and executed end to end. The agent first AEO + web analytics monitoring and execution platform remains open source and available to self-host at canonry.ai/open-source-platform. Same team, same work. The site now lives at canonry.ai. ### Why AUQ named Canonry as one of the best AI visibility tools Article page: https://canonry.ai/blog/auq-canonry-ai-visibility-tool Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. AUQ, a SaaS-focused SEO and AEO agency, recently published their roundup of tools for measuring visibility in AI search. Among their top picks: [Canonry](https://canonry.ai/open-source-platform). The piece is worth reading because it is one of the first public reviews from a team running AEO programs for paying clients, not from the vendor. You can read their full post here: [Best Tool for Measuring Visibility in AI Search](https://auq.io/blog/best-tool-for-measuring-visibility-ai-search/). ## Who AUQ is AUQ specializes in SaaS SEO and AEO. They help software companies get cited in both traditional search and AI answer engines (ChatGPT, Claude, Gemini, Perplexity). Their work spans the classic Search Console and GA4 stack and the newer layer of LLM optimization, often called LLMO. It is a different problem shape from local service work: [SaaS AI visibility](/saas-ai-visibility) turns on category definition, comparison pages, and documentation rather than local entity signals. That positioning matters for context. An agency running across many SaaS clients has a different bar for tooling than a single in-house team. Anything that requires a human to log in and check a chart every day is a tax that compounds linearly with every new client. Tools that survive that environment tend to be tools that an agent can run, not just a person. ## What AUQ said about Canonry AUQ frames Canonry as "the operating system your coding agent runs on," not another dashboard. The features they called out: - Free and open source, with monitoring across ChatGPT, Gemini, Claude, and Perplexity - Local SQLite storage, with no multi-tenant cloud and no per-prompt pricing - 118 REST endpoints and 48 MCP tools for agent integration - Real-time citation tracking via live browser sessions (CDP) and provider APIs - Integrations with Google Search Console, GA4, Bing Webmaster, and WordPress - Automated schema and content fix workflows Their summary line: "Everything runs locally. Your data lives in a single SQLite file on your own machine. No multi-tenant cloud, no per-prompt pricing, no vendor lock-in." ## The full lineup AUQ compared AUQ reviewed 20 tools in their roundup. Canonry was the only entry labeled as both free and open source. The rest are paid SaaS dashboards or hosted free tiers you log in to. ![Top of AUQ's AI visibility tools comparison table, showing Canonry AIO in the second row marked as Free and Open Source](/blog/auq-tools-comparison-table.png) Reproduced from their post: | # | Tool | Pricing | Key capabilities | |---|------|---------|------------------| | 1 | AUQ AI Search Ranking Tool | Free | Competitor ranking, gap analysis, strategic optimization | | 2 | Canonry AIO | Free and open source | Local install for technical and keyword research GEO tasks | | 3 | Profound | Lite $499/mo; enterprise custom | Enterprise GEO, conversation explorer, hallucination detection | | 4 | Peec AI | €89/mo (~$95) | Brand mentions, sentiment, share of voice, prompt-level reporting | | 5 | AthenaHQ | Starter $295/mo+ | GEO, action center, citation and gap alerts | | 6 | Otterly AI | Lite $29/mo; Pro to $989/mo | Automated monitoring, KPI dashboards, reports | | 7 | Scrunch AI | $300/mo | Agent Experience Platform, misinformation detection, optimization workflows | | 8 | Hall AI | Free Lite; paid from ~$199/mo | Citation and web analytics, conversational commerce, agent analytics | | 9 | Rankscale AI | $20/mo to $780/mo | Daily tracking, dashboards, sentiment, site audit | | 10 | Ahrefs Brand Radar | $188+/mo | Real-time mentions, competitor tracking, AI-powered filters | | 11 | ZipTie AI | $99/mo; 14-day trial | Screenshot captures, AI Overviews and chat visibility, credit-based | | 12 | Am I On AI | $99 to $100/mo; 14-day trial | Prompt-level scans, full AI responses, source citations | | 13 | Goodie AI | Custom | Brand trust scoring, hallucination alerts, structured data diagnostics | | 14 | Gumshoe AI | Beta; TBA | Persona-based prompt generation, hallucination detection, topic matrices | | 15 | Knowatoa AI | Free tier; scalable paid | Brand gaps, sentiment, competitor benchmarking, prompt insights | | 16 | Surfer AI Tracker | $95/mo (25 prompts) | Prompt-level insights, source transparency, weekly trends | | 17 | Nightwatch LLM Tracking | $32/mo | LLM as search engines, daily updates, rank distributions | | 18 | SE Ranking's AI Visibility Tracker | $119/mo | AI Overviews, AI Mode, unified visibility, "no cited" insights | | 19 | xFunnel AI | Custom; free plan | Deep citation analytics, intent analysis, playbooks and experiments | | 20 | Moz Pro | $49+/mo | AI Overview tracking, competitive research, site crawls | ## The "operating system" framing The reason this framing lands is that it names the gap most AEO tools leave open. A dashboard tells you your citation count this week. It does not give you the substrate to run an agent that notices a citation drop, opens a ticket, runs a schema audit, drafts a fix, validates the new version on the next sweep, and only escalates to a human when the loop fails. Canonry was built so that every capability is reachable from three equal surfaces: the web UI for humans, the CLI for scripts, and the API and MCP tools for agents. There is no "you can do this in the dashboard but not the API" gap. That is the part AUQ is pointing at when they call it an operating system. ## What this maps to in client work For an agency running across many SaaS domains, the operating-system framing maps directly to operational reality: - Each client is a project with its own provider config and key phrases - Sweeps run on a schedule, not when someone remembers to log in - Anomalies fire webhooks instead of waiting to be noticed in a chart - Agents can be wired into ticketing, content systems, and audits without screen scraping When the tracker is wired into the agency loop instead of living in a tab, the issues that surface tend to fall into a few buckets. ### Provider drift Cited in Claude, missing in OpenAI for the same query. The content is the same; the difference is usually structured data, freshness signals, or which corpus the provider is pulling from on that day. Once you can see the drift in the data, you can fix the underlying signal and watch the gap close on the next run. ### Competitor displacement A competitor jumps ahead on a category query. More often than not, this traces back to a schema change the competitor shipped (FAQPage, HowTo, Product) that the AI prefers when synthesizing an answer. You only catch this if you are tracking competitor mentions alongside your own. ### Stale citations AI cites your old pricing, your old product name, or a feature you sunset. Your live page is correct. The model is pulling from an older snapshot. You need both the citation evidence (the surfaced text) and the URL to know which page or which version of the page is being referenced before you can fix it. ### Category versus brand gaps You are cited on branded queries (your company name) and invisible on category queries (the problem you solve). The traffic difference is enormous. This is a positioning problem that only becomes obvious when you put brand and category queries in the same view. ### Wrong-page citations You are cited, but the AI is pointing buyers at a two-year-old blog post instead of the relevant product or pricing page. Citations on the wrong page convert worse than no citation at all on the right one. None of these show up in a vanity citation count. They show up in the run-over-run diff that a working agency loop produces. ## Why outside reviews matter Vendor copy is vendor copy. The useful signal is how a tool reads to people who buy tools to do the job, not the people selling them. AUQ's review reads as a working AEO agency telling other working AEO operators which substrate they picked and why. That is a sharper test than any feature checklist we could write ourselves. If you want to read the full piece, it is here: [AUQ on the best tool for measuring visibility in AI search](https://auq.io/blog/best-tool-for-measuring-visibility-ai-search/). And if you want to try Canonry, the install path is at [canonry.ai/open-source-platform](https://canonry.ai/open-source-platform) or [github.com/Canonry/canonry](https://github.com/Canonry/canonry). ### Why Google Analytics Misses AI Traffic (and How to Catch It) Article page: https://canonry.ai/blog/ai-traffic-server-logs Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. ![AI traffic rollups dashboard showing 678 crawler hits, 87 AI user fetches, and 0 AI referral sessions over the last 7 days](/blog/ai-traffic-rollups-dashboard.png) ## Your Analytics Can't See AI Traffic. Your Server Logs Can. Imagine ChatGPT fetched dozens of pages from your site this week to answer real users, and GPTBot crawled hundreds more to train its next model. Now open Google Analytics. You will see none of it. Not an undercount. Zero. This is not a setting you forgot to flip. It is how browser-based analytics works, and it means the fastest-growing slice of your traffic is invisible in the dashboard you check every day. Here is why, and how to see AI traffic using data you already have. ## Why your analytics misses it Google Analytics is a JavaScript tag. It only records a visit when a real browser loads your page and executes that script. AI crawlers and assistants do not run a browser. They send a plain HTTP request to your server, read the HTML response, and leave. There is no JavaScript engine anywhere in that flow, so the tag never fires and the visit is never counted. There is no setting that fixes this. GA measures browsers, and a bot is not a browser. Worse, it quietly drops traffic it flags as a bot before it ever builds your report, and it will not tell you how much it removed. ## The data is already in your server logs Every request that reaches your site, human or bot, gets written to your server access logs. Each line carries a user-agent, a source IP, a path, and a status code. That is everything you need. No pixel, no cookie banner, no client-side script. The raw evidence is already on disk. The real work is classifying it. ## Step one: match the user-agent Start by matching the user-agent string against known AI bots: GPTBot, ClaudeBot, OAI-SearchBot, PerplexityBot, ChatGPT-User, and so on. On its own, this proves nothing. The user-agent is just a string the caller chooses to send. I can send your site a request that says "GPTBot" right now, and so can any scraper. A name match is a claim, not a fact. ## Step two: verify with the IP To turn that claim into a fact, check the request's source IP against the IP ranges [most operators publish](#references). ![Verified ChatGPT-User event row: kind Crawler, identity openai-chatgpt-user (OpenAI), evidence verified HTTP 200](/blog/chatgpt-user-hit-verified.png) Now you have a real test. The user-agent claims an identity, and the source IP either backs it up or it does not. If the IP falls inside the operator's published range, it is a verified bot. If the user-agent says GPTBot but the IP belongs to some unrelated host, treat it as unverified, and most likely a spoof. Count the two separately, because they mean very different things. ## Three kinds of AI traffic Even once a bot is verified, "AI traffic" is not a single number. It splits into three kinds, and each one answers a different question. **Bulk crawl.** GPTBot, ClaudeBot, Googlebot and others pulling pages in volume to index or train on. This is background machine activity, not tied to any single person. It tells you whether AI systems know your content exists at all. No crawl, no chance of ever being cited. **Live user fetch.** ChatGPT-User, Claude-User, Perplexity-User fetching one page, right now, because a real person just asked the assistant a question and it needs your content to answer. It tells you AI is reading your page on demand. That is live demand. **Referral.** No bot at all. A person read an AI answer, clicked a link inside it, and landed on your site. You catch it from the Referer header or a utm_source tag such as chatgpt.com or perplexity.ai. It tells you AI sent you a real visitor. ## The full picture Line the three up and you see the whole path a piece of content travels: - Crawl: AI learns your page exists. - Live fetch: AI reads it to answer someone. - Referral: that someone clicks through to you. Your server logs capture all three. A JavaScript tag captures, at best, the last one, and only when the referrer survives the click. Everything upstream of that final hop, the part that decides whether AI ever mentions you at all, never reaches the dashboard. References Every operator documents its bots, and most publish the exact IP ranges those bots run from. Verify against these primary sources, not third-party aggregators. **OpenAI: GPTBot, OAI-SearchBot, ChatGPT-User** - [Bots overview](https://platform.openai.com/docs/bots) - IP ranges: gptbot.json, searchbot.json, chatgpt-user.json **Google: Googlebot, plus the user-triggered fetchers** - [Crawlers overview](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) - IP ranges: googlebot.json, user-triggered-fetchers.json **Perplexity: PerplexityBot, Perplexity-User** - [Perplexity crawler documentation](https://docs.perplexity.ai/guides/bots) (the perplexitybot.json and perplexity-user.json IP files are linked from this page) **Anthropic: ClaudeBot, Claude-User, Claude-SearchBot** - [Anthropic crawler documentation](https://docs.anthropic.com/) - Anthropic is the exception: it documents its bots but does not publish a machine-readable IP-range file. Verify those by reverse DNS, confirmed with a forward lookup back to the same IP. ## You can catch this today None of this needs new instrumentation. It is your own server logs, parsed, verified against published IP ranges, and split by intent. You can build that pipeline yourself. Or you can use [Canonry](https://canonry.ai/open-source-platform). We spent a lot of time and thought building this out, and as far as we know, it is the only open source tool that does it. It supports Vercel, WordPress, and Google Cloud Run out of the box: [github.com/Canonry/canonry](https://github.com/Canonry/canonry). ### Claude Appends the Current Year to Some Web Searches Article page: https://canonry.ai/blog/claude-appends-year-to-web-searches Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. A research note from the Canonry team. When Claude runs a web search to answer certain queries, it rewrites the search string to include the current year, even when the user did not type one. Our study, led by Canonry researcher [Alejo Garcia](https://www.linkedin.com/in/alejo-garcia-6b232129b/), sampled subqueries across categories and inspected the search strings Claude actually issued. The pattern was consistent enough to act on. ![Sample of Claude search queries showing where the year was appended, grouped by category](/blog/claude-year-appending-data.png) ## The pattern Year gets appended for commercial and "best X" comparison queries: - "best CRM for startups" becomes "best CRM for startups 2026" - "best collaboration tools for remote teams" becomes "best collaboration tools for remote teams 2026" - "best running shoes" becomes "best running shoes 2026" Year does not get appended for: - Advice and decision queries ("how to choose a therapist", "how to find a specialist doctor") - Local service queries ("best plumber near me", "home cleaning services near me") - Cost estimate queries ("home renovation cost estimate") Roughly: if the answer is meant to be evergreen advice, no year. If the answer is a list that should be current, the year goes in. ## What this means for your content If you publish a "best X" or comparison page and the page itself only references last year (or no year at all), Claude's actual search has "2026" in it. A page that mentions 2026 in its title, headings, and schema is a better match than one that does not. For evergreen advice pages, the opposite holds. Stamping "(2026)" on a how-to article does nothing for Claude's search because Claude is not searching with a year on those queries. It can also age the page in users' eyes faster than necessary. ## Practical takeaway 1. For commercial, comparison, and "best X" pages: put the current year in the H1, in section headings, and in `dateModified` on Article or BlogPosting JSON-LD. Refresh on a real cadence so the date is honest. 2. For advice, how-to, local service, and cost-estimate pages: leave the year out of the title. Use `dateModified` for trust, but do not stuff a year into the H1. 3. Audit your corpus by category. Apply the year treatment where the retrieval layer is actually searching with one, not everywhere. The retrieval layer is doing more query rewriting than most content strategy assumes. The cheapest signal you can give it is matching the query it is actually running. For a broader look at how each major engine appears to retrieve and cite sources, see our [cross-platform optimization notes](/chatgpt-perplexity-claude-optimization-for-nyc-businesses). ### Schema Markup for AI Citations: The Complete Guide Article page: https://canonry.ai/blog/schema-markup-for-ai-citations Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Structured Data has the highest base weight in our current AEO scoring model. It is one of 16 onsite technical signals, and it gives machines a clearer description of a business and its services. The historical comparison below shows a strong association, not proof of causation. This guide is technical. It assumes you know enough HTML to add a script tag, or you work with someone who does. ## What the data shows Canonry's [free onsite technical audit](/audit) scores a webpage's schema implementation and returns a score out of 100 across 16 factors. We then correlate those scores with citation outcomes tracked by [canonry](https://canonry.ai/open-source-platform), an agent first AEO + web analytics monitoring and execution platform that runs scheduled agents to record whether AI models mention a business and how site traffic changes. Here is a real comparison: | Schema factor | Cited site (90/100 overall) | Uncited site (48/100 overall) | |--------------|---------------------------|-------------------------------| | Structured Data | 100 (A+) | 42 (F) | | Schema Completeness | 100 (A+) | 55 (F) | The cited site has 9 JSON-LD blocks: LocalBusiness, FAQPage, Service, HowTo, and more. The uncited site has 6 blocks but they are incomplete, missing required properties and lacking entity connections between schemas. The cited site gets recommended on 5 of 11 tracked keywords across 66 monitoring runs. The uncited site: 0 of 23. Schema alone does not guarantee citation. Missing or contradictory schema can leave important business facts harder to verify, especially when the visible page is also unclear. ## Why schema matters more for AI than for traditional SEO Google has used [structured data](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data) for years to support rich results and other features. It is one useful representation of the information on a page. The detailed retrieval paths of AI products are not public and can change. When a site includes LocalBusiness schema with `areaServed`, `serviceType`, and `address` properties that agree with its visible copy, it provides a clearer source of business facts. Without schema, systems must rely more heavily on the page's HTML and other sources. The audit data backs this up. Content depth (word count, headings) only partially compensates for missing schema. The uncited site in the comparison scores 72/100 on content depth but 42/100 on structured data. The content exists, but the model cannot efficiently extract the entity facts it needs. ## The four schemas every business needs ### 1. LocalBusiness (or Organization) The foundation. Tells AI who you are, where you are, and how to reach you. ```json { "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Your Business Name", "description": "A clear one-sentence description of what your business does", "url": "https://yourbusiness.com", "telephone": "+1-555-123-4567", "email": "hello@yourbusiness.com", "address": { "@type": "PostalAddress", "streetAddress": "123 Main St", "addressLocality": "New York", "addressRegion": "NY", "postalCode": "10001", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 40.7128, "longitude": -74.0060 }, "areaServed": [ { "@type": "City", "name": "New York" }, { "@type": "State", "name": "New York" } ], "openingHoursSpecification": { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "09:00", "closes": "17:00" }, "sameAs": [ "https://www.google.com/maps/place/your-business", "https://www.yelp.com/biz/your-business", "https://www.linkedin.com/company/your-business" ] } ``` **Properties AI models actually use:** - `name` and `description` are the first things models extract - `areaServed` is critical for location queries. Without it, the model does not know where you operate. [Schema.org areaServed docs](https://schema.org/areaServed) cover accepted formats. - `sameAs` links help with entity resolution, connecting your website to other platform profiles - `geo` coordinates remove location ambiguity Use [Schema.org's LocalBusiness subtypes](https://schema.org/LocalBusiness) for specificity: `RoofingContractor`, `Dentist`, `LegalService`, `RealEstateAgent`, etc. ### 2. Service Connects what you do to who you are. ```json { "@context": "https://schema.org", "@type": "Service", "name": "Commercial Roof Coating", "description": "Industrial-grade polyurea roof coating for commercial flat roofs. Extends roof life 20+ years.", "provider": { "@type": "LocalBusiness", "name": "Your Business Name", "url": "https://yourbusiness.com" }, "areaServed": { "@type": "State", "name": "New York" }, "serviceType": "Roof Coating" } ``` The `provider` property links Service to your LocalBusiness entity. Without it, the schema describes a service floating in space with no connection to your business. Models need that connection to build a recommendation. ### 3. FAQPage Directly extractable Q&A format. One of the highest-impact schemas for AI because models can pull answers verbatim. ```json { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "How much does commercial roof coating cost?", "acceptedAnswer": { "@type": "Answer", "text": "Commercial roof coating typically costs $3-$7 per square foot. A 10,000 sq ft flat roof usually runs $30,000-$70,000 for a complete polyurea system." } } ] } ``` [Google's FAQPage documentation](https://developers.google.com/search/docs/appearance/structured-data/faqpage) has the full spec. Use questions people actually ask AI, not marketing questions. [AnswerThePublic](https://answerthepublic.com/) and [AlsoAsked](https://alsoasked.com/) help you find real questions. ### 4. Person E-E-A-T signal. Explicitly declares who has expertise and in what. ```json { "@context": "https://schema.org", "@type": "Person", "name": "Founder Name", "jobTitle": "Founder & CEO", "worksFor": { "@type": "LocalBusiness", "name": "Your Business Name" }, "knowsAbout": ["commercial roofing", "polyurea coatings", "industrial waterproofing"], "sameAs": ["https://www.linkedin.com/in/founder-name"] } ``` The `knowsAbout` array connects a real person to topic expertise. Models use this for authority scoring. The uncited site in the comparison scores 25/100 on E-E-A-T because it has no author attribution or Person schema. ## Bonus schemas that give you an edge **AggregateRating** (nest inside LocalBusiness): ```json { "@type": "AggregateRating", "ratingValue": "4.8", "reviewCount": "47", "bestRating": "5" } ``` **HowTo** (for process-oriented content): ```json { "@type": "HowTo", "name": "How Commercial Roof Coating Is Applied", "step": [ { "@type": "HowToStep", "name": "Inspection", "text": "Complete assessment of current roof condition." }, { "@type": "HowToStep", "name": "Surface Prep", "text": "Power washing, repair, and primer application." } ] } ``` **Article** (for blog posts, signals authorship and freshness): ```json { "@type": "Article", "headline": "Title", "author": { "@type": "Person", "name": "Author" }, "datePublished": "2026-03-27", "dateModified": "2026-03-27" } ``` ## Implementation by platform ### WordPress Most WordPress SEO plugins (Yoast, Rank Math, All in One SEO) handle Organization schema automatically. For LocalBusiness and Service, you can use plugin extensions or add custom JSON-LD via a code snippets plugin like "Insert Headers and Footers" or "WPCode." ### Next.js / React Add JSON-LD directly in components: ```jsx ``` Or use [next-seo](https://github.com/garmeeh/next-seo) and [schema-dts](https://github.com/google/schema-dts) for type safety. ### Shopify Edit `theme.liquid` to add JSON-LD in the ``, or use [JSON-LD for SEO](https://apps.shopify.com/json-ld-for-seo). ### Any platform Add `` in your page ``. No build tools required. ## Validation Always validate before deploying: 1. **[Google Rich Results Test](https://search.google.com/test/rich-results)** for Google compatibility 2. **[Schema.org Validator](https://validator.schema.org/)** for structural correctness 3. **[JSON-LD Playground](https://json-ld.org/playground/)** for complex nesting issues Run all three. Google's tool only validates types they support for rich results. Schema.org catches issues Google misses. ## Measuring schema impact Adding schema is not a set-and-forget task. You need to verify it works and track whether it changes your citation outcomes. The recommended workflow: 1. **Audit before.** Run the [free onsite technical audit](/audit) and note your Structured Data and Schema Completeness scores. 2. **Implement schema.** Deploy using the examples above. 3. **Audit after.** Run the onsite technical audit again and compare the Structured Data and Schema Completeness findings. If the result is not what you expect, use the validator to check the markup. 4. **Monitor citation changes.** Set up [canonry](https://canonry.ai/open-source-platform) to track whether ChatGPT, Gemini, Claude, and [Perplexity](https://www.perplexity.ai/) start citing you for your target queries over the following weeks. The audit gives you the before/after on technical readiness. The monitoring gives you the actual citation impact. ## Common mistakes - **Using Microdata instead of JSON-LD.** JSON-LD is what [Google recommends](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data#structured-data-format) and what AI models parse most reliably. - **Incomplete schemas.** LocalBusiness with just a name and no address or service area is almost useless. Fill out every relevant property. The Schema Completeness factor catches this. - **Schema that contradicts page content.** If schema says New York but page content says Los Angeles, the business facts are harder for any system to interpret consistently. - **No entity connections.** Service schema should reference LocalBusiness via `provider`. Person via `worksFor`. These connections make the relationship between facts explicit. - **Forgetting to re-audit.** Schema is not static. As you add pages and services, re-run the audit to make sure new content has matching schema. ### How to Rank on ChatGPT in 2026 Article page: https://canonry.ai/blog/how-to-rank-on-chatgpt Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. "Ranking on ChatGPT" is not the same as ranking on Google. For organic answers, there are no positions to buy or pages of results to climb. When someone asks ChatGPT a question about your industry, it may mention you or it may not. > **Organic answers and paid ads are different surfaces.** This guide is about earning citations in organic AI answers. We built an open-source platform called [canonry](https://canonry.ai/open-source-platform) to measure this. Canonry is an agent first AEO + web analytics monitoring and execution platform: it runs agents that ask AI models the same queries your customers would ask, records whether they mention a specific business, and tracks how those answers and site traffic change over time. Each check is called a "run." We tracked 11 keywords across 66 runs over two weeks for a local service business. The data paints a clear picture of what works and what does not. ## The numbers: what citation monitoring shows Here is what citation rates look like across different query types: | Query type | Example | Citation rate | |------------|---------|--------------| | Branded + location | "[business type] [city]" | 82-90% | | Generic + location | "[industry] agency [city]" | 31% | | Competitive | "best [industry] agency [city]" | 4% | | Informational | "how to [do something]" | 0% | The pattern is stark. When the query closely matches your brand + location, models cite you most of the time. When the query is generic or informational, citation drops off a cliff. For "how to rank on ChatGPT" specifically, we have 0 citations across 20 runs. Models answer with generic advice or cite Semrush, Neil Patel, and Search Engine Journal instead. This tells us two things: 1. **Entity strength matters.** If AI models have a strong entity representation of your business, they will recommend you for branded queries. 2. **Content gaps are real.** If you have not published content that directly targets an informational query, you will not get cited for it regardless of how strong your brand is. ## How ChatGPT decides what to recommend ChatGPT uses two sources: 1. **Training data.** The model knows about you if you had web presence before the training cutoff. 2. **Web browsing.** ChatGPT browses the web in real time using its own crawler ([OAI-SearchBot](https://platform.openai.com/docs/bots)) and a retrieval system that has been observed pulling from both Bing and Google. The exact mix is not fully public and appears to evolve. The browsing path is where most businesses should focus. You cannot retroactively change training data, but you control what ChatGPT finds when it browses. Because provider retrieval systems can vary, **broad indexing matters**. If you have only submitted your sitemap to Google, submit it to [Bing Webmaster Tools](https://www.bing.com/webmasters/) as well. Being indexed in both ecosystems improves discoverability, even though it does not guarantee an AI citation. For a provider-by-provider implementation review, see our [cross-platform optimization notes](/chatgpt-perplexity-claude-optimization-for-nyc-businesses). ## The citation volatility problem One of the most useful findings from the monitoring data: citations are not stable. Even for queries where a site is well-positioned, the model drops it roughly 1 in 5 times. For the strongest branded keyword in the dataset, here is the loss/recovery pattern over two weeks: - **Mar 14:** Lost, recovered within 24 hours - **Mar 18:** Lost, recovered same day - **Mar 23:** Lost, recovered next day - **Mar 26:** Lost, recovered within hours - **Mar 27:** Lost, recovered within hours Every single loss was followed by a recovery. The model did not permanently forget the business. It simply has natural variance in how it constructs responses. The practical implication: **do not panic over a single check.** If you ask ChatGPT your target query once and it does not mention you, that is not necessarily a problem. You need trend data, not snapshots. This is why automated monitoring matters. Checking once tells you almost nothing. Checking 66 times tells you your actual citation rate. ## Make sure ChatGPT can find you Check your `robots.txt` for OAI-SearchBot: ``` User-agent: OAI-SearchBot Allow: / ``` The [OpenAI documentation](https://platform.openai.com/docs/bots) lists its crawler user agents. Blocking an applicable crawler can prevent it from accessing your pages, but no single crawler rule determines every ChatGPT answer. ## Structure content for extraction When ChatGPT browses a page, it extracts chunks and synthesizes them. Pages that are easy to extract from get cited more. Canonry's technical model measures this with a Content Extractability factor that scores how easy it is for an AI model to pull clean facts from your page. In the audit data, one site scored 65/100 on extractability despite scoring 87/100 on content depth. Plenty of content, but the markup made it hard to parse. Another site scored 45/100 on extractability with 72/100 on depth. The gap between "content exists" and "content is extractable" is real. What works: - **Lead with the answer.** If your page targets "commercial roof coatings in Michigan," the first paragraph should state what you do, where, and why. Not a company history. - **Question headings.** "How much does commercial roof coating cost?" is more extractable than "Pricing Information." Models map user queries to headings. - **Short paragraphs.** Two to four sentences. Models extract paragraph-level chunks. - **Specific numbers.** "200+ projects since 2019" is more citable than "extensive experience." ## Add structured data In the current 16-factor scoring model, Structured Data has the highest base weight (12 before normalization). The historical site scoring 90/100 overall had complete schema markup (LocalBusiness, Service, FAQPage, HowTo). The comparison site scored 42 on Structured Data and had zero citations across 23 tracked keywords during the recorded period. Priority schemas: - [LocalBusiness](https://schema.org/LocalBusiness) with name, address, geo, service area, hours - [Service](https://schema.org/Service) for each service, linked to parent business - [FAQPage](https://schema.org/FAQPage) on pages with Q&A content - [AggregateRating](https://schema.org/AggregateRating) if you have reviews The [schema markup guide](/blog/schema-markup-for-ai-citations) has copy-pasteable JSON-LD for each type. [Google's Rich Results Test](https://search.google.com/test/rich-results) validates your implementation. ## Build external authority A business mentioned only on its own website is less likely to be cited than one that appears across directories, review sites, and press. Practical authority signals: - **[Google Business Profile](https://business.google.com/)** with complete info and recent reviews - **Industry directories** relevant to your vertical - **Review platforms** like [Yelp](https://www.yelp.com/), [Trustpilot](https://www.trustpilot.com/), [BBB](https://www.bbb.org/) - **Backlinks from authoritative domains** This is the same [citation-building work](https://moz.com/learn/seo/local-citations) local SEO has always emphasized. The difference is AI models use these signals for entity resolution, not just PageRank. ## Definition blocks: the most overlooked factor In the 16-factor model, definition blocks have a weight of 6 and most sites score terribly on them. One site in the dataset scores literally 0/100 because no page opens with a direct definition of what the business does. A definition block is simple: "X is Y. It does Z for W." If someone asks ChatGPT "what is [your service]," the model needs a sentence to pull. If your homepage starts with "Welcome to our company" instead of "[Company Name] is a [service type] provider serving [location]," you are making the model guess. Models do not guess when they have better options. ## How to rank on ChatGPT in 5 steps The full procedure, in order. Each step maps to a factor we have seen move the needle in monitoring data. 1. **Step 1: Review OAI-SearchBot in [robots.txt](https://www.robotstxt.org/).** Open your `robots.txt` and review `User-agent: OAI-SearchBot` against the [OpenAI documentation](https://platform.openai.com/docs/bots). Blocking an applicable crawler can prevent it from accessing a page, but no single rule determines every ChatGPT answer. 2. **Step 2: Submit your sitemap to [Bing Webmaster Tools](https://www.bing.com/webmasters/).** If your sitemap is only registered with Google Search Console, register it with Bing as well. This improves broad search discoverability without guaranteeing use in a ChatGPT answer. 3. **Step 3: Add LocalBusiness and Service JSON-LD schema.** Add [LocalBusiness](https://schema.org/LocalBusiness) schema with name, address, geo, service area, and hours to the homepage. Add [Service](https://schema.org/Service) schema for each service, linked to the parent business. Structured Data has the highest base weight in the current technical scoring model. 4. **Step 4: Rewrite your main service page with a definition block.** Open the first paragraph with a direct "X is Y" sentence, for example "[Company Name] is a [service type] provider serving [location]". Replace welcome-style intros so AI models have an extractable definition to pull when answering "what is" questions. 5. **Step 5: Run a [free onsite technical audit](/audit) and start citation monitoring.** Assess the page across 16 public signals, then schedule recurring checks against ChatGPT, Gemini, Claude, and Perplexity through [canonry](https://canonry.ai/open-source-platform) so changes become visible over time. Then start monitoring. Not once. Repeatedly. The loss/recovery patterns described above are only visible over time. Ask ChatGPT, Gemini, [Perplexity](https://www.perplexity.ai/), and Claude your target queries weekly, or set up [canonry](https://canonry.ai/open-source-platform) to automate it across all four. The [free audit](/audit) gives you a baseline. The monitoring tells you if your changes are working. If you would rather hand the work to a team that does this daily, that is what our [ChatGPT SEO service](/chatgpt-seo-agency) covers. ### How to Get Your Business Cited by AI Article page: https://canonry.ai/blog/how-to-get-your-business-cited-by-ai Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. When someone asks ChatGPT "who should I hire for X in my city," the model returns a short list of businesses. Not ten blue links. A handful of names, sometimes with reasons attached. If your business is not on that list, you are invisible to a growing share of buyers. > **Organic citations are not paid ads.** This guide covers how a business can become a better organic source for AI answers. We built an open-source platform called [canonry](https://canonry.ai/open-source-platform), an agent first AEO + web analytics monitoring and execution platform. It runs agents that ask AI models the same queries your customers would ask, records whether they mention your business in the answer, and connects those observations to web analytics. Schedule the agents daily or weekly, and you build a dataset of how your citation visibility changes over time. Using canonry, we tracked 11 keywords across 66 separate checks (what we call "runs") over two weeks for a local service business. Each run asks ChatGPT, Gemini, Claude, and Perplexity the same query and records whether the business gets named. The patterns are not random. Here is what actually determines whether you show up. ## What the data tells us about citation volatility One thing that surprised us early on: AI citations are not stable. A business can be cited for a query on Monday and absent on Wednesday, then back on Friday. For branded queries (think "[business type] + [city]"), we measured citation rates between 82% and 90% across runs. That means even for queries where a site is well-positioned, the model drops it roughly 1 in 5 times. For more generic queries like "[industry] agency [city]," the citation rate drops to 31%. For purely informational queries like "how to rank on ChatGPT," it is 0%. This is not a bug. AI models introduce randomness (called "temperature") into their responses. They also change behavior as their retrieval systems update. The practical implication: you need to be positioned strongly enough that the model cites you most of the time, not just once. ## Structured data is the highest-leverage fix Canonry's [free onsite technical audit](/audit) scores any webpage on 16 onsite technical signals associated with AI citation readiness. You give it a URL, and it checks structured data, content structure, entity signals, and more, then returns a normalized score out of 100. Structured Data has the highest base weight in the current model. Here is a real comparison between two sites scored with the tool: | Factor | Optimized site (90/100) | Unoptimized site (48/100) | |--------|------------------------|--------------------------| | Structured Data | 100 (A+) | 42 (F) | | Schema Completeness | 100 (A+) | 55 (F) | | Content Extractability | 65 (D) | 45 (F) | | Entity Consistency | 86 (B) | 42 (F) | | Definition Blocks | 70 (C-) | 0 (F) | The optimized site gets cited on 5 of 11 tracked keywords. The unoptimized site gets cited on 0 of 23. [JSON-LD schema markup](https://schema.org/) gives AI models a machine-readable description of what your business is, where it operates, and what it does. At minimum, you need: - **[LocalBusiness](https://schema.org/LocalBusiness) schema** with name, address, phone, service area, and hours - **[Service](https://schema.org/Service) schema** for each service, linked to the parent organization - **[FAQPage](https://schema.org/FAQPage) schema** on pages with Q&A content - **[Person](https://schema.org/Person) schema** for founders or key team members Google's [Rich Results Test](https://search.google.com/test/rich-results) and [Schema.org's validator](https://validator.schema.org/) let you check your markup before deploying. The [schema markup guide](/blog/schema-markup-for-ai-citations) goes deeper with copy-pasteable examples for each type. ## Content extractability matters more than content length A surprise from the audit data: content depth (word count, heading structure) matters less than content extractability (how easy it is for a model to pull clean facts from your page). The optimized site in the comparison above scores 87 on content depth but only 65 on extractability. The unoptimized site scores 72 on depth but 45 on extractability. Both have decent amounts of content. The difference is how that content is structured. What makes content extractable: - **Definition blocks.** Start key pages with a clear "X is Y" statement. If someone asks "what is [your service]," the model needs a sentence it can pull directly. The unoptimized site in the comparison scores 0/100 on definition blocks because none of its pages open with a direct definition. - **Question-based headings.** Use H2s that match how people ask questions. "How much does roof coating cost?" maps directly to how models parse content for answers. - **Short paragraphs.** Two to four sentences each. Models extract paragraph-level chunks. Walls of text are harder to parse. - **Lists and tables.** Models extract structured formats more reliably than prose. Sites built with heavy page builders (Elementor, Divi) often score poorly on extractability because content is buried under layers of wrapper divs. The model's Content Extractability factor measures content-to-markup ratio specifically for this reason. ## Entity consistency is the silent killer Entity consistency scored 86/100 on our optimized site and 42/100 on the unoptimized one. This is the factor that most businesses overlook because it is not visible on their own website. AI models cross-reference your business across the web. If your business name, address, phone number, and service descriptions are inconsistent across your website, Google Business Profile, Yelp, and directories, the model has lower confidence in recommending you. This is the same NAP (Name, Address, Phone) consistency that [local SEO has emphasized for years](https://www.brightlocal.com/learn/local-seo/local-search-optimization/nap-consistency/), but it matters even more for AI because models use entity resolution to decide whether multiple web mentions refer to the same business. Concrete steps: - Audit your listings on [Google Business Profile](https://business.google.com/), Yelp, industry directories, and social platforms - Make sure the business name is exactly the same everywhere - Use the same phone number format consistently - Link your website to all major profiles [Semrush's listing management tool](https://www.semrush.com/listing-management/) and [BrightLocal](https://www.brightlocal.com/) both help with auditing consistency at scale. ## Publish an llms.txt file [llms.txt](https://llmstxt.org/) is an emerging machine-readable convention for summarizing a site and linking to key information. Support differs by provider, so it is best treated as a supplementary access file. The historical comparison included llms.txt and llms-full.txt among several access and content differences. A minimal llms.txt includes your business name, what you do, where you operate, and links to your most important pages. It is low effort to maintain, but it does not replace crawlable HTML, a sitemap, or clear page content. ## Get indexed first The exact retrieval systems behind each AI model are not fully public, and they change frequently. Based on what we have observed and what has been announced: Gemini appears to pull from Google's index for grounding. ChatGPT has used both Bing and Google for web browsing. Claude has its own web search capability. Perplexity runs its own real-time search. The safest approach is to be indexed everywhere. Submit your sitemap to both [Google Search Console](https://search.google.com/search-console) and [Bing Webmaster Tools](https://www.bing.com/webmasters/). Check your index status in [Google Search Console](https://search.google.com/search-console). Use the [URL Inspection tool](https://support.google.com/webmasters/answer/9012289) to request indexing for new pages. Canonry also integrates with GSC, so you can check indexing status from the same tool you use for citation monitoring. ## Monitor, do not guess The gap between "I think I am showing up" and "I am actually showing up" is where most businesses waste time optimizing the wrong things. This is what canonry is built for. It runs queries against multiple AI providers on a schedule, tracks citation state over time, and identifies when you gain or lose visibility. The loss/recovery patterns described above only became visible because canonry agents were running daily sweeps automatically. For a point-in-time assessment, the [free onsite technical audit](/audit) scores your page across all 16 factors in under 30 seconds. The monitoring gap in AI search is real, and we would rather help businesses close it than leave them guessing. ## How to get cited by AI in 5 steps If you take the data above as a directive, the canonical sequence looks like this. Each step maps to a factor the audit and the monitoring agree on. 1. **Step 1: Add LocalBusiness, Service, and FAQPage JSON-LD schema.** Use Google's [Rich Results Test](https://search.google.com/test/rich-results) to validate. Structured Data has the highest base weight in Canonry's current technical model, and it was the largest observed gap between the two sites in this comparison. 2. **Step 2: Restructure content with definition blocks and question headings.** Open each key page with a direct "X is Y" sentence. Convert generic H2s into question-form headings. Break walls of text into two to four sentence paragraphs. The unoptimized site in the comparison scores 0/100 on definition blocks because none of its pages open with a direct definition. 3. **Step 3: Fix entity consistency across every listing.** Audit [Google Business Profile](https://business.google.com/), Yelp, industry directories, and social profiles. Make sure business name, address, phone format, and core service descriptions match exactly. AI models use entity resolution to decide whether multiple web mentions refer to the same business. 4. **Step 4: Publish llms.txt at the site root.** Add an [llms.txt](https://llmstxt.org/) file with business name, what you do, where you operate, and links to top pages. It is a low-effort access file with uneven provider support, so use it alongside crawlable HTML and a sitemap. 5. **Step 5: Index in [Google](https://search.google.com/search-console) and [Bing](https://www.bing.com/webmasters/), then monitor.** Submit the sitemap to both consoles to improve discoverability, then schedule recurring checks through [canonry](https://canonry.ai/open-source-platform) against ChatGPT, Gemini, Claude, and Perplexity so changes become visible over time. ## The realistic timeline AI models do not update in real time. When you make changes to your site, crawlers need to re-visit, indexes need to update, and models need to incorporate the new data. This could be weeks or months. Based on what we have observed in canonry monitoring data, the typical pattern is: 1. **Week 1-2:** Changes deployed, indexing requested 2. **Week 2-4:** Pages start appearing in search indexes 3. **Week 4-8:** Citation patterns begin shifting in AI answers 4. **Ongoing:** Citation rates stabilize but continue to fluctuate (remember the 82-90% rate, not 100%) The right approach is positioning and monitoring. Make your site the best possible candidate for citation. Then track what happens. Canonry will tell you if and when it pays off. ### Canonry: Agent First AEO + Web Analytics Article page: https://canonry.ai/blog/canonry-open-source-aeo-monitor Authorship: Human-written · AI-edited · Human-reviewed. Arber Xhindoli wrote the article and checked the final text. AI assisted with editing. Updated September 7, 2026: [Canonry 5.0 moves to MIT](/blog/canonry-5-mit-open-source-aeo-geo). The license FAQ below reflects this release. When we started doing AEO work, the tools available to us were too narrow. They showed whether a domain appeared in a few AI answers, then left the rest of the job to spreadsheets, screenshots, and one-off scripts. We built [Canonry](https://canonry.ai/open-source-platform) as an agent first AEO + web analytics monitoring and execution platform. It is open source and self-hosted. Citation monitoring is still part of it, but it is no longer the whole story. Canonry connects AI visibility, search data, traffic evidence, local performance, backlinks, technical audits, execution workflows, reporting, and agents in one system. That matters most for SEO agencies and operators managing more than one client. The work is not just "check whether ChatGPT mentioned us." It is tracking visibility, proving what changed, tying the signal back to the SEO systems clients already trust, and turning the next fix into an accountable workflow. You can run it yourself from the [GitHub repo](https://github.com/Canonry/canonry) or install the CLI from the Canonry Homebrew tap. The path stays simple: ```bash brew tap canonry/canonry brew install canonry cnry init cnry serve ``` ## Why AEO needs an operating platform AEO is not a single dashboard. It is a loop. You need to know how ChatGPT, Claude, Gemini, Perplexity, and local models describe a business. You need to see whether AI crawlers and referral traffic are reaching the site. You need search data from Google Search Console, Google Analytics, Bing Webmaster Tools, and Google Business Profile. You need to understand who links to the site, what pages are technically weak, and which fixes actually shipped. Most tools stop at the observation layer, and [the numbers they report often hide their own method](/blog/ai-visibility-tools-are-lying). Canonry is built for the whole loop: * Observe citations, mentions, competitors, answer text, and provider differences. * Ingest evidence from server logs, GSC, GA4, Bing Webmaster Tools, Google Business Profile, and Common Crawl backlinks. * Diagnose weak pages with technical AEO audits and structured evidence. * Execute fixes through WordPress, JSON-LD schema workflows, and indexing submissions where integrations are configured. * Report the work with client-ready HTML reports. * Automate the cycle with schedules, webhooks, MCP, and agents. That is why monitoring and execution belong in one platform. The dashboard is useful, but the CLI, API, config files, webhooks, and agent surface matter just as much. ## Agent-first, by design The core principle behind Canonry is simple: agents are first-class users. Every dashboard workflow has a matching CLI command and API path. The CLI is not a thin wrapper around a closed UI. The UI consumes the same API your scripts and agents can use. This means: * You can create a project, add queries, configure providers, and trigger a run from a terminal. * You can use config-as-code with YAML and `cnry apply` to manage many clients declaratively. * You can connect Canonry to Claude Desktop, Cursor, Codex, or another coding agent through MCP. * You can let Aero, Canonry's built-in agent, review new run evidence and help decide what changed. * You can wire webhook alerts into Slack, GitHub, n8n, or your own internal system. The web UI is there for human review. The agent surface is there because serious AEO work eventually becomes a repeated operating workflow. ## What Canonry does now ### AI visibility checks Canonry still tracks whether answer engines cite your site. You configure your domain, key phrases, competitors, and providers, then run visibility sweeps on demand or on a schedule. You go to ChatGPT and type in "AEO Agency NYC", you're looking to find an agency that specializes in AEO. How does ChatGPT find the right answer? What answers does it cite? Let's look at an example: ![AEO Agency NYC search results](/blog/AI_NYC_Result.png) The above shows a ChatGPT search result for "AEO Agency NYC" on March 12th, 2026. Things to notice here: * Only three results are shown. * ChatGPT links to the websites of the top results, showing the title, snippet, and URL. That is one snapshot, one query, one moment in time. Canonry turns that kind of observation into a repeatable data set across providers, prompts, competitors, runs, and time. ### Traffic and crawler evidence Citation data is not enough by itself. Canonry can ingest server-side traffic logs so you can see AI crawler activity and referral traffic, the requests [Google Analytics never records](/blog/ai-traffic-server-logs). It supports log ingestion paths for Cloud Run, Vercel, and the WordPress Traffic Logger plugin. This matters because AI visibility is not only "did the model mention me?" It is also "did the crawler reach my site?", "did the answer send traffic?", and "did anything change after the fix shipped?" ### Search, analytics, and local AEO Canonry connects AEO runs to the search and analytics systems operators already use: * Google Search Console for query and indexing evidence. * GA4 for traffic behavior. * Bing Webmaster Tools for Bing-side visibility. * Google Business Profile for local AEO, including search-term impressions, performance metrics, and lodging or booking gaps for hotel properties. That local layer is important. A national SaaS query and a local service query behave differently. Canonry keeps the location-sensitive signals close to the AI visibility data instead of treating them as a separate report. ### Backlinks and off-site corroboration AI answer engines do not only read your website. They also lean on the wider web around your brand. Canonry can use Common Crawl backlink data to show who links to you. It follows Common Crawl's hyperlink graph, syncs new windows on a schedule, and makes the data queryable locally. That gives operators a better view of the off-site evidence answer engines may find when they verify a business. ### Technical AEO audits Canonry also connects to the technical layer. You can run a site-readiness audit, save the score, and review the issues inside the same workflow as your citation evidence. That closes an important gap. If a visibility run shows weak citations, you do not want a separate static checklist. You want to know whether the site is crawlable, extractable, structured, and clear enough for answer engines to use. ### Execution workflows The platform is built to act, not only observe. With the right integrations configured, Canonry can help execute fixes through WordPress, JSON-LD schema workflows, and indexing submissions. It can also generate reports for clients with `cnry report PROJECT`. Agents still ask for permission before changing a site. The point is not blind automation. The point is to keep the evidence, recommendation, approval, and execution path in the same system. ## Getting started When you run Canonry, you're met with the home page: ![Canonry dashboard](/blog/canonry_home.png) Here you set up providers, including Gemini, OpenAI, Claude, Perplexity, or a local LLM. You use your own API keys. Then you configure your domain, which becomes your project: ![Canonry domain configuration](/blog/canonry_domain.png) Next, add the key phrases and competitors you want to track: ![Canonry key phrases](/blog/canonry_key_phrases.png) ![Canonry competitors](/blog/canonry_competitors.png) These phrases and competitors can change as your strategy changes. When agents run a sweep across the providers you configured, they look for both your citations and your competitors' citations, so you see how your site performs relative to the rest of the category. Trigger your first run and you land on the project dashboard, where you can see visibility over time, trigger runs on demand, set up scheduled runs, configure webhook alerts, and more: ![Canonry project dashboard](/blog/canonry_dashboard.png) ### A look at the data If I expand one of the key phrases in the visibility dashboard, I see a breakdown of how I was cited across all configured providers across every run, with changes called out. For example, for canonry.ai, for the key phrase "AEO Agency NYC", I can see that Claude just started citing me in the last two runs: ![Canonry citation breakdown](/blog/canonry_citation_breakdown.png) I can drill into the specific evidence for each run to see exactly how I was cited, including the surfaced text and the URL where it was found: ![Canonry citation evidence](/blog/canonry_evidence.png) ## The shape of the product Canonry started from a monitoring problem, but the product is now broader: * A visibility layer for AI answers. * A traffic layer for crawlers and referrals. * A search layer for GSC, GA4, Bing, and local performance. * An off-site layer for backlinks and corroboration. * A technical layer for AEO audits. * An execution layer for WordPress, schema, indexing, reports, and workflows. * An agent layer through CLI, API, webhooks, MCP, and Aero. That is the real distinction. Canonry is not trying to be another closed chart of AI citations. It is the agent first AEO + web analytics monitoring and execution platform we use to run AEO work end to end. To contribute or follow along, head to [canonry.ai/open-source-platform](https://canonry.ai/open-source-platform) or the [GitHub repo](https://github.com/Canonry/canonry). ### AI Search vs Google Search: What Actually Changed Article page: https://canonry.ai/blog/ai-search-vs-google-search Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Google gives you a list of links. ChatGPT gives you a name. That is the simplest way to describe the shift. We built an open-source platform called [canonry](https://canonry.ai/open-source-platform), an agent first AEO + web analytics monitoring and execution platform. It monitors both sides of this: agents track indexing via Google Search Console and Bing Webmaster Tools, and separately run queries against ChatGPT, Gemini, Claude, and Perplexity to record which businesses get cited. The two systems overlap in interesting ways, but they are not the same. Here is what the data shows. ## Why AI search returns names instead of a list of links Google returns a ranked list of 10 pages and the user clicks one. AI search returns a direct answer with 3 to 5 names and reasons. There is no page two. There is no position 7 that still gets some traffic. In one canonry dataset (11 keywords, 66 runs for a local service business), the split is binary. For branded + location queries where the site is well-positioned, it gets cited 82-90% of the time. For informational queries where the site has no content, citation rate is 0%. There is no "almost cited" or "showing up on the second page of AI results." You are in the answer or you are not. ## Where the data comes from Each AI system has its own retrieval pipeline. The exact details are not fully public, and they change frequently. Our [platform-by-platform optimization notes](/chatgpt-perplexity-claude-optimization-for-nyc-businesses) go through what each difference means for implementation. Here is what we know and what we have observed: **ChatGPT (OpenAI)** - Publishes crawler and publisher guidance, including [OAI-SearchBot](https://platform.openai.com/docs/bots) - Can use web information in supported experiences, but the full retrieval mix is not public - Also relies on model knowledge that changes by release - **What this means:** Keep pages accessible and indexed in Google and Bing. Treat any claimed retrieval mix as provisional. **Gemini (Google)** - Google documents [grounding with Google Search](https://cloud.google.com/vertex-ai/docs/generative-ai/grounding/overview) for some products and contexts - The full retrieval path for every consumer answer is not public - **What this means:** Google indexing is an important foundation, not a guarantee of inclusion in a Gemini answer. **Perplexity** - Publishes crawler guidance, including [PerplexityBot](https://docs.perplexity.ai/guides/getting-started) - Shows source citations in many answer experiences - **What this means:** Keep pages accessible, current, and easy to verify. Do not infer a fixed crawl cadence from individual answers. **Claude (Anthropic)** - Publishes documentation for web search and its crawlers - Also relies on model knowledge - **What this means:** The retrieval path can vary by product and setting, so test the queries that matter to your business rather than assuming one universal behavior. **Important caveat:** These retrieval systems are opaque. We are making educated guesses based on announced features, observed behavior in canonry monitoring, and published documentation. Any of this could change tomorrow. The practical takeaway is: do not bet on understanding one provider's pipeline. Be indexed and structured well enough that any retrieval system can find and parse your content. The key insight: **these are independent systems.** Canonry data shows queries where a site gets cited by one provider but not another. Optimizing only for Google and assuming AI will follow is a mistake. ## Signals that overlap vs signals that diverge ### Both Google and AI care about: - **Content quality.** Thin content fails in both systems. [Google's helpful content guidelines](https://developers.google.com/search/docs/fundamentals/creating-helpful-content) are a reasonable baseline. - **Authority.** Strong backlinks and external mentions help in both, though the mechanisms differ. - **Technical health.** Clean HTML, HTTPS, fast load times. Table stakes. ### Signals that can make a page easier for AI systems to interpret: - **Structured data.** In Canonry's published scoring model, Structured Data has the highest base weight (12 before normalization). In this dataset, the cited site scored 100 and the uncited site scored 42. JSON-LD gives parsers a clear representation of core facts, but it does not guarantee citation. - **Content extractability.** This is the gap most SEO-optimized sites miss. Our cited site scores only 65/100 on extractability despite strong content depth (87/100). The content exists but the markup makes it harder to parse. Sites built with heavy page builders score worse here. - **Entity consistency.** AI models cross-reference your business across the web. NAP consistency matters for AI in a way it has not mattered for Google ranking in years. [BrightLocal's citation research](https://www.brightlocal.com/research/) covers the fundamentals. - **Definition blocks.** "X is Y" opening statements. Google does not care whether your page starts with a definition. AI models do, because they need something to extract as an answer. The uncited site in the dataset scores 0/100 on this factor. - **llms.txt.** An [emerging machine-readable convention](https://llmstxt.org/). Provider support varies, so use it as a supplement to crawlable HTML, sitemaps, and clear internal navigation. ### AI models care less about: - **Keyword density.** AI understands semantics. Keyword stuffing does not help. - **Internal linking structure.** Clear internal links help people and crawlers discover and contextualize important pages. Their effect on any specific AI answer is not public. - **Meta descriptions for ranking.** AI models extract from page content, not meta tags. ## The indexing disconnect Here is something that shows up regularly in canonry data: a site is fully indexed by Google (Search Console shows all pages crawled and indexed) but gets zero citations from Gemini. Google knowing your page exists does not mean an AI system will use it in an answer. Inclusion can vary with the query, available sources, product settings, and the system's changing retrieval behavior. The reverse also happens. A site can be poorly indexed by Google but picked up by Perplexity's real-time search because Perplexity crawls independently. This is why monitoring across providers matters. [Canonry](https://canonry.ai/open-source-platform) runs the same queries against multiple AI systems and tracks citation state independently. Without that, you are guessing about which providers see you and which do not. ## Google is also becoming an answer engine Google's [AI Overviews](https://blog.google/products/search/generative-ai-google-search-may-2024/) are blurring the line. They make clear, verifiable source material useful across more search experiences, even though each product has its own selection systems. The same structured data and extractable content that helps you get cited by ChatGPT also helps you appear in Google's AI Overviews. The investment is the same. The surface area is expanding. ## How to optimize for AI search and Google in 5 steps Based on the citation monitoring and audit scores described above, this is the order that has moved the needle for sites we track. 1. **Step 1: Submit your sitemap to both Google and [Bing](https://www.bing.com/webmasters/).** This improves discovery in the two major search ecosystems. It is a foundation, not proof that a provider will cite the page. 2. **Step 2: Add structured data.** The biggest gap between cited and uncited sites in the dataset is schema quality (100 vs 42). Start with [LocalBusiness](https://schema.org/LocalBusiness) and [Service](https://schema.org/Service). The [schema guide](/blog/schema-markup-for-ai-citations) has copy-pasteable JSON-LD. 3. **Step 3: Fix your opening paragraphs.** Add definition blocks to your key pages. The uncited site scores 0 here. Clear opening facts make the page easier to interpret for people and machines. 4. **Step 4: Publish [llms.txt](https://llmstxt.org/).** Use it as a supplementary access file. Its support differs by provider, so do not use it in place of crawlable HTML, a sitemap, or clear page structure. 5. **Step 5: Monitor across providers.** Do not check one AI system and assume the others agree. Run a [free audit](/audit) for your baseline, then set up monitoring through [canonry](https://canonry.ai/open-source-platform). The [free onsite technical audit](/audit) provides a point-in-time assessment across 16 factors. [Canonry](https://canonry.ai/open-source-platform) handles the ongoing monitoring. ### What Is Answer Engine Optimization? Article page: https://canonry.ai/blog/what-is-answer-engine-optimization Authorship: Human ideas · AI-written · Human-reviewed. Arber Xhindoli developed the ideas and examples, directed the argument, and checked the final article. AI wrote the prose. Answer Engine Optimization (AEO) is the practice of structuring your website, content, and digital presence so AI-powered search engines can accurately understand, verify, and cite your business. When someone asks ChatGPT, Gemini, Perplexity, or Claude a question about your industry, AEO determines whether your business appears in the answer. That is the short version. Here is the rest, including the scoring framework we use to measure it. ## Why this exists now For twenty years, the game was Google rankings. You optimized for keywords, earned backlinks, climbed the results page, and got clicks. That model still works, but a parallel system is growing fast. According to [Gartner's 2025 predictions](https://www.gartner.com/en/newsroom/press-releases/2024-02-19-gartner-predicts-search-engine-volume-will-drop-25-percent-by-2026), traditional search engine volume is expected to drop 25% by 2026. When someone asks ChatGPT "best accountant in Brooklyn" or Gemini "who does commercial roof coatings near me," the model returns a direct recommendation. Not a list of links. If your business is not in that recommendation, no amount of Google ranking helps with that specific user. We track this shift using [canonry](https://canonry.ai/open-source-platform), an agent first AEO + web analytics monitoring and execution platform. It is open source and self-hosted. It runs agents that ask AI models the same queries your customers would ask, records whether they mention a specific business, and connects those observations to web analytics. In one dataset (66 checks across 11 keywords for a local service business), branded queries got cited 82-90% of the time, while informational queries where the business had no content got cited 0% of the time. The gap is not gradual. It is binary. ## How AEO differs from SEO | | SEO | AEO | |---|---|---| | **Goal** | Rank in search results | Get cited in AI answers | | **Output** | Blue links, snippets | Direct recommendation by name | | **Key signals** | Backlinks, keywords, page speed | Structured data, entity clarity, extractability | | **Measurement** | Rankings, clicks, impressions | Citation presence, competitor mentions, answer text | | **Update cycle** | Continuous crawling | Model re-indexing (less predictable) | The critical difference: in SEO, you compete for position on a results page. In AEO, you compete for inclusion in a single generated answer. There is no "page two." You are either mentioned or you are not. ## The 16 factors: how we actually measure AEO Our [free onsite technical audit](/audit) scores any webpage across 16 onsite technical signals and returns a normalized score out of 100 with per-factor breakdowns. The signals are a practical readiness model, not proof that a page will be cited. Here are the current default signals. Their raw weights sum to 111 and are normalized in the overall score: | Factor | Raw weight | What it measures | |--------|------------|-----------------| | **Structured Data (JSON-LD)** | 12 | Schema markup types, property depth, entity connections | | **Content Depth** | 10 | Word count, heading hierarchy, paragraph structure, lists | | **E-E-A-T Signals** | 8 | Author attribution, credentials, team pages, expertise claims | | **FAQ Content** | 8 | Question-answer pairs, FAQPage schema, question-based headings | | **Citations & Authority** | 8 | External references, source links, credibility markers | | **Schema Completeness** | 8 | Coverage of required and recommended properties per schema type | | **Entity Consistency** | 7 | NAP consistency, sameAs links, cross-platform entity verification | | **Content Freshness** | 7 | Publish dates, update dates, recency signals | | **Content Extractability** | 6 | Content-to-markup ratio, semantic HTML, page builder overhead | | **Definition Blocks** | 6 | Opening definitions, "X is Y" statements, extractable descriptions | | **Named Entities** | 6 | Business names, people, locations, specific services mentioned | | **Snippet Eligibility** | 6 | Direct-answer formatting, lists, tables, and concise answer blocks | | **AI Access Files** | 5 | llms.txt, sitemap, and related access files | | **Schema Validity** | 5 | JSON-LD parseability and valid schema fields | | **Technical SEO** | 5 | Canonicals, indexability, metadata, headings, and image alt text | | **AI Crawler Access** | 4 | Robots.txt rules for relevant crawlers | ### Real scores: optimized vs unoptimized Here is a point-in-time comparison from an earlier monitored dataset. It illustrates the diagnostic categories, not the current package's factor values: | Factor | Site A (90/100, gets cited) | Site B (48/100, never cited) | |--------|---------------------------|------------------------------| | Structured Data | 100 (A+) | 42 (F) | | AI Access Files | 100 (A+) | 56 (F) | | Schema Completeness | 100 (A+) | 55 (F) | | Entity Consistency | 86 (B) | 42 (F) | | Content Extractability | 65 (D) | 45 (F) | | Definition Blocks | 70 (C-) | 0 (F) | | E-E-A-T Signals | 80 (B-) | 25 (F) | Site A gets cited on 5 of 11 tracked keywords across 66 canonry monitoring runs. Site B gets cited on 0 of 23 keywords. Both are real sites tracked with canonry over two weeks. The takeaway: even Site A has room to improve (65 on extractability, 70 on definition blocks). Perfect scores are not required for citation, but the floor is higher than most businesses expect. ## The three layers of AEO ### 1. Technical signals The structured data and crawlability layer: - **[JSON-LD schema](https://schema.org/)** for LocalBusiness, Service, FAQPage, Person. See our [schema guide](/blog/schema-markup-for-ai-citations) for implementation details. - **[llms.txt](https://llmstxt.org/)** as an emerging machine-readable site summary. Support differs by provider, so it complements rather than replaces crawlable HTML and a sitemap. - **Robots.txt** aligned with the current crawler guidance for the providers you want to allow. - **Clean HTML** with semantic headings and minimal JavaScript rendering dependencies. ### 2. Content signals Formatting for extraction: - **Definition blocks.** Clear "X is Y" statements near the top of key pages. Site B scores 0/100 here because no page opens with a definition. They are a straightforward way to make a core fact easier to extract. - **Question headings.** H2s phrased as questions matching how users query AI. - **Direct answers.** First sentence under each heading answers the question. Then elaborate. - **Factual density.** Concrete, sourced facts over vague claims. This makes a page easier to verify and quote. ### 3. Authority signals Confidence builders for AI models: - **Entity consistency** across website, [Google Business Profile](https://business.google.com/), directories, and social media. [BrightLocal's research](https://www.brightlocal.com/research/) covers why inconsistency erodes trust. - **Reviews and ratings** on Google, [Yelp](https://www.yelp.com/), and industry platforms. - **E-E-A-T signals.** Author attribution, credentials, [expertise/authoritativeness/trust](https://developers.google.com/search/docs/fundamentals/creating-helpful-content) signals. ## How to measure your AEO Run your site through the [free audit](/audit) to get a score on all 16 factors, specific findings, and prioritized recommendations. You can review the full [technical methodology](/aeo-methodology) before acting on the score. For ongoing monitoring, [canonry](https://canonry.ai/open-source-platform) tracks whether AI models actually cite you for your target queries. The audit tells you what to fix. Canonry tells you if it worked. The free audit is the quick way to establish the baseline before monitoring. ## Where to start 1. **Audit your site.** Get your baseline score across all 16 factors. 2. **Fix structured data first.** It has the highest base weight in the current model. 3. **Add definition blocks.** Make each key page's core proposition easy to extract. 4. **Publish llms.txt.** Use it as a supplementary access file, alongside crawlable HTML and a sitemap. 5. **Start monitoring.** Citation changes take weeks to appear. Start tracking now so you have data when they do. The [full methodology](/aeo-methodology) covers each step. The tools are free. The data is what matters.