What's new
What's New
Every release, logged the way the changelog tells it
Nothing here is summarised past what shipped. Each entry names what changed, what it fixes and what it doesn't, so you can decide whether to update before you do.
1.49.1
- Changed: every line a customer reads in the plugin was rewritten for a first-time reader: the Dashboard, Readiness, AEO Report, Fix, Technical, Settings, Modules, Tasks, Digest, Academy, the screen guide, the glossary, the setup wizard, the editor box, every notice, error and empty state, and this listing. Each line now says what the thing does for you before it says how we measure it, names ChatGPT, Claude, Gemini, Perplexity and Grok instead of "the engines", puts its numbers on tiles instead of inside sentences, and an error names the cause, where it happened and what to do next.
- Changed: the AEO Report opens in the operator's words. "When customers ask a question without naming competitors ... businesses find out where they actually rank", then "<brand> is named in 1 of N answers. You want to be named more often, and we can help you do so with our 90 day plan." The rate for questions that name a brand moved to its own tile, and aeosearch.io's parity sentence now sits under the engine table.
- Changed: five Dashboard lines rewritten from a reader's edit so each says what it means on first read: the opening line, the refresh aside (now headed "Refresh every 20 to 30 days"), the answer-engines lede, the Overview card (was "Standing"; its "Results for" line is gone and the Fixes note sits under the four terms), and the note on sites with more than 200 pages.
- Changed: the Readiness Score tile no longer says the counts are never summed. Measured is Passed, Warnings and Failed added together, and the terms now say so plainly.
- Changed: "the platform" is now "aeosearch.io" on every screen, in the Guide, the Academy and this readme: a first-time reader does not know which platform. The scorecard is explained with a worked pair of questions ("What is the best electric vehicle?", not "Is Tesla better than Audi?") in the Guide and the Academy, and the two scorecard terms say what they count in plain words.
- Changed: the AEO Report form is headed "Run a Fresh Report" and opens in the operator's words: aeosearch.io writes 4 buyer questions, you read and edit them here before anything runs, then ChatGPT and Gemini answer them once and the results appear here. A bought report asks 20, 50 or 100 questions on the models you choose.
- Changed: while aeosearch.io reads your homepage to suggest the form's fields, a turning ring in AEOSearch green sits beside the "Reading your homepage" line, so the wait is visible. The same ring already turned on every other run.
- Changed: the progress chart on the AEO Report screen draws once two or more reports exist for the site. Until then it says: "This chart activates to track your progress over time once you have purchased 2 or more reports".
- Nothing the plugin measures, applies or sends changed in this release.
1.49.0
- Added: Ask Your Report and the Explain this screen dock say, before your first question, that you're talking to an AI assistant, not a person.
- Added: the Dashboard closes with a card, "From the AEOSearch family", naming three products from the people who make AEOSearch, and a Family entry at the foot of the AEOSearch menu lists all four with the job each one does. Shopdoor's free shop check opens in a new tab, and its link tells that site the click came from AEOSearch, never which site you run. The three ContentSolved plugins say "Not released yet" and carry no link until they are. Hide This Card puts the card away for you alone; Show the Card Again, on the Family screen, brings it back.
- Fixed: since 1.47.0, Connect This Site and Save Key stopped with a critical error once consent was given. Both reach AEOSearch now.
- Changed: the proof Connect This Site publishes at /solvedagain-claim.txt lasts two minutes, not an hour, and only the site that published it can redeem it: the file carries a fingerprint of a secret the plugin keeps to itself, so anyone who reads the file still can't use it to claim a key for your site.
- Changed: on a site with a live plan, each other plan's card says how to move to it: write to support@aeosearch.io and name the site your key is bound to. A live plan can't be switched at checkout or in the billing portal yet, and the Plan screen no longer says the portal changes plans.
- Changed: a monthly or yearly report bills on its own, apart from this site's plan. To cancel one, sign in on aeosearch.io with the email on its Stripe receipt and press Manage plan, or write to support@aeosearch.io; the notes and Guide answers that sent you to this site's billing portal for that now say so.
- Changed: instructions that named a Manage billing or an Upgrade button name the Plan screen's own: Open billing portal, Buy the year and Buy by the month.
- Changed: the listing, the line under the plugin's name on your Plugins screen and the Guide's Yoast entry say what the free report shows: whether ChatGPT and Gemini named you and whom they named instead, with one answer quoted word for word on each of up to three questions a rival won. A paid report shows you every answer.
1.48.2
- Changed: the Guide's answer to "What does it cost?" ends on "we even implement the findings". The aside on price that closed that sentence is gone; the plans and prices under it are unchanged.
1.48.1
- Changed: the listing title: "AI Reports With the Best SEO, AEO/GEO Cutting Edge Tools to Outperform Your Competition". The name in your Plugins list is still AEOSearch.
- Changed: the one line under the title on wp.org, and under the name on your Plugins screen: "We Give You 1 Free AEO Report Using ChatGPT and Gemini with Claude/Grok/Perplexity Available and Every Answer Shown."
1.48.0
- Added: the Citations scorecard shows, beside how often you were mentioned, your average rank when named, how often the answer recommended you, and the share of cited domains that are yours: three tiles above the headline and three columns in the engine table. The same four numbers the full report on aeosearch.io prints.
- Added: under the headline, one sentence on how far the API answers sat from what the consumer apps named on the month's parity panel, from AEOSearch, verbatim.
- Changed: the listing leads with the free report. The one-line description, the first line of the description and a new answer, "Is the first report really free?", say what it is: four buyer questions to ChatGPT and Gemini, once per site, no card. Paid reports add Claude, Grok and Perplexity.
- Changed: the listing title adds GEO: "AI Reports With SEO, AEO and GEO Tools to Outperform Your Competition". GEO is another name for AEO that some tools use, as the glossary has said; a new answer, "Is this GEO?", says the same. The name in your Plugins list is still AEOSearch.
- Changed: the listing's tags are the words people type on the Add Plugins screen: aeo, geo, ai seo, answer engine optimization, chatgpt.
- Changed: the description under the plugin's name on your Plugins screen is the listing's one line, not "all-in-one AEO and SEO solution".
1.47.1
- Fixed: a plan checkout is followed only when the address is on Stripe or AEOSearch and names the plan and term you pressed. Before this an address off that list was refused silently while the screen said the checkout had opened.
- Fixed: a report checkout you closed no longer leaves "Payment being confirmed" on the home screen for good, and no longer ticks the free scorecard on the checklist. The hold expires after an hour on its own.
- Fixed: after a purchase the Plan screen re-reads your tier on every open until the receipt lands, instead of showing the old plan with live Buy buttons for up to a day.
- Changed: the running-report note gives the measured times: the free report 5-10 minutes, 20 questions 15-45 minutes, 50 questions about 90.
- Changed: the daily pulse's empty strip says whether the pulse is on, the last read came back empty, or the plan does not include it. The crawler card says when logging is off instead of claiming it is on.
- Changed: llms.txt is described as a file most engines ignore today, not one that tells ChatGPT what you are.
- Changed: the version lookup names the plugin in its request. A page that is not published cannot be watched. The search button reports closed whenever the box closes.
- Fixed: the apply-fix and revert-fix agent abilities write the site (llms.txt, robots.txt, the Organization JSON-LD, sitemap exclusions), so they now take the administrator gate the screen has used since 1.31.0. A user granted only the plugin's manage capability is refused, as on the screen.
- Changed: the auto-apply kill switch now stops an agent's apply-fix too. Since 1.41.0 it stopped only the daily run; an emergency stop an agent could route around was not one.
- Fixed: re-pinning the site key to a moved host is administrator-only, like every other action that binds the site to aeosearch.io.
- Fixed: clearing the 404 log, or turning a row into a redirect, also drops the hits still queued for writing, so nothing cleared keeps showing or exporting.
- Fixed: back from the writing-service checkout, the Writing screen no longer says "nothing here is owed" beside the paid note while the receipt is on its way.
- Changed: the notes you land on after a Stripe checkout say "Checkout complete" and that Stripe sent you back, not "Payment received. Stripe confirmed it". The plugin sees the return; aeosearch.io's receipt is what confirms the payment, and each note still says it switches the service on the moment that lands.
- Changed: the listing's one-line description names the engines and the check no SEO plugin runs, in place of "all-in-one AEO and SEO solution".
- Changed: the listing's title says what you get, the way the plugins beside it on the Add Plugins screen do: AI Reports With SEO and AEO Tools to Outperform Your Competition. The plugin's name in your Plugins list is still AEOSearch.
- Fixed: the AI Assistance row on the Plan screen dated a count "this week" and an ages-out date in the future tense long after both had passed. A reading past its own date, or older than a week, is now shown as a dated last reading with how it refreshes.
- Fixed: the browser tab for the Dashboard read "Readiness" once the site was connected, and every setup step read "Readiness" too. The Dashboard is titled Dashboard and a setup step is titled Setup.
- Fixed: the crawler-purpose heading on the Digest's crawler card skipped a level, so a screen reader moving by heading passed it by.
- Fixed: the Entity tile said "Schema off" while an applied Organization fix was serving a node. It reads the fix too.
- Changed: the Digest screen's own heading, its What's New doors and the Overview panel carry the names the rail gives them, so one screen no longer answers to two.
- Changed: the Search Settings button paints in place on the first frame instead of appearing once the scripts load and pushing the screen down. Without JavaScript it stays hidden.
- Changed: the footer receipt says "this request": its time and query count are the whole request's, not this plugin's alone.
- Changed: on phones the masthead controls grow to a full touch height, with a gap between the colour-scheme pills.
- Changed: WordPress 6.5 or newer is required. PHP 8.1 already was. 6.5 is where WordPress itself began shipping the list helper this plugin uses throughout, and the directory's checker reads the two together.
- Fixed: the checklist's read of your ten most recent posts no longer bypasses the query filters a multilingual plugin adds.
1.47.0
- Added: Connect This Site. After consent, one press issues this site its key: the plugin publishes a one-hour proof at /solvedagain-claim.txt, AEOSearch reads it back and saves the key here. No email, no waiting, no file written.
- Changed: a pasted key is checked with AEOSearch before it is kept, so a wrong key is caught on the spot and not at the first daily re-check.
- Changed: reconnecting after a reinstall keeps the plan you paid for. The key is new; the plan and the billing follow the site.
- Changed: on the AEO Report, each check folds under its heading. Click the heading to open the pages it cites; the count stays visible while it is closed.
1.46.0
- Added: a note at the top of the Dashboard and the AEO home asks you to build a fresh AEO report every 20 to 30 days, so you can see what moved on ChatGPT, Claude, Gemini, Perplexity and Grok.
- Changed: every screen, every lesson and every message re-read in plain words. The first sentence of a screen now says what the screen does for you; the mechanics come second. "Refusal code" reads "reason code".
- Changed: the glossary grew to 135 terms, so the help dock answers "what is a logo address" and "what are breadcrumbs" in the plugin's own words.
- Fixed: plain buttons sat on the same box as primary ones and clipped at narrow widths. A button sweep over every screen at two widths now ships in bin/ for release checks.
1.45.2
- Changed: the link suggestion and link check forms verify their security token before they read anything else the form sends.
- Changed: uninstalling drops the crawler log tables through a prepared query.
- Fixed: on a multisite network, the automatic updates switch on the Versions panel edits the network's list, the one WordPress reads.
- Changed: another active copy is switched off only when its code is this plugin's, so a different plugin that shares the file name is left alone.
- Changed: External services names every engine and vendor aeosearch.io puts your questions to, and Stripe for purchases.
- Changed: this changelog keeps the newest releases; every earlier one is in changelog.txt, in the plugin folder.
1.45.1
- Fixed: an agent reaches the redirect table and the sitemap exclusions only with an administrator's application password, the same gate those screens ask. The role manager's broader manage capability no longer opens them, and the two writes are marked destructive so an MCP client asks you before it calls them.
- Fixed: a retried write that is already live changes nothing, so the way back survives it. Before, clearing the sitemap exclusions twice left Put Back with nothing to restore.
- Fixed: Put Back refuses when the table changed after the write, and says so, rather than erasing your later edit.
- Fixed: going back a release asks you to tick a box first, and switches automatic updates off for this plugin, so the next update pass does not reinstall the release you left.
- Fixed: the tour, the running screen and the Dashboard's empty state now describe the free scorecard as it runs: four questions on ChatGPT and Gemini, once each. A plan's scorecard asks three times.
1.45.0
- New: AI crawler and AI referral analytics on Insights read the last thirty days of your own log: which AI crawlers came, how often and which pages they read, what your server answered them, and the visits that arrived from ChatGPT, Perplexity, Gemini, Copilot or Claude by app and landing page. Local, on every plan, nothing sent.
- New: DuckAssistBot is on the crawler list, with the address ranges DuckDuckGo publishes bundled for the verified check.
- New: Googlebot and bingbot are logged and counted apart, under their own heading. Google AI Overviews and Copilot read through the same crawlers that build each search index, so a read cannot be told from a search fetch, and neither joins the AI figures or the Crawl Access controls.
- New: a utm_source tag that names the app rather than its host (utm_source=perplexity) counts the visit too.
- New: the AI traffic ability hands an agent the same thirty days as one read-only call; it fetches nothing.
- Changed: with no AI crawler visit on record, Insights opens Crawl Access, which reads your own robots.txt and names any crawler the file turns away.
1.44.0
- New: on Premier, the Consumer View. Fifteen questions a day are read the way a signed-out shopper is shown them on ChatGPT, Google AI Overviews and Copilot, every answer is kept, and the Insights sheet opens the receipt. The daily AI pulse stays as the control: one question a day on four named models, every answer kept. The Plan tab names both.
1.43.1
- Changed: the Dashboard opens on the Answer engines band and its standing card. The answers your scorecard kept, word for word, and the AI crawler card now close the AI half, just above the Search engines band.
- Fixed: the Visibility Over Time chart printed its hidden data-table caption over the source line. The same fix reaches the daily AI pulse table on Insights.
- Changed: with no visits from AI answers, the crawler card says what was recorded in the last 14 days and why a click can arrive without a trace, instead of saying no one came.
1.43.0
- New: the Dashboard opens on two things. First the answers your stored scorecard kept, word for word, each marked with whether it named a rival. Then the AI crawler card: which crawlers read the site, what each says it reads for, and which pages people reached from an AI answer. On a site with no account the crawler card leads alone.
- New: visits from AI answers. A visit counts when ChatGPT, Perplexity, Gemini, Copilot or Claude sent its address or its utm_source tag with the click. Each is counted by day, app and landing page; no IP, cookie, User-Agent or query string is kept, and none of it leaves the site.
- New: watch up to ten pages. Star one from its row in the Posts or Pages list, or in the AEOSearch box in the editor. A watched page leads the crawler card and the page ledger, with its reads by declared purpose, the statuses your server answered and its visits from AI answers. Ten on every plan.
- New: each crawler's declared purpose (answering a person, building a search index, training) and the HTTP statuses your server answered it, on the crawler card and the Crawler Log.
- Changed: the crawler log is a table in your database, one row per day, crawler, page and status, so the log can finally say which crawler read which page. The old log folds in once on update. Rows older than 90 days are deleted; uninstalling drops the table.
- Changed: the crawler card says its counts are a floor when a page cache is active, since a cached page never reaches WordPress.
- New: each crawler hit records whether the visitor address was one the crawler's operator publishes: verified, unverified or not checked. The lists ship inside the plugin, dated; your site fetches none of them, and the address is dropped once compared.
1.42.2
- Changed: the free scorecard asks four questions, not eight. Platform change of 2026-09-25; the plugin's copy now reads the free tier: 4 questions on ChatGPT's fast model and Gemini 3.6 Flash, one pass each, once per site. A plan's scorecard still asks eight, three times each.
- Changed: the suggestion allowance is 200 fields a week on Founders, 500 on Commerce and 2,000 on Premier (was 500 on every plan).
- Changed: the plans are Founders at $79 a year or $8.99 a month, Commerce SEO/AEO at $179 or $19.99, and Premier at $399 or $44.99 (were $36 / $7.99, $95 / $14.99 and $175 / $20.99), and a renewal costs what the first year did. The Guide no longer prints a higher "full price" beside the monthly figure. Premier's daily pulse asks ChatGPT, Claude, Gemini and Perplexity; the quarterly scorecard still asks all five engines.
- Changed: keywords watched weekly are 25 on Founders, 100 on Commerce and 500 on Premier (was 25 on every plan).
- Fixed: the daily readiness re-check started an audit on one day and read its verdict on the next, so a fresh verdict landed every second day. It now reads the verdict a few minutes after the start, and a run the platform turns away for firing early tries again the minute it is allowed.
- New: on Premier, the daily AI pulse draws your share of voice against your rivals as a line beside the mention rate, with its own column in the table read to screen readers, and the Monday note says how it moved over the week. A day too thin to read is a gap, never a zero.
- Changed: the Guide's Yoast answer says what this plugin adds instead of what Yoast lacks, and "every fix reverts" now reads "every fix you apply", since a copy-only fix is never applied.
- Changed: the Plan cards name the Search Console page ledger, which every plan has carried since 1.32.0, and the Suggest allowance says what a week's ceiling comes to in a month.
- Changed: crawler counts reach your AEOSearch dashboard once a day, not once a week, when dashboard sharing is on. Still off by default, and still counts only: paths and user agents never leave the site.
- New: the readiness ledger says when the product, offer and merchant-listing row is a Commerce line this plan does not carry, with a door to the Plan tab. The platform drops the row for a Free or Founders site rather than showing it unmeasured.
1.42.1
- Fixed: opening Drills on a large site looked like nothing happened. The request that opens the screen read a whole batch of pages before answering; it now reads for a few seconds, shows the count, and carries on from there on the next visit or cron pass.
- Fixed: after a jump from the Technical rail, the rail lit the section above the one on screen. It now lights the section under the heading.
1.42.0
- New: an MCP server of this plugin's own. With the WordPress MCP Adapter active, Agents on the Technical screen prints the address (/wp-json/aeosearch/mcp) and the entry to paste into Claude Desktop, Cursor or Copilot. The server carries only this plugin's abilities, and the door is the same view capability the reads ask for; each write still asks for the manage capability.
- New: two writes an agent authors itself. set-sitemap-exclusions replaces the list of posts, pages and terms kept out of the XML sitemap, and set-redirects replaces the redirect table, validated the way the Technical screen validates it. Both go through the daily run's path: the prior state is saved and read back before anything is written, and revert-fix puts it back on the hash the agent was shown. Nothing about these writes reaches the platform.
- Changed: the sitemap-exclusions and redirects reads carry the snapshot hash a revert must quote.
1.41.0
- New: Agents, on the Technical screen. Through the WordPress Abilities API (WordPress 6.9 and newer), an AI agent you connect with an application password can read the last readiness audit, the citation scorecard, the reports, the plan, the proposed fixes, the sitemap exclusions and the redirect table, exactly as stored here, and can apply or put back one of the four narrow fixes through the same snapshot-first path the daily run uses. Nothing is fetched by a read, and nothing is reachable without a signed-in user who may manage this plugin. Install the WordPress MCP Adapter to call them from Claude Desktop, Cursor or Copilot.
1.40.0
- New: Versions, on the Technical screen. Look Up Earlier Versions asks wordpress.org for the plugin's own past releases, on that press and at no other time, and Install puts one back through WordPress's own installer with every setting where it was. The automatic-updates switch beside it is WordPress's own, shown where you decide the rest.
- New: [aeosearch_sitemap]. Paste it on any page for a sitemap people can read: the same posts, pages and archives as the XML file, as links grouped by kind, following the same switches and leaving out the same noindexed and password-protected pages.
- Changed: the settings search has a visible door in the masthead. Ctrl+K still opens it; the button is for everyone who was never told.
1.39.0
- Changed: the setup flow opens the way a switcher already knows it. The AEOSearch name sits over the rail, the seven screens read as labels over dots on one line, the way back to the Dashboard sits under the rail on every screen, and each sheet opens on a centred title. The order, the skips and the receipts screen are unchanged; nothing is sent anywhere.
1.38.2
- New: the AI Crawler Hits tile opens the Digest's crawler section, which now breaks the log down two ways: which engines came, crawler by crawler with a share of the hits, and which pages they read most. Counted apart, as the log keeps them, so the screen never claims which engine read which page.
1.38.1
- Fixed: buying a custom report from the AEO Report screen. The platform writes the whole question set before it opens the checkout, and this plugin gave up after ten seconds while that was still under way, so the buyer saw "did not answer in time" and the checkout it then opened was never shown. The call now waits as long as the platform does.
1.38.0
- New: the Dashboard. The plugin opens on it, connected or not: the standing card and the instrument panel from Readiness, then the local half (tasks done, site checks passed, images missing alt text, page-not-found hits, redirects live), every tile a door to the screen behind it. Readiness keeps the check-by-check ledger.
- Changed: the wp-admin menu runs Dashboard, Tasks, AEO, SEO, Tools, Integrations, Academy, Plan, Support. The Settings entry is gone: SEO opens straight onto Search appearance, with Every page, Kinds of page and Advanced folded in its rail.
- Changed: the Plan screen. Two lines above the cards name the offer, every priced card says Special Introductory Pricing above its name, the mark sits on an art band at the top of each card, the included rows carry a check in the signature green, the type is one step larger, and each card carries a door to the same plan on aeosearch.io. The Free card lists what the platform measures for it and leaves the local tools unsaid; every plan, Free included, still runs them.
- Fixed: the Readiness lede no longer says the Dashboard opens the same screen.
1.37.2
- Fixed: the Insights panel's Share of AI voice printed a tie of zeros on a run in which no brand was named in any answer. It now says so, the way the Citations screen already did, and divides nothing.
- Fixed: the writing check's Quotable Blocks row promised that a summary paragraph earns citations. It promises nothing now: the row says what length an assistant can lift whole, and the measuring is the report's job.
- Fixed: on the setup wizard's Move In screen, Next Screen did nothing. The importer's own forms sat inside the wizard's form, and a form inside a form is dropped by the browser; the importer now stands outside it.
- Fixed: the "Fill in a canonical address" switch printed nothing on the front page or any archive, because WordPress only asks for a canonical on single pages. Those pages carry one now; paged archives, search and 404 stay without one, as in core.
- Fixed: saving the Google Analytics ID is administrator-only, with the other controls that open a new path off the site. A delegated manager could point every visitor's page views at a property of their own.
- Fixed: after a paid checkout, the Buy buttons stayed live under the Payment received notice until the receipt landed, and a second click bought a second subscription. They hold for fifteen minutes now.
- Fixed: a report bought from wp-admin now asks the checkout to come back here, and the AEO Report screen starts watching for it the moment checkout opens instead of fifteen minutes later.
- Fixed: Site Analysis's Open Inventory link filtered on an issue that does not exist and opened an empty list. It opens the inventory with the most-issued pages first.
- Fixed: the Readiness Spread legend's counts disagreed with the list its link opened, because the list also counted drafts. A band filter counts published pages only, as the legend does.
- Fixed: the section rail under 1100 px wide opened and then shut after first paint, moving every screen down and up again. Its state is decided before layout.
- Fixed: See Our Work beside an applied row read at 3.1:1 in the dark scheme. It carries the deep accent now, measured in both schemes.
- Changed: the Fixes screen and its help panel no longer name a four-week cadence for AI answers; each plan's cadence is on the Plan screen, and a Monthly Report runs every month.
- Changed: the Guide and glossary describe the three report presets and the configurator, not two reports bought once; the lesson count is read from the Academy rather than typed.
- Changed: the listing says what the plugin keeps from the platform: one series, the mention rate of each scored run, drawn on the dashboard and dropped on disconnect.
1.37.1
- Fixed: a scorecard run on which every call to ChatGPT and Gemini failed printed "0% of cold answers name you". The rate is now gated on the answers that came back, never on the questions asked: a run with none says so, with the count it asked, and the reading of a zero is not offered for a number that was never measured. A measurement that failed is left out, never counted as a zero — the rule the Readiness screen already kept.
- Changed: the figure beside each plan's monthly price is its full price, and the card says so. It was struck through as if it were a past price; it is the price the plan will carry.
- Changed: Commerce SEO/AEO is described as what the platform meters for it — AI suggestions on your WooCommerce and Easy Digital Downloads product pages, and scorecard questions asked the way shoppers ask them. The Plan screen's lede and the Guide had promised product-page checks and merchant-listing schema on that plan; the platform meters neither by plan. The plan cards themselves print the platform's own feature labels, and one of those still names merchant-listing schema checks until the platform withdraws it. The listing now says the account is free and that plans and reports are sold.
- Fixed: the Guide and the listing called the platform the one host this plugin talks to. It is not: the off-site link check asks the sites a post links to, the structured-data importer fetches the one page you name, IndexNow posts to api.indexnow.org, and a Google Analytics tag prints once you save an ID. Each was already set out under External services; the sentences that contradicted it are gone.
- Fixed: deactivating and reactivating the plugin left the daily re-check and the hourly reports event unscheduled, and wrote a rewrite-rule set from before the plugin's own init ran, so /llms.txt answered 404 until the next permalink save. Activation now schedules both events on a connected site and drops the stored rules for the next request to rebuild; a site that lost its events before this version gets them back on its next admin request.
1.37.0
- Added: Google's two surfaces on the Finished Reports screen. AI Overviews and AI Mode are two different answers to one search box, so they get two tiles and never one number — and because a surface this volatile is never settled by a single reading, each question is captured more than once and the panel says how many of those showed it. Captures still to come and captures Google never answered are named under the tiles rather than folded into the counts.
- Added: the page ledger. One row a page, with what Google measured beside what the answer engines did: clicks, impressions and position from Search Console; the engines that cited the page and how many of your questions they cited it on; the visits ChatGPT, Claude, Perplexity and the rest sent; and what a capture of that page's best question actually saw. Five records, kept apart. There is no blended score here, because a blended score is the one number you could never check.
- Added: Google's own index verdict on every row, in Google's own words — whether the page is indexed, when Google last crawled it, and when we last asked. Read once a week for the pages Google impresses most and everything you have published from here. A page the pass never reached reads "not inspected", never "not indexed": those are different facts and only one of them is Google's.
- Added: the last day an AI crawler read each page, from this server's own log. Nothing is sent and nothing is asked — the answer is already here. It records the day and never the bot, because the log counts a day's crawlers and a day's pages apart, so it knows one came and cannot know which. Beside the index verdict, that pair is the one place you can find a page Google has indexed that no AI crawler has fetched in months.
- Added: the ledger says what it cannot contain. Visits from AI Overviews and AI Mode arrive as Google organic and cannot be told apart from it, so they are not counted and that sentence rides under the table.
- Added: a page losing clicks gets a row of its own. Clicks falling while impressions hold is the shape of something new sitting above the link — the page still ranks, Google still shows it, and fewer people arrive. The row carries the query that page earns its clicks on, the day both of Google's surfaces were read for it, whether each one showed, and whether it named your page. Both answers print, because on a falling page the citation nobody gave you is the finding.
- Added: the rule that flagged the page prints under the table, beside what the flag may never be read as. The fall and the Overview coincide. Nothing on this screen shows one caused the other, and Google publishes no number that could — so we do not say it. A threshold you cannot see is a threshold you cannot argue with.
- Added: the questions your buyers already typed. Before you start a report, the queries Google recorded for your own site that read as questions — the ones starting how, which or can, or carrying best or vs — are offered beside the set we drafted, with Google's own count of how often each one was shown. Tick the ones you want and they join the set in the words somebody typed, not in a model's smoothing of them. The rule that picked them prints above the list. Nothing is asked until you press the button that was always there.
- Changed: the setting that printed our Product schema in place of your store's is retired, and switched off where it was on. WooCommerce prints the image Google requires, the description, a checked GTIN and your ratings and reviews; ours printed a name, a URL, a SKU and one price, so turning it on cost five things and bought none. Sites that had it on get a notice saying so.
- Added: we add to WooCommerce's product markup instead. A brand for the products that have none, a manufacturer part number and a condition from a new box beside each product, and the colour, size and material attributes you name once on the Commerce SEO screen. Every value is still read from the product as the page renders, so a price is never a stale copy.
- Added: a product with sizes prints one offer for each variation, with that variation's own SKU, GTIN, image and stock, rather than resting on a price range Google reads for a product snippet and not for a merchant listing. All the variations or none of them: one the store cannot price and the page keeps exactly what WooCommerce printed.
- Added: where you ship, what shipping costs, how long it takes and how a return works, said once on the Commerce SEO screen and printed once on your site's Organization schema. Google applies a store-wide answer to every product unless Merchant Center or the product itself says something stronger. A return window of a fixed length with no number of days is refused rather than published half-said.
- Added: a panel beside every product saying what Google and ChatGPT read. Google's merchant listing names five properties it requires and twenty-six more it recommends; OpenAI's product feed names nine. Each one is marked answered or missing against the markup your store is about to print — WooCommerce's own, with our additions already on it — so the panel can never tell you something the page does not say. A product with variations gets a line of its own: how many carry an identifier, and the name of every one that does not.
- Added: those two lists are the vendors' own, read from Google's and OpenAI's published pages and kept here as a file with a checksum, byte-identical to the platform's copy. The panel on your product and the check in your report read the same names, so two screens of one product can never disagree about what is missing. What is not shared is the mapping from a name on the list to a field in your store: a Shopify product is not a WooCommerce product, and one mapping for both would be wrong in one of them.
- Changed: where Google says it prefers a store-wide answer, a store-wide answer counts. Shipping and returns stated once on your Organization schema now answer the two Offer rows Google recommends you put there instead, so a store doing the thing Google asks for is no longer told the field is missing. A price range is not an offer, either: Google reads it for a product snippet and not for a merchant listing, so the panel grades the offers underneath it.
- Added: Mark as Published reads Google too. Twenty-eight days after you tell us a page is live, its clicks and impressions for the 28 days before and the 28 days after print under the item, beside what the answer engines did at three days and fourteen. Both windows in full, not just the change: 24 clicks up is a rounding error on one page and a doubling on another, and you cannot tell which from the change alone. Change tracking elsewhere reads clicks and stops there.
- Added: the 28-day read waits for Google, not for a calendar. Search Console reports a day two to three days late, so the window closes when Google has actually sent the twenty-eighth day — otherwise the missing days would print as a fall. A page that did not exist a month ago gets no percentage at all, and neither does one whose record does not reach back that far. Both figures still print, with a line saying why the percentage does not.
- Changed: a page whose queries you never asked shows nothing in the Overview column. A capture that did not happen is not an Overview that did not show.
- Fixed: Open the Report now says it opens aeosearch.io, like every other link that leaves your site.
- Added: four plans on the Plan screen, priced and sold by the platform: Free, Founders ($36 a year or $7.99 a month), Commerce SEO/AEO ($95 a year or $14.99 a month) and Premier ($175 a year or $20.99 a month). Buy the year or buy by the month from the card; checkout is Stripe's page, and the plan switches on when the receipt lands. Every local tool stays free; a plan buys only what the platform measures: the citation scorecard again every 91 days, 25 keywords watched weekly, 500 AI-written fields a week, and on Commerce and Premier, AI suggestions on WooCommerce and Easy Digital Downloads product pages and scorecard questions written the way shoppers ask. Premier adds one question a day on ChatGPT, Claude, Gemini, Perplexity and Grok, share of voice, and a weekly note.
- Added: the writing lens on WooCommerce products and Easy Digital Downloads. The lens itself runs on this server on every plan; the platform decides whether AI suggestions on a product page are on the site's plan, and says so in the box if not.
- Added: shopper constraints on the scorecard form: a price ceiling, a destination, a stock status. Filled in, the questions are written as a shopper would type them. Commerce and above; you still read and edit the set first.
- Added: the Premier weekly note. Each Monday, with the digest email on, one mail reads the daily pulse: today's reading and where it stood a week ago.
- Changed: keyword checks are weekly on every plan; the screen no longer names a daily cadence.
1.36.1
- Fixed: Our Work overflowed its card when a description or address ran long, and every fix applied before this release repeated the same line. Values now wrap, the Before column appears only when a prior value was kept, and one sentence above the table says why older rows carry none.
1.36.0
- Added: Our Work, a screen under AEO that lists every fix this plugin has applied: the page or file it touched, what was there before, what is there now, and why the check asked for it. Each row is read from the site as it stands, and says where its revert lives. See Our Work opens it from the Fixes screen, from an applied row on the AEO Report and from a Success receipt.
- Changed: a per-page fix now records what the page carried before it was applied, which check asked for it and who applied it. Fixes applied before this release show the prior value as not recorded.
1.35.2
- Fixed: since 1.33.0 the block editor showed no AEOSearch sidebar and no score in its toolbar. The editor script stopped at a load error before it could register either, and the box stayed folded in the Meta Boxes drawer under the editor. Both are back on posts, pages and every other type the box follows, and a test now reads the script the way the browser scopes it so the same break cannot ship again.
1.35.1
- Fixed: the Guide named the Tasks screen by its old name and its old place on the rail.
1.35.0
- Changed: every public post type with an editor now gets the AEOSearch box, the SEO and score columns on its list, the quick-edit fields, the readiness box, the bulk editor's rows and its own rows on Tasks. Until now only posts and pages did; a site's Announcements, Portfolios or Testimonials had no AEOSearch presence at all. Attachments stay out.
1.34.0
- Added: Tasks, a category of its own in the menu, second after AEO. The Checklist screen lives there under the name Tasks.
- Added: content rows on that list. For the last ten published posts and the last ten pages: the search summary, the focus keywords, the writing check and the social image, each counted as a tally on the row. The door opens the editor of the first page that needs it, on the fold that answers it.
1.33.0
- Changed: the editor box is a stack of folds, and in the block editor it lives in the plugin sidebar beside the page, the way the classic editor always showed it beside the text. Focus keywords open first; the writing check, internal links, the search result, the social card, schema, content blocks, advanced, pillar content and insights fold beneath.
- Added: Content blocks. Six buttons add a block to the page where the cursor is: estimated reading time, table of contents, breadcrumbs, related links, an FAQ and a how-to. The page's own undo takes each one back. A
[aeosearch_toc]shortcode carries the jump list into the classic editor. - Added: a second robots line under Advanced. Keep no cached copy, show no snippet, and do not index the images, each one printed through the same core hook as the first line.
- Added: Track This Keyword beside each focus keyword on a connected site, posting to the same platform route the Rank screen uses. A keyword already tracked says so instead.
- Changed: the score pill in the block editor's header opens the whole box, and it shows on a page with nothing measured yet.
1.32.1
- Changed: every screen is set in the system type wp-admin itself uses, at the sizes a reader meets in every other admin screen. No font file ships and nothing is preloaded. The colours are unchanged.
1.32.0
- Changed: a connected site opens on Readiness, and Readiness leads the AEO rail with the AEO Report and the rest beneath it.
- Added: a Settings entry under SEO. The sheets now live there in three folds: what every page says, what one kind of page says, and what crawlers may read. The SEO screen is the overview, with a map of those folds.
- Changed: Tools opens on the Technical page, first on its rail. A fold opens at once, the whole row is the switch, and the fold that holds the section in view opens on its own.
- Changed: under 1100px the rail folds behind one bar.
- Changed: the Digest strip draws from its last reading and refreshes in the background, instead of holding the click.
1.31.12
- Changed: the Guide's cost answers print the four plans as the shop does: Free, Founders at $36 a year, Commerce SEO/AEO at $95 and Premier at $175, with what each adds and the monthly price beside it; reports stay a separate purchase from $25.
- Changed: the Support rail opens on the FAQ, and only the page that is open is marked.
1.31.11
- Added: the AEO Report builder sells a year of the monthly report on one invoice, the 90-day plan included and the report re-run every month. The platform prices it and Stripe bills it once a year; cancel it the way you cancel a monthly one.
1.31.10
- Added: 49 answers in the Guide's Questions section, one for every question the help box offers on every screen, so each is answered at once in the plugin's own words and never by a model: from what the readiness score measures to what the hreflang module writes.
1.31.9
- Changed: the AEO Report screen opens on what a report is, in the team's words: a formal measurement of whether the Answer Engines name you, your competition ranked, a plan to rank higher, the models chosen by you and every finished response shown in full.
- Added: three Guide answers the help box gives at once, with no wait: what is in an AEO Report, whether you approve the questions first, and how often to run one.
- Fixed: the help box waited ten seconds for an answer and gave up on a first-time question; it now waits thirty.
1.31.8
- Added: the AEO Report screen says how long a report takes before you buy it: the free report in 5-10 minutes, 20 questions in 15-45, 50 questions in about 90, gathered from the engines in real time.
- Added: two Guide answers the help box can give: how long a report takes, and where the PDF is (attached to the report-ready email, and Download PDF at the top of the report page).
1.31.7
- Changed: the Modules screen and the Move In step of setup now open in the team's own words. Every module is optional, an off module is inactive with its settings kept, and a switcher from Yoast, Rank Math, AIOSEO, SEOPress or AIO Schema is told plainly that nothing is deleted from the old plugin.
- Changed: the module notices and the Help, Guide and Academy entries that explained "off" by its hooks now say inactive, and eight screen ledes that opened on how a thing works now open on what you get. No setting, price or behaviour changed.
1.31.6
- Changed: the AEO Report screen speaks to a buyer. Starter runs the base models rather than "older rungs", and the screen opens on what is different here: you choose the model on each engine, and every dollar of the price is printed beside the choice that made it before you pay.
- Changed: the receipt's words, the passes hint, the add-on lines, the total's note and the two plan footers, in the same voice. Prices are unchanged and still arrive from the platform.
1.31.5
- Changed: the screens speak more warmly. The home screen greets you by name, and the ledes on Setup, Tools, Integrations, Plan, Support and the Academy say what each screen is for in one line before anything else.
- Changed: a Fix screen keeps this server's read of your front page for a minute, keyed to the page's last edit, so reloading or coming back from the editor no longer waits on a fresh read each time. Any action you take in the plugin forgets it.
- Added: on this plugin's screens the footer's version line is a receipt: how long the plugin took to draw the screen, how many database queries ran, and how many calls left the server.
1.31.4
- Changed: each entry in the AEOSearch menu now opens its own workspace. The panel beside the menu lists that section's screens and nothing else: AEO — Answer engines, SEO — Search engines, Tools, Integrations, Plan and Support each carry their own list, and the Start Here shelf that repeated the Academy on every screen is gone. The Academy, the AEOSearch Guide, the Glossary and Questions live under Support now.
- Changed: Technical, Import & Export and the Academy fold. Each carries an arrow that opens its sections in place, so the eight Technical panels and the six courses are one click away from any screen in their section, and out of the way on every other.
- Changed: Plan is a page of its own with no list beside it, and Integrations opens on Integrated Plugins with Import & Export folded beneath it.
- Changed: Locations leaves the WordPress menu. The Locations section on the SEO screen still adds and lists them.
1.31.3
- Fixed: when this site cannot reach the platform, every screen used to wait out the full ten-second timeout again on every single load. It asks once now and remembers the answer for a minute.
- Fixed: a site with hundreds of published pages no longer re-reads all of them to draw the dashboard. The roll-up is held for five minutes and redrawn the moment you save or delete a post.
- Fixed: an admin tab left open long enough for your session to expire now says so and tells you to reload. It used to blame your connection for a request that reached the site perfectly well.
- Fixed: ticking rows you do not have permission to edit is no longer reported as rows with nothing written on them. It names the permission and says who can run it.
- Fixed: Ask Your Report stops checking for a late answer the moment the answer arrives, rather than carrying on for the full two minutes.
- Changed: fourteen more lines in the editor are translatable. They were built in English in the script and no language pack could reach them.
- Changed: the contrast gate now measures the light colour scheme as well as the dark one. It found two pairs that had been below the floor in light the whole time; both are corrected.
1.31.2
- Fixed: a readiness scan that is already running no longer offers the button that starts another one. Pressing it posted a second scan, the platform refused it on cadence, and the screen handed back a red error for using a control it had put there.
- Fixed: Ask Your Report says so when its first load fails. Offline, or behind an expired session, the panel opened looking ready, with an empty question list and nothing to explain it.
- Fixed: the Elementor panel opens even when a caching or script-combining plugin loads our file after Elementor has already started. Everything used to sit inside that one event, so a file that arrived late bound nothing and the panel never opened.
- Fixed: on a host that blocks loopback requests, the Fix screen no longer spends ten seconds re-reading your front page on every single render. The failure is remembered for a minute. A successful read is still never cached, so a fix you just applied still shows straight away.
- Changed: the update note now carries the releases you skipped, not only the newest one, up to three of them and five lines.
- Changed: in Windows High Contrast the four notice states are told apart by the style of their left rule, where the colour is repainted away.
- Changed: the help dock and the builder panel describe themselves as regions rather than dialogs. Neither ever held keyboard focus inside itself, and neither should: both exist to answer questions about the screen behind them.
1.31.1
- Changed: open a category from the WordPress menu and the panel beside it lists that category's options and nothing else. It used to finish with a door to every other category, which repeated the menu standing a few inches to its left and put the answer to "where else can I go" underneath the screen's own contents.
1.31.0
- Fixed: the WordPress.org listing was being cut off mid-sentence. The directory trims a description at a word count, and it folds every section it does not recognise into that same budget — which is where our external services disclosure was landing. The description is shorter now and the whole disclosure survives.
- Fixed: a report you bought keeps a door on the report screen while a newer run sits in review or a later one fails. It was never lost, but you had to go and find it.
- Fixed: a redirect target can no longer carry a line break, a null byte or a backslash, and a 404 exclude pattern is compiled and run once before it is stored. A pattern that cannot work is refused at the box instead of breaking the monitor later.
- Fixed: a homepage that lists your latest posts now carries a description. It had no page behind it, so no template ever expanded for it, and the one page you most want described went out with nothing. The Homepage card description writes it, and your tagline stands behind that.
- Fixed: the share-image tool checks that an overlay really is a JPEG, PNG, WEBP or GIF before it opens it.
- Fixed: sitemaps and the map file drop characters XML cannot carry, so one bad title no longer makes a whole file unreadable.
- Fixed: an import can be resumed only by the person who started it, or by an administrator.
- Fixed: llms.txt builds one at a time. A second request arriving mid-build is asked to come back rather than starting its own.
- Fixed: ten styles referred to colours and sizes that were never defined. The token check now fails on any of them, and two webfonts nothing used are out of the download.
- Changed: the countdown that reloads a screen after a run clears the one-shot message from the address first, so a refresh no longer shows you the same notice twice.
- Changed: a scan the platform could not answer is remembered for a minute, instead of being asked again on every paint.
- Changed: Disconnect names everything it removes — the findings of the crawl, the scorecards, the fix plan and every other cached result. Your settings, your redirects and your keywords stay.
- Changed: every step of an import now reports in a sentence rather than a code.
- Changed: the plugin no longer hides WordPress's own update notices on its screens. Other plugins' advertising is still kept off them.
1.30.5
- Fixed: Fix the Title lists the pages the scan marked, with what it read on each and Write with AI beside every one. A Warning above a front page that passes now says which pages it comes from instead of pointing at Site Crawl.
- Changed: the door beside a Readiness check opens the Fix screen in place, not in a new tab.
- Changed: the platform's crawl reads a page once whether a link ends in a slash or not, so one page is no longer marked twice.
1.30.4
- Changed: beside a Site Crawl finding, Write with AI is the filled green button and Write the Snippet is the outlined door, so the button that writes is the one that stands out.
- Fixed: Apply Both with its confirmation unticked now says so at the box, in place, instead of a round trip to the top of the page.
- Fixed: a control that could not do its work lands where its notice is, not back on the finding with the notice out of sight.
- Changed: the first-run welcome picture is the Ask Your Report character, waving.
1.30.3
- Changed: on Ask Your Report, a starter question fills the box and waits for you to press Ask Your Report. Nothing is sent, or spent, until you do.
- Changed: each new question opens right under the box, in the signature green, and the earlier ones fold to their question line. Click one to open it and the rest fold.
1.30.2
- Fixed: Set It for Me and Revert beside a Site Crawl finding bring you back to that finding, marked, instead of to the top of the AEO Report with the receipt out of sight. Write with AI, Apply Both and Discard the Draft do the same.
- Changed: the crawl coverage ring on Site Crawl is drawn in the signature green.
1.30.1
- Fixed: a Readiness scan that didn't finish took your last finished scan off the screen with it, leaving one line and a button. Readiness keeps that scan up now, every verdict dated to when it landed, with the platform's own reason above it. The next scan you run takes its place the moment it lands.
1.30.0
- Changed: Ask Your Report is warmer to use. Your report runs in place while it reads, and says what it is doing; answers arrive in short sections under green headings, in a larger reading size, with the tables it read beneath them.
- Added: Readiness says when its scan result arrived, above the top finding, and brings you to that line when a scan you were watching lands. Run Readiness Scan shows it is working the moment you press it.
- Changed: a door beside a check opens in a new tab, so your Readiness list stays where you left it. The Fix screen's doors into the editor do the same.
- Added: the Fix screen explains a Warning that stays on a front page that passes. It names the likeliest cause, whether that's your other pages or a second title or description tag, and opens the screen that answers it.
- Added: two h1 headings that read the same are named for what they usually are, a copy for phones and a copy for wider screens, with the way to keep both layouts.
- Changed: the LocalBusiness card on Fixes says Answered once your Location is published, names any field still empty, and explains why the card stays listed. The Location editor says what its fields become, and saving one says what was printed.
- Changed: Readiness opens by saying that Dashboard and Readiness are the same screen. The Guide's Questions, answered section is rewritten in a warmer voice: the first section in the new tone.
- Fixed: the site's address on the green Standing card prints in white. Fix buttons on Site Crawl line up in one column on the right.
1.29.0
- Added: Ask Your Report, on AEO Report. Ask a question about your newest finished report in your own words and get the answer from the report itself, with the table it read, by sending the question to aeosearch.io on the click that asks it. With no bought report, it answers from the free scorecard.
- Added: Earlier Questions, beside the box, keeps every conversation about that report, including the ones its owners had on aeosearch.io, so a follow-up picks up where the last answer stopped.
- Changed: a question that outlasts the plugin's wait still finishes on aeosearch.io. The panel watches Earlier Questions for the answer instead of asking you to send it again, which would count twice.
- Changed: consent text version 11 names the question Ask Your Report sends and that Anthropic answers it. Connected sites are asked once.
1.28.0
- Changed: screens open from what your site already holds. When a stored answer from aeosearch.io has gone stale, the screen shows it at once and asks for a fresh one in the background, so a click no longer waits up to ten seconds for our servers. A report you just started is still checked the moment you open it.
- Changed: Brand Profile keeps its profile and drafts for a minute instead of asking aeosearch.io twice on every open. Anything you approve or send back clears that copy, so the next screen shows the new state.
- Changed: the home screen reads your first 201 posts for its page scores instead of loading every post on the site and stopping at 200.
- Changed: Libre Franklin, the face every screen is set in, starts loading with the stylesheet, so text no longer shifts when the font lands.
1.27.0
- Added: a missing canonical link is set for you. Set It for Me beside each finding writes the page's own address, and Revert sits beside it afterwards. It used to open the page editor and leave you to find the field.
- Added: the bulk editor's AI fill writes whichever of the title and description is blank on each row, and a new Set Rows to Index resets the robots column, with a preview and a per-row undo. A blank field now says it is blank.
- Added: Google Search Console connects in three steps on Keyword Visibility, with the step you have already done marked and the sign-in page one click away.
- Added: Citations shows your mention rate and share of AI voice on tiles, with a coloured bar per engine and per brand, and Buy a New Report at the top and beside the full scorecard.
- Added: Content Inventory explains every issue on your list in plain words: what to do, and why it is worth doing.
- Changed: Rank is now Keyword Visibility, Writing is now Brand Profile, and AEO Report leads the AEO group with Finished Reports under it.
- Changed: Show only what needs a decision always works. It used to switch itself off when every setting was already the way we would set it.
- Changed: a finished import closes its ring in green at 100%.
- Changed: fix cards lead with the suggestion, and the exact code a fix writes folds away under See the Exact Change.
- Changed: screens no longer fade in on every load, and tiles already on screen stay put instead of flickering.
- Removed for now: the Fix runner, Breadcrumbs and Languages are out of the menu and search while we finish them. Their screens still open at their old addresses.
1.26.0
- Changed: the observatory's daily send to your collector now waits for the answer. A batch the collector did not confirm is kept and sent again the next day under the same batch id, and after six failed days it is dropped with the count printed on the Observatory screen. It used to be cleared before the send, so a collector that was down for a night lost that day's hits with no record.
- Added: the site key is pinned to the address and environment it was saved on. A database copied to a staging site, or a site moved to a new address, sends nothing to the platform until you press Use This Key Here on the notice. A clone used to audit and apply fixes as the live site.
- Added: an auto-applied fix files a receipt with the platform, so a report on this site says the change was made and can be undone, instead of saying nothing was changed. A receipt the platform did not confirm is sent again on the next run and dropped after six, with the outcome in the auto-apply log.
1.25.0
- Added: a daily AI pulse on the Insights sheet, for plans that carry daily page monitoring. Once a day, one pass asks ChatGPT, Gemini, Claude, Grok and Perplexity whether they name the site, and the strip draws one column a day for the month, hollow where a day had too few answers to read. It is a reading beside the monthly audit: not an audit, and not a score to act on.
- Added: the platform's fix plan on the Fixes screen. Every lost question lists the gap, the competing source, the change the platform recommends and the evidence behind it, with Mark as Published so the platform checks the page again. A draft opened from a fix item reports its own permalink the moment it publishes.
- Added: the scorecard cites the sources each lost answer drew on, and states how many answers recommended, passed over or spoke against the site once enough answers are in to say so.
- Added: Allow and Block per AI crawler on Crawl Access, written into robots.txt one line per bot.
- Changed: Site Analysis names the rival SEO plugin that still holds a switch. While it does, the sitemap, canonical, noindex and type default rows read unknown and point at the takeover, rather than a pass no visitor receives. The sitemap row names the plugin that holds it.
1.24.1
- Added: a Fix screen for a failed title or heading check. It reads the front page as it is this minute, prints the title and description beside their lengths and the rule, lists every h1 on the page, says which plugin prints the head, and carries Write with AI for the title pair. The door beside a Fail on the Readiness ledger opens it.
- Fixed: a link into the editor's Snippet or Writing Check panel now lands on that panel with its fields in view, and unfolds the block editor's meta-box drawer when it was folded. It used to land on the page's blocks with the box shut under them.
- Fixed: the front page resolves for a title fix. Write with AI and Apply Both refused the homepage, the one page every scan measures.
1.24.0
- Changed: the platform retired its fixed reports and plans on 15 September 2026, so the plugin sells none. The Full and Coverage cards and the Track and Grow cards are gone; every report is priced in the configurator on the AEO Report screen, from the platform's floor, and Monthly is a switch on the same price. A site already on a plan keeps it, and the billing portal is where it stands.
- Changed: the writing service has no listed price. Ask for the Price on the Writing screen sends the request to the platform, which mails the figure with a payment link; the screen says the price is on its way until that link is paid.
- Removed: the report_checkout and billing_checkout actions. The platform answers both routes 410 now, and the plugin no longer calls them.
- Fixed: the Readiness ledger stayed pinned to the last scan you started by hand. The daily re-check stored its fresher verdicts and the next open overwrote them with the old scan's. The finished re-check is the ledger now.
- Added: a failed check with no proposed fix carries a door beside its status, into the editor panel that answers it on the front page: Write the Snippet for the title and description, Open the Writing Check for the headings. The homepage checks never get a page fix from the platform, so those rows had nothing to press.
- Added: Run Readiness Scan on the Readiness screen itself, under the ledger, beside the line that says the verdicts are what the last scan saw. It lived on Connection only.
1.23.0
- Added: the AEO/SEO Glossary under the Academy, beside the AEOSearch Guide: every word you meet on these screens or in a report, defined in plain terms, grouped by subject and alphabetical inside each group.
- Added: AEOSearch opens as a panel inside Elementor's editor, from its menu, and inside Beaver Builder, from a button in its bar. The panel scores the page as the builder shows it and opens the full box. SeedProd publishes no way in, and the Integrations screen says so.
- Changed: the tour, the Guide, the Academy and the Readiness screen now explain what happens first and why, and each carries a short list of what its words mean: Passed, Warnings, Failed, Measured, and the rest.
- Fixed: a finished scorecard stays on every screen when the platform runs it again and the re-run does not finish. The re-run is said above it; the finished report is never replaced by a failure.
- Fixed: the Drills screen builds its site link map on the request that opens it, so a host whose scheduled tasks never run no longer reloads the screen over a count that never moves.
- Fixed: a report that did not finish is listed as that under Finished Reports, instead of as still running.
- Fixed: Refresh Trend on the dashboard now draws Visibility Over Time from the platform, one dot per scored run, and says when the platform did not answer instead of reporting a refresh over an unchanged chart. The chart names what each dot is: the share of answers that named you on that run, or the readiness score when it draws from the local record.
1.22.0
- Added: Send It Back on every delivered draft of the writing service. Say what missed, in a line or two, and the platform drafts that page again, once, free, with your note in front of it. The list marks the page while the rewrite is on its way.
- Added: the writing service can be added to a paid report from the Writing screen and from its row under Finished Reports, at the price the platform lists. Stripe takes the payment and the platform switches the service on.
- Changed: a profile or two paragraphs left unanswered for a day after the note are taken as approved, and the Writing screen says the date before it happens and says so afterwards. A site the platform cannot read is tried five times, one a day, before we take it up by hand.
- Changed: the tour's last stop points at the Checklist and the Writing screen, and the wizard names ChatGPT, Gemini and Claude instead of "answer engines".
1.21.0
- Added: a Checklist, under Start Here. Everything the plugin can do for your site in one list, in the order it pays off, ticked from what you have already done: the wizard's steps, the audit, the scorecard, the modules. Each row says how long it takes and which screen to open; a row the plugin cannot see into is ticked by hand, and any row can be set aside. The home screen and the WordPress dashboard carry the count.
- Changed: applying a fix lands you back on the home screen, receipt at the top and the failures still open below it, instead of on the Fixes ledger.
- Added: a Writing screen, under the AEO menu. The writing service reads your site and writes down how your brand sounds, then writes two paragraphs in that voice; until this version the service approved both itself. Now they are approved here, or the two paragraphs are written in a box of your own, and every finished draft comes into your Drafts with one press, unpublished, marked so a second press opens the post it made. The Finished Reports list and the home panel say when a word is owed.
- Added: an update note after a version with something to point at, at the top of the plugin and once on the Plugins screen, with the screen each line names. Got It keeps it away until the next one; a fresh install that takes the tour meets the tour, not a changelog.
- Changed: only our notices print on our screens. Another plugin's banner used to sit at the top of every AEOSearch screen.
- Changed: the free scorecard reads its own rate back in a sentence on Citations, so the number says what to do next.
- Changed: the last stop of the tour's first part says play around, as the demo notes have it.
1.20.0
- Added: five rows on Site Analysis. Whether WooCommerce is live, whether the site has an icon, whether the sample post and page are still published, whether the address is https, and whether any page still loads its own images or links over http. The last one has a fix that rewrites those addresses to https, and the same undo covers it.
- Added: Show only what needs a decision, one checkbox on every settings screen. Rows already set the recommended way fold away, with the reason kept; what is left is the rows that are yours to call.
- Added: a Jump list. Every heading gets an address at render, so a citation can land on the section rather than the page. A block for the list, and a row on Search appearance that places it before the first heading on the post types you choose.
- Added: Link rules, under Technical. A phrase and the page it should point at, with alternate phrasings and a cap per post. Every post that already says it gets the link when it renders, never in a heading or a quote, and removing the rule takes every link back at once. Off until you turn it on, because it writes to the page.
- Added: Check the Off-site Links, on the editor's link panel. Asks the other sites a post links to whether the page is still there, when you press it and at no other time. A link that answered once and fails later shows both days.
- Added: Include what this server found, under Digest email. New broken links, off-site links that stopped answering, and paths that keep returning a 404, one line each, on the digest's own schedule.
- Changed: the IndexNow screen now says that Google is not a partner and that the sitemap is still the fastest honest route there.
1.19.0
- Added: Site Analysis, under Tools. One button reads this server and lists every check as passed, worth a look, failed or could not check, with the screen that fixes each. The figure is passed divided by measured; count the rows and you get the same number. Nothing leaves the server.
- Added: opening hours on a location are seven rows, one per day, with a time control that follows your browser's clock. The JSON field is gone.
- Added: About and Contact page pickers on the Schema screen, marking each as an AboutPage or ContactPage, and an address order for the business shortcode.
- Added: a Recommended mark, with its one-line reason, on the settings rows where there is an honest reason to set a switch one way.
- Added: template variables %%modified%%, %%id%%, %%pt_single%%, %%pt_plural%%, %%term_description%% and %%product_short_description%%. Post type archives, the WooCommerce shop page among them, take a title and description pattern of their own on the Search Appearance screen. Stripping the product-category base is not in this release: WooCommerce owns that base under Settings → Permalinks, and a second set of rewrite rules would fight it.
- Added: the setup asks what kind of site this is. Blog, business, shop or portfolio presets the schema default for posts and what the sitemap lists, and touches nothing already chosen on its own screen.
- Added: Submit to Search Console and Submit to Bing on the Sitemaps screen, opening the engine's own page with the sitemap address to paste.
- Added: Advanced Custom Fields. The writing lens reads ACF text fields as part of the page, so a page built from fields scores as what the visitor sees. Nothing is written back.
- Added: a tone control on Suggestions: plain, warm, formal or playful, or match the page.
- Added: the score pill in the block editor's header. The mean of the meters, in the band colour; it opens a panel listing the meters and follows the box below the editor as you write.
1.18.1
- Changed: the Dashboard shows the work alone. The rail appears once you open a category from the AEOSearch menu, and lists that category.
- Changed: one more step in legibility: every interface size a pixel larger again, darker secondary text, card edges you can see, and a rail whose links and headings read without leaning in.
1.18.0
- Added: the AEOSearch menu in wp-admin now lists categories — AEO, SEO, Tools, Integrations, Academy, Plan, Support — and each opens its own screen. The rail beside a screen shows that category's items and a door to each of the others. Before you connect, AEO opens the Connection screen and Plan waits. Every old link still opens the same screen.
- Added: a Support screen. The Guide's questions, answered in the Guide's own words, with doors to the Academy, the Guide and the AEOSearch desk.
- Added: an Integrations screen. Yoast, Rank Math, All in One SEO, SEOPress, WooCommerce, Easy Digital Downloads, Elementor, Divi, WPML, Polylang and Site Kit: whether each is on this site, the switch it needs, and Install through WordPress's own installer for the nine that are listed on WordPress.org. The plugin sends nothing and fetches nothing to draw the screen.
- Added: the help box opens on five starter questions for the screen in front of you. One click asks it.
- Changed: Libre Franklin leads the interface type, each interface size one pixel larger (display and hero unchanged); the greens are brighter. Same identity, easier to read.
- Changed: a warmer word on the connection, plan and report screens. Nothing the plugin does changed with it.
1.17.16
- Added: a box at the head of the Bulk editor's table ticks every row on that page, so a page of a filtered list — the pages the platform rated fair, say — is selected in one click.
- Changed: a fill with nothing to write no longer opens the preview screen. The list comes back, on the same page, tab, search and filter, with one sentence at the top saying why: the fill writes only an empty field. Saving a page, writing a preview's values and undoing a row return to the same list too, each with its own receipt at the top.
1.17.15
- Added: the same fix proposed on many pages — a canonical link on every page, say — has one form at the top of the Fixes screen that applies it on all of them with one confirmation. Each page is still checked against its preview before it is written, and each can be reverted on its own.
- Changed: while a fresh readiness audit runs after an apply, the Readiness screen keeps the last finished ledger on screen instead of a skeleton, and says the new one replaces it when it lands.
- Changed: every apply receipt, the Fixes screen and its help panel now say when the numbers move: the plugin asks for a readiness re-check after an apply (one per site per day), and AI answers move with the next report.
- Changed: the Citations headline glosses "questions that name no tracked brand" in one plain sentence.
1.17.14
- Fixed: on a site whose bought report had finished before its free scorecard ran, the Citations screen showed that report under the free scorecard's heading, and the free run could not start. The platform now reports the run in flight or the free scorecard there, never a finished bought report, and a bought report never spends the free one.
- Changed: the free scorecard runs once per site, not once every 30 days. A failed run does not count; a bought report or any monthly plan measures again.
- Fixed: the readiness handoff described the bought report directly under the free scorecard's button, so the free run read as twenty questions on three engines. The two are named apart now: eight questions on ChatGPT's fast model and Gemini 3.6 Flash for the free scorecard; twenty on ChatGPT, Claude and Gemini, or on all five engines, for a bought report.
1.17.13
- Changed: a finished import hands the site over by itself. When the plugin you moved in from is still active, AEOSearch prints the titles, descriptions, canonicals and schema it imported from that moment, and the old plugin is quiet through its own filters. Undoing the import hands back exactly what the import took, and nothing you switched by hand.
- Fixed: under takeover, a page that had never set a canonical by hand printed no canonical at all. It now prints its own address, as WordPress itself would.
- Fixed: the SEO plugin takeover switch could not be reached until the platform had proposed a fix. With Yoast, Rank Math or All in One SEO active the Fixes screen now opens on the switch even before the first proposal.
- Fixed: the setup invite showed only on a site that had not connected, so a site that connected first never met it. It now opens the home screen on a connected site as well, and waits while the guided tour's first part is open.
- Fixed: the guided tour started over from the welcome every time a stop's door opened another screen. It now lands on the stop you were on; Finish and Take the Tour Again start it clean.
- Changed: the Readiness Spread and every other yellow mark read as a traffic light: green, yellow, red. The yellow was a brown chosen for reading text against the page; text keeps that ink, marks get the yellow.
1.17.12
- Changed: a competitor report is bought one rival at a time. Each name typed into the competitors field gets its own box, priced at the platform's figure, so one key competitor can be bought alone.
- Changed: every model in the engine lists is priced as the report it would make, the same figure the total shows. The old "+$43" beside a $25 report that became $50 was the floor doing the arithmetic where nobody could see it.
- Changed: the 90-day action plan and the competitor report carry the prices the platform sends for WordPress sites, $75 and $25 as of this release.
- Fixed: on the report panel, Open Finished Reports sits on the same line as Open the Report and reads in the brand's ink.
1.17.11
- Added: Fixes by the Plugin on the Site Crawl. One confirmed click applies every finding the plugin can answer on its own, in the background: the platform's model writes a title and description for each page the crawl flagged, from that page's own text, and each page with no canonical link gets one naming its own address. The panel lists every change as it lands, each page keeps its own receipt and revert, and Revert the Run puts all of it back. Findings that need a person are counted and say so. A spent AI allowance pauses the run where it stands; Resume picks it up. The auto-apply kill switch on the Fixes screen stops this run too.
1.17.10
- Added: the Site Crawl findings say what to do and why. Findings are grouped by check inside each family; every check the plugin knows carries a What to do and a Why, every row carries its words, and a page this site owns carries the route to the editor control that answers the check.
- Added: Write with AI beside a title finding on a page this site owns. The platform's model writes a title and description from the page's own text; the draft is shown with its lengths, applied only on a confirmed click through the same path as every page fix, and reverted with one click.
- Fixed: the findings list is read to the end of the platform's cursor, not the first fifty, and a list fetched while the crawl was still running is asked again once the crawl has finished.
- Fixed: a 404 row in the crawl table names its next move, and the top bar sits on one baseline.
1.17.9
- Added: the Site Crawl table explains its columns where they are read. A key above it says how a score is made, what each response code means and what a check that could not run counts for; every response code carries its word (served, redirected, not found, server error); and the checks behind a could-not-check count are named under it with the reason the platform recorded.
- Changed: the platform no longer lists a sitemap index's child sitemap files as pages. Their addresses are read instead, so a Yoast site's crawl starts from every page the sitemaps name.
1.17.8
- Added: the Site Crawl panel explains itself. A disclosure under its heading says what the crawl is, which checks it runs on every page, how a page's score is made, what a 404 row means, and how to read the ring, the findings and the table.
- Fixed: a price list fetched by an earlier plugin version is asked again as soon as the AEO Report screen opens, so an update shows the platform's current presets at once instead of up to six hours later.
1.17.7
- Changed: the Starter report is ChatGPT and Gemini on their older rungs at $25, and the other three engines are added at the price on their rung. The platform sets the shape; the plugin prints it.
1.17.6
- Fixed: the report configurator now shows the price moving as the shape changes, the way aeosearch.io does. Every model in each engine's list carries what it adds at the chosen question and pass count, the 20 / 50 / 100 rungs and the pass choice each carry the report price they would make, and a receipt under the total lists every engine line, the question-writing base, the add-ons, and the floor when it applies: no report sells under $25, so a small shape can change without the total moving, and the receipt now says so instead of leaving it a mystery.
1.17.5
- Added: the AEO Report screen now builds a report the way aeosearch.io's configurator does. Pick the engines and the model on each, twenty, fifty or a hundred questions, one pass or three, a competitor report for each competitor named, the 90-day action plan, and once or monthly. The price follows every choice and opens on the Starter: all five engines at their fast rung, twenty questions, one pass. Every number printed is the platform's own quote; checkout at Stripe shows the platform's total.
- Fixed: the Site Crawl panel now says a crawl is running, with the pages read so far, the time it started, and a countdown to its next check, instead of "Nothing discovered" and "reached no addresses" while the platform was still reading the sitemap. A crawl that stopped before it finished says so and offers the button again.
- Fixed: Pages Measured and the Readiness Spread on the home screen fill on their own. A background pass bands every published post and page the writing lens has not read yet, a batch at a time, so a site no longer reads "0 pages measured" until an editor opens each post.
- Changed: the Readiness Score tile says what the platform reports: a pass, a warn or a fail for every check, never one number.
- Changed: the listing line now reads "Your all-in-one AEO and SEO solution for WordPress, including AEO reports, on-page content analysis, XML sitemaps and more." (the operator, 2026-09-13).
1.17.4
- Changed: the listing line (the plugin header's Description and the readme's short description) now reads "The first true all-in-one SEO and AEO solution for WordPress, including AEO reports, on-page content analysis, XML sitemaps and more." (the operator, 2026-09-13). No code change.
1.17.3
- Fixed: activating this plugin beside an older copy in another folder (solvedagain, or one named by hand) ended in "Plugin could not be activated because it triggered a fatal error". The older copy is now switched off the moment this one loads, whatever its folder is called, and a notice names the folder to remove.
- Changed: the guided tour is two parts and follows the demo notes. Part one opens on a welcome with one door, Start the Guided Tour, and no skip; it walks site setup, the Readiness ledger and what passed, failed and measured mean, the Fixes, the free scorecard and how long it takes, then crosses to Pages and takes the editor box one section at a time: Search result, Social card, Schema, Writing check, Links. Part two opens on its own once a report has finished and reads the results with you: Readiness, Citations, AEO Report, Rank, and where the work starts.
- Changed: Tools → Modules reads in five groups, each a door that folds: AI Answer Engines, Editor Tools, Site Structure, Technical Setup, Social and Media. Every toggle is a switch, still a real button.
1.17.2
- Added: the paid report's own status rides the Readiness screen, the first screen you open: running with the live count, finished with the door to the report. A report opened from the platform's side shows up there too; the plugin used to stay silent unless the checkout ran through it.
- Added: an hourly refresh of the platform's report list, so that panel and Finished Reports are current without a screen asking for anything.
- Added: the masthead prints the version that rendered the page. Plugins lists the file header; this is the code that ran, so a host serving an older build is visible at a glance.
1.17.1
- Changed: an applied fix now reads "Success! We fixed this on" the date it was applied, in its own row and in the Readiness ledger. The ledger keeps the platform's verdict beside it, dated to the last audit, and says once above the table that the counts are that audit's own.
- Added: applying a fix by hand asks the platform for a fresh readiness audit at once, so the ledger re-measures the check within minutes instead of at the next daily run. When the platform's one-audit-a-day rule refuses, the row says when the next audit is allowed.
- Added: the AEO Report screen says what is happening to a report you paid for — questions ready to approve, running in the background with the live count, finished with the link — and where it lands: this screen, Finished Reports, and the address on the receipt. Stripe's return to the Citations screen now says the same.
- Changed: the Site Crawl panel's not-available states say they are about the crawl, and that a report never needs it.
1.17.0
- Added: a product tour. The first time a site consents to send data, ten moves open at the top of every connected screen, each one a real screen with a door onto it, with Back and Next. Finish or skip it once; take it again from Tools.
- Changed: an applied fix says so in its own row. Done sits beside Revert This Fix, the row that just changed is outlined and scrolled into view, and while Yoast SEO, Rank Math, All in One SEO or SEOPress still prints the tag, the row says Stored, not live, names the plugin and links to the takeover switch. The apply button reads Store This Fix in that case.
- Changed: a running scorecard or report says what is being asked, how long it tends to take, and where the result lands, above the live count. The Finished Reports list says the same beside a running row.
- Changed: the readiness badge "Fixed, pending verification" now reads "Applied, the next audit re-checks it".
1.16.3
- Changed: the Full and Coverage report cards moved from their own Reports screen onto the AEO Report screen, above the platform's site crawl. The old Reports link lands there.
- Added: a Finished Reports screen under it, listing every report the platform holds for this site, newest first, each one opening on aeosearch.io. The list is the platform's; the plugin adds nothing.
1.16.2
- Added: the Rank and AEO Report screens fill in. The platform now answers the site's own id and modules to the key alone, so the plugin fetches what the platform measured instead of explaining why it could not ask. Both screens say plainly when SEO measurement is not yet switched on for the site.
- Added: track a keyword by hand from the Rank screen, and stop tracking one. The platform caps the count by plan and checks weekly (since 1.32.0, on every plan). Search Console stays a platform connection; the screen links to it.
- Added: Run the Crawl on the AEO Report screen. One a day per site; the platform names when the next is allowed.
- Changed: the Platform Modules panel restates the modules the platform reports, once a Rank or AEO Report screen has asked.
1.16.1
- Added: a Reports screen, second in the rail, holding the Full and Coverage report cards and their form. Every platform screen carries a strip naming the two reports and their prices; the readiness handoff links to the screen first and to the website second. The Plan screen keeps the monthly plans and points at Reports.
- Fixed: three plural strings still carried the old text domain.
1.16.0
- Changed: the plugin folder, main file and text domain are now
aeosearch, matching the WordPress.org listing. Settings, results and option keys are untouched. A site that installed an earlier zip by hand sees one notice; the old copy is switched off and can be deleted.
- Changed: the plugin folder, main file and text domain are now
1.15.7
- Fixed: Plugin Check reads clean. Backups, temp files and a restored "no file" state are removed with WordPress's own delete helper; the remaining direct file calls and the four prepared queries in the import detector carry their reason on the line.
- Changed: the four reskin-5 record suites run only with
php tests/run.php --evidence. They pin production to one commit and were red on every release since; the default run is the gate.
1.15.6
- Fixed: the Roles screen's three On-page rows (advanced, schema, social) are now enforced. A role the administrator unticked could still set a page's canonical, robots, social card and JSON-LD from the post editor; now those controls are absent for that role and a forged save is skipped.
- Fixed: Disconnect This Site asks for a second signal, and the sentence beside it says what goes: the key, the audit history and every cached result. One stray click used to remove all of it with no undo.
- Fixed: /llms.txt stopped being served after a platform llms.txt fix was reverted, while the Technical switch still read on. The plugin's own file takes the address back on revert.
- Fixed: a paid Full Audit now shows on the Citations screen even when the buyer never lands back on the Stripe success page.
- Fixed: the Complete Site Setup door reads at 5.15:1 in the light scheme; it was 3.95:1 and the contrast gate never measured that pair.
- Fixed: a checkbox and its sentence sit together on the Google Analytics, Import & export and post editor screens.
- Fixed: the readiness bands on the dashboard open the bulk editor, which lists posts and pages; the old link showed the posts half only.
- Fixed: the setup wizard names All In One Schema Rich Snippets as itself, and the detection table says which three plugins it looks for.
- Changed: the IndexNow screen no longer lists the engines by name; the listing's External services section carries the list.
1.15.5
- Fixed: the Search title, Meta description and Canonical you set on a page now reach the page. On a site with no other SEO plugin and no platform fix applied, the plugin saved the three values, showed them back in the editor and the social card, and never printed them in the page head. A page that already had a description lost it the moment you wrote your own. The front-end hooks now register the moment a page with a stored value is served, and a page with none still costs nothing.
1.15.4
- Fixed: starting a readiness audit from the Connection screen now lands on the Readiness screen, where the run shows itself: a working ring, the words "Audit running", and a countdown to the next time the page checks on its own. The old notice stayed on Connection, a screen that never shows a result, and asked you to refresh in about a minute. One customer refreshed it for ten minutes while the finished audit sat one screen over.
- Changed: no screen asks you to refresh, reload or come back any more. The citation scorecard counts down to its next check beneath its progress bar, the link map says how many pages it has read and checks again by itself, and the orphan filter says how far the map has got instead of asking for a reload. A test now reads every sentence the plugin ships for that kind of instruction, so it stays out.
1.15.3
- Fixed: buying a report from inside wp-admin reaches Stripe again. The plugin checks the platform's answers against a contract file it ships, and that file had been moved ahead to a price change the platform has not made yet — so a perfectly good checkout came back, the plugin read it as malformed, and the buyer was left on the same screen with nothing to press. The contract now describes what the platform actually answers.
1.15.2
- Added: the import shows itself working. Bringing a large site across from Yoast or Rank Math used to run every record in one request, which on a managed host was long enough for the server to cut the request off with nothing on the screen either way. It now moves a batch at a time behind a turning ring that counts — "We are working through your request — 800 of 3,244 records." — and ends on the sentence that was missing: every record is in, and every one of them can be put back.
- Fixed: writing a long run no longer stalls partway. The per-minute limit on writes renewed its own clock every time it counted one, so a run of more than ten rows stopped at the eleventh and sat there looking frozen no matter how slowly it was paced. The minute is now a minute.
- Fixed: the audit refusal points at the time. When the platform turns a run down because this site was read less than a day ago, the notice now says so and sends you to the Readiness screen, which has been printing the exact hour the next one is allowed all along.
- Fixed: reading the front end hands you the link. The Performance screen arms a reader and waits for a real visitor request; on a site behind a page cache that request never reaches WordPress, so it waited forever. It now gives you a link that goes around the cache, and says plainly what it means if the wait continues.
- Fixed: the third toggle on the wizard's render step lines up with the two above it.
1.15.1
- Added: the Fixes screen points at the writer. Fixes replays what the platform decided, artifact by artifact; the pages that still need a sentence of their own are now named there, with a link to the bulk editor already filtered to them.
1.15.0
- Fixed: Suggestions opens the moment you press it. It used to open only when the platform answered, so on a live site the box sat greyed out for about four seconds with the status line for a different panel standing in for it. It now opens straight away with five waiting rows, fills them when the answer lands, says so if the wait runs past two and a half seconds, and a picker you closed while it was thinking stays closed.
- Added: "Let AI Write These" on the bulk editor. Tick the rows, choose the field, and every ticked page gets a line written from what that page already says — one at a time, counted out loud while it runs. It ends on the same preview the template fill uses: nothing is written until you read it and press the button, and every row keeps its own undo.
- Added: a route to it from the fix runner. The runner writes from templates, which put one sentence on every page it touches; the pages that need their own are now one link away.
- Changed: a suggestion request with no editor open reads the saved page instead of refusing. The editor still sends what is on screen, unsaved edits and all.
1.14.3
- Fixed: the import engine checks that the person running it may edit each post, term and user it writes to, not only that they may run an import.
- Fixed: a redirect rule's On switch would not turn off; the rule came back on after every save. It stays off now.
- Added: a Remove switch on every redirect rule. Tick it, save, and the rule is gone.
- Added: Previous Page and Next Page links on the inventory. Page two used to be reachable only by editing the address.
- Fixed: the bulk editor's search and filters run inside the query. A filtered page two is the next twenty matches, rows keep their order between loads, and a search that matches nothing says so instead of telling a full site to write its first post.
- Fixed: "Band: not analyzed" in the readiness legend narrows the post list; it was a link that changed nothing. Band links count published pages, the same ones the readiness spread counts.
- Changed: a plan thrown away before its first item ran says so instead of showing an empty receipt, and a plan stopped mid-run says what stays written.
- Changed: on a site with more than 200 published pages the readiness spread says its count stopped there.
- Fixed: coming back from a paid report checkout starts the scorecard reader, so the report appears without a free scorecard first.
- Changed: the connected landing screen no longer loads the media library scripts it never uses.
- Fixed: tables and logs that scroll show a focus ring when reached by keyboard, and ones that fit are no longer dead tab stops. The dock no longer covers the bottom of a page when you tab to it.
- Changed: every control is at least 24 pixels tall and no screen scrolls sideways at 375 pixels wide.
- Changed: the takeover switches go through the same administrator check as every other administrator action.
- Changed: the install steps and a new "Do I need an account?" answer say plainly that the free features need no account and no key.
1.14.2
- Changed: the three score tiles on the AEOSearch box are links. Follow one and the writing check opens showing that tile's own checks, with a line saying so and a "Show Every Check" way back.
- Fixed: the "Why this matters" text under a check was landing in the narrow glyph column and reading one word to a line. It reads as a paragraph now, and the row lost its blank space.
- Fixed: a link opportunity reads as one sentence, with the phrase and the post it could point to set off from the words around them.
- Changed: on the Search tab the fields come first and the preview sits at the right, and the preview shows the page's own image beside the text.
- Changed: focus keywords and keyword synonyms lead the Search fields.
- Added: a "How Readiness Works" explainer at the top of the AEOSearch readiness box.
1.14.1
- Changed: the button beside each field is "Suggestions", set bold, and it now sits at the start of the field's row right after the ? help, where the eye already is, instead of at the far right beside the count. The writing check's rows say "Suggestions" too.
- Changed: every green is brighter. A lift of one and a half shades wherever the 4.5:1 text contrast floor allows it, and a more saturated teal where it does not; both schemes still pass every measured pair.
- Changed: the plugin's screens sit closer to the rail and take the rest of the window.
1.14.0
- Added: Suggestions brings back five options in a window. Point at one and the search result or social card redraws with it; pick one and it fills the field; "Write five more" asks again. The window is the confirmation, so the single-field Suggestions no longer asks first.
- Added: "Draft the page", shown only on a page with no text yet. One sentence about what the page should say brings back five drafts, and the one you pick is added to the page as paragraphs.
- Changed: consent text version 10 names the sentence a draft is written from. It also corrects who writes suggestions: Google's language model, not Anthropic, which answers the help box only. Connected sites are asked once.
1.13.2
- Changed: the Plugin Guide is the AEOSearch Guide, and it opens the rail's Start Here group on every screen, above the Academy.
- New: the guide answers the questions a site asks before installing and in the week after: what AEOSearch is, whether an account is needed, what it costs, what it changes, what leaves the site, what it needs to run.
- New: the guide closes with what to do when something looks wrong: a refused key, a scan that never lands, a count that looks off, an applied fix that still fails, and how to cancel, reach a person, or remove everything.
1.13.1
- Changed: the Academy is inside the plugin only. It no longer adds a second top-level entry to the wp-admin sidebar; the rail opens on it from every screen, and it is outlined there until the last lesson is marked done.
- Changed: the rail keeps the item you clicked in view. Arriving on a screen deep in Tools used to leave the rail scrolled to the top, and on the Site screen the highlight followed the rail's grouping instead of the page's order while you scrolled. Both follow the page now.
- Changed: Fix runner and Automations are screens of their own instead of two sheets under Content inventory.
- Changed: Import & export and Technical list their sections under their own Tools item in the rail instead of replacing the top of it.
- Changed: Insights is called Digest again.
- Changed: the Import from another SEO plugin card names what comes across, field by field.
- Changed: the Readiness help says who does the counting and what to do when a count looks wrong.
- Fixed: the two Scope toggles on the Fix runner printed on top of each other. They shared a class name with the setup checklist's badge.
- Fixed: a little more air between the work and the right edge of the page.
1.13.0
- New: you read the questions before anything runs. Starting a scorecard now writes the eight buyer questions and stops. They appear on the Citations screen, one editable line each; change any, empty the ones you do not want, and press Start the Scorecard. Write a Fresh Set asks for another draft. The engines are asked exactly what is on that screen, and nothing runs or bills until you press the button.
- New: Fill From My Site. One button on the scorecard form asks the platform to read your homepage and suggest the brand, category, buyer, aliases and competitors. It fills empty fields only and never overwrites a word you typed. Without JavaScript the button is absent and the form is the form.
- New: the paid reports, from inside wp-admin. The Plan screen sells the platform's Full ($180) and Coverage ($250) reports on Stripe. Payment parks the report with no questions written; you come back to the Citations screen, press Write the Questions, read and edit the twenty, and start the run yourself.
- New: the Plugin Guide. One page under the Academy, reached by a button there and from the rail, that walks every screen in the order a new site meets them: what it does, how, and what leaves this site. Nothing to tick.
- The consent text has changed, so every connected site is asked to accept it once more. The new sentence covers the edited question text sent when you start a reviewed scorecard. Fill From My Site sends nothing new.
- The scorecard form's button is now Write My Questions, because that is what it does; the run starts from the review screen.
1.12.2
- The new look from 1.12.0 and the scorecard fix from 1.11.2, in one release. Nothing else changed.
1.12.1
- Fixed: the AEOSearch menu opened the Locations list instead of the dashboard on sites with the Locations module on. WordPress files a post type's list into a plugin menu before the plugin registers its own screens, so Locations came first. Dashboard is first again, Locations last.
1.12.0
- New look. The admin now wears the same design as the AEOSearch dashboard: an ink rail on the left, one teal accent, the standing card with passed, warnings and failed counted in their own colours.
- The review notes, in. A green Complete Site Setup button sits in the masthead until setup is done. The University is now the Academy; Crawlers is Insights; Digest is Overview. Every Academy lesson was cut and rewritten so each sentence reads one way, and Previous / Next are buttons with arrows.
- Readiness: How Readiness Works and What the Counts Mean (measured, re-measured, unmeasured) sit above the tally. The citation headline names your brand first. Run Readiness Audit is now Run Readiness Scan, and it is the one control on the Connection screen you cannot miss.
- Fixed: the toggle knob grew when switched on and stopped short of the far side. Fixed: the help launcher's jagged rounded edge. Fixed: the sidebar scrolled the whole page once it reached its own end.
- Wording: "Reads as" is "Example reads as"; the breadcrumbs help shows an example trail; "Suggest every empty field" is "Generate every empty field".
1.11.2
- Fixed: starting a citation scorecard could answer "The platform could not be reached" while the platform had in fact started it. The platform writes your buyer questions before it replies, and that takes longer than the ten seconds the plugin was willing to wait; the plugin then misread its own timeout as an outage. It now waits for that answer, and when it does run out of time it says so instead of blaming your server's connection.
1.11.1
- Fixed: Analyze This Page reloaded the editor, and the reload threw away every field you had not saved yet — including the ones Suggestions had just written for you. Analyze now runs in place and leaves everything you have typed alone. With JavaScript off it still submits and still reloads, exactly as before.
- New: a failing readiness check now tells you where it gets fixed. No canonical and the row hands you the field; a skipped heading level opens the writing check; a broken internal link opens the link checker. Every one of those controls already shipped — nothing joined them to the verdict that named the problem.
1.11.0
- Fixed, and read this one: the AEOSearch box on the post editor was throwing away everything you typed into it. Your search title, your description, your social fields, your schema — set on the post, saved, gone. WordPress draws meta boxes inside a form of its own, and a form inside a form is invalid HTML, so the browser moved our fields onto WordPress's form and the code that saves them never ran. Open the posts you have set fields on and set them again. Nothing was written before this release.
- Fixed: "Generate watermarked share image" did nothing at all when you clicked it. Same cause, same cure.
- The plugin now refuses to activate on a server without PHP's mbstring extension, and names the extension and who to ask for it. It used to activate cleanly and then take the public site down on the first page a visitor loaded.
- Fixed: the per-post CSV export was handing anyone who could open Import & export the search fields of your private posts and your unpublished drafts. It now exports only the posts that reader can already edit.
- Widening what auto-apply is allowed to write, and starting it again after a stop, now need a full administrator. Stopping it does not, and that is deliberate: an emergency stop you have to fetch someone more senior for is not an emergency stop.
- Fixed: the Technical screen printed a raw database error, and the SQL that caused it, on any site without the Redirection plugin's table. It now checks whether the table is there.
- Fixed: switching theme or Easy/Advanced from the Bulk editor, Import & export, Technical or the University threw you back to the dashboard. You stay where you were.
- Fixed: Readiness Spread and "Pages measured" were counting posts and ignoring every Page on the site.
- Fixed: after a successful payment the Plan tab went on showing you the free tier until you reloaded it yourself.
- Fixed: the content inventory's Filter button dropped you off the inventory tab.
- The setup checklist's actions and the "(opens aeosearch.io)" note were both too faint to read — 2.47:1 and 1.61:1 against their backgrounds, where the standard is 4.5:1.
- Ctrl+K now tells you when nothing matches what you typed, instead of showing an empty box.
- Escape closes the help panel from anywhere on the page, not only from inside it.
- The writing check now announces to a screen reader when it has stopped updating, rather than only drawing the line on screen.
- At phone width, tabbing to the last row of a table no longer parks the focused link underneath the help button.
- Every plugin screen but SEO settings now loads 373 KB less: WordPress's media library was being pulled onto eight screens to serve the one that has an image picker.
1.10.0
- New: ask the University a question in your own words. The answer is written only from the 36 lessons in this plugin, and it links the ones it came from. If the lessons do not answer it, it says so rather than guessing.
- The University now opens the left-hand rail, under "Start Here", instead of sitting last under Tools.
- The consent text has changed, so every connected site is asked to accept it once more. The new sentence covers the help box: the question you type is sent to AEOSearch and passed to Anthropic, which writes the answer. Nothing else about what is sent has changed, and the help box stays off until you accept.
- The Site audit screen is now the AEO Report. Same measurement, same numbers, the name it should always have had.
- New: Suggestions for a FAQ block. On any post, under "Paste JSON-LD instead", one button writes two to five questions the page already answers as FAQPage schema. It is the only suggestion that is a document rather than a sentence, so the labelled schema form could never have held it.
- That button is deliberately left out of "Generate every empty field". A sweep would write the page's schema inside a closed panel, where you would not have seen it happen.
- A block that comes back half-built — no questions, or a question with no answer — is refused rather than published. Read the ones that do arrive: a question the page does not really answer is worse than no FAQ at all.
- The Plan tab now shows what is left of your weekly suggestion allowance, taken from the last suggestion's own reply. No extra request is made to read it, and the screen shows nothing until there is something true to show.
1.9.0
- New: the University. Six courses, 36 short lessons, under the AEOSearch menu. Every lesson describes something this plugin actually does and links to the screen that does it. Ships inside the plugin — no account, no network call, nothing loaded from anywhere else.
- The six courses open as cards, each with its own mark and colour, its lesson count, and how far through it you are. The marks are drawn in the page: no image is loaded, here or anywhere else in the plugin.
- Each lesson is marked done by you, with a button. Nothing is marked because you scrolled past it. Progress is per user, private to that user, and there is a reset control under the courses.
- The troubleshooting course lists every refusal this plugin can show you — each code, what caused it, and what to do next — read from the same table the screens read, so the list cannot fall behind them.
- The "how this works" panels on the screens now link to the lesson that goes deeper, and each lesson links back to the screen it describes.
- Search the whole curriculum from the University, refusal codes included. No JavaScript involved.
- Download the whole curriculum as JSON, for your own notes or your own tools.
- Uninstalling now removes the Easy/Advanced setting it had been leaving behind since 1.5.0, along with the new reading progress.
1.8.2
- An optimized image that came out larger than the original is refused. Your original file is left byte for byte as it was, and the result says the file is already as small as this server can make it — which is what happened, not a failure. One already-squeezed JPEG was being replaced with a copy 18 KB bigger and counted as a saving.
- Reverting a fix no longer deletes an edit you made after it. If your own words changed since the fix was applied, the revert stops and tells you so.
- Running a plan that was replaced in another tab stops instead of quietly running the old one.
- Plugin screens with no media picker load 18 KB of JavaScript instead of 650 KB.
- The import screen no longer reports that no import has been started directly above the button that undoes the one that did.
- Two leftover records are now removed when you uninstall.
- The readme lists every outside service this plugin contacts.
- An audit that failed now says why and gives you a way on. It used to be one red sentence with nothing on the screen to click.
- The dashboard no longer says both "every feature below is running" and "nothing below it is running yet" one line apart.
- The bulk editor and Import & export fit on a phone. Both were pushing the page sideways — 778 pixels of content into a 375 pixel window.
- Descriptions, links and the Suggestions buttons are legible on the dark theme. Several were drawing at 2.5:1 against the panel behind them.
- A list inside a table is legible on the dark theme. It was taking WordPress's own dark text colour on a dark panel, at 1.08:1 — near enough to invisible.
- Code inside a preformatted block takes that block's colours instead of a light chip on a dark ground.
- Headings and buttons read in sentence case, and the separator choices are named — hyphen, en dash — instead of showing you a single mark to decode.
- Notices from other plugins keep their own colours on our screens.
1.8.1
- The buttons on Content Inventory, the fix runner and Automations work. Every one of them posted to a handler that was never registered, so the click landed on a blank error page and nothing happened — including "Put It All Back" and "Put It Back", the two that undo a run.
- Optimizing an image works. WordPress renames the file it writes to match the format, and this plugin looked for the name it had asked for instead of the name it got, so every JPEG and PNG was reported as failed and the converted file was left behind in your uploads folder. Old leftovers are now swept up.
- Reverting a page fix checks that you can edit that page, the same check applying one has.
- Link Drills, the orphan filter and the lens check have data. The link map they read was never built, so all three were permanently empty.
- Importing author fields no longer prints a database error onto the screen.
- Headings, table rows, descriptions and links inside the plugin's dark panels are legible. WordPress's own styles were overriding the panel's text colour.
- Three "Choose from media library" buttons that did nothing have been wired up.
- The Local SEO description no longer promises blocks you cannot place; it names the shortcodes that do exist.
1.8.0
- A write that cannot be undone no longer happens. Auto-apply stores the way back and reads it again before it touches your content; if that store fails, the change is refused, written to the log, and put on screen. It used to write first and save the way back afterwards.
- IndexNow now ships off. It is the one feature that talks to a host other than AEOSearch, so it waits for a person: switch the module on under Modules, then generate a key and acknowledge what is sent. Both gates, or nothing leaves.
- If you had already acknowledged IndexNow, your authorization carries over — the module arrives on, and the module row is where you turn it off.
- IndexNow is now described under External services: the address it posts to, what is in the request, and what turns it on.
- Applying a page fix now checks that the person asking can edit that particular page, not just that they can manage this plugin.
- The roles screen no longer accepts a capability it does not show you.
- Undo is kept for every item a run reports as changed. Longer alt-text and bulk runs used to report success for items whose way back had already been dropped, and then refuse to restore them.
- A run older than seven days now tells you what it changed and where to put it back, instead of reporting that there is nothing to put back.
- Applying a run says it continues where you left off, which is what it does. It used to say the work continued in the background. Nothing does that.
- An llms.txt file you applied from AEOSearch is now the one served. The built-in generator could take the address back from it after any permalink save or module change.
- Notices from this plugin are legible on the dark panel and land where they were put. Every field in the bulk editor now says what it is and which post it belongs to, so a screen reader can tell them apart.
- Empty screens now point at the panel that actually holds the control. Six of them named a place the control had moved away from.
- Front-end pages make one settings query instead of twenty-six, and the plugin's stylesheet no longer loads on post lists that cannot show its column.
- Restoring an image says plainly that the full-size file comes back exactly and the smaller sizes are rebuilt by WordPress, so they are new files.
1.7.1
- Requests now identify the plugin as
AEOSearch-WordPress/<version>in the User-Agent header, matching the product's name. The platform authenticates by site key alone and never reads a User-Agent, so nothing else changes: the site key, every stored setting and every applied fix carry over. - The two newest platform refusals (an identical request already handled; no applied change on record to roll back) now have written sentences instead of the raw code.
- Support and privacy addresses (support@aeosearch.io, privacy@aeosearch.io) are listed under External services.
- Requests now identify the plugin as
1.7.0
- Standards release: the plugin now passes the WordPress.org review checklist on every point except the listing name, which is settled separately. Tested up to WordPress 7.1.
- Every request value is unslashed and sanitized at the point it is read; the one remaining raw SQL string (the Redirection importer) is prepared.
- The locations post type carries the plugin prefix. Existing locations migrate once on upgrade and keep their URLs; the old shortcode names keep working as aliases.
- Deactivation now clears every scheduled task and flushes rewrite rules; network activation runs on every site.
- Lead capture no longer waits on the platform inside a visitor's form submission: the send is dispatched without blocking and confirmed by the hourly flush.
- Crawler observatory and 404 logging fold contended writes into a queue instead of dropping them; a Safari or Mail user agent no longer loads the observatory at all.
- Admin scripts are attached through wp_add_inline_script; every editor reason string is translatable; meta boxes declare block-editor compatibility; Google Analytics is disclosed in External services.
- readme states plainly that an AEOSearch account is required and which parts need a paid plan, and that the robots.txt and .htaccess editors do write files, with a backup first.
- Code formatted to the WordPress coding standard (WPCS errors 2105 to under 1400; the rest is docblock coverage, which changes no behaviour).
1.6.0
- Security release, from an outside review (2026-08-24). Every connected site should update.
- Settings import and revision restore now require the administrator capability, and every imported value passes the same checks as the screen that owns it. The delegable "import" capability alone can no longer change redirect hosts, feed HTML or regex rules.
- A slug rename only records a redirect for a URL the renamed post itself owned, and never removes a redirect that belongs to another post.
- The writing lens bounds how much of a post it reads and caches its meters per post, so one very long draft cannot slow the Posts list.
- Crawler observatory and 404 logging take one writer at a time; redirect hit counts live apart from the rules table, so a visitor can no longer undo an administrator's save.
- Locations require the page capabilities to publish; saving a schema template requires the manage capability; the CSV importer checks edit rights per post; per-post analysis and field suggestions are rate-limited per user.
- llms-full.txt runs content through the_content, so paywall and membership plugins apply. Non-viewable post types never index. News and video sitemaps are capped and cached for ten minutes.
- mbstring is now required (the compatibility panel says so). The ".htaccess sync" switch is gone: nothing ever wrote the file, and a switch that promises a write that never happens is a bug.
1.5.9
- The platform now lives at www.aeosearch.io. The plugin's pinned API address, the Start and full-report links and the consent text follow it. aeosearch.io answers every request with a redirect, and the plugin never follows one off its pinned address, so 1.5.8 cannot reach the platform any more: every connected site should update.
- The consent text names the recipient's real address, so connected sites are asked to re-accept it once. Until then, daily audits continue under the original consent; per-post analysis, the editor's field suggestions and the citation scorecard wait for the re-accept.
- Nothing else moved: the site key, every stored setting and every applied fix carry over unchanged.
1.5.8
- The product is named AEOSearch. That is the platform's own name; the interim AEOSEOSearch appeared in this plugin only. The platform address (aeosearch.io) and every stored setting are unchanged; nothing needs reconfiguring.
- The consent text names the recipient as the AEOSearch platform, so connected sites are asked to re-accept it once. Until then, daily audits continue under your original consent; per-post analysis, the editor's field suggestions and the citation scorecard wait for the re-accept.
- Every save now reports its result in a sentence. Auto-apply consent, Revert, and the Title & meta and Image SEO saves fell through to the raw-code fallback; a started scorecard read as a refusal. The gate that should have caught this compared against the wrong string and is fixed.
- The Plan screen acknowledges the return from Stripe: a completed checkout says the platform switches the plan on as its receipt lands; an abandoned one says nothing changed. No tier is stored locally either way.
- A second Upgrade click on a site that already has a live plan is refused by the platform (it would have opened a second subscription) and the screen points at the billing portal, where plan changes live.
- The permission refusal names the right capability: managing settings needs the AEOSearch manage capability; connecting and billing need an administrator.
1.5.7
- New Plan screen: upgrade to a monthly plan (Track or Grow) from the dashboard. Payment runs on Stripe; the platform switches the plan on the moment it lands — nothing to paste back into the plugin.
- Receipts, card changes and cancellation open in the Stripe billing portal from the same screen. Cancelling stops the plan at the end of the paid period.
- Opening checkout or the billing portal is administrator-only, like connecting the site. The free tier keeps working either way — upgrading adds measurement, it never walls off what you already have.
1.5.6
- The product is now named AEOSEOSearch everywhere you read it. The platform address (aeosearch.io) and every stored setting are unchanged; nothing needs reconfiguring.
- Because the consent text now names the recipient as the AEOSEOSearch platform, connected sites are asked to re-accept it once. Until then, daily audits continue under your original consent; per-post analysis and the citation scorecard wait for the re-accept.
- The dashboard is now real screens instead of one long page: each section in the left rail is its own tab, the rail shows which screen you are on, and saving a form returns you to the screen you saved it from. Old bookmarks to sections still land in the right place.
- Import & export and Technical now carry the same header and navigation as every other screen, and are linked from the Tools group.
- Server-file saves (robots.txt, .htaccess) now additionally verify the resolved path is the WordPress root before writing, and CSV exports neutralize the full set of formula-starting characters in every cell.
- Plainer words where jargon stood: the Google Analytics section explains what GA4 is and where the G- Measurement ID lives; the crawler collector field says what a collector is and that most sites can skip it.
1.5.5
- Every settings-screen action now says what happened. The result of each action (key saved, audit started, a refused run, an expired form, a wrong key) has always been carried back in the URL - and never rendered, so failures were silent. Each outcome now renders as a notice; failures name the cause and the next step, and a platform refusal (cadence window, volume cap, unbound domain) is explained in its own words.
1.5.4
- The AEOSearch column on the posts list names each meter: every chip now reads Search, Read or Answer beside its mark and score, instead of a bare number whose meter was only in the hover text.
- The column's styles apply again. The stylesheet's token roots still named the column wrapper by its pre-1.4.0 class after the rename, so from 1.4.0 the chips rendered as plain uncoloured text. The band colours (green pass, amber fair, red needs-work) now show as designed.
- Observatory dashboard share: an opt-in weekly forward of answer-engine agent counts to the connected dashboard. Counts only — no URLs or paths ever travel.
1.5.3
- /llms.txt is served directly instead of redirecting. WordPress's own canonical redirect runs on the same hook at the same priority and was registered first, so it sent /llms.txt to /llms.txt/ before this plugin could answer. The file was correct at the end of that redirect, but /llms.txt without the slash is the path the convention defines and the path AI crawlers request, and anything that does not follow redirects received nothing at all.
1.5.2
- Every field an author fills in now says what it is and what it changes. A short line under the field names it in one breath; a "?" beside the label opens, on hover or on keyboard focus, what the field actually does to a search result or a shared link. No JavaScript is involved, and the text is attached with
aria-describedby, so a screen reader reads it without the reveal ever happening. Covers the search title, meta description, canonical URL and indexing choice; the social title, description and image; and the title and description patterns, default image, X handle, breadcrumb home label and separator on the settings screens. - The explanations say what is true rather than what sells: the meta description denies the ranking claim outright, and the description pattern says when leaving it empty is the better setting.
- Every field an author fills in now says what it is and what it changes. A short line under the field names it in one breath; a "?" beside the label opens, on hover or on keyboard focus, what the field actually does to a search result or a shared link. No JavaScript is involved, and the text is attached with
1.5.1
- The free scorecard shows the answers, not just the rates. Each lost question opens to one stored answer, verbatim, with the absence flag and the count of answers it is one of ("one of the 3 stored answers ... AI answers vary between runs"). It is the same text the free report on aeosearch.io already shows for the same questions — plugin API v1 gained two optional fields (
sampleAnswer,answerCount) onlostQuestions, and a platform that does not send them still renders, saying the text is absent rather than showing an empty box. The plugin never reads, scores, summarises or excerpts the answer. - A failed readiness check now leads somewhere. Checks that have a proposed fix render as links straight to that fix, the Failed and Warnings counts link to the fixes panel, and a check with no fix is deliberately not a link. Applying a fix changes the row on screen — "Fixed, pending verification" beside the platform's verdict, never instead of it: the verdict is a measurement and only the next audit can move it.
- Where the written-for-you fields are, said on the screen that needs them: Search appearance now points at the Suggestions button in the post editor.
- Type and colour: the section titles in the rail are set at full ink and 700, their items at full ink, and the hover wash is a real green rather than an off-white.
- The free scorecard shows the answers, not just the rates. Each lost question opens to one stored answer, verbatim, with the absence flag and the count of answers it is one of ("one of the 3 stored answers ... AI answers vary between runs"). It is the same text the free report on aeosearch.io already shows for the same questions — plugin API v1 gained two optional fields (
1.5.0
- The free citation scorecard runs from inside wp-admin. A form in the AEO section takes your brand, category, buyers, and up to four competitors; the platform generates 8 buyer questions, asks ChatGPT (its fast model) and Gemini 3.6 Flash three times each, and the results render in the plugin: mention rate over the questions that name no tracked brand (with branded questions scored separately, because they lead the engine), share of AI voice, per-engine rates with the answering model named wherever one was recorded, up to 3 questions where a competitor was named and you were not, and any failed engine calls disclosed and excluded from every number. The full report stays one click away on aeosearch.io; the measurement itself runs on the platform either way — the plugin computes none of it.
- One free scorecard per site per 30 days, set by the platform; a running or failed scorecard counts against the limit.
- Consent text updated to version 4 to name what the scorecard form sends — the brand, category, buyer, alias and competitor names you type, on the click that starts it. Per-post analysis, suggestions, and the scorecard stay off until the updated text is accepted; existing AEO Reports are unaffected.
1.4.0
- Field suggestions in the post editor: a Suggest button asks the platform to write a search title, meta description, social title or social description for the page you are editing. On the click that asks for one, the plugin sends that page's title, the opening of its text and its headings; AEOSearch passes that content on to Anthropic, which writes the suggestion. How many fields a week you get is set by the platform and written by a language model and is not checked against the page.
- Consent text updated to version 3 to name the above — the field suggestion, the page content it sends for published pages as well as drafts, and Anthropic as a recipient. Per-post analysis and suggestions stay off until the updated text is accepted; existing AEO Reports are unaffected.
- Renaming a published page can now record a visible, removable 301 from the old address. Off by default.
- A local writing check in the post editor: 35 checks that run on your own server against the text in front of you, with a search-result and social-card preview beside them. Nothing is sent anywhere for it, and it works before you connect the site to anything.
- Three meters over that local check — Search, Readability, Answer — each the share of points earned across the checks in its group that had something to measure, with a named band, plus an optional column in the post list. When that is fewer than all of them the meter says so wherever it appears, and when it is fewer than half of them there is no meter at all — a band over one check of three is one check wearing the name of a group, and a caveat beside it does not make it a summary. The platform's readiness results are still never scored.
- A check with nothing to measure is no longer scored as though it passed. An empty post used to read Readability 83 out of 100, "Good", built from "Not enough text to judge" plus two ratios computed over zero sentences; a page of bare headings read Answer engines 100 out of 100 on a note claiming every section stated its answer within the first 40 words, about sections that held no words at all. Those checks abstain now: they are listed under "Nothing to measure yet" and left out of the average, a meter whose whole group abstained is not shown, and a partial one is marked on every surface that prints it — "from 2 of 3 checks" in the editor, an asterisk beside the number in the posts list and the admin bar, and the full wording in the tooltip and to a screen reader. Sentence length and passive voice now take the same floor reading ease has — thirty words — so the three readability checks agree with each other about the same page. That floor counts words and not sentences: a 300-word page written as one long sentence is exactly what "sentence length" is for, and a sentence floor had it abstaining.
- "Sections answer up front" half-worked, and one root cause explains both halves: the opening it examined had its punctuation stripped before anything looked at it. It scans for a phrase that defers ("Before we", "First,") and for a section that runs on without finishing a thought. The deferral scan worked for fourteen of its fifteen phrases, but not for "First," — the comma went with the punctuation — and the run-on test never worked at all, because it looks for a full stop in an opening that could not contain one. So a section that stated its answer in its first sentence was reported as burying it, purely for being long. Fixed. A section too short to carry a run-up is now left unchecked and counted in the row rather than passed, and the row no longer claims every section "states its answer" — it says what it actually establishes, which is that no section opens with a run-up.
- An image with a blank alt is no longer described as one that "describes itself" — a blank alt says the opposite. It still counts as present, and the row now says how many of each it found. Two more alt misreadings are gone with it: HTML5's unquoted form (alt=dog) was reported as no alt text at all, and the word "alt=" inside some other attribute counted as alt text on an image that had none.
- "Heading order" no longer reports a clean outline on a page whose first heading is an H4. The row beside it says most themes render the post title as the H1, and the two rows were describing different documents.
- "Links to your own pages" no longer counts an off-site link as one of yours. //other.example/x is the standard cross-origin URL, and so, in every browser, are the backslash forms of it. An sms: or callto: link is no longer counted as one of your own pages either — only http and https links are weighed now, so a phone number counts as neither.
- The alt-text and link checks read the page through a real HTML parser instead of matching patterns against it. A pattern cannot tell whether it is standing inside a quoted value, which is how an image carrying no alt at all was reported as describing itself, and how an unquoted href was not counted as a link at all. An
imgwritten inside a script or an HTML comment is no longer counted as an image on the page. Where content holds images or links and the parser cannot read it, those rows now say so instead of reporting zero. A page that simply has no images is a different thing: there is nothing to measure, so that row now says so and is left out of its meter, where before it scored half marks for an absence nobody had looked at. A page with no links to your own pages is still scored, because that one is a finding. - Table cells and a few other block elements now end a line of text, the way they do on screen. A row like
one | twoused to read as the single word "onetwo", so a page built on tables measured shorter than it is and every readability row measured over it moved with that. Adjacent inline tags are unchanged and still join, because that is what a browser renders. The generated meta description is cut from this same text, so it can change on pages with tables. - A line made only of punctuation is no longer counted as words. Thirty spaced hyphens counted as thirty words — enough, now that the readability floor counts words rather than sentences, to have started scoring such a page as very easy to read. No release printed that: the floor it had to clear before this version also required two sentences.
- A reading ease below zero says so. The formula is unbounded below, and how far below depends on the sentences — the pair used in this plugin's own tests scores -128; the bare number looked like a broken meter rather than the extreme it correctly is.
- AI-crawler observatory: the plugin classifies each visitor's User-Agent against a vendored list of known AI-crawler signatures, locally. Nothing is sent anywhere unless you configure a collector URL of your own.
- Safe-kind auto-apply, off by default and behind its own consent checkbox and per-kind toggles, for four kinds the daily re-check can apply without the per-apply confirmation. Every auto-apply is logged and reversible, and a kill switch stops all future ones.
- A weekly delta digest of what changed since the last re-check.
- Redesigned settings page with a setup stepper, and URL fields that accept "example.com" instead of refusing it.
- Free-tier claims realigned to the platform's current free tier: 8 questions across ChatGPT and Gemini.
- Fixed the per-page JSON-LD apply failing its own readback on every real install.
- A measurement handoff on the completed-readiness state, and the two halves named as what they are — SEO and AEO — on the page and in the rail.
1.3.0
- Optional lead capture: a second, separate consent checkbox forwards Contact Form 7, WPForms, and Gravity Forms submissions (email, name, page URL, form ID only) to the AEOSearch platform, which relays them to whichever CRM you connected there. Off by default. A read-only CRM status card on the AEOSearch settings page shows the connected provider, last delivery, and pending/failed/dropped counters.
1.2.0
- Per-post readiness: a "AEOSearch readiness" box in the post and page editor analyzes the published URL (or, on request, a draft's title and text) against the platform's measured checks, and shows which AI engines' stored answers actually cite the page. Per-check facts only — no invented score. Optional analyze-after-publishing setting (off by default). Consent is versioned: per-post analysis requires accepting the updated consent text.
- Applyable fix kinds extended: per-page title, meta description, canonical and JSON-LD (stored in dedicated AEOSearch post meta on that page), redirect rules, and sitemap exclusions. Each is still previewed, confirmed one at a time, and revertible; post content is never rewritten.
1.1.0
- Proposed fixes: preview, apply, and revert template fixes (llms.txt, robots.txt AI-crawler lines, Organization JSON-LD) for failed checks. Every apply is previewed, individually confirmed, and reversible; the plugin writes no physical files.
1.0.0
- First release: connect with a site key, explicit consent gate, run readiness audits, view platform-measured results.