Description
Get found when your customers ask AI. On autopilot.
Your customers increasingly ask ChatGPT, Google’s AI Overviews, Perplexity and Claude instead of searching. Geoa makes your WordPress site something those engines can read, trust and verify — then does the work for you: it fixes your site, you approve, and the before/after proof comes with every fix. Built for the tradesman, the accountant and the clinic with no marketing department.
Three steps:
- Connect your site — pair the plugin with your Geoa account in about a minute.
- Geoa makes you AI-ready — automatically. It builds the registry-verified schema, llms.txt and structured data answer engines look for, and (with your one-click approval) publishes it to your site and keeps it in sync. No copy-pasting code.
- Watch it work. A per-engine AI Visibility Score, Share of Voice and a live « is it published? » status show your progress — and every published fix gets a public before/after proof page.
Geoa is built for the European market: analysis runs on an EU-hosted, GDPR-safe backend, and everything here — AI-visibility scoring, approved on-page fixes, llms.txt, E-E-A-T checks and AI-crawler tracking — works wherever your business is. On top of that, and uniquely, Geoa publishes registry-verified business schema looked up live in four official national registries: Danish CVR, Norwegian Brønnøysund, Swedish Bolagsverket/Allabolag and Finnish PRH. Outside those four you use the rest of the plugin and skip that one step. Output is generated in your own language.
What it does
Structured data for AI
- Registry-verified Organization schema — enter your registration number; Geoa fetches verified legal name, VAT status (VIES), address, founding date and industry, and publishes valid JSON-LD. Contact data is hidden automatically when a business has marketing protection (GDPR).
- Entity verification (sameAs) — link your Trustpilot, LinkedIn and other profiles, plus the official registry page, so engines can corroborate your business. Nordic directories included (Krak, Finn.no, Hitta.se, Ratsit, Finder.fi and more).
- FAQ schema in your language — turns the questions and answers already in your posts into FAQPage markup for AI extraction.
- Article schema — author, dates and publisher for single posts.
- WooCommerce Product schema — price, availability, brand, GTIN, ratings and an EU return policy (14-day right of withdrawal) so AI shopping agents can cite your products. Variable products emit a proper price range, and when your business is verified the Offer is linked to a registry-verified seller — a trust signal generic Product schema can’t express. A per-product AI-readiness score sits in the product editor.
- Optional llms.txt — a curated, opt-in file for AI crawlers.
Analysis
- In-editor AEO readiness — a per-post score right in the block editor. Connected sites are scored against Geoa’s 23-signal GEO content standard (the same checklist Geoa Content uses), with a concrete hint for every missed signal; unconnected sites get a local estimate, labelled as such.
- E-E-A-T trust signals — identity, contact, about, privacy and author signals.
- Citation coverage — which third-party sources you have and which are missing. Connected sites get Geoa’s tier-ranked source list (Wikidata, Crunchbase, Google Business Profile and more) with create-links and time estimates, and the profile URLs you enter sync to your Geoa account as sameAs.
- AI crawler activity — see when GPTBot, ClaudeBot, PerplexityBot and others fetch your pages.
AI visibility & automatic fixes (connect a Geoa account)
- AI Visibility Score per engine, Share of Voice, and an AI Command Center of prioritised actions.
- Approved fixes, published for you — approve a fix in your Geoa dashboard (an llms.txt, a structured-data block, a meta title or description) and Geoa publishes it on your site and keeps it in sync — pulled hourly, and pulled again on the next visit whenever an hour has passed without one, so a quiet site does not drift out of date. An approved fix always takes precedence over the plugin’s own output, so you never get a duplicate — and you can turn it off at any time.
- Articles from Geoa Content, delivered as drafts — articles you mark « ready » in Geoa Content (content.geoa.app) appear as draft posts in WordPress, prepared with your business knowledge, an FAQ section and SEO metadata. You review and press Publish yourself — nothing goes live automatically — and once live, Geoa measures the article’s actual effect.
Geoa never emits duplicate structured data: when Yoast or Rank Math already provide a schema type, Geoa augments their graph instead of adding a second node.
External services
This plugin is a client for the Geoa service (https://geoa.app), operated by AddonNordic ApS. It sends requests to the Geoa API at https://api.geoa.app to verify your business against official national registries and to run AI-visibility analysis, and (only after you connect a Geoa account) to the Geoa connect service at https://connect.geoa.app to report AI-crawler activity on your site. It uses no other external service.
What data is sent, and when:
- Registry verification — when you enter your country and registration number in Geoa Settings (or open that screen with them saved), that registration number is sent so the service can verify your business and return your official company data (legal name, VAT status, address, industry, founding date).
- Structured-data and analysis features — when you use them, the URL and the public content of the page(s) you choose to analyse are sent.
- AI-visibility scoring — only after you connect a Geoa account: your per-site pairing key (obtained from the Geoa dashboard) is sent as an authentication header so the service knows which account to read. The free tier never triggers a paid backend call.
- Approved fixes — only after you connect a Geoa account and enable « Apply approved fixes »: once an hour the plugin fetches the fixes you approved in your Geoa dashboard (llms.txt, structured data, meta) and reports back which are live. Only your pairing key is sent; you can turn this off at any time.
- Article import — only after you connect a Geoa account: once an hour the plugin fetches articles you marked « ready » in Geoa Content and creates them as draft posts for your review. When an article comes with a share image (a PNG card with the article’s title and your business name, served from https://geoa.app), the plugin downloads it once into your media library and sets it as the draft’s featured image, unless the draft already has one. It reports back which drafts were created and, when you publish one, its permalink — so Geoa can measure the article’s effect. Only your pairing key, post IDs and permalinks are sent; drafts are never published automatically, and you can turn this off at any time.
- Plan and usage — only after you connect a Geoa account, and only inside wp-admin: when you open Geoa Settings the plugin reads your own plan, limits and monitored-question count so it can show them. Only your pairing key is sent; the result is cached, and no request is made from your site’s public pages.
- Monitored questions — only after you connect a Geoa account, and only inside wp-admin: when you open Geoa Settings the plugin reads your monitored questions from your Geoa account so it can show them. Only your pairing key is sent; the questions themselves are edited in your Geoa dashboard, not in the plugin.
- Chosen name — only after you connect a Geoa account, and only when you set the name your business should be known as (setup or Geoa Settings): that name and its spelling variants are sent so the schema on your site and the AI measurement in your dashboard describe the same entity.
- Profile URLs — only after you connect a Geoa account, and only when you save a profile URL (Trustpilot, LinkedIn, …) in Geoa Settings: that URL is sent so it can appear as sameAs in every schema Geoa publishes for you.
- In-editor scoring — only after you connect a Geoa account, and only when you open a post in the block editor: the post’s title and content are sent so Geoa can score the draft against its GEO content standard. The result is cached until the content changes; nothing is stored server-side.
- Content opportunities and citation sources — only after you connect a Geoa account, and only inside wp-admin: when you open the Geoa dashboard the plugin reads your opportunity list and source checklist. Only your pairing key is sent; results are cached.
- Alt-text suggestions — only after you connect a Geoa account, and only when you click « Write suggestions » on the Alt text screen: the public URLs, filenames and parent-post titles of up to 10 images missing alt text are sent to https://api.geoa.app, where the alt texts are written from the images. The count of images missing alt text is included in the hourly status ping. Nothing is written back until you approve it on the review screen.
- Article links — only after you connect a Geoa account: on the hourly sync the plugin sends the outbound and internal link URLs (with anchor text and the article’s title/URL) from a rotating batch of your published posts to https://api.geoa.app, so Geoa can check for broken links server-side. No visitor data is involved.
- Content & site overview — only after you connect a Geoa account: the hourly status ping includes a compact list of your published posts (post ID, title, public URL, an admin edit link and the last-modified date — never the post content) and your site’s environment facts (theme and plugin names/versions incl. whether each plugin is active, whether search engines are discouraged, the permalink structure, whether core sitemaps are enabled, a small whitelist of Yoast/Rank Math settings — their sitemap toggle and organization/knowledge-graph name — and taxonomy counts). This lets your Geoa employee suggest refreshing outdated posts and warn about SEO conflicts with other plugins. No visitor data, no user accounts and no post content are sent.
- AI bot choice — only after you connect a Geoa account, and only when you flip the « Block AI training bots » toggle: the plugin sends that single yes/no choice to https://api.geoa.app, which returns the robots.txt rules to apply. No other data is sent.
- 404 traffic — only after you connect a Geoa account: the plugin counts real front-end 404 hits (the path only — query strings are stripped; no IP address, no user-agent, no visitor data) and sends the per-path counters to https://api.geoa.app on the hourly sync, so Geoa can suggest redirects for lost traffic. Bot-probe paths (wp-login, .env, …) are filtered out locally and never sent.
-
AI-crawler activity — only after you connect a Geoa account: when a known AI crawler (e.g. GPTBot, ClaudeBot, PerplexityBot) fetches one of your pages, the plugin sends that crawler’s user-agent, the page path (query string stripped), a timestamp and the status code to https://connect.geoa.app — batched and asynchronously (at most one background request every 5 minutes), so it never slows your site. This powers the « AI crawlers on your site » card in your Geoa dashboard. No visitor data and no IP addresses are ever sent — only requests already identifying themselves as known AI crawlers. Disconnect your Geoa account and nothing is sent.
-
Geoa badge (optional, off by default) — if you switch the badge on and place it on your site, your visitors’ browsers load the badge image from https://geoa.app. The image is an anonymous, unguessable address; the fetch is not logged per visitor, sets no cookie and assigns no identifier. Switch the badge off and no such request is made.
This plugin does NOT track your site’s visitors. It sets no cookies, adds no front-end tracking scripts, assigns no visitor identifiers, and never sends visitor or personal data to any external service. The AI crawler log records only the user-agent of known AI crawlers (e.g. GPTBot, ClaudeBot) that request your pages; it is stored locally in your own database, and is only transmitted (to https://connect.geoa.app, as described above) after you have connected a Geoa account — never IP addresses, never human visitors.
Service: https://geoa.app
Terms of Service: https://geoa.app/terms
Privacy Policy: https://geoa.app/privacy
Screenshots





Blocks
This plugin provides 1 block.
- Geoa badge
Installation
- Upload the
geoa-ai-visibilityfolder to/wp-content/plugins/, or install it from the Plugins screen. - Activate the plugin.
- Go to Geoa Settings, choose your country and enter your registration number, then publish your registry-verified schema.
- (Optional) Connect a Geoa account with a pairing code from your Geoa dashboard to see live AI-visibility scores.
FAQ
-
Does Geoa work alongside Yoast SEO or Rank Math?
-
Yes — by design. Geoa never prints a second schema graph or a duplicate meta tag next to theirs: the registry-verified Organization data (company ID, legal name, VAT ID, profiles) is merged INTO Yoast’s or Rank Math’s own schema graph via their official filters, approved meta descriptions are rendered through their presenters, and Article/FAQ/canonical output defers to them. You keep your SEO plugin; Geoa adds the AI-visibility layer on top. All in One SEO and SEOPress are detected too, so Geoa defers its overlapping output to them as well.
-
Do I need a Geoa account?
-
No. Registry-verified schema, FAQ/Article/Product schema, the in-editor readiness check, E-E-A-T and the AI crawler log all work without an account. A Geoa account adds live per-engine AI-visibility scoring, Share of Voice, the AI Command Center and automatically published approved fixes.
-
Can Geoa publish fixes automatically?
-
Yes, when you connect a Geoa account and enable « Apply approved fixes ». Anything you approve in your Geoa dashboard — an llms.txt, a structured-data block, a meta title or description — is then published on your site and kept in sync, checked once an hour. Approved fixes always take precedence over the plugin’s own output, so you never get a duplicate, and you can turn the whole thing off at any time. Nothing is published without your approval.
-
Does it conflict with Yoast or Rank Math?
-
No. When an SEO plugin already emits a schema type, Geoa merges its data into that plugin’s graph instead of adding a duplicate node.
-
Which countries are supported for registry verification?
-
Denmark (CVR), Norway (Brønnøysund), Sweden (Bolagsverket/Allabolag) and Finland (PRH).
-
Is my data processed in the EU?
-
Yes. The Geoa backend is EU-hosted, and contact data covered by marketing protection is never published.
-
Does it work with WooCommerce?
-
Yes. On product pages it publishes enriched Product schema — price, availability, brand, GTIN, ratings, an EU return policy and, when your business is verified, a registry-verified seller. Variable products emit a correct price range (AggregateOffer). If Yoast or Rank Math already emits Product schema, Geoa merges these fields into their graph instead of adding a duplicate. A per-product AI-readiness score appears in the product editor.
-
Can AI agents use Geoa directly?
-
Yes. Geoa ships an MCP server at https://geoa.app/mcp — connect it as a custom connector in Claude (or any MCP-capable agent). Without a key the agent can run the free GEO score and mechanical claim verification; with your personal connector key (Integrations in the Geoa dashboard) it can also read your AI-visibility report and fix queue, draft source-verified articles into Content Studio, and run Radar prospecting. The connector is read-only on your site: fixes are only ever applied through the approval flows in the dashboard and this plugin.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Geoa – AI SEO & AEO on Autopilot” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Geoa – AI SEO & AEO on Autopilot” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
0.9.38
- Your sitemap is no longer invisible to search engines. On a site built from pages with no blog posts, WordPress 7.1 answers its own sitemap — the file that tells Google and Bing which pages your site has — with « not found », while still sending the correct list of pages underneath it. Search engines read the answer, not the list, so the sitemap counted for nothing: it could not be submitted, and new or changed pages lost their fastest route to being found. A site with even one published blog post never sees this, which is why it goes unreported — and a site built entirely from pages, like most local businesses, is exactly the case that breaks. Geoa now keeps the sitemap answering correctly, and records the day it had to, so it is visible that it happened. Where another SEO plugin serves your sitemap, Geoa leaves it alone.
- The readiness score in the post editor now describes the article you are looking at. It used to describe the version last saved to WordPress, fetched once when the editor opened — so on a new post it answered about an empty page. Paste an article and open the panel, and you were told it had no headings, no depth, no FAQ and no lists, with a score to match, for an article that had all four. Reloading the page showed a completely different, correct answer, and nobody reloads a page they have just pasted an article into. The panel now scores what is in the editor and re-scores when you change it. While it is working it shows a spinner rather than the previous number: a score for text you have since rewritten is not a smaller truth than no score, it is a wrong answer you cannot tell apart from a right one.
- A connected site is no longer told to connect. When the full 23-signal score could not be fetched, the panel fell back to its own smaller estimate and explained it with « connect Geoa for the full 23-signal score » — on sites that were connected, paired, publishing schema and applying approved fixes. It sent people looking for a setup fault that did not exist. The panel now says which of the two it is: not connected yet, still connecting, or connected but the full score did not come back this time.
- Geoa no longer marks your article down for things your site already has. The editor panel did not tell Geoa what this WordPress site publishes, and a signal Geoa is not told about comes back as missing — so an article on a site that publishes Article schema was told to go and generate Article schema, and internal links in the text were counted as none. The plugin now reports both, so those checks are answered instead of failed.
- A fix Geoa has already published to your site does not disappear because you connect a different Geoa account. It used to, and the timing was the worst possible: reconnecting is exactly what the screen tells you to do when a connection is lost, and the first sync afterwards quietly took down the llms.txt file the previous account had approved — while that same screen promised that nothing had been removed from your site. Work already published now stays published. If it came from an account this site is no longer connected to, it keeps being served, and Settings asks you once whether to keep it or remove it — nothing but that answer removes it. And when a fix genuinely IS withdrawn, because you un-approved it in your Geoa dashboard, the sync now names what it took down instead of leaving you with a page that used to exist.
0.9.37
- The answer to « how does this name relate to your registered company? » can be changed. It could be set, but not kept: the choice was gone on the next page load, and nothing on the screen said why. That answer is not decoration — it decides whether your registration number, legal form and registry entry describe your product or the company behind it, so being unable to change it meant being unable to correct a claim published in your name. It now has its own control with its own save, and it confirms the save by reading the value back out of storage and telling you, in a sentence, what your site publishes as a result. And if the answer ever fails to reach your site — a firewall or security layer in front of WordPress can quietly drop a single form field — you are told exactly that, instead of being shown a screen that looks like it saved.
- Nothing is assumed about your name any more. Until now, a site where nobody had answered the question above was treated as having answered « it is another name for the company itself » — and that assumption was sent on to Geoa as though you had chosen it. Geoa then built on it: on one site it produced an article stating that a PRODUCT was a Danish anpartsselskab, inside a block that cited the company register with a date and a source link. The register says that about the company. It says nothing about the product. « Not answered » is now a real state: neither option is preselected, the setup screen asks before it will publish, and nothing about the relationship is sent to Geoa until you have answered it. Your published schema does not change until you answer — answering is what changes it.
- An answer of « it is another name for the company itself » now actually arrives. This plugin and Geoa spelled that one answer differently, so it was discarded on the way: you answered, the screen said so, and Geoa carried on as though you never had — still asking, still holding back what it could say about your business. The other answer happened to be spelled the same on both sides, which is why only half of this was ever visible.
0.9.36
- A priority is never shown with a blank where a name should be. Version 0.9.34 said this was fixed. Half of it was: the sentence no longer stops in the middle of a word. The other half was not, and it is worth saying plainly where it went. One card still read We currently measure « » — the name your signup set on a site whose name was set correctly, and it was the first of eight priorities. That half lives in Geoa’s servers, not in this plugin, and it could not reach a row that was already sitting in the queue: the check runs over the cards Geoa decides to write that day, and the same change had taught Geoa to stay silent about this card when the name was missing — so the card is never looked at, and the old row stays. That is still true today, and this plugin no longer passes it on: it drops any priority whose text carries an empty pair of quotation marks before the screen is drawn, whatever the server still holds. Seven honest priorities are worth more than eight with a hole in one.
- G-048: an imported article carried its own title as the first heading in the body, so the published page showed the title twice. The heading is now removed when it really IS the title — never when it merely resembles it, and never further down the text.
- You choose who your imported articles are credited to, and where they are filed. Version 0.9.35 stopped filing them under « (no author) » by picking your site’s administrator, and offered a filter for anything else — an answer only someone editing PHP can give. An imported article has no human author and no natural place in your archive, so both are now yours to set once, under Settings: pick a writer, or leave it automatic; pick a category, or keep the default. A draft you move yourself is never re-filed by a later update.
- The per-post AI-readiness score can be found. It was there the whole time — a panel in the post editor, correctly scored — and there was no way for anyone to reach it: no line in the editor’s Options menu, no icon, and a name that did not say which product it belonged to. Measured on a real draft, the only way to open it was to type into the browser console, and that is not a way. The score now has its own icon in the editor header, a line called Geoa AI Visibility under Options Panels, and it still sits inline in the Post tab where you write. On a draft that arrived from Geoa Content it opens itself once — that is the moment the score changes what you do next — and after you collapse it, it never forces itself open again. The score is also re-read when you save, so it describes the draft in front of you and not the one you opened an hour ago.
0.9.35
- Articles imported from Geoa Content have an author. Every draft the import created was filed under « (no author) » in your Posts list, and the cause runs deeper than a blank column: this plugin’s own Article schema puts author, dates and publisher on your single posts, and an author it cannot name is one it leaves out altogether. So the articles produced by the tool that exists to raise your E-E-A-T were published without the single strongest signal of it. New drafts are now filed under your site’s administrator, and drafts already imported without one are repaired once when you update. If you publish under a named writer rather than under the admin account, the
geoa_import_authorfilter sets who that is.
0.9.34
- Articles you mark « ready » in Geoa Content now actually arrive as drafts. They never did on a site whose WordPress scheduler does not fire — and that is most quiet sites, which is exactly why version 0.9.32 added a second route that pulls your approved fixes on an ordinary visit instead of waiting for the scheduler. That second route, and the Sync now button next to it, both fetched the fixes feed and nothing else: the article import was attached to the hourly job itself, and neither of them ran the job. So on the sites that needed the rescue most, the rescue quietly switched the articles off. Measured on one site: an article marked ready for hours, two presses of Sync now, and an empty Posts screen with no error anywhere. Both routes now run the whole hourly job, so everything on it arrives together — articles included.
- Sync now tells you what it fetched. It used to print the same confirmation whether it had pulled two fixes and a new article, found nothing new, or failed to reach Geoa at all — three outcomes where only one of them means « try again later ». It now names them: how many approved fixes are live, how many articles came in as drafts, and, when the connection failed, that nothing was changed and your site is still serving its last synced copy.
- Article drafts have a place on the Settings screen. The feature was promised in the plugin description and had no switch, no status and no error message anywhere in WordPress — so when it failed there was nothing to look at. Settings now shows how many articles are waiting in Geoa Content, how many have arrived here as drafts, when the last check ran, a button straight to the drafts, and a switch to turn the import off. If Geoa Content is holding articles and none of them have reached your site, the screen says so instead of staying silent.
- The AI Command Center stopped listing your own website as something to create. Its top priority was « Create your profile on Your own website » — while the citation list further down the same screen already ticked that row green and explained that Geoa is installed here and publishes your schema from this site. It is the one thing a WordPress plugin can be certain of, and one half of the screen was contradicting the other. The row is now dropped before the card sees it, on the same fact the citation list uses.
- The number over your citation sources is a count of that list now, and it agrees with it. The heading could read « 0 » above a list with a ticked row in it, and « 13 » above an eight-row list with one ticked row. Neither was a count: it was a coverage percentage printed as a bare figure, out of a total that changed depending on whether your site was connected to Geoa and was never shown to you. Version 0.9.33 said this was fixed. It was not, and the reason is worth stating plainly: the recomputed percentage skipped every source Geoa cannot verify by itself, and your own website is one of those — Geoa cannot check it from outside, while this plugin can be certain of it, because it is running on it. So the one row that was ticked was the one row the figure refused to count, and the heading read « 0 » again. It now reads « 1 of 14 confirmed »: the ticks, out of the rows in front of you.
- The priorities are ranked again, and the number beside them means something. Eight entries carried the identical figure « impact 65 » under a heading that promises a ranking, because that figure is a fixed value for a whole class of task rather than a measure of this one — and the plugin then sorted the list on it, discarding the order Geoa had actually worked out. The list now keeps Geoa’s own ranking, numbers the rows so the order is readable as an order, shows roughly how long each one takes, and prints the impact figure only where the rows genuinely differ on it. Each entry also says why that particular platform matters, instead of repeating one sentence eight times, and carries a link to the page where the work is done.
- No priority is printed with a blank where a name should be. One card read: We currently measure « » — the name your signup set. The name was set correctly; the card was the only place on the screen that could not read it, and it raised an alarm about a misconfigured measurement on a site that was configured correctly. Geoa now refuses to write a priority whose sentence it cannot finish, rather than printing the gap as an empty pair of quotation marks.
- Sentences on that card are no longer cut in the middle of a word. The text was trimmed at a fixed character count, which landed inside « Settings » and left the one instruction the card exists to give as « …pick the name yourself under Set ». It now trims at the end of a word, and there is room for the whole sentence in the ordinary case.
0.9.33
- The AI Command Center no longer tells you that nothing needs your attention while the rest of the screen says otherwise. It was reading a different dataset from every other card: its list came from the fourteen technical geo-score dimensions, and only those scoring under 70, while your visibility score, share of voice and citation sources came from three other places. On a site where Geoa had just fixed the technical dimensions, that list was empty — and an empty list was printed as an all-clear. Measured on one site the difference was exactly nought against twenty-three open items. An all-clear is now a finding that needs evidence: it is printed only when the backend confirms every measurement is in its top band, it says which measurements it checked and with what numbers, and where there is no evidence at all it says the result is unverified rather than clean.
- The citation-source count agrees with the list under it. The header could read « 0 » over a list with a ticked row in it, because the number came from the backend’s copy of the list while the tick was added here — this plugin is the one place that knows for a fact your own site is running it. The number is now counted from the list you are actually looking at.
- « Mentioned in 4 of 10 » under share of voice now says which questions it means. The citation check is its own set of questions, separate from the standard queries behind your AI Visibility Score, and both cards used to call them the same thing — so two different measurements read as one measurement reported twice.
0.9.32
- The dashboard no longer tells a connected site to connect. This plugin connects your site to Geoa by itself, by proving it controls your domain — there is no code to copy anywhere in that process. But the connection takes a few seconds to complete, and on the very first visit to Geoa Dashboard after activating, it is often still finishing. That screen used to read the unfinished connection as no connection: it withheld your score, hid the AI Command Center and the writing suggestions, and asked you to fetch a pairing code and paste it under Settings — an errand that was neither necessary nor possible, since a connected Settings screen has no pairing field. Reloading the page showed everything, which is precisely why it was easy to miss. The dashboard now says « Connecting to Geoa… » while that is what is happening, finishes on its own without a reload, and brings the rest of your screen with it when it does. If the automatic connection genuinely fails, it says so, gives the reason, and puts the retry on screen.
- Approved fixes now actually arrive on the schedule this plugin promises. WordPress does not have a clock: it runs scheduled work only when someone visits your site, and it starts that work by asking your own site for a file over HTTP — a request some hosts’ firewalls block, because a server calling itself looks like a probe. On a quiet site, or behind such a firewall, the hourly pull quietly became a pull every few hours, or none at all. There is now a second route that needs neither: when an hour has passed, the next visit to your site pulls the feed directly, in the same process, after the page has already been sent. Opening a Geoa screen in wp-admin counts as a visit, so the screen you are reading is a current one.
- Fixed the case where the hourly pull was never scheduled at all. Activating the plugin queued a single catch-up sync, and the check that installs the repeating hourly job read that one-off as « already scheduled » — so on a site where WordPress’s scheduler never runs, the one-off sat waiting and the hourly job was never created. Those sites showed « Last synced: never » while being fully connected. The repeating job is now installed independently, and repaired on any visit if it has gone missing.
- Settings now tells you the truth about the sync instead of only the time. If the last pull is older than promised, the screen says so, explains that this is your host’s scheduler rather than a lost fix, confirms that everything already published stays live, and promotes the Sync now button. It also shows the one-line cron job to hand your host if you want the hour guaranteed on a site with no traffic.
- What you fill in under Geoa Settings Your business now actually reaches your published schema. The screen asks three things no company register can answer — the subjects you are an authority on, your public contact details, and whether the name customers know you by is the company itself or a product it operates — and promises to publish each one. On any site where an approved schema fix from your Geoa dashboard was in place, that approved node replaced the plugin’s own one wholesale, and all three answers were dropped on the way to the page: knowsAbout never appeared, the email and phone you declared never appeared, and the product-or-company answer changed nothing whichever way it was set. The approved node still wins on everything it carries — it is what you said yes to — but it can no longer delete what you declared here, on any of the three routes your schema can take out of this plugin (with Yoast, with Rank Math, and with no SEO plugin at all).
- Saving your business settings now says so, and says what it saved. WordPress prints nothing of its own on a plugin’s settings screen, so a save that stored everything and a save that stored nothing looked identical. There is now a confirmation after every save that reads the three answers back out of storage and states what each one publishes — including « not set », if that is the truth. And a save can no longer blank a field it did not carry: WordPress asks the plugin about every setting on the page whenever any of them is saved, and for a text field or a choice, « not submitted » used to be stored as « empty ». Clearing a field still works the honest way, by saving it empty.
0.9.31
- Updating the plugin now finishes the work an update is meant to do. Every release carries an internal version stamp the plugin reads to tell that it has just been updated; in 0.9.30 that stamp was left reading 0.9.29, so on a site coming from 0.9.29 the plugin concluded nothing had changed and skipped the pass it makes after an update. Three things followed. Your score kept showing the figure the previous release’s rules produced, for up to half an hour after an update meant to change it. Your browser kept rendering the new version’s screens with the previous version’s stylesheet and script, so anything we changed on screen did not reach you. And a site that had installed the plugin but never finished connecting stayed on the pairing screen, because the pass that reconnects it is exactly the one that was skipped. All three work again, and this release picks up every site that was on 0.9.30.
- The measurements your site reports to Geoa now carry the version that is actually installed. Every 0.9.30 site identified itself as 0.9.29, which is what our own diagnostics were reading.
0.9.30
- The AI Command Center card now speaks the same language as the rest of this screen. Its list came from the same place your Geoa dashboard reads, so a Danish account saw Danish action titles under an English heading — and the line beneath each one was the first line of a Markdown document, which was usually just a heading marker. The card now receives the finding itself, written in this admin’s language.
- Monitored questions that still show a blank from our own template are no longer listed under Settings. New ones are no longer produced, but questions measured before that fix are still stored on your account, and this list is where you would have met them.
- Counts and the words after them now agree, wherever a number can be one. « 1 AI-motorer », « 1 billede(r) », « 1 navn(e) » — a parenthesis is not a plural, it is a way of not choosing. Danish, Norwegian, Swedish and English all now read correctly at one and at many, in the weekly and monthly emails, the fix backlog and the published measurement claims.
0.9.29
- Geoa now measures the name your own site goes by, instead of your web address. When your account had never been asked for a name, Geoa fell back to the domain — so a site trading as WonMetrics was measured as « wonmetrics.com », and that is what went into your schema as the name AI should know you by. WordPress knows something your Geoa account cannot see: the name you typed into your own site. The plugin now offers that name once, marked as a suggestion — Geoa still asks you to confirm it, and it will never overwrite a name you have chosen yourself.
0.9.28
- The AI Command Center no longer tells you to run a scan there is no button for. That card printed « run a Geoa scan to generate your action list » while the plugin had no scan control anywhere — an instruction you could not follow. There is now a real one: Analyse my site now, on the card itself.
- The same card printed that one line for four different situations. It now tells them apart: Geoa could not be reached (a connection problem, and explicitly not an all-clear), your account was not found, an analysis is running right now (with what it is doing, and the card follows it to the end on its own), your scans for the period are used up, or your site was analysed and genuinely has nothing worth listing — with the date it was checked.
- A site Geoa already knew now gets analysed when you install the plugin. Reinstalling, or connecting a site that had been scanned from geoa.app before, reconnected you to the same account without starting a new analysis — so the action list stayed empty with nothing on screen able to change it.
- The score now says which AI engines it was measured on. The circle read « Overall across AI answer engines », the line under it said one engine, and a card further down the same page named a second one. All three were reading the same measurements through different time windows: the recurring scan only asks ChatGPT, so within two days every other engine dropped out of the score while still being named in your writing suggestions. Every card now shares one definition of « the current measurement » — each engine counts from its own most recent scan — and the heading names them: Measured on ChatGPT, or Measured on ChatGPT and Gemini, instead of implying a breadth the measurement did not have. Each bar also says when that engine last answered, so engines scanned on different days do not look like one simultaneous check.
- Your contact details no longer disappear when Geoa publishes your schema. Geoa’s business node is built from the national register, and the registers carry no public email — so on a site whose theme stood aside for Geoa (as it should), the site ended up with less contact information than before Geoa arrived. Two things change: you can now enter a public email and phone number under Geoa Settings, published alongside the registry data; and a theme or plugin that yields to Geoa’s node can hand over the fields it was carrying, through the new
geoa_organization_nodefilter. Taking over must never leave the page knowing less. knowsAboutis now what you are an expert in, not your industry code. Geoa published the registry’s industry text — in the register’s own language, in an otherwise English schema — as the subjects your business understands. For a company-verification tool that read « Computer programming ». There is a new Expert in field for the subjects customers actually come to you for; left blank, nothing is published, because a wrong subject is worse than none.- The citation list no longer asks you to create the website you are reading it on. « Your own website » is the highest-value source on the list — about half the AI citations we measure land on the business’s own site — but it arrived as an unmet task with a « create » link, inside a plugin running on that very site. It is now shown as met, pointing at your site, with a line about what Geoa does to it.
- Activating the plugin now leads somewhere. There was no notice, no redirect and no link on the plugins page, so the two-minute setup was there only for people who thought to look in the sidebar. The plugins row now has Get started and Settings, and a one-time notice points at setup after activation.
- If your country’s registry is not one of the four Geoa looks up, you are no longer stuck on step 1. The first screen now says which four registries are covered and what works without one, and offers Continue without registry verification so you can use the rest of the plugin. Step 1 stays waiting under Settings for when your registry is added.
- The dashboard now speaks one language at a time. Cards had English headings with Danish text inside them — “AI Visibility Score” over “AI-synlighed: 40% på tværs af 1 AI-motorer”, “Citation sources” over Danish explanations, “What to write next” over Danish reasoning. The rule is now simple and applied everywhere: the interface is English, and the only thing kept in your own language is the material itself — the questions people actually ask an AI — shown in quotation marks, word for word, because that is the form you need it in to answer it.
- Suggested questions no longer show the blanks in our own template. “Which local businesses in Denmark offer service?” was a template we had failed to fill in with your industry — and “service” was the placeholder, not a word about you. Where your line of work is known, it is used; where it is not, that question is left out rather than shown with a gap in it. Questions already measured with the gap in them are no longer suggested as articles to …
