{"id":310812,"date":"2026-06-23T18:12:46","date_gmt":"2026-06-23T18:12:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/aeo-booster\/"},"modified":"2026-09-11T03:42:59","modified_gmt":"2026-09-11T03:42:59","slug":"aeomatic","status":"publish","type":"plugin","link":"https:\/\/fao.wordpress.org\/plugins\/aeomatic\/","author":17182018,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.1","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"AEOmatic \u2014 AEO, AI SEO, llms.txt & Schema","header_author":"mmtushar","header_description":"Optimise your WordPress site for AI search engines (ChatGPT, Claude, Perplexity, Google AI Overviews). Auto-injects JSON-LD schema, generates llms.txt, controls AI crawlers, audits content for AEO readiness, and provides a FAQ block for answer engine extraction.","assets_banners_color":"01102b","last_updated":"2026-09-11 03:42:59","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/aeomatic\/","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":1326,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"mmtushar","date":"2026-06-26 15:24:06","revision":3587411},"1.1.0":{"tag":"1.1.0","author":"mmtushar","date":"2026-06-25 18:25:15","revision":3586473},"1.1.1":{"tag":"1.1.1","author":"mmtushar","date":"2026-06-26 15:45:02","revision":3587427},"1.1.2":{"tag":"1.1.2","author":"mmtushar","date":"2026-07-17 03:11:11","revision":3610925},"1.1.3":{"tag":"1.1.3","author":"mmtushar","date":"2026-07-20 17:10:22","revision":3615586},"1.1.4":{"tag":"1.1.4","author":"mmtushar","date":"2026-07-27 03:12:34","revision":3623922},"1.1.5":{"tag":"1.1.5","author":"mmtushar","date":"2026-07-28 03:48:46","revision":3625326},"1.1.6":{"tag":"1.1.6","author":"mmtushar","date":"2026-08-04 03:21:25","revision":3633629},"1.1.7":{"tag":"1.1.7","author":"mmtushar","date":"2026-08-12 03:38:42","revision":3642776},"1.1.8":{"tag":"1.1.8","author":"mmtushar","date":"2026-08-26 03:43:50","revision":3666199},"1.1.9":{"tag":"1.1.9","author":"mmtushar","date":"2026-09-02 03:55:14","revision":3677106},"1.2.0":{"tag":"1.2.0","author":"mmtushar","date":"2026-09-08 03:09:46","revision":3685821},"1.2.1":{"tag":"1.2.1","author":"mmtushar","date":"2026-09-11 03:42:59","revision":3690715}},"upgrade_notice":{"1.2.1":"<p>Cosmetic but worth having: JSON-LD is now pretty-printed and no longer escapes ampersands, slashes and accented characters. Purely an output-formatting change \u2014 the schema itself is unchanged.<\/p>","1.2.0":"<p>Fixes custom post types not staying selected under Settings \u2192 Content coverage (your saved selections were never lost \u2014 only mis-displayed, so nothing needs re-saving). Also important for Elementor, Divi, Bricks, Oxygen, Beaver Builder and WPBakery sites: readiness checks were reading post_content directly and scoring builder pages as empty. Expect scores to rise after updating. Also fixes post types whose slug is not plain lowercase being impossible to disable, and a settings save leaving the upgrade routine re-flushing rewrite rules on every admin page load.<\/p>","1.1.9":"<p>Fixes page-builder and ACF pages being scored as empty across six readiness checks \u2014 expect scores to rise on Elementor, Divi, Bricks, Oxygen, Beaver Builder and WPBakery sites. Renamed, with a new AI Readiness dashboard, an AI crawler log that records the HTTP status served to each bot, and a first-audit onboarding step. Fixes two readiness checks that were silently degraded, tightens the per-post citation-gaps permission check, caches and bounds \/llms.txt and \/llms-full.txt, and makes uninstall remove everything it should. Recommended update.<\/p>","1.1.8":"<p>Conflict detection now respects your SEO plugin&#039;s own schema settings, and custom post type coverage saves reliably. Recommended update.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3583610,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3583608,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3685818,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3685818,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"aeomatic\/faq":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"aeomatic\/faq","title":"AEO FAQ","category":"text","description":"Frequently asked questions block. Auto-generates FAQ schema for AI search engines.","icon":"format-chat","keywords":["faq","questions","aeo","schema"],"textdomain":"aeomatic","supports":{"align":["wide","full"],"html":false,"reusable":true},"editorScript":"file:.\/index.js","editorStyle":"file:.\/editor.css","style":"file:.\/style.css"},"aeomatic\/faq-item":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"aeomatic\/faq-item","title":"AEO FAQ item","category":"text","parent":["aeomatic\/faq"],"description":"A single FAQ question and answer.","icon":"editor-help","textdomain":"aeomatic","attributes":{"question":{"type":"string","default":""},"answer":{"type":"string","default":""}},"supports":{"html":false,"reusable":false},"editorScript":"file:.\/index.js"}},"tagged_versions":["1.0.0","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.2.0","1.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3615854,"resolution":"1","location":"assets","locale":"","width":1920,"height":1243},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3615854,"resolution":"2","location":"assets","locale":"","width":1920,"height":1343},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3615854,"resolution":"3","location":"assets","locale":"","width":1900,"height":1901},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3615854,"resolution":"4","location":"assets","locale":"","width":1920,"height":2893},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3615854,"resolution":"5","location":"assets","locale":"","width":1920,"height":1246}},"screenshots":{"1":"AI Readiness dashboard \u2014 overall score, three category cards labelled direct-check or heuristic, issue count and top recommendations.","2":"Visual schema editor in the block-editor sidebar \u2014 auto-populated fields, live JSON-LD preview, type confidence.","3":"Type-aware JSON-LD generation \u2014 Recipe schema with auto-extracted ingredients and instructions.","4":"AI crawler activity \u2014 which bots requested which URLs and what HTTP status was served.","5":"Setup wizard readiness step \u2014 your first audit score with the three highest-value fixes.","6":"Live verification panel showing what is actually being served, with a direct Google Rich Results Test link."}},"plugin_section":[262246],"plugin_tags":[244526,220145,232780,2516,1121],"plugin_category":[55],"plugin_contributors":[268599],"plugin_business_model":[],"class_list":["post-310812","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-aeo","plugin_tags-ai-search","plugin_tags-ai-crawler","plugin_tags-json-ld","plugin_tags-structured-data","plugin_category-seo-and-marketing","plugin_contributors-mmtushar","plugin_committers-mmtushar"],"banners":{"banner":"https:\/\/ps.w.org\/aeomatic\/assets\/banner-772x250.png?rev=3685818","banner_2x":"https:\/\/ps.w.org\/aeomatic\/assets\/banner-1544x500.png?rev=3685818","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/aeomatic\/assets\/icon-128x128.png?rev=3583610","icon_2x":"https:\/\/ps.w.org\/aeomatic\/assets\/icon-256x256.png?rev=3583608","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/aeomatic\/assets\/screenshot-1.png?rev=3615854","caption":"AI Readiness dashboard \u2014 overall score, three category cards labelled direct-check or heuristic, issue count and top recommendations."},{"src":"https:\/\/ps.w.org\/aeomatic\/assets\/screenshot-2.png?rev=3615854","caption":"Visual schema editor in the block-editor sidebar \u2014 auto-populated fields, live JSON-LD preview, type confidence."},{"src":"https:\/\/ps.w.org\/aeomatic\/assets\/screenshot-3.png?rev=3615854","caption":"Type-aware JSON-LD generation \u2014 Recipe schema with auto-extracted ingredients and instructions."},{"src":"https:\/\/ps.w.org\/aeomatic\/assets\/screenshot-4.png?rev=3615854","caption":"AI crawler activity \u2014 which bots requested which URLs and what HTTP status was served."},{"src":"https:\/\/ps.w.org\/aeomatic\/assets\/screenshot-5.png?rev=3615854","caption":"Setup wizard readiness step \u2014 your first audit score with the three highest-value fixes."}],"raw_content":"<!--section=description-->\n<p><strong>Answer Engine Optimization (AEO) for WordPress.<\/strong> AI search engines cannot cite what they cannot parse. AEOmatic makes your WordPress content machine-readable \u2014 then shows you what the crawlers actually got.<\/p>\n\n<p>It does three jobs:<\/p>\n\n<ol>\n<li><strong>Publishes the signals AI systems read.<\/strong> JSON-LD structured data across 22 schema types, an <code>llms.txt<\/code> index at your site root, a <code>\/llms-full.txt<\/code> full-text endpoint, and per-bot crawl directives in <code>robots.txt<\/code>.<\/li>\n<li><strong>Scores how extractable your content is.<\/strong> A site-wide AI readiness score across three categories, plus per-post audits that name the specific thing to fix rather than handing you a number.<\/li>\n<li><strong>Reports what actually happened.<\/strong> A server-side log of every recognised AI crawler request \u2014 which bot, which URL, and the HTTP status your site returned. If you are quietly serving 404s to GPTBot, this is where you find out.<\/li>\n<\/ol>\n\n<h4>It reads your page builder, not just Gutenberg<\/h4>\n\n<p>Most AI SEO plugins parse <code>post_content<\/code> and stop. If your pages are built in Elementor or Divi, or your copy lives in ACF fields, that means your schema and your scores are computed against an almost-empty string.<\/p>\n\n<p>AEOmatic runs one normalising extraction pass that understands <strong>Gutenberg, the Classic Editor, Elementor, Divi, Beaver Builder, Bricks, Oxygen and WPBakery<\/strong>, plus ACF text, textarea, wysiwyg, repeater and flexible-content fields. Everything downstream \u2014 schema generation, the audit, readiness scoring, <code>llms.txt<\/code> \u2014 reads that single extraction, so a page assembled in a builder is scored on what it actually renders.<\/p>\n\n<p>This work goes by several names \u2014 Answer Engine Optimization (AEO), Generative Engine Optimization (GEO), LLM SEO, AI search optimization. Same underlying job.<\/p>\n\n<h4>Built to sit beside your SEO plugin, not replace it<\/h4>\n\n<p>AEOmatic writes only its own settings and its own post meta. It never touches your titles, meta descriptions, canonicals or XML sitemaps, and it never modifies another plugin's configuration.<\/p>\n\n<p>It detects Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework, can import your organisation details from whichever you run, and flags the case where two plugins would emit the same JSON-LD type on one page \u2014 with a one-click fix that adjusts <strong>AEOmatic's<\/strong> output, never theirs.<\/p>\n\n<h4>Scores you can check yourself<\/h4>\n\n<p>AEOmatic measures what is verifiable on your own install: whether AI crawlers can reach your pages, whether those pages carry structured data a machine can parse, and whether your content is shaped so an answer can be lifted out of it. Every check tells you whether it is a direct check or a heuristic, so you can see which is which.<\/p>\n\n<p>The dashboard is labelled <strong>AI Readiness<\/strong> rather than AI Visibility, because that is what it measures \u2014 your site's preparation, not whether an engine has cited you.<\/p>\n\n<h4>Everything included, no account and no API key<\/h4>\n\n<ul>\n<li><p><strong>AI readiness audit, three levels.<\/strong> Site-wide across three categories (Technical readiness, Content readiness, AI crawler access), per post across five categories (Content, Trust, Authority, Entities, Technical), and a per-post 0\u2013100 content rubric of thirteen weighted checks. Every category states whether it is a direct check or a heuristic.<\/p><\/li>\n<li><p><strong>Visual schema editor for 22 types<\/strong> \u2014 Article, BlogPosting, NewsArticle, TechArticle, Recipe, HowTo, FAQPage, QAPage, Review, Product, Service, LocalBusiness, Event, JobPosting, Course, Book, WebPage, AboutPage, ContactPage, CollectionPage, ProfilePage, Movie. The type is auto-detected from your content and every field is editable in the block-editor sidebar with a live JSON-LD preview.<\/p><\/li>\n<li><p><strong>Type-specific property extraction<\/strong> \u2014 Recipe posts get ingredients and instructions, JobPosting posts get salary ranges, Event posts get dates and venue, LocalBusiness gets address and opening hours. Not generic Article schema on everything.<\/p><\/li>\n<li><p><strong><code>\/llms.txt<\/code> generator<\/strong> \u2014 a spec-compliant Markdown index at your site root: site summary, curated key pages from your nav menu, then every published item grouped by post type.<\/p><\/li>\n<li><p><strong><code>\/llms-full.txt<\/code> endpoint<\/strong> \u2014 the extracted body text of your published content at one URL, so an AI crawler can ingest the site in a single request. Bounded and cached so it cannot become a load problem.<\/p><\/li>\n<li><p><strong>AI crawler control<\/strong> \u2014 per-bot Allow\/Disallow toggles in <code>robots.txt<\/code> for 18 AI crawlers: GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot, Perplexity-User, Google-Extended, CCBot, Bytespider, Amazonbot, Applebot-Extended, meta-externalagent, Meta-ExternalFetcher, DeepSeekBot, Cohere-AI, DuckAssistBot. Twenty user agents recognised in the visit log.<\/p><\/li>\n<li><p><strong>AI crawler log and breakdown<\/strong> \u2014 which AI bots requested which URLs, what HTTP status you served them, and when. A 404 or 403 being served to OAI-SearchBot is the kind of thing you want to know. Records bot name, URL, user agent and status only: <strong>no IP addresses, no cookies, no visitor data<\/strong>, nothing leaves your server.<\/p><\/li>\n<li><p><strong>Page-builder support<\/strong> \u2014 content is read from Gutenberg, Classic Editor, Elementor, Divi, Beaver Builder, Bricks, Oxygen and WPBakery, plus ACF text, textarea, wysiwyg, repeater and flexible-content fields. Scoring reflects what your pages actually render.<\/p><\/li>\n<li><p><strong>WooCommerce Product schema<\/strong> \u2014 price, availability, SKU, brand, ratings and sale dates auto-filled; variable products get AggregateOffer with a min\/max range.<\/p><\/li>\n<li><p><strong>AI Citation Gaps<\/strong> \u2014 sixteen local rules-based checks that name why a page is unlikely to be quoted: orphan pages, no opening answer, thin body, no FAQ block, no question heading, schema type mismatch, missing author signal, missing from llms.txt, low outbound links, low alt coverage, no citation hook, no related links, sibling-topic gaps by category, FAQ or HowTo content without matching schema, missing meta description. Two ship a one-click fix.<\/p><\/li>\n<li><p><strong>Entity Scanner<\/strong> \u2014 scans content, schema, headings and metadata for Organization, Person, Service, Product, LocalBusiness and FAQ entities, returning a coverage score with per-entity confidence, detected signals, missing signals and recommendations.<\/p><\/li>\n<li><p><strong>FAQ block<\/strong> \u2014 a native Q&amp;A block producing accessible <code>&lt;details&gt;<\/code>\/<code>&lt;summary&gt;<\/code> markup plus FAQPage JSON-LD. <code>[aeo_faq]<\/code> \/ <code>[aeo_qa]<\/code> shortcodes for the Classic Editor.<\/p><\/li>\n<li><p><strong>Setup wizard with a real first audit<\/strong> \u2014 six skippable steps: welcome, import from your existing SEO plugin, organisation details, AI crawler access, <strong>your first readiness audit<\/strong>, verify. The audit step shows your score and the three highest-value fixes with direct links, so you finish onboarding knowing what to do next.<\/p><\/li>\n<li><p><strong>SEO plugin conflict detection<\/strong> \u2014 detects Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework, and checks whether each is <em>currently emitting<\/em> overlapping schema. One click disables only the overlapping types <strong>in AEOmatic<\/strong>; your other plugin's configuration is never modified.<\/p><\/li>\n<li><p><strong>AI HTTP discovery headers<\/strong> \u2014 optional <code>X-AI-Crawl<\/code>, <code>X-AI-Citeable<\/code>, <code>X-Content-License<\/code>, <code>X-AI-Content-Type<\/code>, <code>X-AI-Speakable<\/code> headers plus a <code>Link: rel=\"ai-context\"<\/code> pointer to your llms.txt. These are proposed conventions, not a ratified standard, and no AI vendor has committed to reading them \u2014 so they ship as a setting you can switch off.<\/p><\/li>\n<li><p><strong>Live verification panel<\/strong> \u2014 makes HTTP requests to your own site and shows what is actually being served: llms.txt with size and line count, robots.txt with AI bot count, schema blocks on your latest post with a direct Google Rich Results Test link.<\/p><\/li>\n<li><p><strong>VideoObject, Speakable, WebSite + SearchAction schema<\/strong>, an author-profile panel, a wp-admin dashboard widget, and a bulk re-audit action on post list screens.<\/p><\/li>\n<\/ul>\n\n<h4>AI crawlers recognised<\/h4>\n\n<ul>\n<li><strong>ChatGPT \/ ChatGPT Search<\/strong> (OpenAI) \u2014 GPTBot, OAI-SearchBot, ChatGPT-User<\/li>\n<li><strong>Claude \/ Claude Search<\/strong> (Anthropic) \u2014 ClaudeBot, Claude-User, Claude-SearchBot<\/li>\n<li><strong>Perplexity<\/strong> \u2014 PerplexityBot, Perplexity-User<\/li>\n<li><strong>Google AI Overviews \/ Gemini<\/strong> \u2014 Google-Extended controls Gemini training; AI Overviews retrieval uses Googlebot<\/li>\n<li><strong>Microsoft Copilot<\/strong> \u2014 no dedicated AI user agent; retrieves from the Bing index via Bingbot<\/li>\n<li><strong>Meta AI<\/strong> \u2014 meta-externalagent, Meta-ExternalFetcher<\/li>\n<li><strong>DeepSeek<\/strong> \u2014 DeepSeekBot<\/li>\n<li><strong>Apple Intelligence<\/strong> \u2014 Applebot-Extended<\/li>\n<li><strong>Cohere<\/strong> \u2014 Cohere-AI<\/li>\n<li><strong>DuckDuckGo AI answers<\/strong> \u2014 DuckAssistBot<\/li>\n<li><strong>Common Crawl<\/strong> \u2014 CCBot<\/li>\n<\/ul>\n\n<p>Controlling a crawler's access controls whether it can read you. It does not control whether an engine cites you.<\/p>\n\n<h4>Runs entirely on your own server<\/h4>\n\n<p>Schema and metadata generate server-side and cache in post meta. There are no external API calls on the front end, no account, no API key, no credit limits, and no content sent to a vendor cloud. The verification panel only ever requests URLs on your own site, and only for logged-in administrators. No third-party analytics, no telemetry.<\/p>\n\n<h4>Who it is for<\/h4>\n\n<ul>\n<li><strong>Publishers and media<\/strong> who want to be quoted by AI as a source<\/li>\n<li><strong>Businesses and SaaS companies<\/strong> who want their entity data to be unambiguous to AI systems<\/li>\n<li><strong>Local businesses<\/strong> who want correct LocalBusiness signals<\/li>\n<li><strong>E-commerce stores<\/strong> on WooCommerce<\/li>\n<li><strong>SEO professionals and content teams<\/strong> who need an AI layer on top of their existing stack<\/li>\n<li><strong>Agencies<\/strong> running a repeatable audit across client sites<\/li>\n<li><strong>WordPress developers<\/strong> \u2014 11 filters, a documented REST namespace, and analyzer interfaces to extend<\/li>\n<\/ul>\n\n<h3>Privacy Policy<\/h3>\n\n<p>AEOmatic does not collect, store, or transmit any personal data to external servers.<\/p>\n\n<p>Schema, <code>llms.txt<\/code>, <code>\/llms-full.txt<\/code> and the AI discovery headers are generated server-side on your own site. The verification panel makes HTTP requests only to your own site, only for logged-in administrators, to confirm public output.<\/p>\n\n<p>The AI crawler visit log records, in your own database only: the matched bot name, the requested URL, the user-agent string (truncated to 255 characters), the HTTP status your site returned, and a timestamp. It records <strong>no IP addresses, no cookies, no referrers and no human-visitor data<\/strong>, and only logs requests whose user agent matches a known AI crawler. Retention is configurable from 7 to 365 days (default 90) with a 500-entry ceiling and a daily purge. Nothing in the log ever leaves your site.<\/p>\n\n<p>AEOmatic makes no external API calls on the front end and ships with no third-party analytics or telemetry.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install from <strong>Plugins \u2192 Add New<\/strong> and search for \"AEOmatic\", or upload the <code>aeomatic<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or use <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate through the <strong>Plugins<\/strong> menu. Activation registers the <code>\/llms.txt<\/code> and <code>\/llms-full.txt<\/code> endpoints and flushes rewrite rules for you.<\/li>\n<li>The setup wizard opens automatically. Six skippable steps, ending with your first readiness audit and top three fixes.<\/li>\n<li>Visit <strong>AEOmatic \u2192 Dashboard<\/strong> for your site AI readiness score, category breakdown, top recommendations and AI crawler activity.<\/li>\n<li>Open any post in the block editor and click the AEOmatic icon in the top-right toolbar for the schema editor, audit breakdown, citation gaps, AI readiness and entity coverage.<\/li>\n<\/ol>\n\n<p><strong>Requirements:<\/strong> WordPress 6.4+, PHP 8.0+, and pretty permalinks (any structure other than \"Plain\").<\/p>\n\n<p>You do <strong>not<\/strong> normally need to re-save permalinks after installing or updating \u2014 the plugin flushes rewrite rules on activation and again automatically when it detects a version change. If <code>\/llms.txt<\/code> returns a 404, confirm <strong>Settings \u2192 Permalinks<\/strong> is not set to \"Plain\", then click <strong>Save Changes<\/strong> there once.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20get%20me%20cited%20by%20chatgpt%20or%20ranked%20in%20ai%20search%3F\"><h3>Will this get me cited by ChatGPT or ranked in AI search?<\/h3><\/dt>\n<dd><p>No plugin can promise that, and AEOmatic does not. What it does is fix the technical and content signals you control: crawler access, parseable structured data, an llms.txt index, and content shaped so an answer can be extracted. Whether an AI engine then cites you depends on that engine's own ranking and retrieval, which nobody outside those companies controls. Any plugin promising guaranteed AI citations is guessing.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20ai%20readiness%20and%20ai%20visibility%3F\"><h3>What is the difference between AI readiness and AI visibility?<\/h3><\/dt>\n<dd><p>AI readiness is how well-prepared your site is \u2014 measurable from your own database and settings, which is what AEOmatic scores. AI visibility is whether AI systems actually surface or cite you \u2014 measurable only by querying those engines from outside your site, which AEOmatic does not do. The dashboard is labelled \"AI Readiness\" for that reason.<\/p><\/dd>\n<dt id=\"does%20the%20crawler%20log%20tell%20me%20if%20a%20page%20was%20cited%3F\"><h3>Does the crawler log tell me if a page was cited?<\/h3><\/dt>\n<dd><p>No. It tells you a crawler requested a URL and what status you served. Whether that page was retained, used, or quoted in an AI answer is not visible in crawler traffic, and no AI vendor exposes it there. Treat crawler visits as access evidence, not citation evidence.<\/p><\/dd>\n<dt id=\"does%20this%20conflict%20with%20yoast%20seo%20or%20rank%20math%3F\"><h3>Does this conflict with Yoast SEO or Rank Math?<\/h3><\/dt>\n<dd><p>It is designed to run beside them. AEOmatic writes only its own settings and its own post meta and never modifies another plugin's configuration. Because several SEO plugins also emit Article, Organization and Breadcrumb schema, AEOmatic detects that overlap and offers a one-click fix that disables only the overlapping types <em>in AEOmatic<\/em>. The detector checks whether the other plugin's schema module is actually switched on, so it does not nag you about a conflict that is not happening. Until you resolve a real overlap, both plugins emit their types and the site readiness score reports it as a failing technical check.<\/p><\/dd>\n<dt id=\"can%20i%20import%20my%20existing%20seo%20plugin%27s%20settings%3F\"><h3>Can I import my existing SEO plugin's settings?<\/h3><\/dt>\n<dd><p>Yes \u2014 organisation name, logo and social profiles from Yoast SEO, Rank Math, SEOPress, All in One SEO or The SEO Framework. Import is per-plugin, opt-in, one-directional, and never overwrites a value you have already set in AEOmatic.<\/p><\/dd>\n<dt id=\"what%20is%20%2Fllms-full.txt%3F\"><h3>What is \/llms-full.txt?<\/h3><\/dt>\n<dd><p>A single URL returning the extracted body text of your published content, so an AI crawler can ingest the site in one request instead of following dozens of links. It is capped at 200 items per post type by default and says so in its own output when it truncates; raise or remove the cap with the <code>aeomatic_llms_full_max_items<\/code> filter.<\/p><\/dd>\n<dt id=\"my%20llms.txt%20or%20%2Fllms-full.txt%20shows%20a%20404.%20how%20do%20i%20fix%20it%3F\"><h3>My llms.txt or \/llms-full.txt shows a 404. How do I fix it?<\/h3><\/dt>\n<dd><p>Check that <strong>Settings \u2192 Permalinks<\/strong> is not set to \"Plain\" \u2014 the endpoints need a rewrite rule, which plain permalinks do not support. Then click <strong>Save Changes<\/strong> on that screen once. Also confirm llms.txt is enabled under <strong>AEOmatic \u2192 Settings<\/strong>.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20elementor%2C%20divi%2C%20or%20other%20page%20builders%3F\"><h3>Does the plugin work with Elementor, Divi, or other page builders?<\/h3><\/dt>\n<dd><p>Content extraction does. AEOmatic reads content from Gutenberg, Classic Editor, Elementor, Divi, Beaver Builder, Bricks, Oxygen and WPBakery, plus ACF fields, so schema and scoring reflect what your pages actually render. It does not add builder-native widgets.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20site%3F\"><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>Schema is generated server-side and cached in post meta. <code>\/llms.txt<\/code> and <code>\/llms-full.txt<\/code> are cached for an hour and flushed when content changes. The crawler log writes only when a recognised AI bot requests a page, and defers its single database write to the end of that request. There are no external requests and no third-party assets on public pages. Admin CSS and JS load only on AEOmatic screens.<\/p><\/dd>\n<dt id=\"what%20schema%20types%20does%20it%20support%3F\"><h3>What schema types does it support?<\/h3><\/dt>\n<dd><p>Twenty-two page-level types (Article, BlogPosting, NewsArticle, TechArticle, Recipe, HowTo, FAQPage, QAPage, Review, Product, Service, LocalBusiness, Event, JobPosting, Course, Book, Movie, WebPage, AboutPage, ContactPage, CollectionPage, ProfilePage) plus Organization, Author\/Person, Breadcrumb, WebSite with SearchAction, VideoObject and Speakable.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Product schema with price, availability, SKU, brand and ratings; variable products get AggregateOffer with a min\/max price range.<\/p><\/dd>\n<dt id=\"how%20do%20i%20know%20the%20schema%20is%20actually%20working%3F\"><h3>How do I know the schema is actually working?<\/h3><\/dt>\n<dd><p>Open <strong>AEOmatic \u2192 What did we do?<\/strong> for the live verification panel. It fetches your own URLs and shows what is being served, with a direct link to Google's Rich Results Test for your latest post.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20my%20data%20anywhere%3F\"><h3>Does the plugin send my data anywhere?<\/h3><\/dt>\n<dd><p>No. No external API calls on the front end, no telemetry, no analytics, no account. The only server-side HTTP requests are the verification panel fetching your own site, for administrators only.<\/p><\/dd>\n<dt id=\"is%20the%20audit%20score%20reliable%3F\"><h3>Is the audit score reliable?<\/h3><\/dt>\n<dd><p>It is a rubric, and it is honest about which parts are heuristic. The Technical and AI crawler access categories are direct checks \u2014 a setting is either on or off. Content readiness is explicitly labelled a heuristic: it uses pattern matching to estimate how answer-shaped your content is. Category scores are combined with an unweighted mean, because no public evidence supports specific relative weights and inventing some would be false precision.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%20aeomatic%3F\"><h3>What happens when I uninstall AEOmatic?<\/h3><\/dt>\n<dd><p>Deleting the plugin removes every option, transient, scheduled task and post-meta key it created. Deactivating alone leaves your settings intact so reactivating does not lose your configuration.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li><strong>Fixed: JSON-LD output is now readable.<\/strong> Schema was emitted as a single unbroken line with every <code>&amp;<\/code> written as <code>&amp;<\/code>, every <code>&lt;<\/code> as <code>&lt;<\/code>, every <code>\/<\/code> as <code>\/<\/code>, and every accented or non-Latin character as an escape sequence. It was valid and search engines accepted it, but it looked broken in page source and in validators \u2014 and on non-English sites a headline became nothing but escape codes. Output is now pretty-printed with slashes and Unicode intact. Nothing about which schema is generated has changed, only how it is written.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li><strong>Fixed: custom post types now stay selected<\/strong> under Settings \u2192 Content coverage. Your saved selections were never lost, only displayed wrongly \u2014 nothing needs re-saving.<\/li>\n<li><strong>Fixed: page-builder and ACF pages are no longer scored as empty.<\/strong> Six readiness checks were reading the post body directly and missing Elementor, Divi, Bricks, Oxygen, Beaver Builder and WPBakery content. <strong>Expect readiness scores to rise on those sites<\/strong> \u2014 that is the correction, not new optimisation.<\/li>\n<li><strong>Fixed: Elementor headings and widget links<\/strong> are now visible to the analysers.<\/li>\n<li><strong>Fixed:<\/strong> post types whose slug is not plain lowercase (for example MyCPT) can now be disabled.<\/li>\n<li><strong>Fixed:<\/strong> the setup wizard no longer promises AI citations, and no longer triggers a PHP deprecation notice.<\/li>\n<li><strong>Fixed:<\/strong> saving settings no longer leaves the upgrade routine re-running on every admin page load.<\/li>\n<li>Renamed to \"AEOmatic \u2014 AEO, AI SEO, llms.txt &amp; Schema\".<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li><strong>New: AI Readiness dashboard.<\/strong> One site score across three categories \u2014 Technical readiness, Content readiness and AI crawler access \u2014 with an issue count and your top three fixes. Every category states whether it is a direct check or a heuristic.<\/li>\n<li><strong>New: the setup wizard runs a real audit<\/strong> and shows your score plus the three highest-value fixes.<\/li>\n<li><strong>New: the AI crawler log records the HTTP status<\/strong> served to each bot, so a 404 or 403 served to GPTBot is visible.<\/li>\n<li><strong>New:<\/strong> AI discovery headers are now a setting you can switch off.<\/li>\n<li><strong>Fixed:<\/strong> two readiness checks that were silently degraded; uninstall now removes everything it created; robots.txt no longer advertises llms.txt as a sitemap.<\/li>\n<li><strong>Performance:<\/strong> \/llms.txt and \/llms-full.txt are now cached and bounded, and running an audit no longer discards built schema.<\/li>\n<li><strong>Security:<\/strong> the per-post citation-gaps endpoint is now gated per post rather than on a general capability.<\/li>\n<li>Renamed, with rewritten documentation and new build tooling.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li><strong>Fix: SEO-plugin conflict warning no longer fires when Yoast or Rank Math has its schema module turned off.<\/strong> Previously the detector treated \"plugin installed &amp; active\" as \"plugin is emitting schema\", so users who had disabled Rank Math's Schema (Structured Data) module or set every CPT's Yoast schema page\/article type to \"None\" still saw the yellow \"Schema conflict detected\" banner. The detector now inspects each plugin's own settings: Rank Math conflicts only report when <code>rich-snippet<\/code> is present in the <code>rank_math_modules<\/code> option; Yoast conflicts short-circuit to empty when its Schema Framework master switch (<code>wpseo.enable_schema<\/code>) is off, otherwise they are gated per-key on <code>wpseo_titles<\/code> \u2014 <code>breadcrumb<\/code> needs <code>breadcrumbs-enable<\/code>, <code>article<\/code>\/<code>author<\/code> need at least one real <code>schema-article-type-*<\/code> value, and <code>organization<\/code> needs <code>company_or_person<\/code> set alongside at least one real <code>schema-page-type-*<\/code> value. Also adds a new <code>aeomatic_seo_conflicts_detected<\/code> filter so sites with unusual overrides can drop or adjust entries programmatically.<\/li>\n<li><strong>New: conflict detector diagnostic panel in Settings.<\/strong> Under the \"SEO plugin status\" line there is now a collapsible \"why is this warning firing?\" section (admin-only) that dumps the exact <code>wpseo_titles<\/code> keys, <code>rank_math_modules<\/code> value, and computed conflict decision the detector used. Makes it possible to see at a glance which Yoast setting is still emitting schema without hand-inspecting the database. Warning banner also now includes the exact Yoast menu path required to actually disable Yoast schema (Search Appearance \u2192 Content Types \u2192 set Default Page type and Default Article type to None, plus disable breadcrumbs and clear \"Company or person\"), since Yoast has no single \"disable schema\" toggle.<\/li>\n<li><strong>Fix: post-type checkboxes in Settings \u2192 Content coverage now persist for custom post types.<\/strong> 1.1.7 fixed the built-in <code>post<\/code> and <code>page<\/code> checkboxes by flushing the <code>AEOMATIC_Post_Types<\/code> in-memory map after a save, but CPTs from other plugins (WooCommerce, CPT UI, JetEngine, ACF, Pods, etc.) could still revert to unchecked after saving. Root cause was in <code>AEOMATIC_Settings::sanitise()<\/code> \u2014 it iterated only the raw <code>get_post_types( public=&gt;true )<\/code> list at <code>admin_init<\/code> time, and any CPT that either (a) was filtered into the plugin's own supported-post-types list via <code>aeomatic_supported_post_types_list<\/code> but not registered as <code>public=&gt;true<\/code> in core, or (b) registered on a hook that fires after <code>admin_init<\/code>, was silently dropped from the saved payload. The sanitiser now builds its slug list from three sources: the same filtered list the settings view renders, the raw public post types, and every slug submitted in <code>$_POST<\/code> \u2014 so no checkbox the user actually saw can be lost.<\/li>\n<li><strong>Hardening: <code>AEOMATIC_Settings::save()<\/code> now also busts the WordPress options cache and repopulates its own request-level cache with the freshly-written array.<\/strong> Guards against persistent object caches (Redis, Memcached) returning the pre-save value on the remainder of the same request, and against any downstream reader seeing an intermediate <code>null<\/code>-cache state between <code>update_option()<\/code> and the next <code>all()<\/code> call.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li><strong>Fix: post-type checkboxes in Settings \u2192 Content coverage now persist their checked state after saving.<\/strong> The <code>AEOMATIC_Post_Types<\/code> in-memory map is populated on <code>init<\/code> (before the <code>admin_init<\/code> save handler runs) and was not being invalidated after a save, so the settings view re-rendered from a stale map and boxes appeared unchecked even though the DB was correct. <code>AEOMATIC_Settings::save()<\/code> now flushes the Post_Types cache immediately after <code>update_option()<\/code>.<\/li>\n<li><strong>Fix: Entity Scanner now sees ACF and page-builder content.<\/strong> The Signal Collector was calling a non-existent <code>AEOMATIC_Content_Extractor::extract_text()<\/code> method and silently falling back to <code>wp_strip_all_tags( $post-&gt;post_content )<\/code> \u2014 so every text signal (keyword patterns, founding-date, NAP pattern) and every heading-based signal missed ACF fields, Elementor, Divi, Beaver, Bricks, Oxygen, and WPBakery content entirely. The collector now calls the real <code>AEOMATIC_Content_Extractor::extract()<\/code> API which merges all supported sources. ACF wysiwyg headings are now detected too.<\/li>\n<li><strong>Fix: Entity Scanner respects the Organisation name \/ logo \/ sameAs set in Settings.<\/strong> The Signal Collector was reading org config from a non-existent <code>organization<\/code> settings section, so <code>organization_setting('name')<\/code> and <code>organization_setting('logo')<\/code> always returned empty strings \u2014 the Organization detector permanently reported \"Organisation name is not set\" and \"Organisation logo not configured\" even when both were filled in. It now reads from the correct <code>schema.org_name<\/code> \/ <code>schema.org_logo<\/code> \/ <code>schema.org_sameas<\/code> keys.<\/li>\n<li><strong>Fix: Entity Scanner LocalBusiness detector accepts per-page address.<\/strong> The detector now also credits address \/ streetAddress \/ addressLocality set on the page's LocalBusiness schema via the Schema Generator sidebar, not only site-wide address settings. Recommendation text updated to reflect both paths.<\/li>\n<li><strong>Fix: Entity Scanner FAQ detection now covers ACF and every supported page builder.<\/strong> The FAQ signal only matched Gutenberg <code>wp:aeomatic\/faq<\/code> block markers; it now also credits FAQs surfaced by the content extractor (ACF FAQ repeaters, Elementor \/ Divi \/ WPBakery accordions, shortcode Q&amp;As, universal HTML detection).<\/li>\n<li><strong>New: Entity Scanner recommendations now adapt to your editor.<\/strong> The Signal Collector exposes the detected editor \/ page builder (Gutenberg, Classic, Elementor, Divi, Beaver Builder, Bricks, Oxygen, WPBakery) to every detector. Recommendations that used to say \"insert the AEOmatic FAQ block\" or \"in the Schema Generator sidebar\" now emit builder-appropriate wording \u2014 an Elementor site is told to add a Toggle \/ Accordion widget; a Divi site is told to add a Toggle \/ Accordion module; ACF-only sites are told to use the <code>aeomatic_schema_overrides<\/code> filter. Signals themselves are unchanged; only the recommendation strings adapt.<\/li>\n<li><strong>Improved: ACF FAQ detection now covers flexible_content layouts and nested containers.<\/strong> Previous behaviour only recognised Q&amp;As inside a <strong>top-level ACF repeater<\/strong>. It now walks the full ACF field tree, so Q&amp;As are also picked up from: flexible_content layouts whose sub-fields include \"question\" + \"answer\"; repeaters nested inside a flexible_content layout; repeaters nested inside a group; groups whose fields directly contain \"question\"\/\"answer\". Detection is name-based \u2014 any field whose name contains <code>question<\/code> and another whose name contains <code>answer<\/code> qualifies, so common variants like <code>faq_question<\/code> \/ <code>faq_answer<\/code> \/ <code>question_text<\/code> \/ <code>answer_text<\/code> all work.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li><strong>New: Entity Scanner module.<\/strong> Scans every post across four sources (content, schema, headings, metadata) for six entity types \u2014 <strong>Organization<\/strong>, <strong>Person<\/strong>, <strong>Service<\/strong>, <strong>Product<\/strong>, <strong>LocalBusiness<\/strong>, <strong>FAQ<\/strong> \u2014 and returns a coverage score, list of missing entities, and per-entity recommendations to raise confidence. New <strong>AEOmatic \u2192 Entity Scanner<\/strong> admin page and Gutenberg sidebar panel. New REST endpoint <code>GET \/aeomatic\/v1\/entity-scan\/{id}<\/code>. Fingerprint-cached in post meta. Filter hook <code>aeomatic_entity_detectors<\/code> for custom detectors. Ships one reusable signal-collector service consumed by all six detectors \u2014 no code duplication with existing extraction.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li><strong>New: AI Readiness module.<\/strong> A second scoring lens complementing the existing AEO Audit. Every post is scored 0\u2013100 across five explicit categories \u2014 <strong>Content<\/strong>, <strong>Trust<\/strong>, <strong>Authority<\/strong>, <strong>Entities<\/strong>, <strong>Technical<\/strong> \u2014 with a per-category list of issues plus recommendations so you know precisely which axis needs work. Overall score is the mean of the five categories.<\/li>\n<li><strong>New: AEOmatic \u2192 AI Readiness admin page.<\/strong> Pick any published post from the recent-posts dropdown to run the analyzer on demand, or open a post via <code>?post={id}<\/code>. \"Recompute (skip cache)\" button forces a fresh analysis.<\/li>\n<li><strong>New: \"AI Readiness\" panel in the block-editor sidebar.<\/strong> Sits alongside the existing Schema, Audit, and Citation Gaps panels. Auto-loads on open, auto-refreshes after save, has its own recompute button.<\/li>\n<li>New REST endpoint: <code>GET \/aeomatic\/v1\/ai-readiness\/{id}?force=false<\/code> \u2014 returns <code>{ overall_score, categories[], fingerprint, cached }<\/code>. Same auth model as <code>\/audit\/{id}<\/code> (edit_post capability check).<\/li>\n<li>Fingerprint-based caching in post meta <code>_aeomatic_ai_readiness<\/code> (payload) + <code>_aeomatic_ai_readiness_fingerprint<\/code> (invalidation key) + <code>_aeomatic_ai_readiness_score<\/code> (overall score, exposed via REST). Cache auto-invalidates on <code>save_post<\/code>.<\/li>\n<li>Analyzer registry is filterable via <code>aeomatic_ai_readiness_analyzers<\/code> so third-party code can add or replace categories without patching core.<\/li>\n<li>Zero duplication: reuses <code>AEOMATIC_Content_Extractor<\/code>, <code>AEOMATIC_Schema_Analyzer<\/code>, <code>AEOMATIC_Schema_Generator<\/code>, <code>AEOMATIC_LLMs_Txt<\/code>, <code>AEOMATIC_Post_Types<\/code>, and <code>AEOMATIC_Settings<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li><strong>New: Setup Wizard.<\/strong> Five-step guided onboarding runs automatically on activation. Auto-imports your organisation name, logo, and social profiles from Yoast SEO, Rank Math, SEOPress, All in One SEO, or The SEO Framework \u2014 never overwrites values you already set in AEOmatic. Live JSON-LD preview updates as you type. Fully offline; no accounts, no external calls. Re-runnable any time from the Plugins list.<\/li>\n<li><strong>New: WordPress dashboard widget \"AEO Readiness\".<\/strong> A compact tile on the native wp-admin dashboard showing average AEO score, count of posts with citation gaps, top three AI-bot visitors with a mini bar chart, and log-retention health. Colour-coded score chip so status reads at a glance.<\/li>\n<li><strong>New: Bulk audit action on Posts\/Pages\/CPT list screens.<\/strong> Select any rows, choose \"AEOmatic \u2014 refresh audit &amp; gaps,\" and recompute audit scores and citation gaps for all selected posts in one pass. Results appear in a dismissible admin notice with average scores, total gaps flagged, and an expandable per-post table. Safety cap of 50 posts per batch. Everything runs on your own server.<\/li>\n<li><strong>New: Hybrid crawler-log retention.<\/strong> The AI bot visit log now uses a daily WP-Cron purge (default 90-day retention, configurable 7\u2013365 days from <strong>AEOmatic \u2192 Settings \u2192 Crawler visit log<\/strong>) plus a 500-entry safety ceiling, replacing the previous fixed 200-entry cap. The new Settings section also shows live log status: entries kept, age of the oldest row, and the last purge outcome.<\/li>\n<li><strong>New AI crawlers recognised:<\/strong> <code>DuckAssistBot<\/code> (DuckDuckGo AI) and <code>Meta-ExternalFetcher<\/code> (Meta's per-user fetcher, distinct from the training UA <code>meta-externalagent<\/code>). Both added to detection and to the default allow-list. Total recognised: 20 AI user agents.<\/li>\n<li>Refactor: extracted <code>AEOMATIC_Audit::site_summary()<\/code> and <code>AEOMATIC_Citation_Gaps::site_summary()<\/code> as reusable public entry points so the dashboard widget, bulk-action notice, and REST endpoints all share one code path.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li><strong>New: Ask AI \u2014 \"Am I cited?\" panel.<\/strong> A new block-editor sidebar panel with four one-click buttons \u2014 Ask ChatGPT, Ask Perplexity, Ask Google AI, Ask Claude. Each button opens the AI engine in a new tab with your post title pre-filled as the question, so you can see with your own eyes whether your site is quoted in the AI's answer. No API keys, no accounts, no external calls from your server \u2014 the plugin only builds the link; your browser does the rest. Turns \"did my AEO work?\" from a guess into a 5-second test.<\/li>\n<li><strong>New: AI Citation Gaps.<\/strong> Sixteen local, rules-based checks that flag exactly why a page is unlikely to be cited by AI engines and what to change. Runs entirely on your own server \u2014 no external calls, no keys, no account.<\/li>\n<li>Five internal-coverage rules: orphan pages, low internal-link count, sibling-topic gaps by category, thin body for depth-heavy schema types, and missing \"related reading\" hooks.<\/li>\n<li>Eleven answer-shape rules: no direct opening answer, no question-style headings, missing FAQ block, FAQ content without FAQPage schema, HowTo content without HowTo schema, low-confidence schema type match, low image alt-text coverage, no citation hook (list\/table\/bold summary) near the top, missing author signal, missing meta description, and posts missing from the emitted <code>\/llms.txt<\/code>.<\/li>\n<li>New <strong>AEOmatic \u2192 Citation Gaps<\/strong> admin subpage with a filterable, paginated table across all posts and pages, plus a scanner-style summary strip (pages scanned \/ with gaps \/ clean \/ average score). Sorts worst-scoring first so you can triage. Filters: title search, post type, author, severity, gap type, score range, modified date range.<\/li>\n<li>New <strong>AI Citation Gaps<\/strong> panel in the block editor sidebar \u2014 shows the top high\/medium gaps for the open post with a one-line fix hint each and a one-click quick-fix button where a structural fix is possible. Available on every enabled post type (posts, pages, WooCommerce products, and any registered public CPT).<\/li>\n<li>Fingerprint-based caching on post save \u2014 results persist in post meta and only rebuild when content, title, or schema type changes.<\/li>\n<li>Filter hook <code>aeomatic_citation_gap_results<\/code> so power users can register their own rules.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li><strong>AI crawler list updated to match Anthropic's current published user agents.<\/strong> Added <code>Claude-User<\/code> (Anthropic's user-triggered live-fetch UA, equivalent to <code>ChatGPT-User<\/code>) to the default allow-list and audit detection. Removed deprecated <code>Claude-Web<\/code> and <code>anthropic-ai<\/code> from the default allow-list for new installs; they remain recognised by the visit log for backward compatibility. Source: <a href=\"https:\/\/support.claude.com\/en\/articles\/8896518\">Anthropic crawler documentation<\/a>.<\/li>\n<li>Existing installations do not need to re-flush permalinks.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Documentation: updated readme with clearer feature breakdown, AI engines supported, and comparison guidance.<\/li>\n<li>No code changes. Existing installations do not need to re-flush permalinks.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>llms.txt now includes <strong>all published pages and posts<\/strong> (previously capped at 25 most recent per type; pages were skipped if not in the primary nav menu).<\/li>\n<li>New dedicated <code>## Pages<\/code> section in llms.txt \u2014 lists every published page (parent and child), ordered by <code>menu_order<\/code> then title.<\/li>\n<li>New <code>\/llms-full.txt<\/code> virtual endpoint \u2014 emits the full markdown body of every included page and post, designed for direct LLM ingestion. Advertised from llms.txt via a <code>Full content:<\/code> line.<\/li>\n<li>New activity counter <code>llms_full_serves<\/code> records hits to the new endpoint.<\/li>\n<li>Settings copy updated to reflect the new behaviour.<\/li>\n<li><strong>Upgrade step<\/strong>: after updating, go to Settings \u2192 Permalinks \u2192 Save Changes once to register the new <code>\/llms-full.txt<\/code> rewrite rule.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Visual schema editor in Gutenberg sidebar \u2014 auto-populates all fields from page content, every field editable.<\/li>\n<li>Intelligent schema type detection \u2014 6 scoring rules, 22 supported schema types.<\/li>\n<li>Type-specific property extraction \u2014 Recipe ingredients\/instructions, JobPosting salary, Event dates, LocalBusiness address\/hours.<\/li>\n<li>Support for Gutenberg, Classic Editor, Elementor, Divi, Beaver Builder, Bricks, Oxygen, WPBakery, ACF.<\/li>\n<li>WooCommerce Product schema with price, availability, SKU, ratings (auto-filled, all editable).<\/li>\n<li>WebSite schema with SearchAction on homepage \u2014 enables Google sitelinks search box.<\/li>\n<li>VideoObject schema \u2014 auto-detected from YouTube and Vimeo embeds in post content.<\/li>\n<li>Speakable schema (WebPage + SpeakableSpecification) on all singular pages for voice AI.<\/li>\n<li>AI discovery HTTP headers (X-AI-Crawl, X-AI-Citeable, X-Content-License, X-AI-Content-Type, X-AI-Speakable) emitted automatically on all public pages.<\/li>\n<li>AI crawler visit log \u2014 records last 200 AI bot visits, viewable in admin under \"What did we do?\".<\/li>\n<li>llms.txt virtual endpoint following the llmstxt.org specification, with spec-compliant Ignore section.<\/li>\n<li>AI crawler control via robots.txt (GPTBot, ClaudeBot, Claude-SearchBot, PerplexityBot, Google-Extended, DeepSeekBot, Cohere-AI and more).<\/li>\n<li>AEO content audit engine \u2014 10-criteria scoring with actionable suggestions in the editor sidebar.<\/li>\n<li>FAQ Gutenberg block with automatic FAQPage schema generation.<\/li>\n<li>SEO plugin conflict detection (Yoast, Rank Math, AIOSEO, SEOPress, The SEO Framework).<\/li>\n<li>One-click conflict resolution \u2014 disables duplicate schema types only.<\/li>\n<li>Live verification panel \u2014 proves every feature is working with clickable links.<\/li>\n<li>Schema cache with content fingerprinting \u2014 regenerates automatically on content changes.<\/li>\n<li>Request-level settings cache \u2014 single DB read per page load.<\/li>\n<li>Deferred activity counter writes \u2014 no DB writes on front-end page views.<\/li>\n<li>All public custom post types auto-detected and supported.<\/li>\n<\/ul>","raw_excerpt":"AEO and AI SEO for WordPress: 22 schema types, a visual JSON-LD editor, llms.txt, and AI crawler control. Reads Elementor, Divi and ACF.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/310812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=310812"}],"author":[{"embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mmtushar"}],"wp:attachment":[{"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=310812"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=310812"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=310812"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=310812"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=310812"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=310812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}