Title: Coretex SEO v3
Author: Coretex
Published: <strong>June 17, 2026</strong>
Last modified: August 18, 2026

---

Search plugins

![](https://ps.w.org/coretex-seo/assets/banner-772x250.png?rev=3585695)

![](https://ps.w.org/coretex-seo/assets/icon-256x256.png?rev=3575661)

# Coretex SEO v3

 By [Coretex](https://profiles.wordpress.org/jamiekay/)

[Download](https://downloads.wordpress.org/plugin/coretex-seo.zip)

 * [Details](https://test.wordpress.org/plugins/coretex-seo/#description)
 * [Reviews](https://test.wordpress.org/plugins/coretex-seo/#reviews)
 *  [Installation](https://test.wordpress.org/plugins/coretex-seo/#installation)
 * [Development](https://test.wordpress.org/plugins/coretex-seo/#developers)

 [Support](https://wordpress.org/support/plugin/coretex-seo/)

## Description

Coretex SEO is not another SEO plugin. It is an operating system for your WordPress
site’s search presence — continuously analysing your content, surfacing structured
recommendations across every SEO surface, and applying approved changes automatically.

**“SEO Automation Built for Modern WordPress Teams”**

Coretex SEO AI Automation handles the heavy lifting: scanning every page, generating
optimizations, and queuing them for your approval. You stay in control. The AI does
the work.

**What Coretex SEO analyses and improves:**
 * SEO title tags — rewritten for maximum
click-through * Meta descriptions — compelling, keyword-aligned summaries * Internal
link structure — connecting isolated pages * Heading hierarchy — proper topic structure
throughout * GEO direct answers — content formatted for AI-generated responses *
JSON-LD schema — structured data for rich results * E-E-A-T signals — authority 
and trust indicators * Image title and alt text — accessibility and image search*
AI search visibility — brand presence in ChatGPT, Perplexity, Google AI

**Version 2.4.0 — What’s new:**
 * Site Profile — teach Cortex your niche, audience,
tone and core topics so every AI suggestion stays on-brand and on-topic * Auto-learning—
Cortex infers a Site Profile from your existing content on first scan if you don’t
set one yourself * React-powered admin dashboard (SaaS-style UI, zero page reloads)*
REST API backend for all dashboard operations * Real-time queue with optimistic 
UI updates * AI Visibility view with category heatmap * Onboarding panel integrated
into the Overview

#### AI SEO Workflows

Coretex SEO generates specific, actionable improvements for every page on your site—
then holds them in a queue for your review. Every change requires your approval.
Nothing goes live automatically.

#### Optimize for AI Search (GEO)

Generative Engine Optimization — structured to appear in AI-generated answers across
ChatGPT, Perplexity, and Google AI Overviews. Your AI Search Score tells you exactly
where you stand.

#### AI-Powered SEO Intelligence

Keyword research, competitor intelligence, SERP landscape analysis — all seeded 
with real data from DataForSEO and AI-estimated signals where real data isn’t available.

#### Human-Approved AI SEO

Every suggestion Coretex SEO generates requires your explicit approval before going
live. The AI proposes. You decide. Your site changes only when you say so.

#### AI Providers Supported

OpenAI, Anthropic Claude, Google Gemini, Mistral, Groq, DeepSeek, xAI (Grok), Perplexity,
OpenRouter, and Ollama (fully local/private) — bring your own API key for whichever
you prefer

### External Services

This plugin connects to a number of external services to provide its features. Every
connection below is optional, requires you to configure it yourself (your own API
key/account, or an explicit opt-in setting), and nothing is contacted automatically
without that configuration. No connection is required to activate or use the plugin’s
free-tier features (Title Scan, Meta Scan, Spelling Check, and the Approval Queue)
beyond your chosen AI provider below.

**AI Providers (required for AI-powered scans and the Approval Queue’s suggestions)**

You must configure your own API key for at least one of the following, entered in
Settings  AI Engine. Whichever provider you choose, the specific content being scanned(
e.g. a post’s title, or its text for a spelling check) is sent to that provider’s
API to generate a suggestion. Nothing is sent to any provider unless you have entered
a key for it and clicked a scan button. * OpenAI ([Terms](https://openai.com/policies/row-terms-of-use/),
[Privacy Policy](https://openai.com/privacy/)) * Anthropic ([Terms](https://www.anthropic.com/legal/consumer-terms),
[Privacy Policy](https://www.anthropic.com/legal/privacy)) * Google Gemini ([Terms](https://ai.google.dev/gemini-api/terms),
[Privacy Policy](https://policies.google.com/privacy)) * Mistral AI ([Terms](https://mistral.ai/terms),
[Privacy Policy](https://mistral.ai/privacy-policy)) * Groq ([Terms](https://groq.com/terms-of-use/),
[Privacy Policy](https://groq.com/privacy-policy/)) * DeepSeek ([Terms](https://cdn.deepseek.com/policies/en-US/deepseek-open-platform-terms-of-service.html),
[Privacy Policy](https://cdn.deepseek.com/policies/en-US/deepseek-privacy-policy.html))*
xAI (Grok) ([Terms](https://x.ai/legal/terms-of-service), [Privacy Policy](https://x.ai/legal/privacy-policy))*
Perplexity ([Terms](https://www.perplexity.ai/hub/legal/terms-of-service), [Privacy Policy](https://www.perplexity.ai/hub/legal/privacy-policy))*
OpenRouter ([Terms](https://openrouter.ai/terms), [Privacy Policy](https://openrouter.ai/privacy))*
Ollama — runs locally on your own server; no external service is contacted.

**Google Search Console (optional — only if you connect it in the Rank & Backlinks
tab)**
 Used to read your site’s search performance data and, if you use the sitemap-
submission tool, to submit your sitemap URL. Requires you to sign in with your own
Google account via OAuth. [Google Terms of Service](https://policies.google.com/terms)·
[Google Privacy Policy](https://policies.google.com/privacy)

**DataForSEO (optional — only if you enter your own DataForSEO credentials)**
 Used
for live keyword-ranking and backlink data on the Rank & Backlinks tab. [DataForSEO Terms](https://dataforseo.com/terms-and-conditions)·
[DataForSEO Privacy Policy](https://dataforseo.com/privacy-policy)

**IndexNow / Bing / Yandex (optional — only if you use the “Submit to IndexNow” 
tool)**
 Sends the URLs of your recently published/updated content to api.indexnow.
org for instant indexing by participating search engines (Bing, Yandex). [Bing Webmaster Terms](https://www.bing.com/webmasters/help/webmaster-guidelines-30fba23a)·
[Microsoft Privacy Statement](https://privacy.microsoft.com/privacystatement)

**Coretex SEO Licence Server (optional — only if you enter a paid Pro/Agency/Unlimited
licence key)**
 If you purchase a paid plan, entering your licence key sends the
key and your site’s domain to coretex-seo.co.uk to verify your plan and unlock the
corresponding features locally in the plugin. The free tier of this plugin works
fully without ever entering a licence key or contacting this server. [Coretex SEO Terms & Privacy](https://coretex-seo.co.uk/privacy-policy/)

## Installation

 1. Upload the `cortex-seo-premium` folder to `/wp-content/plugins/`
 2. Activate the plugin through the WordPress Plugins menu
 3. Navigate to Coretex SEO  Overview in your admin dashboard
 4. Connect your AI provider API key in Settings  AI Engine
 5. Run your first scan from Optimize  Site Scans
 6. Review and approve recommendations in the Queue

## FAQ

### What’s included in the Free plan?

The Free plan is fully functional on its own, with no time limit and no licence 
key required: AI Engine connection to any supported provider, the Approval Queue,
Title Scan, Meta Scan, Spelling Check, and Content Freshness Review, on 1 site. 
No Coretex SEO account or licence key is needed to use these — bring your own AI
provider API key and go. Paid plans (Pro, Agency, Unlimited) unlock additional scans,
the full SEO Audit, GEO tools, keyword research, the AI writer, and agency features
like white-label client reports — see the in-plugin Settings page for the full comparison.

### What is “Human-Approved AI SEO”?

Coretex SEO scans your content, generates improvements (better titles, stronger 
meta descriptions, structured data), and queues them for your review. You approve
each change with one click. The AI writes — you approve — your site improves.

### What is GEO / AI Search Optimization?

Generative Engine Optimization (GEO) means optimizing your content to appear in 
AI-generated answers — ChatGPT, Perplexity, Google AI Overviews. Coretex SEO’s GEO
features analyse your site’s structural signals and generate improvements designed
to increase AI citation likelihood.

### Will Coretex SEO change my site automatically?

Never. Every suggestion appears in the approval queue with a before/after preview.
Nothing is applied until you explicitly approve it.

### Which AI provider should I use?

Any of the supported providers work — pick whichever you already have an account
with. Ollama is available for a fully local, zero-cost setup that never leaves your
own server. Check the AI Engine Settings page for each provider’s current recommended
default model, since providers update their model lineups over time.

### Can I use this for client sites?

Yes. White-label settings (Agency plan and above) let you customise client reports
with your agency name, logo, and brand colour.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Coretex SEO v3” is open source software. The following people have contributed 
to this plugin.

Contributors

 *   [ Coretex ](https://profiles.wordpress.org/jamiekay/)

[Translate “Coretex SEO v3” into your language.](https://translate.wordpress.org/projects/wp-plugins/coretex-seo)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/coretex-seo/), check
out the [SVN repository](https://plugins.svn.wordpress.org/coretex-seo/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/coretex-seo/) by
[RSS](https://plugins.trac.wordpress.org/log/coretex-seo/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 3.2.4

 * CRITICAL FIX: the Interface Language selector saved correctly but never actually
   changed the displayed language — it stayed English regardless of selection. Root
   cause: load_plugin_textdomain() was called on the ‘plugins_loaded’ hook, which
   was the standard, correct pattern for years — but WordPress 6.7 (which this plugin
   already lists as tested up to) changed the requirement: translations must now
   be loaded on ‘init’ or later, and loading them on ‘plugins_loaded’ can silently
   fail to apply the selected language even though everything else (the saved option,
   the plugin_locale filter) is working correctly.
 * Moved translation loading to the ‘init’ hook at priority 1 (the officially documented
   fix), while everything else that was previously bundled into that same ‘plugins_loaded’
   callback (constructing the dashboard and frontend classes) stays exactly where
   it was — verified neither of those does anything translation-dependent early 
   enough for the reordering to matter.
 * Verified directly: confirmed the plugin_locale filter is registered well before‘
   init’ fires (as it always was), and simulated the real WordPress hook firing 
   order end-to-end (plugins_loaded, then init) to confirm a saved language selection
   now actually resolves correctly at the point translations are loaded.

#### 3.2.3

 * Full codebase audit and cleanup pass — systematic checks across all 12,400+ lines,
   not a surface skim. Full results below.
 * SIGNIFICANT FIX: every success/error flash message across the entire plugin (
   dozens of them, built up over the whole project) has been rendering as a flat,
   uncoloured box — the CSS classes the notice-rendering code actually outputs (.
   cortex-notice-success, .cortex-notice-error) were never defined, only a same-
   purpose-but-unused .cortex-notice-info existed. A parallel, fully-styled but 
   completely dead .cortex-flash set of classes existed alongside it, built for 
   this exact purpose but never actually wired to the real rendering code. Fixed
   by folding the correct styling into the classes that are actually used, and removed
   the dead duplicate. Verified with an actual rendered image of all 3 notice types
   using the real class-naming pattern the PHP outputs.
 * Removed 5 confirmed-dead methods (defined, zero callers anywhere — verified via
   both direct-call and string-literal-reference search, since many methods are 
   legitimately called only via WordPress hook callbacks): Cortex_SEO_Edition::is_pro_or_higher(),::
   is_premium(), ::is_whitelabel(), ::feature_faq_inject() (a stub left over from
   the FAQ feature removed back in v2.4.0), Cortex_SEO_Dashboard::render_audit_images()(
   leftover from removing the Image Alt Text audit check earlier), Cortex_SEO_Competitor_Gap::
   importance_colour() (superseded by inline logic using the current design tokens),
   and Cortex_SEO_Connection::preflight_check() (built but never wired into any 
   actual call site).
 * Investigated but correctly left alone: Cortex_SEO_Dashboard::render_tab_fragment()
   and the entire Cortex_SEO_Admin_API REST layer initially looked unused by a naive
   search, but are genuinely live — a real, hooked REST API (registered on rest_api_init)
   intended for a React-based admin UI that doesn’t ship its frontend bundle in 
   this build yet. This is intentional unshipped infrastructure, not a bug; left
   fully intact.
 * Checked all $wpdb queries not using prepare() for SQL injection risk — none found;
   every case either uses only hardcoded literals (no user input reaches the query)
   or already uses prepare() correctly on a following line.
 * Confirmed nonce and capability checks correctly and centrally protect every POST
   action handler — one check gates the whole switch statement, no per-case gaps.
 * Checked for orphaned CSS, leftover debug statements (var_dump/print_r/error_log),
   and unused JS functions — none of concern beyond the notice-class issue above.

#### 3.2.2

 * Fixed: GEO & AI Focus tab didn’t match the rest of the plugin’s design — the 
   AI Citation Readiness Score card used a hardcoded 14px radius, no shadow, and
   3 hardcoded hex colours instead of the design system’s tokens (every other tab
   uses .cortex-card + CSS variables). Now uses the same card styling as the rest
   of the plugin, including the checklist pass/warn/fail icon colours.
 * CRITICAL FIX: the Licence tab could show “invalid or not recognised” while every
   paid feature kept working correctly — because the box checked the raw ‘valid’
   flag from the single most recent background check, while actual feature-gating(
   Cortex_SEO_Edition::current_tier()) reads the tier independently and doesn’t 
   require that exact flag. If the most recent automatic recheck failed for an unrelated
   reason (a network hiccup, a rate limit) while the tier was still resolvable from
   the stored data, the two would disagree — same category of bug as the earlier
   stale-connection-status issue. The box now derives “valid” from the same source
   that actually gates functionality, so what it says and what actually works can
   no longer disagree. When this specific situation happens, a note now explains
   that the last automatic recheck didn’t succeed even though the plan is still 
   active, with a prompt to click Recheck.
 * Verified the licence fix directly: simulated the exact reported scenario (stored
   status has valid=false from a failed recheck, but the tier itself still resolves
   and gates real features correctly) — confirmed the box now correctly shows “Active—
   Agency edition” instead of “Invalid”.

#### 3.2.1

 * Changed: Technical Site Audit and Canonical & Noindex moved from Pro to Agency
   + only, joining Full Site Analysis. Enforced both client-side (greyed button,
   no lock icon, “Requires Agency” badge) and server-side (can’t be bypassed by 
   submitting the form directly).
 * Removed: Image Alt Text check taken out of the SEO Audit tab entirely — removed
   from the section grid, the results display, and the Full Site Analysis bundle.
 * Changed: on both the SEO Audit and Site Scans pages, available (unlocked) buttons
   now render grouped together first, with locked ones grouped together after — 
   instead of a fixed order that mixed them throughout the grid.
 * Confirmed already correct, no change needed: AI Visibility & Recommendations (
   the AI-generated score) remains Agency+ only, and DF Page Categories was already
   present on Site Scans, Agency+ gated, from earlier work.
 * Verified directly: rendered the real Audit page HTML for a Pro-tier account and
   confirmed the actual button order (3 unlocked sections first, then the 3 newly-
   locked ones) and confirmed Image Alt Text no longer appears anywhere on the page.

#### 3.2.0

 * Added: IndexNow integration and AI Crawler Allowlist check, on the AI Visibility
   tab, available from Pro upward. The tab now opens with an honest note explaining
   these are the real equivalent of “submitting to AI engines” — ChatGPT/Claude/
   Perplexity don’t offer a direct submission mechanism, but Bing (which powers 
   Bing Chat/Copilot) does via IndexNow.
    - IndexNow: one click submits your most recently published/updated content for
      instant indexing by Bing and Yandex, instead of waiting for a crawl. Verified
      the actual request against the real IndexNow API spec (host/key/keyLocation/
      urlList) and all three response paths (success, key-not-found, empty list).
    - AI Crawler Allowlist: checks robots.txt for 10 known AI crawlers (GPTBot, 
      ClaudeBot, PerplexityBot, Google-Extended, and others) being accidentally 
      blocked, with a one-click fix.
 * Fixed a real bug caught during testing: the AI Crawler Allowlist fix was only
   appending a new “Allow” rule without removing an existing conflicting “Disallow”
   rule for the same bot elsewhere in the file — robots.txt doesn’t reliably resolve
   that conflict in the crawler’s favour. Now removes any existing rule block for
   each of the 10 known bots before adding the clean Allow rule, verified directly
   with a before/after test including a mixed case (one bot fully blocked, another
   partially restricted) to confirm unrelated rules are left untouched.
 * Fixed 2 stale upgrade-notice messages that said “requires the Pro edition” for
   features actually gated to Agency, left over from an earlier tier change.
 * Tier structure: the AI Visibility Score & Recommendations (the AI-generated analysis)
   stays Agency+ only, unchanged from the earlier explicit decision — only the two
   new tools above are Pro+.

#### 3.1.0

 * Added: Robots.txt & Sitemap Submission section on the Site Scans page — available
   on every plan (Free, Pro, Agency, Unlimited), not tier-gated.
    - Robots.txt editor uses WordPress’s own ‘robots_txt’ filter (the same safe 
      approach every major SEO plugin uses) rather than writing a physical file,
      so it works on every host regardless of filesystem permissions.
    - Built-in safety check refuses to save (with a clear explanation) if the content
      would block every search engine from the entire site — verified against both
      a genuinely dangerous case and normal/specific-path Disallow rules to confirm
      no false positives.
    - One-click sitemap submission to Google Search Console (real Sitemaps API call)
      for anyone who has GSC connected. Automatically uses Cortex’s own richer sitemap
      on Agency/Unlimited, or falls back to WordPress’s own built-in sitemap on 
      Free/Pro — so submission genuinely works on every tier, not just where Cortex’s
      sitemap feature is unlocked. Verified this branching directly.

#### 3.0.6

 * Changed: “Scan Posts” page renamed to “Site Scans”.
 * Changed: Spelling Check (AI) moved to the first position in the scan list, above
   Page Titles.

#### 3.0.5

 * Changed: default “Posts per scan” batch size raised from 5 to 50 for Pro, Agency,
   and Unlimited. Free stays hard-locked at 5 — the field is now genuinely disabled(
   not just capped) on Free, and the server independently ignores any submitted 
   value and forces it back to 5, so it can’t be bypassed by tampering with the 
   request.
 * Fixed: batch_cap() (the tier-based limit) already existed in the code but wasn’t
   actually being enforced anywhere — every real read/save site used a flat hardcoded
   5/50 regardless of tier. Now wired into every scan-execution site, both display
   locations, the save handler, and the input field itself.
 * Fixed: the batch-size option was being pre-created with a hardcoded 5 at plugin
   activation, which would have silently frozen a Free-tier install at 5 forever
   even after upgrading to Pro (since a stored option value always beats a fallback
   default). Removed — the correct tier-aware default is now always computed live.
 * Verified directly across all 4 tiers: correct default value, correct enforced
   cap, and confirmed a simulated attempt to submit 999 on Free is correctly forced
   back to 5 rather than accepted.

#### 3.0.4

 * Clarified: the “Posts per scan” help text now explains that the batch counts 
   blog posts and pages together, not one or the other — and flags the one exception(
   DF Page Categories, which is pages-only).

#### 3.0.3

 * Changed: Rank & Backlinks tab moved from Agency+ to Pro+ — now available on Pro,
   Agency, and Unlimited (previously Agency/Unlimited only). This is a single gate
   in Cortex_SEO_Edition, so it automatically updates the tab bar, the WP admin 
   sidebar, and every locked-button state consistently.
 * Verified the new gate resolves correctly across all 4 tiers directly (Free: locked,
   Pro/Agency/Unlimited: unlocked).

#### 3.0.2

 * Added: the green status dot in the “OPERATIONAL” and “AI Connected” pills now
   slowly fades in and out on a loop (2.2s), signalling an active/live connection.
   Only applies to the connected/green states — warning and error dots stay static,
   so a problem never looks like it’s “pulsing along nicely”. Respects the OS-level“
   reduce motion” accessibility setting.

#### 3.0.1

 * Fixed: the “Apply” button (and any other button rendered as a link, e.g. in the
   Approval Queue) showed purple text instead of white — a CSS specificity bug where
   the general “all links are purple” rule narrowly beat the button’s own white-
   text rule. Fixed by excluding buttons from the general link-colour rule at the
   source, rather than patching individual button classes. Verified with an actual
   rendered image of the exact button markup before/after.

#### 3.0.0

 * Rebranded: plugin renamed from “Cortex SEO — Premium” to “Coretex SEO v3”, correcting
   a spelling inconsistency that had run through the whole plugin — every user-facing“
   Cortex SEO” text (62 occurrences across 21 files: admin menu/page titles, notices,
   help text, client report headers/footer, licence messages, email reports) is 
   now “Coretex SEO”, matching the actual brand name shown in the logo and used 
   on coretex-seo.co.uk.
 * Fixed: Plugin URI was pointing at an unrelated domain (cortexseo.ai) — corrected
   to coretex-seo.co.uk.
 * Dropped “Premium” from the display name and remaining mentions to match the new
   v3 branding.
 * Scope note: internal PHP class names (Cortex_SEO__), constants (CORTEX\_SEO\__),
   database option keys (cortex_seo_*), the plugin’s text domain (cortex-seo), and
   its folder/slug were deliberately left unchanged — renaming those would risk 
   breaking your live site’s saved settings, license activation, and the 10 language
   translation files (which are keyed to the text domain) for no user-visible benefit,
   since none of those are ever seen by anyone using the plugin.

#### 2.13.0

 * Client Report completely rebuilt — fixed a genuine “Executive Summary” heading
   printed twice in a row, and removed a fake bar chart made of hardcoded random
   numbers ([35,62,48,75,…]) that had no connection to any real data and was actively
   misleading in a client-facing deliverable.
 * Removed two fabricated metrics presented as if they were real measured data: “
   Visibility Score %” (was just audit score minus an arbitrary offset) and “Keyword
   Growth +N” (was keyword count × 3, not real growth tracking). The Executive Summary
   now shows only genuinely computed numbers: SEO Audit Score, Avg Content Score,
   Pages Scored, Keyword Opportunities, Critical Issues, and Link Building Opportunities.
 * Redesigned to match the plugin’s own admin design system — same navy/purple palette,
   Inter typeface, card/radius/shadow language — instead of a separate, disconnected
   visual style. The agency’s own white-label brand colour is still respected as
   the accent throughout (this report’s white-labelling is for agencies delivering
   to their own clients).
 * Proper A4 sizing: the report now renders as an actual 210mm-wide page (both on
   screen and via @page print rules), instead of an unbounded-width layout that 
   didn’t correspond to any real paper size.
 * Fixed the summary stat layout from CSS Grid to flexbox for far broader rendering
   compatibility — verified via an actual rendered image test that CSS Grid silently
   collapsed to a single column in one real-world PDF rendering engine (relevant
   since agencies commonly use automated HTML-to-PDF tools, not just live browser
   printing); flexbox renders correctly across both.
 * Verified all of the above by actually executing the report generator with realistic
   data and rendering the real HTML output to an image for direct visual inspection—
   not just reviewing the code.

#### 2.12.5

 * Changed: the “Send report to (email)” field on AI Engine Settings no longer pre-
   fills your WordPress admin email as real text before you’ve typed anything — 
   it now starts blank, with the admin email shown only as a greyed placeholder 
   hint. Saving/sending still safely falls back to your admin email if left blank(
   verified directly), so scheduled audit emails can’t silently fail to send.

#### 2.12.4

 * Fixed: the Overview page’s lifecycle progress rings (Initiation/Planning/Execution/
   Supervision/Closure) were broken by a CSS class-name collision introduced during
   the redesign — .cortex-ring was reused for both the large donut-chart stat rings
   and the tiny 8px header status dot, so the dot’s styling won. Split into two 
   separate rules; rings are now a proper 92px donut chart (up from the broken ~
   8px), significantly bigger per request.
 * Fixed: the 5 ring colour variables (–cortex-blue, –cortex-orange, –cortex-green,–
   cortex-red, –cortex-purp) were never carried over into the redesigned token system,
   so the progress arcs had no valid colour at all. Added all 5, matched to the 
   new palette.
 * Improved: stat cards now centre their content properly (ring above, label below)
   with consistent spacing and a subtle hover lift, instead of the cramped left-
   aligned layout.
 * Verified with an actual rendered simulation of the fixed component (not just 
   the CSS) before considering this done — confirmed correct arc proportions, colours,
   and centred large text for all 5 values.

#### 2.12.3

 * Fixed: a real contrast bug in the redesigned header — the logo’s “CORE” text 
   is dark navy, and the header background from the redesign was also dark navy,
   making it nearly invisible (exactly the “text blending into background” problem
   to avoid). Verified by compositing the actual logo file against the actual header
   gradient before and after. Changed the header to a light background (white to
   pale purple) that the logo — clearly designed for a light background — now displays
   against with full legibility for both colors in the wordmark.
 * Adjusted the status pills (system status + AI connection status) to match the
   new light header: white pill background with navy text and a subtle border/shadow,
   replacing the white-text-on-transparent-dark styling that no longer applied.
 * Logo image files themselves are unchanged (confirmed via file timestamps) — this
   was purely a background-color fix, not a logo replacement.

#### 2.12.2

 * CRITICAL FIX: the status box on Settings showed a stale, misleading provider/
   model whenever you switched providers — e.g. after saving Groq, it kept displaying“
   OPENAI · gpt-4o-mini” (your previous provider’s last test result) even though
   the state label correctly said “Not tested”. The detail text was pulling from
   the last stored test result regardless of whether it still matched the currently
   active provider. Now it only shows that stored result for “Connected”/”Failed”
   states (where it’s guaranteed relevant); for “Not tested” it shows the actual
   currently-saved provider and model instead.
 * Verified with a direct simulation of the exact reported scenario (Groq saved 
   as active, stale OpenAI test result still in storage) — confirmed the box now
   correctly reads “GROQ · [model] — click Test Connection to verify” instead of
   the old provider’s stale data.

#### 2.12.1

 * Added: an “unsaved changes” warning that appears directly under the Brain dropdown
   the moment you change it, before saving. Test Connection always tests whatever
   is actually saved in the database — not whatever’s currently showing in the dropdown—
   so changing the dropdown without clicking Save Settings first (then testing) 
   looked like a broken connection when it was really just an unsaved selection.
   This makes that trap impossible to miss.

#### 2.12.0

 * Complete visual redesign — the entire admin.css was rewritten from scratch as
   one cohesive design system (down from 1,422 lines of overlapping/conflicting 
   theme layers to 702 clean, organized lines), instead of patching individual sections.
 * New premium tech aesthetic built around the actual Cortex logo’s navy/purple 
   palette: deep indigo header with a subtle radial-gradient glow, soft cool-grey
   page background, purple accent buttons, consistent card/button/input/table/badge
   styling throughout every tab.
 * Added Inter (a modern, professional typeface used across leading SaaS/tech products)
   via Google Fonts, with a full system-font fallback chain.
 * Removed every lock icon (🔒) from the interface — restricted features and buttons
   are now shown simply greyed out with a dashed border and muted “Requires X” text
   badge, no lock symbols anywhere, per explicit design direction.
 * Fixed a real contrast failure caught while auditing the new design: the greyed-
   out/disabled button text only had a 2.58:1 contrast ratio against its background(
   fails WCAG AA’s 4.5:1 minimum) — darkened to 4.58:1. Spot-checked every other
   core text/background pairing (headings, buttons, badges) — all pass AA comfortably(
   5:1–15:1).
 * Confirmed the logo assets are unchanged/correct (same source files as the previous
   logo update) — displayed at their native, undistorted proportions in the header
   and footer.
 * Fully responsive — added explicit tablet (960px) and mobile (600px) breakpoints
   so grids, tables, and the header stack sensibly on small screens.

#### 2.11.1

 * Changed: Advanced GEO scans (Direct Answer Summaries, JSON-LD Structured Data,
   E-E-A-T Improvements), DF Page Categories, Category Assignment, URL Slug Optimizer,
   Open Graph/Social Meta, and Content Freshness Review all moved from Pro to Agency
   + only.
 * Changed: AI Visibility & Recommendations moved from Pro to Agency+ only.
 * Fixed: the GEO & AI tab had its own duplicate “Citation Layer Analysis” buttons
   for the three Advanced GEO scans that were never actually tier-gated in the UI—
   they looked live and clickable at Pro tier but silently failed server-side. Now
   shows the same greyed-out/locked treatment as the Scans page.
 * Fixed: “Run Full Analysis” on the SEO Audit tab had no tier check at all, client
   or server-side — any Pro-tier user could actually run it. Added the missing server-
   side gate (not just a UI lock) and the matching locked/greyed button.
 * Verified the new tier boundaries directly across all 4 tiers (Free/Pro/Agency/
   Unlimited) — confirmed exactly the intended scans/features unlock at Agency, 
   nothing changes at Free/Pro beyond the removals, and Agency/Unlimited get everything.

#### 2.11.0

 * Added: multi-language system for the plugin’s own admin interface. New “🌐 Interface
   Language” selector at the top of Settings, supporting English, Spanish, French,
   German, Italian, Portuguese, Dutch, Polish, Chinese (Simplified), Japanese, and
   Arabic, plus a “Site Default” option that follows WordPress’s own language setting(
   the default — nothing changes for anyone who doesn’t touch it).
 * Added: real WordPress i18n infrastructure — a genuine .pot template (1,114 strings,
   extracted from the actual codebase via xgettext), 10 compiled .po/.mo translation
   file pairs, and a new Cortex_SEO_I18n class that overrides WordPress’s site language
   for this plugin’s text domain only, via the standard ‘plugin_locale’ filter —
   every other plugin and WP core is completely unaffected (verified directly, including
   a specific WooCommerce isolation test).
 * Fixed 2 hardcoded, untranslatable strings found while auditing the codebase for
   this: tier names (Free/Pro/Agency/Unlimited) were PHP class constants, which 
   can’t call __(); converted to a runtime method so they translate correctly.
 * Translation coverage: ~34 of 1,114 strings are translated per language currently—
   the highest-visibility ones (navigation, primary buttons, tier names, key headings).
   Everything else falls back to English automatically (standard gettext behaviour)
   until translated further — see languages/README.md for the full workflow to add
   more.
 * Verified end-to-end: the plugin_locale filter correctly overrides only the cortex-
   seo domain (confirmed via direct simulation, including proof of zero effect on
   other plugins/WooCommerce), and all 10 compiled .mo files were verified at the
   binary level (a custom .mo parser confirmed real translated strings decode correctly,
   e.g. “Overview”  “概要” in Japanese, “نظرة عامة” in Arabic).

#### 2.10.3

 * CRITICAL FIX: licence verification was calling the wrong REST endpoint entirely.
   The plugin was requesting https://coretex-seo.co.uk/wp-json/coretex/v1/license/
   verify, but the actual “Coretex License Bridge for WooCommerce” plugin registers
   https://coretex-seo.co.uk/wp-json/coretex-licensing/v1/verify — a completely 
   different namespace and path. This is what produced the “No route was found” 
   404. Fixed by pointing at the correct endpoint, confirmed directly against the
   bridge plugin’s source code.
 * CRITICAL FIX: even with a working connection, the tier would never have been 
   detected correctly — the licence bridge returns the tier as ‘tier’ (and ‘plan’
   as a duplicate), but the plugin only ever checked for a field called ‘edition’,
   which the bridge never sends. Every successful verification would have silently
   fallen back to Free. Now checks ‘tier’, then ‘plan’, then ‘edition’ in order.
 * Verified end-to-end with the bridge plugin’s exact real response shape (copied
   from its source): confirmed a valid Agency-tier response now correctly unlocks
   Agency-gated features, and a “key not found” response correctly and safely falls
   back to Free.

#### 2.10.2

 * Fixed: saving or rechecking a licence key showed a generic “could not be verified”
   message at the top of the page, even though the plugin already knew the specific
   reason (domain mismatch, licence server’s own error text, HTTP status, or a connection
   failure) — that detail only appeared in a separate diagnostics panel further 
   down the page. The top-of-page message now shows the real reason directly, e.
   g. “Licence server rejected the request (HTTP 403) for domain ‘example.com’. 
   If your licence was issued for a different domain…” instead of a dead-end generic
   message.
 * Verified with 5 direct test scenarios (network failure, licence-server error 
   message, HTTP error with no message, malformed non-JSON response, and a fully
   empty result) — each produces the correct specific message, with a safe generic
   fallback only when truly no detail is available.

#### 2.10.1

 * Changed: locked features are now visible-but-locked everywhere, instead of a 
   mix of “hidden entirely” and “clickable but silently fails”. Specifically:
    - Site Scans: locked scan types (e.g. Pro/Agency scans on a Free site) now show
      as greyed-out, dashed-border buttons with a 🔒 and “Requires Pro/Agency” badge,
      linking to the pricing page — previously they looked identical to unlocked
      scans but failed with a confusing “Unknown scan type” error when clicked.
    - WP admin sidebar: locked tabs (Audit, GEO, AI Visibility, Keywords, Competitors,
      Rank & Backlinks, AI Writer, Client Report) now show a 🔒 in the menu label
      and render dimmed in the sidebar, still clickable through to that tab’s upgrade
      notice.
    - In-page tab bar: the Rank & Backlinks tab shows the same dimmed + 🔒 treatment
      when locked.
 * Fixed: .cortex-upgrade-notice (the “requires the X edition” box shown on locked
   tabs) had no CSS defined at all — was rendering as an unstyled plain box. Now
   styled consistently with the new locked-state design.
 * This is tier-agnostic by design: a Free-tier site sees everything above Free 
   locked; a Pro-tier site sees Agency+ locked; Agency sees nothing locked (all 
   current features); the same mechanism drives every tier automatically from Cortex_SEO_Edition—
   no per-tier special-casing needed.
 * Verified the locked/unlocked scan split is exactly correct at all 4 tiers via
   direct testing.

#### 2.10.0

 * Added: real 4-tier licensing (Free / Pro / Agency / Unlimited), matching coretex-
   seo.co.uk’s pricing page. Previously every install had full access regardless
   of licence — this is now properly gated.
 * Free: AI Engine (all 10 providers), Approval queue, Title Scan, Meta Scan, Spelling
   Check, Content Freshness Review, 1 site.
 * Pro (+Free): remaining on-page scans (link, headings, images, categories, slug,
   Open Graph), SEO Audit (6 tools), GEO Checklist, AI Visibility, Keyword Research,
   AI Writer, 3 sites.
 * Agency (+Pro): Advanced GEO scans, Competitor Gap Analysis, Backlink monitoring,
   Rank & Backlinks (GSC + DataForSEO), SERP analysis, Full Site Engine, branded
   Client Reports, Scheduled scans, Bulk approval, White-label, Sitemap Manager,
   10 sites.
 * Unlimited (+Agency): unlimited sites, largest batch sizes.
 * Tier comes from the licence server’s response; no licence, an invalid licence,
   or an unrecognised edition string all safely fall back to Free rather than granting
   or blocking everything.
 * Every previously-unlocked tab/action now shows a real upgrade notice naming the
   correct tier instead of a generic “Premium” message, with a link to the pricing
   page.
 * Note: site-count limits (1/3/10/unlimited) are informational only — enforcing
   how many sites share one licence key has to happen on the licence server, not
   inside a single plugin install.
 * Note: the pricing page’s own Agency site-limit is inconsistent (pricing table
   says 10, FAQ says “up to 50”) — flagged in-plugin; the site owner should reconcile
   this.
 * Verified with a direct end-to-end test across all 4 tiers plus edge cases (unrecognised
   edition string, no licence at all) — confirmed safe fallback to Free in every
   case, no crashes, no accidental full-access leaks.

#### 2.9.12

 * Fixed: the header pill and Settings status box only updated when you clicked 
   the dedicated “Test Connection” button — if a real scan or feature successfully
   used the AI provider without that button ever being clicked, the pill kept showing
   a stale “Failed” from whatever the last explicit test happened to be, even while
   AI was demonstrably working. Every real AI call anywhere in the plugin now updates
   the same status Test Connection does, so the pill reflects actual current reality.
 * Verified with a direct simulation: stale “Failed” status  real successful scan
   call (no Test Connection click)  pill correctly flips to “Connected”.

#### 2.9.11

 * Reworked: AI Engine Settings page simplified, based on a comparison against a
   known-working simpler build. Removed the separate JS-injected “AI Diagnostics”
   panel (Provider/Model/State/Key source/etc.) — it was a second, independently-
   computed status source stacked on top of the page’s own reliable, always-accurate
   inline connection-status box, and the two could show inconsistent state. The 
   page now has one single source of truth: the inline status box (✓ Connected /
   ✗ Failed / ⚠ No API key / — Not tested), which is rendered directly in PHP on
   every load, plus the exact error message shown after clicking Test Connection.
 * The header status pill (top-right “AI: Connected/Failed/Missing key”) is unchanged
   and still links straight to Settings.
 * Removed the now-dead server-side data injection that only fed the removed panel.

#### 2.9.10

 * Fixed: the Settings-page AI Diagnostics panel was a static page-load snapshot—
   clicking “Test Connection” updated the header pill and the small feedback message,
   but the diagnostics panel itself stayed on stale “Not Tested / Never” data until
   a manual page reload. It now refreshes live with the real result immediately 
   after every test.

#### 2.9.9

 * CRITICAL FIX: the AI Engine Settings dropdown and Save/Connect flow were reading
   from a completely separate, never-updated model list (providers_map()) than the
   one earlier updates had fixed (model_info_data(), used only for the cosmetic 
   info tooltip). This meant Settings was still offering and defaulting to dead 
   models — gemini-1.5-flash, deepseek-chat, grok-2-latest, plus stale Anthropic/
   Mistral/Groq/Perplexity/OpenRouter lists — regardless of prior fixes, which is
   why AI Engine Settings would not connect.
 * Fixed: providers_map() now has the same corrected, verified-current model lists
   and defaults across all 10 providers (OpenAI, Anthropic, Gemini, Mistral, Groq,
   DeepSeek, xAI, Perplexity, OpenRouter, Ollama).
 * Verified with a direct simulation of the real save flow (POST cortex_seo_brain
   =… through to the saved model option) to confirm the fix resolves correctly, 
   not just that the array is well-formed.

#### 2.9.8

 * Fixed: Gemini default (gemini-1.5-flash) and 4 other Gemini models were fully
   shut down by Google — replaced with the current 3.x Flash/Pro lineup, new default
   gemini-3.5-flash-lite
 * Fixed: DeepSeek’s both models (deepseek-chat, deepseek-reasoner) were retired
   July 24, 2026 — replaced with deepseek-v4-flash (new default) and deepseek-v4-
   pro
 * Fixed: xAI’s entire model list (all 7 entries, including the default grok-2-latest)
   was retired — replaced with the current Grok 4.x lineup, new default grok-4.6.
   Retired xAI slugs were silently redirecting to grok-4.3 and billing at its rate
   rather than erroring, so this was a hidden cost risk, not just a broken dropdown.
 * Fixed: Mistral’s 3 open-weight models (open-mistral-7b, open-mixtral-8x7b, open-
   mixtral-8x22b) were retired — removed, added the current Ministral tier, promoted
   Mistral Medium to recommended default (95% of Large’s quality at 1/4 the cost)
 * Fixed: Perplexity’s sonar-reasoning model was removed Dec 15, 2025 — removed 
   from the list (sonar-reasoning-pro remains, unaffected)
 * Fixed: OpenRouter’s x-ai/grok-2 and deepseek/deepseek-chat slugs were dead — 
   replaced, and refreshed Claude/GPT/Gemini/Mistral OpenRouter slugs to current-
   generation models
 * All changes verified against each provider’s own …

## Meta

 *  Version **3.2.4.0**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.4**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/coretex-seo/)
 * Tags
 * [ai seo](https://test.wordpress.org/plugins/tags/ai-seo/)[ai visibility](https://test.wordpress.org/plugins/tags/ai-visibility/)
   [content optimization](https://test.wordpress.org/plugins/tags/content-optimization/)
   [geo](https://test.wordpress.org/plugins/tags/geo/)[seo](https://test.wordpress.org/plugins/tags/seo/)
 *  [Advanced View](https://test.wordpress.org/plugins/coretex-seo/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/coretex-seo/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/coretex-seo/reviews/)

## Contributors

 *   [ Coretex ](https://profiles.wordpress.org/jamiekay/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/coretex-seo/)