Move your SEO, describe images on upload, keep your URLs: what’s new in AISA 1.99.996
This release was not written to fill a changelog. Every line in it came from something that actually went wrong while using the plugin: SEO that a newly installed Yoast could not see, images uploaded and then opened one by one to write the alt text, a “Update post” button that answered Button not found, a menu with eighteen entries. Repairs and features born from real use — nothing added for volume.
Move titles, descriptions and keyphrases between AISA and your SEO plugin
The problem has a name, and a date. You optimise nineteen pages with AISA. Then you install Yoast — or Rank Math, or SEOPress, or All in One SEO — and the site looks empty: the score drops, the fields are blank, and nothing on screen explains why. Your work is still there. It is simply written in a place the new plugin never reads.
Before Silence
- The SEO plugin shows empty fields and a falling score.
- No warning, no explanation: it looks like a database restore gone wrong.
- The only way out is retyping meta you already wrote once.
From 1.99.996 An alert that says it out loud
- If an SEO plugin is active and at least five published pages carry an AISA title while the plugin’s own is empty, you get a notice: “{Plugin} is managing your SEO, but N pages still have SEO written with AISA that {Plugin} cannot see”.
- The count is cached for twelve hours — never a query on every page load — it is dismissible per plugin, and it disappears on its own once you transfer.
- The opposite case is covered too: plugin switched off, data left behind, and the card tells you how many values AISA is already reading as a fallback.
The fix is a new card in Utility → SEO data transfer / sync, with AISA as the hub. It works in both directions and in three steps.
Choose the direction
Import into AISA from lists every SEO plugin that has data on this site, active or not — if you switched Yoast off yesterday you can still import today — each with its count: “Yoast SEO — 312 posts, 18 terms”. Transfer AISA data to only lists the SEO plugin that is currently active: writing into the storage of a disabled plugin is wasted work, and for All in One SEO it is not even possible.
Look at the preview
The Run transfer button stays disabled until the server has said what would change, field by field: will fill / will overwrite / kept / empty in source. And it says so — a button greyed out without a reason is a dead end, so a line underneath explains: “Run the preview first: it shows what would change, then Run transfer unlocks”.
Run it, and read the numbers
Execution goes in batches of 100 with a progress bar, and the result is made of counts — filled / overwritten / kept / skipped / errors, content and terms separated. No “Done!” without numbers. A SEO backup is taken before anything is written: if the backup fails, the transfer stops and says so instead of proceeding without a net.
It tells you when there is nothing to do
The card used to show the same buttons whether everything was missing or everything was already in place. Now a status line compares AISA and the active plugin for real — three fields, content and terms — and counts four things: how many values are missing at the destination, how many are different on the two sides, how many are identical, how many exist only on the other side. All identical: “AISA and Yoast SEO are aligned. Nothing to transfer”, and Run transfer stops being the primary action. Something missing: the numbers, and the right direction is preselected.
“Aligned” means equal, not “both full”
Values that differ on the two sides get their own line: “they stay as they are, unless you choose Overwrite existing values”. And template variables are not normalised away: %%sitename%% against the expanded site name are two different values, and it is fairer to say so than to pretend otherwise. The card’s numbers and the alert’s numbers come from the same function, so they can no longer tell two different stories.
Fill the empty ones, and nothing else
Three fields travel — title, meta description, focus keyphrase — terms included, and “fill empty values only” is the default: never a silent overwrite. Undo is the Restore that already exists, not a new mechanism to learn.
Variables and keyphrase lists
Rank Math’s %sitename% becomes %%sitename%%, but only where the mapping is certain: the others are left intact and counted (“N values with unconverted variables”). Multiple keyphrases from Rank Math and SEOPress travel with the primary one, and how many were reduced is in the result. Plugin-to-plugin transfer does not exist: you do it in two steps through AISA, and the card says so instead of leaving you to guess.
AISA Vision can now describe new images while you upload them
You drag forty photos into the media library. Then, to give them alt text, you open them one at a time and ask for a description — forty times. That was the request, in Paolo’s words: “otherwise, as soon as I upload it, I have to open it and ask for a description”. Now the plugin can do it as the files land. It is off by default, and while it is off nothing is spent.
Nothing happens until you say so
The switch lives in Settings → API Keys → AISA Vision. With the options absent or at zero, no call is made and no cron event is scheduled. Above the toggle there is a warning that stays visible: every described image spends tokens on your API key, or credits on AISA Cloud. Under it, the honest cost line — the name and price note of the image provider you are actually using, and on Cloud roughly one credit per image.
Alt text only, or alt text and title
You choose which. And “Only when the alt text is empty” is on by default: if you typed an alt yourself in the upload modal, AISA does not touch it. Titles are always written through the plugin’s own helper, never with a raw post update on an attachment — that is the shortcut that leaves WPML sites with thousands of invisible “pending” images.
Never during the upload
A Vision call takes two to eight seconds: doing it inside the upload would freeze the modal — forty photos, three minutes of staring. So the image is queued and processed in the background, straight away rather than at the next page view. The upload modal gets a note, “AISA Vision will describe this image in a few seconds”, and it refills the alt field on its own as soon as the text arrives, so you do not retype something that is already on its way.
A queue, and a ceiling
Fifty images per hour is the automatic cap: beyond it they stay queued with a notice, because whoever uploads five hundred photos should use Bulk SEO & GEO, which shows a cost estimate first. A status line reports the last 24 hours — described, skipped, errors, queued: N — and a Describe queued images now button processes them five at a time when cron is disabled or lazy. A per-attachment lock means two events on the same image still produce one description. PDFs are excluded, SVGs are skipped (Vision on vector files is unreliable), and images generated by AISA are skipped as well.
It waits for your image optimizer
WP Compress, ShortPixel, Imagify, EWWW, Smush and Optimole rewrite the file after the attachment is created. If the metadata is not there yet, AISA does not describe the image: it retries up to three times, then leaves it in the queue with a readable reason — “N waiting for the image optimizer to finish”. And if another plugin is already writing alt text on upload (Rank Math’s autofill, All in One SEO Image SEO, AltText.ai and friends), a line under the toggle tells you, so two plugins do not quietly fight over the same field.
Describe with AISA, while you place the image
The command sits on the image block toolbar and next to the Alternative text field in the sidebar, with the reason written next to it: WCAG 1.1.1 asks for a text alternative for every non-decorative image — it is what a screen reader announces, and what a search engine reads. The best moment to write it is the moment you place the image, not a clean-up session six months later.
For anyone who needs to exclude specific uploads, there is a developer filter, aisa_vision_upload_skip: return true and that attachment is skipped, with the reason recorded.
Slug suggestions are now optional — and off
An address that changes on its own is a broken link somewhere else. Paolo’s request was one sentence: “URLs must not change by themselves”. So from 1.99.996 the AI is not even asked for a slug unless you ask for one.
Default The tickbox is off
- A new site-wide switch, Suggest URL slugs, in Settings → Analysis, off out of the box and included in settings export and import.
- With the box off, the prompt does not ask for a slug at all and the answer contains no slug: there is nothing that could be applied by accident.
- The address is never rewritten by a save. The slug only moves if you type in the slug field yourself — a save that never touched it leaves the URL exactly where it was.
If you tick it An explicit choice
- The slug written by the AI is applied when you save, because ticking the box was a decision, not an accident.
- If the content is already published, the 301 redirect from the old address is created for you, with the same helper Auto SEO Fix already uses.
- If the redirects feature is switched off, nothing is invented: the event goes into the operations log, so the missing redirect is visible instead of imagined.
The same two tickboxes now sit under the generate button in all three editors — the floating SEO panel, the standalone SEO block and the AISA SEO panel inside Elementor: Also suggest a URL slug and, next to it, Also generate AI Search Context, the short answer-style summary that AI engines read. Both start off, each surface remembers your choice, and in Elementor the URL slug field only appears once the box is ticked. One-Click SEO, Bulk and SEO Doctor were deliberately left alone: they already had their own slug opt-in, with the 301 included.
The panel now survives the whole trip: generate, apply, save
The block editor fixes arrived only now for an uncomfortable reason: nobody had walked the entire flow inside Gutenberg. Automated checks read code, not behaviour in a browser. Generate → apply to Yoast → save is three steps, and the third one was broken.
Fixed “Button not found”
With an SEO plugin active, the panel saved by clicking the Classic editor’s publish button. In the block editor that button does not exist, so you got an error message and no save at all: the values applied to Yoast’s store were lost on reload. Now the panel saves through the editor’s own API, and it watches the save actually finish before writing “Saved!” — claiming it without seeing it would be a lie to the user. There is an eight-second safety net.
Fixed The slug applied into thin air
The function that applied a slug wrote into Classic editor fields. In the block editor they do not exist, so it succeeded without doing anything — the worst kind of bug, because there is not even an error to notice. Now it goes through the editor store, and reading the current slug falls back to the store too.
- The panel reads the real page. Title and content now come from the editor store, with the block delimiters stripped out because to an AI they are just noise. Before, on a full post, generation stopped at “Add a title or some content”.
- The floating tab is back on the right edge. It used to be pushed off to the left, because the anchoring code found the Classic editor’s containers — which exist in Gutenberg too, but squeezed into the metabox area at the bottom.
- The light admin theme is readable again. Chart titles — SEO score, GEO score — were white on white. They now use their own colour tokens.
- The Classic editor is untouched. Every new branch is behind one condition: we are in the block editor and the Classic element is missing. If the old elements are there, the code that runs is exactly the code that ran before.
From eighteen menu entries to fourteen — without removing a single page
The criterion was a question: do I go there every day, or once in a lifetime? Four pages left the menu and are now reached from the place where you would actually look for them. They all still work, old links included.
Now a card in Utility
Scheduled optimisation is something you configure once and then forget. It moved into the Utility grid, right under the transfer card, with its own status message inside the card instead of at the top of the page. It is a premium feature, so in the WordPress.org package that card simply does not exist — no premium display case in the free plugin.
It leaves once it is done
The guided setup is, by definition, something you complete once. When you do, the entry disappears from the menu on the next load — and the page stays reachable from a discreet link at the bottom of the Dashboard and in the User guide. Its final buttons were fixed too: “Skip and do it later” used to lead exactly where “Optimize the site now” led.
Linked from where you ask the question
The compatibility matrix is a page you read once. It is now linked from the User guide and from the bottom of the Analysis tab in Settings, right next to the SEO plugin AISA detected on your site — which is exactly the moment you wonder about it.
The last tab in Settings
Admin theme and Q&A block style are settings, so they now live in Settings, as the final tab, preview included. Its colour picker scripts load only on that tab instead of on every settings page.
They now travel with your settings export
They did not before, and it cost Paolo a set on 31 August: the export only carried options, while Q&A sets are content. Whoever exported their settings and then cleaned the plugin data lost them. Now the export card has an Include Q&A sets tickbox, on by default and showing how many sets the site has; on import you choose between skipping the ones already present (the default, matched by title) or replacing them. The dedicated page travels as a slug and is reconnected on both sides — including the reference inside the page, which would otherwise have pointed at a deleted set and shown a blank page. The summary is explicit: “Q&A sets: N imported, N skipped, N without a page”. And the Database cleanup card now warns you before, not after.
The Alt text column shows the text
There used to be a green or red dot and nothing else: you knew an alt existed, not whether it was any good. Now the real alt sits next to the dot, in full — it wraps, it is never truncated — or No alt text in italics. After a generation the cell updates with the text that was just written. It turns a presence check into a quality check, at a glance.
- One entry per job. Transferring SEO used to bounce you between Utility and the Import / Sync page, each pointing at the other. Now the transfer lives in exactly one place, named SEO data transfer / sync. The backup card did the same: Restore from file is a section inside it, and together they are SEO data backup / restore.
- The Utility grid stopped wasting space. Equal-height rows meant one tall card dragged its whole row along, leaving half-empty columns on a wide screen. Now each card is as tall as its content and the gaps under the short ones get filled, with no library involved — about ten lines of script and a fine-grained grid. Order is most-used first.
- “Q&Ai FAQ Generator” is now “Q&A FAQ Generator”. The trailing i looked like a typo. Only the visible strings changed — slugs, options and keys are untouched, so nothing you saved moves.
- LIVE SEO preview appeared twice in the Utility page — two copies of the same card, hard to spot in the source because they were capitalised differently. The duplicate is gone. And the preview window can be dragged again: its script used to run before the panel existed, which also killed the close button.
The unglamorous part
- Eleven languages at 100%. Every batch of new strings in this release — transfer, Vision on upload, the tickboxes, the shorter menu, the rewritten guide — was translated across all eleven languages and compiled with format checking, with zero untranslated leftovers.
- Plugin Check: zero errors on the packaged plugin, including the new transfer file, which was cleaned up warning by warning.
- The User guide caught up with the plugin. SEO Doctor got its own section instead of a paragraph buried under Redirects, the Utility chapter was rewritten around today’s cards, and describing images on upload is documented where you would look for it — nineteen sections, numbered consecutively, no orphan links.
- The knowledge base was rewritten where it mattered — the “I also use an image optimizer” answer and the new tickboxes — in English and Italian.
- The readme now states which editors are supported — the block editor (Gutenberg), the Classic editor and Elementor. Gutenberg support used to be taken for granted and written nowhere.
- A missing icon. Two spots in SEO Doctor asked the icon set for a “file” glyph that was never drawn, and fell back silently to the wrong one. It exists now.
And it was tested on a real site, not just compiled: Yoast active, nineteen pages carrying AISA SEO. Preview: eighteen will fill, one kept, one empty in source, zero writes. Then the run: nineteen titles, nineteen meta descriptions, nineteen keyphrases into Yoast, six terms, with a 66-item backup taken first. Second pass in fill-empty-only mode: zero written, nineteen kept — it is idempotent. The restore puts the transfer back. If you want the wider picture on what a healthy site looks like, our SEO Doctor guide is the companion read.
Install it, or update from your plugins screen
AI SEO & GEO Assistant is free on the WordPress.org directory — the free version comes with a limited set of features, and everything described here that is free is free from the first install.
Version 1.99.996 — released on 3 September 2026. Features and defaults as described at release time.
