Title: CloudScale SEO AI Optimizer
Author: andrewjbaker
Published: <strong>17 marca, 2026</strong>
Last modified: 26 avgusta, 2026

---

Search plugins

![](https://ps.w.org/cloudscale-seo-ai-optimizer/assets/icon-256x256.png?rev=3485118)

# CloudScale SEO AI Optimizer

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

[Download](https://downloads.wordpress.org/plugin/cloudscale-seo-ai-optimizer.4.21.557.zip)

 * [Details](https://sl.wordpress.org/plugins/cloudscale-seo-ai-optimizer/#description)
 * [Reviews](https://sl.wordpress.org/plugins/cloudscale-seo-ai-optimizer/#reviews)
 *  [Installation](https://sl.wordpress.org/plugins/cloudscale-seo-ai-optimizer/#installation)
 * [Development](https://sl.wordpress.org/plugins/cloudscale-seo-ai-optimizer/#developers)

 [Support](https://wordpress.org/support/plugin/cloudscale-seo-ai-optimizer/)

## Description

**Most WordPress sites lose search traffic to SEO work nobody has time to do.** 
Meta descriptions go unwritten, images ship with no ALT text, related posts never
get linked, and technical SEO gets set up once, if at all. Yoast and RankMath give
you the fields; you still fill in every one yourself.

**CloudScale SEO AI Optimizer fills them in automatically.** On publish, the AI 
Auto Pipeline writes the meta description, scores the SEO, generates ALT text, builds
an on-page summary, and links related articles – no manual pass. One-click **Audio
Narration** turns any post into a spoken article in 11 AI voices. It also runs the
technical SEO WordPress skips underneath, and a built-in **Site Audit** scores your
setup across 20+ checks with one-click fixes.

It replaces Yoast Premium and RankMath Pro, in two plans:

**Bring Your Own API Key – free, forever.** Paste your own Anthropic Claude or Google
Gemini key (2 minutes at console.anthropic.com or aistudio.google.com) and pay the
provider directly: about $0.50-$1.50 per 200 posts, under $0.10 per 100 on Claude
Haiku, or nothing on Gemini’s free tier. The plugin itself charges nothing. Setup
is install, paste key, click Generate Missing.

**Managed Subscription – $10 per month.** No API key required, AI usage and audio
narration included, cancel anytime.

#### Core SEO Features

 * Custom meta title and description per post and page; canonical URL on every page
 * OpenGraph (title, description, image, type, locale) and Twitter/X Card tags
 * JSON-LD: Person (author pages), Article/BlogPosting (posts), WebSite (homepage),
   Breadcrumb
 * Configurable site name, locale, Twitter handle, default OG image
 * XML sitemap (index + child sitemaps) with configurable post types and taxonomies,
   plus a plain-text /sitemap.txt for AI crawlers
 * robots.txt editor with AI bot blocking (GPTBot, CCBot, Claude-Web, anthropic-
   ai and others), plus llms.txt support
 * noindex controls for search results, 404s, attachments, author archives, tag 
   archives and RSS feeds
 * UTM stripping in canonical URLs; widget-pagination and comment-moderation parameters
   always stripped

#### AI Auto Pipeline

 * Runs every AI operation in a background process the moment a post is published–
   no WP-Cron dependency, and optionally again whenever a published post is saved
 * Per publish: meta description, SEO score, focus keyword, ALT text for all images,
   AI-suggested internal links, AI summary box and Related Articles
 * Gutenberg-safe block-level link injection; classic editor falls back to str_replace
 * 50-word minimum content guard; HMAC-authenticated async request with a 120-second
   TTL
 * “Re-run AI Automation” button in the metabox with live log output

#### AI Meta Writer

 * Claude or Gemini, with a model selector: Automatic (always the current recommended
   model), Claude 3.5/3.7 Sonnet, Claude Haiku, Gemini 2.0 Flash, Gemini 1.5 Pro,
   or a custom model string
 * Generate meta descriptions per post or in bulk; fix descriptions that are too
   short or long, and titles outside the optimal 50-60 characters
 * Inline edit button on each row for manual corrections
 * Configurable character range injected into the prompt, auto-retry when the AI
   overshoots, backoff on HTTP 429
 * Fully editable system prompt with reset to default; Test Key verifies your key
 * Sortable post table (title, date, SEO score, description length, title length,
   ALT status), timestamped progress log, Stop button
 * Scheduled batch generation via WP Cron

#### AI SEO Scoring

 * AI rates each post 0-100 with a one-sentence strengths or weaknesses note
 * Calculate SEO Scores runs a bulk pass; Generate Missing scores any post still
   lacking one
 * Stored in post meta (_cs_seo_score, _cs_seo_notes) and survive deactivation

#### Title Optimiser

 * AI suggests SEO-optimised replacement titles for every published post, with a
   before/after score (0-100)
 * Identifies the primary and secondary keywords the article is about
 * One-click Apply updates title and slug and 301-redirects the old URL; “Apply 
   All Suggested” does the lot with confirmation
 * Sort by date or most-commented; suggestions stored in post meta so you can apply
   selectively

#### AI Summary Box

 * AI summary box prepended to post content: What it is, Why it matters, Key takeaway
 * Written SEO-first – primary keyword front-loaded, secondary keywords woven in,
   optimised for search intent
 * Also written into Article JSON-LD as description, abstract and disambiguatingDescription
 * Bulk generation with progress tracking, stop button and paginated list; force
   regenerate overwrites existing summaries
 * Collapsible card; a global show/hide toggle keeps generated content

#### ALT Text Generator

 * Audits all post images for missing ALT text and generates it with article context
   for relevance
 * Configurable article excerpt length sent to the AI (100-2000 characters)
 * Bulk generation with progress tracking; Show All reveals images that already 
   have ALT text

#### Related Articles

 * Injects related post links at the top and bottom of every post, block-safe in
   Gutenberg and classic posts
 * AI-scored candidate pool across the full library; configurable counts (2-5 top,
   3-10 bottom) with independent toggles
 * Generate Missing processes new posts; Refresh Stale re-runs changed content; 
   Sync Counts trims or fills to new count settings
 * Post Status table shows per-post state (pending, complete, failed) with filter
   tabs

#### Audio Narration

 * Turns any post into a spoken MP3 with one click (Generate Audio, for logged-in
   editors only), using your own OpenAI key or included on the Managed Subscription;
   a “Listen to this article” player appears under Related Articles
 * Eleven narrator voices, from Cedar (calm, authoritative) to Marin (conversational)
   to Onyx (deep broadcast)
 * Free voice previews, which never draw on your narration allowance
 * Editable narration prompt controls tone and pacing; defaults to a calm tech-essay
   read
 * Code blocks are never read aloud; each becomes a short spoken note instead
 * MP3s land in your media library; regenerating replaces the previous narration
 * Includes 500,000 narration characters per month, roughly 9 hours of audio, billed
   by the actual characters read aloud so there is no per-post limit; a $5 Narration
   Boost adds a further 400,000 characters that roll over until used

#### Performance Features

 * font-display: swap to kill Flash of Invisible Text, plus font metric overrides(
   size-adjust, ascent-override, descent-override) to reduce Cumulative Layout Shift
 * Defer font CSS via the media=”print” swap technique; auto-download CDN (Google)
   fonts locally for speed and GDPR compliance
 * Font CSS scanner with Auto-Fix All, backup and undo
 * Defer render-blocking JavaScript with configurable exclusions
 * HTML, CSS and JS minification (5-15 percent smaller pages)
 * HTTPS mixed content scanner and one-click fixer across posts, pages, metadata,
   options and comments

#### SEO Health Dashboard

 * Dashboard widget with five coverage pillars – Posts (meta), SEO (score), Images(
   ALT), Links (related articles), Summaries – as colour-coded pills: green >= 90%,
   amber >= 60%, red < 60%
 * Refresh rebuilds the health cache; it also auto-rebuilds after any bulk AI run,
   and counters show posts needing an AI run and queued pipeline jobs

#### Dashboard Integration

 * Post editor metabox and Gutenberg sidebar panel (CloudScale Meta Boxes): custom
   title, description, OG image, AI summary fields and one-click generation
 * Tab state persists across reloads

#### Category Fixer

 * Suggests better category assignments using Claude on each post’s title, slug,
   tags and AI summary against your category list
 * Up to four categories per post, only ones that already exist, never Uncategorized
 * Colour-coded review table (green additions, red removals, grey kept) with a confidence
   badge
 * Per-post Apply and Skip, bulk Apply All Changed, filters: All, Changed, Unchanged,
   Low Confidence, Missing
 * Reload re-analyses everything; a per-row button redoes one post. Nothing changes
   until you click Apply

#### Category Health and Drift Detection

 * Post counts per category with a pass/fail coverage indicator
 * Drift Detection flags categories that have drifted from their original focus 
   or become catch-all buckets, each with a verdict (drifting or catch-all), confidence
   score and AI reasoning
 * Sorted by verdict then confidence; elapsed-time counter and Stop button

#### Readability Analyser

 * Pure-PHP scoring, no AI call required: 0-100 with an Easy / Moderate / Hard label
   from sentence length, heading density and passive-voice rate
 * Colour-coded metabox badge with sub-metrics (words per sentence, words per heading,
   passive voice percentage)
 * Sortable Readability column; recalculated on save and after each Auto Pipeline
   run

#### Broken Link Checker

 * Finds outbound links in posts and pages that return HTTP 4xx/5xx or fail to connect
 * Server-side HEAD request per URL, deduplicated so each external URL is checked
   once
 * Results table with post title, anchor text, URL and status. SSRF-safe: link-local,
   loopback and private IP ranges are blocked server-side

#### Image SEO Audit

 * Flags Media Library SEO issues: missing ALT text, camera-default filenames (IMG_001,
   DSC_0045, screenshot2) and oversized files over 500 KB, sorted by issue count
   with thumbnails and direct edit links

### External Services

The plugin contacts the services below, only when you enable and use the relevant
feature.

**Notes that apply to every service listed here:**

 * **Key handling:** any API key, bot token or licence key you enter is stored only
   in your own WordPress database (wp_options) and is never transmitted anywhere
   except directly to that service’s own host.
 * **“Post content” means:** the post title, up to 6,000 characters of the post 
   body, and the system prompt you configured.
 * No visitor data, personal data, analytics or tracking data is ever transmitted.
 * Nothing is sent from your front end. Calls come from a WP Admin action, a WP 
   Cron batch you scheduled, or the Auto Pipeline on publish/update if enabled.

#### Anthropic Claude API

**Service:** Anthropic PBC – https://anthropic.com
 **Endpoint:** https://api.anthropic.
com/v1/messages **Data sent:** Post content (see note above). **When data is sent:**
On Generate, Fix or Generate with Claude; on a scheduled batch for posts without
a meta description; or on publish/update via Auto Pipeline. **API key:** Your own
Anthropic key (see key-handling note above).

Privacy Policy: https://www.anthropic.com/privacy
 Terms of Service: https://www.
anthropic.com/terms API documentation: https://docs.anthropic.com

#### Google Gemini API

**Service:** Google LLC – https://ai.google.dev
 **Endpoint:** https://generativelanguage.
googleapis.com/v1beta/models/ **Data sent:** Post content (see note above). **When
data is sent:** Same triggers as Anthropic above, when Gemini is your selected provider.**
API key:** Your own Google AI key (see key-handling note above).

Privacy Policy: https://policies.google.com/privacy
 Terms of Service: https://policies.
google.com/terms API documentation: https://ai.google.dev/docs

#### Google Fonts CDN

**Service:** Google LLC – https://fonts.googleapis.com, https://fonts.gstatic.com
**
Data sent:** Only the URL of a Google Font stylesheet already registered on your
site. **When data is sent:** Only on “Download Fonts” (Performance tab), which copies
those font files to your server so they are served locally instead of from Google’s
CDN – better GDPR compliance and Core Web Vitals. **API key:** None required.

Privacy Policy: https://policies.google.com/privacy
 Terms of Service: https://policies.
google.com/terms

#### CloudScale Managed API

**Service:** CloudScale Consulting (Pty) Ltd – https://cloudscale.consulting
 **
Endpoints:** https://api.cloudscale.consulting/v1/messages and https://api.cloudscale.
consulting/v1/tts for the AI features; and for the subscription itself https://api.
cloudscale.consulting/checkout, /status, /cancel, /refund-request, /recover and /
recover/verify **What it is:** Optional paid alternative to your own key; provides
Claude (text) and OpenAI text-to-speech (Audio Narration) on our account. Billed
via PayPal, below. **Data sent:** Post content (see note above) for text features;
for Audio Narration, the full cleaned article text with code blocks removed, plus
your narration prompt. Your managed licence key accompanies every call. **When data
is sent:** On any AI feature or Generate Audio with the Managed API enabled; on 
subscribe, status check or cancel; and once, non-blocking, if you delete the plugin
while a subscription is active, so it is cancelled for you. **API key:** Your managed
licence key (see key-handling note above).

Privacy Policy: https://cloudscale.consulting/privacy
 Terms of Service: https://
cloudscale.consulting/terms

#### OpenAI (optional, Audio Narration with your own key)

**Service:** OpenAI, L.L.C. – https://openai.com
 **Endpoint:** https://api.openai.
com/v1/audio/speech **What it is:** Text-to-speech for Audio Narration. Contacted
DIRECTLY only when you supply your own OpenAI key; if you use the Managed API instead,
the call is made by CloudScale on its account and your site never contacts OpenAI.**
Data sent:** The cleaned article text to be narrated, with code blocks removed, 
plus the chosen voice and your own OpenAI key. **When data is sent:** Only when 
you click Generate Audio with an OpenAI key configured and the Managed API off. **
API key:** Your own OpenAI key.

Privacy Policy: https://openai.com/policies/privacy-policy
 Terms of Service: https://
openai.com/policies/row-terms-of-use

#### Telegram Bot API

**Service:** Telegram Messenger Inc. – https://telegram.org
 **Endpoint:** https://
api.telegram.org/bot{token}/sendMessage **What it is:** Optional real-time error
alerts to a Telegram chat you own. **Data sent:** An error summary only – the PHP
error message, file name and line number, and the related WordPress post ID or URL.**
When data is sent:** Only when a plugin error is caught and you have set a bot token
and chat ID in Notifications settings. Nothing is sent if it is unconfigured. **
API key:** Your own bot token (see key-handling note above).

Privacy Policy: https://telegram.org/privacy
 Terms of Service: https://telegram.
org/tos API documentation: https://core.telegram.org/bots/api

#### PayPal (optional, Managed AI subscription checkout)

**Service:** PayPal Holdings, Inc. – https://developer.paypal.com
 **Endpoints:**
https://api-m.paypal.com/ to create a subscription and check its status (https://
api-m.sandbox.paypal.com/ in sandbox mode), plus https://www.paypal.com/sdk/js, 
PayPal’s browser SDK, loaded into this plugin’s admin screen from PayPal’s own origin.**
Data sent:** Subscriber email address and subscription amount. Card entry happens
on PayPal’s hosted checkout; no card data reaches this plugin. **When data is sent:**
Only when an administrator opens or checks a Managed AI subscription.

Privacy Policy: https://www.paypal.com/us/legalhub/paypal/privacy-full
 Terms of
Service: https://www.paypal.com/us/legalhub/paypal/useragreement-full

#### Broken Link Checker (server-side URL probing)

**What it is:** Your server sends an HTTP HEAD request to each unique outbound URL
in your own published posts and pages, to check its status.
 **Data sent:** The 
URL only, with standard HTTP headers (a User-Agent identifying your site). No post
content, no user data. **When data is sent:** Only while you run a scan from the
Broken Link Checker tab. No automatic or scheduled scanning. **Note:** `sslverify`
is disabled so sites with expired or self-signed certificates can still be checked;
loopback, link-local and private IP ranges are blocked. These are third-party sites
you linked to yourself, so no single terms of service applies.

## Installation

 1. Upload the plugin zip via Plugins > Add New > Upload Plugin, or extract to wp-content/
    plugins/cloudscale-seo-ai-optimizer/
 2. Activate the plugin through the Plugins menu
 3. Go to Settings > CloudScale SEO to configure your site name, OG image, and Person
    schema
 4. To use the AI Meta Writer, go to the Optimise SEO tab and enter your API key for
    either Anthropic Claude or Google Gemini
 5. Click Test Key to verify your key, then Load Posts to see your site description
    status
 6. Use Generate Missing to create descriptions for posts that have none, or Fix Descriptions
    to correct any that are outside your configured character range
 7. Visit the Performance tab to enable font optimization, JavaScript deferral, and
    HTML minification

**Important:** Deactivate any other SEO plugins (Yoast, RankMath, All in One SEO)
before using this plugin to avoid duplicate meta tags in your page output.

## FAQ

### What does this plugin deliberately not do?

No third-party SEO data, keyword research databases or rank tracking. No hidden 
upsells, no tracking and no lock-in: bring-your-own-key is free forever, and the
optional subscription cancels at any time with no data loss.

### Do I need an API key?

Only if you want to use the AI Meta Writer or ALT Text Generator features. The core
SEO functionality (canonical URLs, OpenGraph, Twitter Cards, structured data, custom
titles and descriptions) works without any API key.

### Which AI provider should I choose?

Both work well. Anthropic Claude tends to produce slightly more nuanced descriptions.
Google Gemini Flash is extremely fast and cost effective for large sites. You can
switch providers at any time without losing any generated content.

### How much does it cost?

**Bring Your Own API Key (BYOK) – free.** You supply your own Anthropic Claude or
Google Gemini API key and pay the AI provider directly. Generating descriptions 
for a typical 200-post blog costs approximately $1.20–$1.50 using Claude Sonnet,
or under $0.50 using Gemini Flash. Claude Haiku is under $0.10 per 100 posts. Google
Gemini has a free tier suitable for most personal blogs.

**Managed Subscription – $10 per month.** Your AI usage is included; no API key 
needed. Cancel anytime – your generated content stays in WordPress post meta after
cancellation.

### Should I leave “noindex RSS feeds” enabled?

Yes, for almost every site. WordPress publishes an RSS feed for every post, category,
and comment thread, and search engines crawl all of them even though they are just
XML copies of your content – they waste crawl budget and show up in Google Search
Console as “Crawled – currently not indexed”. This setting sends a noindex header
on feed URLs while leaving the feeds fully working for RSS readers, podcast apps,
and feed directories (none of those rely on Google indexing the feed URL). Only 
disable it if you have a specific reason to want your raw feed URLs appearing in
Google search results.

### Will this conflict with Yoast or RankMath?

Yes. Running two SEO plugins simultaneously produces duplicate meta tags. Deactivate
your existing SEO plugin before activating this one.

### Where are my meta descriptions stored?

In WordPress post meta, using the key _cs_seo_desc. Titles use _cs_seo_title. OG
images use _cs_seo_ogimg. These are standard post meta fields that persist if you
deactivate the plugin.

### Can I use a custom system prompt?

Yes. The AI Meta Writer section includes a fully editable system prompt. The character
range you configure in the min/max fields is injected automatically at call time.

### What happens if the generated description is the wrong length?

The plugin measures the returned description before saving it. If it is outside 
your configured range, it automatically sends a correction request to the AI with
the exact character count and direction. The corrected version is what gets saved.

### How does font display optimization work?

The plugin scans your theme and plugin CSS files for @font-face rules and injects
font-display: swap to prevent fonts from blocking page rendering. It also adds metric
overrides to reduce layout shift when fonts load. All changes create a backup that
you can undo with one click. Enable these features in the Performance tab.

### How does JavaScript deferral work?

Adding the defer attribute to script tags allows them to download in parallel with
HTML parsing and execute only after the document is ready. jQuery and other commonly
problematic scripts are excluded automatically. You can add additional exclusions
by script handle or URL substring.

### Can I schedule automatic description generation?

Yes. The Scheduled Batch tab lets you select which days of the week to run automatic
generation. The batch runs at midnight server time and only processes posts that
do not yet have a meta description. It never overwrites existing ones.

### What does Auto Pipeline do?

Auto Pipeline fires a background process the moment a post is published. It runs
every AI step in sequence: meta description, SEO score, focus keyword, ALT text 
for all post images, AI-suggested internal links, AI summary box, and Related Articles.
The process runs in a separate PHP request so it does not slow down the publish 
action. You can also trigger a re-run manually from the post metabox using the “
Re-run AI Automation” button.

### What is the Automatic model option?

Selecting Automatic tells the plugin to always use the current recommended model
for your chosen provider (currently claude-sonnet-5 for Anthropic and gemini-2.0-
flash for Google). When Anthropic or Google release a better default model the plugin
will automatically switch without any settings change on your part. Users who have
already pinned a specific model are not affected.

### How does Related Articles work?

The plugin scores all posts against each other using shared categories, tags, and
content signals, then stores a ranked candidate pool per post. The top two to five
links appear above the post content and three to ten appear below. You control the
counts from the Related Articles settings. The Generate Missing button processes
unscored posts; Sync Counts adjusts existing results to match updated count settings
without running the full pipeline again.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“CloudScale SEO AI Optimizer” is open source software. The following people have
contributed to this plugin.

Contributors

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

[Translate “CloudScale SEO AI Optimizer” into your language.](https://translate.wordpress.org/projects/wp-plugins/cloudscale-seo-ai-optimizer)

### Interested in development?

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

## Changelog

#### 4.21.557

 * Added: The “CloudScale SEO, visible to admins only” admin badge now links to 
   the plugin’s help doc, with a hover state.
 * Added: Hover tooltips on the audio player’s play/pause, mute, share and download
   buttons, tracking each button’s current state.
 * Fixed: readme.txt short description was 155 characters, over WordPress.org’s 
   150-character limit; trimmed to 124.

#### 4.21.554

 * Changed: Rewrote the Description and tagline to lead with the problem this plugin
   solves (SEO work nobody has time to do, automated on publish) rather than price,
   and to mention Audio Narration for the first time. Corrected the Audio Narration
   section heading, which implied Managed Subscription only.

#### 4.21.553

 * Fixed: Generate Missing’s AI retry chain (up to six calls per post: initial, 
   malformed-JSON retry, empty-description fallback, three length-correction passes)
   could exceed the host’s execution-time limit if enough retries ran slow, returning
   the server’s raw error page instead of JSON. The chain is now bounded to a 55-
   second wall-clock deadline, and a Telegram alert fires on failure.
 * Fixed: Batch Run History showed the raw stored timestamp instead of a formatted
   date.
 * Fixed: AI usage/cost tracking mislabelled several prompt types (site-audit prompts
   tagged as title-optimiser, related-articles prompts tagged as summary/auto-pipeline,
   and some retry prompts untagged), causing spend to roll up under the wrong feature.
 * Fixed: External Services disclosure named Paystack as a live payment processor
   for the Managed Subscription; every payment call site is hardcoded to PayPal,
   so the disclosure now names PayPal only.
 * Fixed: The “Automatic model” FAQ named claude-sonnet-4-6 as the current Anthropic
   default; corrected to claude-sonnet-5, matching recommended_model().

#### 4.21.548

 * Fixed: Checking “Enable automatic scheduled batch” left the day checkboxes greyed
   out until the page was reloaded – the live-toggle listener referenced the wrong
   element id.
 * Fixed: The Title Optimiser widget’s progress line never updated, unlike every
   other AI widget – the status element was missing from its markup.
 * Removed: Several dead/orphaned code paths (an unused AI Summary post-list toggle,
   an unused Category Health/Fixer “Hide Posts” toggle, and an unused legacy PayPal
   subscribe form superseded by the shared licence card) that referenced page elements
   that don’t exist and were never reachable from any button.

#### 4.21.547

 * Fixed: Background title-analysis batches could get permanently stuck (“0 of N
   processed”) with no error shown, if a single AI call ran long. The batch used
   to process every queued post in one long-lived request; a slow call could be 
   cut off by the server’s own connection timeout before the plugin’s own error 
   handling ever ran, silently dropping that post and leaving the whole batch wedged
   with nothing left to resume it. It now processes one post per background tick
   and reschedules itself after each one, so a single slow call can no longer strand
   the rest of the batch.
 * Fixed: The “Enable it” link in the Auto Pipeline banner did nothing when clicked–
   it pointed at an anchor with no matching target on the page.
 * Added: The dashboard widget now shows Auto Pipeline status (active/disabled) 
   alongside Batch status.
 * Fixed: Clicking the Critical/Warning count in the dashboard’s Site Audit summary
   now jumps straight to that finding and highlights it, instead of leaving you 
   to find it in the full results table.

#### 4.21.542

 * Fixed: Capitalised abbreviations are read as letters instead of as words. AWS
   is narrated as A.W.S and API as A.P.I, on every voice: the text handed to the
   narrator is rewritten, so this does not depend on the narration prompt, which
   the fast managed voice model does not read.
 * Note: Left as written, because spelling them out would be the worse reading: 
   abbreviations pronounced as words (NASA, JSON, REST), a word capitalised for 
   emphasis (“Do NOT enable this”), Roman numerals (Part III), anything carrying
   a digit (EC2, S3) and an ALL CAPS HEADING.
 * Note: Editing the narration prompt still moves your narrations onto a dearer,
   instruction-following voice model. A prompt this plugin shipped as its default
   no longer counts as an edit, so sites holding an older default keep the cheap
   model.

#### 4.21.540

 * New: Regenerate links button under a related links block, for a post whose links
   are there but out of date. The buttons added in 4.21.539 only appear where a 
   block has nothing in it at all.
 * New: Change any related link for an article you pick. Each link is listed under
   its block with a Change button that searches your published articles by title.
   Your choice is badged as yours and holds its place through later regenerations,
   until you set that slot back to Automatic.
 * Note: The panel and its buttons are visible to admins only. An article the other
   block on the same post already links is refused with a reason, because the two
   blocks never show the same article and accepting it would have dropped it from
   one of them silently.

#### 4.21.539

 * New: Generate buttons on the post itself, for the summary, the AEO answer and
   the related links. Each appears where its block would be, visible to admins only,
   so a post the automation never covered can be filled in from the page you are
   reading. Until now a block with no content rendered nothing at all, which meant
   that with the Auto Pipeline switched off there was nothing to click anywhere 
   on the post.
 * New: Regenerate Links button in the CloudScale SEO Auto Run panel on the post
   editor, alongside the summary and AEO buttons already there.
 * Note: The related links block above an article needs 2 eligible posts and the
   one below it needs 3. Where a post has fewer, the button now tells you that instead
   of appearing to do nothing.

#### 4.21.522

 * Fix: The Organization schema no longer claims your personal social profiles as
   its own, and no longer uses your headshot as a company logo. It was reusing the
   Person schema’s sameAs list, which tells search engines that your personal LinkedIn
   profile identifies a company. That competes with your own Person schema for the
   same URL, so neither identity resolves cleanly.
 * New: Organization Schema card, with its own name, URL, logo and sameAs fields.
   Name and URL still fall back to your employer details if you leave them blank,
   so existing sites are unaffected.
 * New: Profile page setting in the Person Schema card. Pick the page about you,
   usually About, and it is marked as a ProfilePage with you as its subject. This
   is the strongest signal available for tying a site to a named person, and an 
   About page has none of it by default.
 * New: A second employer can be named. If you have a day job and also run your 
   own practice, naming both is what lets an AI model join the identity it already
   knows from press coverage to the one it learns from your site. Naming only one
   is the usual reason an AI answer will claim that a known executive has no blog.
 * Fix: A post’s publisher logo was also your headshot rather than a company logo,
   and it is taken from the new Organization logo field now.
 * Fix: The Site Audit no longer warns that a post’s publisher is missing when it
   is correctly present. It checked for a property that a reference does not carry,
   and now resolves the reference against the Organization on the page.
 * Change: The schema nodes now reference each other. WebSite says who authors and
   publishes it, a post’s publisher points at your Organization instead of a separate
   copy built from your site name, and the page about you links back to your Person
   entry. Previously each node stood alone and nothing stated that the site was 
   written by the person described in it.

#### 4.21.518

 * Change: Follow along is no longer a switch. Each sentence is highlighted as the
   narration reads it, from the moment you press play, and there is nothing to turn
   on. The button that used to sit under the player is gone, along with the line
   reporting how many sentences it matched, which was a number only the author of
   the article could act on.
 * Change: The author’s own line under the player now says only whether the timings
   were measured, and offers a button only when a measurement did not run or did
   not work. A narration that has been timed shows a fact and asks nothing.

#### 4.21.517

 * New: Narration now rests for about a second after a title and between paragraphs.
   It used to read a heading straight into the sentence that followed, with no gap.
 * Note: The rest is real silence inserted into the audio, because it cannot be 
   asked for. The speech service accepts no pause markup and caps its own pause 
   well under a second whatever it is told: measured on a heading followed by a 
   sentence, the plugin’s current text produces 660ms, the best of five wordings
   produces 810ms, and adding “leave a full second of silence” to the narration 
   prompt produces 690ms.
 * Note: Narrations made before this release keep the pacing they were made with.
   Regenerate an article to hear the rests.

#### 4.21.515

 * Change: Follow along is now timed from the audio itself rather than estimated
   from the text. After a narration is made, your browser reads the finished audio
   once, finds where the voice actually starts each sentence, and stores those times
   with the article. Readers get the measured times and pay nothing for them.
 * Change: The highlight no longer moves early, because it no longer has to. The
   small lead existed to cover a boundary that was estimated and could be late as
   easily as early; a measured boundary needs no allowance.
 * Change: Existing narrations are timed too. Open a narrated post as an editor 
   and the measurement runs once, with no re narration and no credits spent. There
   is a button on the player to run it again.
 * Fix: The narration menu now opens on the voice you last used, not on the site
   default. Speed and accent were already remembered across articles and the voice
   was not, so every new article reverted to the default however many times in a
   row you had chosen something else.
 * Fix: A speed or accent choice that fails to save now says so and puts the control
   back to what is stored. It used to keep the new value on screen and quietly keep
   the old one on the server, which is what made narration look as though it forgot
   your choices.

#### 4.21.499

 * New: Follow along. Each sentence of the article is highlighted as the narration
   reads it, and clicking a sentence jumps the audio to that point. Off until you
   switch it on, and then remembered.
 * Note: The highlight is anchored to points measured in the audio itself, with 
   the sentences in between apportioned by length, because no speech service reports
   word timings. It can therefore run slightly early or late in a long passage and
   corrects itself at the next anchor.
 * Note: The article text is never rewritten. Matching happens in your browser, 
   a sentence that cannot be matched is left unhighlighted rather than guessed at,
   and the player says how many it matched. Code blocks and tables, which are not
   narrated, are never highlighted.
 * Note: Narrations made before this release carry no timings, so the button appears
   once an article has been narrated again.

#### 4.21.492

 * Change: Narration is several times faster and is split into far fewer pieces.
   The same 21,000 character article went from 107 pieces to 6, completing in about
   11 seconds. Pieces are now produced four at a time instead of one after another,
   each piece can be four times larger, and narration reaches the voice service 
   directly rather than through a routing layer that was failing to place roughly
   one request in five.
 * Change: The progress dialog now shows an estimated time remaining, measured from
   the job’s own pace rather than assumed.
 * Change: The progress dialog now tells you how many parts came from your managed
   plan and how many from your own OpenAI key, and keeps saying so. It used to report
   only the most recent part, so it alternated between the two every few seconds,
   which read as your plan failing when it was working normally.
 * Change: When a part cannot be produced on your managed plan, the dialog now says
   why: the voice service did not respond, your monthly allowance is used up, your
   licence was not accepted, or the service was rate limiting.
 * Fix: The dialog showed a generic model name instead of the voice tier, and the
   same underlying mistake had disabled the setting that keeps one article on a 
   single voice, so a mid article switch could change the narrator without saying
   so.
 * Fix: The dialog named the voice service’s internal id rather than the voice you
   chose, so picking Marin could report a name you had never been offered.
 * Fix: A part delivered twice could be counted twice in the progress figures.
 * Fix: Uninstalling now removes the narration working data left behind by a narration
   interrupted part way.
 * Change: Requests to the managed service now identify the plugin, version and 
   feature making them, so usage can be attributed to the feature that caused it.
   If you use the managed subscription, this release is required.

#### 4.21.482

 * Fix: Narration was being split into far more pieces than it needed to be, so 
   a long article showed a count like “Chunk 1 of 107” and took correspondingly 
   longer. The size of each piece was being set by the standby voice model, which
   is only used when the usual one is not responding, rather than by the model actually
   doing the work. The same article is now around 31 pieces, measured on a real 
   21,000 character article.
 * Fix: Narrations were nearly always being produced by the standby voice model,
   with the progress screen reporting that the usual one was not responding. The
   managed service was allowing it 12 seconds to answer when it genuinely takes 
   between 9 and 39, so it was being given up on rather than being unavailable. 
   It is now given long enough, which also means narration sounds like the voice
   model it is meant to and costs a fraction of what the standby one does.
 * Fix: A single upstream hiccup on the first piece of a narration could silently
   send the whole article to your own OpenAI API key, at premium rates, while your
   managed allowance sat unused. Each piece is now judged on whether it can be paid
   for, rather than on whether the first piece succeeded, so a passing failure costs
   one piece instead of the article. The narration record also says why it switched,
   where before it ended up blank.
 * Fix: The progress screen said “CloudScale managed model” instead of naming the
   voice tier, and the same underlying mistake meant the setting that keeps one 
   article on a single voice was being ignored, so a mid-article switch could change
   the narrator without saying so.
 * Fix: A narration that was cancelled, that failed, or that switched to your own
   OpenAI API key partway through still cost the full article against your monthly
   narration allowance. Each piece is now charged as it is produced, so an unfinished
   narration only costs what it produced. A completed article costs the same as 
   it always did, and the whole article still has to fit your remaining allowance
   before it starts, so a narration cannot run out of allowance halfway.
 * Fix: A piece of audio that was delivered twice, which can happen when a slow 
   response is retried, could be charged twice.
 * Change: While a narration is being created, the progress screen now shows how
   much of your monthly allowance this month has used, including the article being
   narrated, instead of how much was left. The figures shown could not previously
   be reconciled with each other, because rolled over boost characters were counted
   in one of them and not the other. Boost characters are now reported separately.
 * Change: The progress screen names the voice you chose. It was showing the internal
   name the voice is mapped to on the server, so choosing Marin could report a voice
   name you had never seen offered.

#### 4.21.473

 * Change: The monthly narration allowance on the managed plan rises from 400,000
   to 500,000 characters, roughly nine hours of audio, and the monthly image allowance
   from 15 to 30. Existing subscriptions are raised automatically with nothing to
   do at your end, and a licence deliberately set higher is not reduced. As before
   this is funded by the low cost voice model: 500,000 characters costs about $0.31
   a month to produce, against a plan that bills $10.
 * Fix: The help page said no single article could exceed 400,000 characters. The
   real per-article ceiling is 200,000 and always has been, so the figure quoted
   was one nobody could reach. Corrected, and the published allowance figures are
   now checked against the server’s own values on every build.

#### 4.21.465

 * Change: While a narration is being created, the progress screen now says when
   the audio came from an alternative voice model rather than the usual one, and
   why — your chosen accent needs it, your customised narration prompt needs it,
   or the usual model was not responding. Before this, every model was named the
   same way, so the normal default looked like a fault and a genuine substitution
   looked normal. The voice preview on the Settings page labels itself the same 
   way.

#### 4.21.461

 * Change: The three AI Summary fields are now written to stand on their own. AI
   answer engines quote them with no article and no title around them, so each field
   names its subject instead of relying on words like “it” or “this feature”. Summaries
   already saved on your posts are unchanged until you regenerate them.
 * Change: The author of each article now carries their credentials in structured
   data. Job title, employer and profile links used to sit in a separate block that
   said nothing about who wrote the piece. The article’s author now points at that
   block, so a search or answer engine can see the post was written by a named person
   with a relevant role.
 * Change: Each summary field can name the section of the article that supports 
   it, published as structured data. The AI is given the article’s real headings
   and any answer that does not match one is discarded, so an invented section is
   never published.
 * Fix: A post that had been through both the Auto Pipeline and the Site Audit FAQ
   quick fix published its FAQ block twice. It now publishes once.
 * Fix: A post with a HowTo or custom schema block could never be given FAQ schema,
   because the two were stored in the same place. FAQ schema now has its own storage,
   so a post can carry both.

#### 4.21.459

 * Change: The monthly narration allowance on the managed plan rises again, from
   300,000 to 400,000 characters, roughly 7 hours of audio. Existing subscriptions
   are raised automatically with nothing to do at your end. As before this is funded
   by the low cost voice model: 400,000 characters costs about $0.25 a month to 
   produce, against a plan that bills $10.

#### 4.21.454

 * Change: The narrator accent picker is now Default (US) and British, the two accents
   the narration voices genuinely have. Irish has been removed alongside Australian
   and South African: those accents only ever worked by asking a much more expensive
   model to imitate them, and the imitation was the reason narrations sometimes 
   drifted mid-article. A post with a removed accent saved falls back to whichever
   accent your site is currently set to, or Default (US) if none is set. Every narration
   now comes from the same voice model, so audio is consistent from post to post.
 * Change: The narration prompt now explains that leaving it at the default keeps
   you on the fast, low cost voice model, and that writing your own moves narrations
   to a costlier model that reads instructions, using up the monthly allowance faster.
   The progress screen names the model used either way.

#### 4.21.453

 * Change: The narrator accent picker now offers Default (US), British and Irish.
   The Australian and South African options have been removed. A post that had one
   of them saved falls back to Default (US) automatically; nothing else about narration
   changes.

#### 4.21.451

 * Change: The monthly narration allowance on the managed plan rises from 200,000
   to 300,000 characters, roughly 5.5 hours of audio. Existing subscriptions are
   raised automatically, with no action needed.
 * New: Narration is now produced by a lower cost speech model when that model can
   deliver exactly what you asked for, which is what pays for the larger allowance.
   Your accent choice, chosen voice and speaking speed are all preserved. Requests
   the cheaper model cannot serve faithfully, meaning the Irish, Australian and 
   South African accents or a narration prompt you have customised, continue to 
   use the original model instead of quietly losing the setting.
 * New: The narration progress screen, the “narration ready” confirmation and the
   settings page voice preview now all name the exact speech model and voice used,
   so you can always tell what you are listening to.
 * fix(models): installs that had saved the corrupted “Claude Sonnet 4 (stable pinned)”
   id are now repaired automatically. Fixing the dropdown in 4.21.446 stopped anyone
   new picking it, but anyone who already had it kept getting API errors on every
   call, because model ids are passed to the provider without an allowlist so a 
   custom model can be typed in. The existing model-migration map now rewrites the
   broken id to claude-sonnet-4-20250514 on the next options read.
 * feat(build): the build now rejects malformed AI model ids. Anthropic ids never
   contain a dot, so a version string spliced in by a bump script is detectable —
   which is exactly how the id above was corrupted. Migration-map keys are exempt,
   since repairing an install requires naming the broken id.
 * fix(models): the “Claude Sonnet 4 (stable pinned)” option sent a malformed model
   id. A version-bump script had rewritten claude-sonnet-4-20250514 into claude-
   sonnet-4.20.140514, and because model ids are passed through without an allowlist,
   choosing that option produced an API error rather than a pinned model. Restored
   from git history; the current build script uses anchored replacements and cannot
   corrupt it again.
 * fix: the readme Description was over WordPress.org’s limit (3022 words against
   2500) and the live plugin page was truncating the external-services disclosure
   mid-sentence. WordPress.org counts words, not characters, and folds unrecognised
   sections such as External Services into the Description before trimming. Prose
   condensed to 2193 words with every service, endpoint and legal URL retained. 
   The build now blocks on this check.
 * Fix: The narrator accent picker (British, Irish, Australian, South African) now
   genuinely changes the accent of generated audio. Previously the accent request
   was sent in a way the speech model usually ignored, so narrations stayed American.
 * Fix: Voice previews on the settings page now play in your selected accent instead
   of always sounding American.
 * Change: Audio narration is now billed by the actual characters read aloud against
   a monthly pool of 200,000 characters, with no per-post limit. Narrate many short
   posts or a few long ones until the characters add up – short posts no longer 
   each cost a whole “credit”. The $5 Narration Boost now adds 400,000 characters.
   Usage meters show characters instead of credits.
 * Fix: The “Optimise Click Through Rate” tool no longer strips the article’s primary
   keyword from the title (e.g. it now keeps “Embeddings in AI” instead of replacing
   it with a metaphor). The writer must preserve the core search term and the scorer
   now penalises titles that drop it.
 * Fix: CTR scores are shown honestly as a potential score out of 100 (an AI estimate
   for comparing versions), not as a fake click-through percentage.

#### 4.21.393

 * New: Animated progress screen while a narration generates (audio equalizer, live“
   audio X of N” progress bar) with a note that you can leave the page – it keeps
   running on the server.
 * New: Managed subscribers see how many narrations they have left this month during
   generation (e.g. “29 of 30 left”); bring-your-own-key users see “Using your own
   OpenAI key”. The count comes back on the generation response, with no extra API
   call.
 * New: If audio can’t be generated you get a clear on-screen message explaining
   what to do (enable the managed subscription or add an OpenAI key in Settings),
   instead of a silent failure.

#### 4.21.391

 * Change: Audio narration now runs entirely on the server as a background job. 
   Click Generate Audio once and you can close or background the browser (or lock
   your phone) – it keeps generating and finishes on its own. Returning to the post
   shows the finished player. This fixes failures on long articles and when the 
   browser was backgrounded on mobile.

#### 4.21.388

 * New: The Generate Audio voice menu now groups voices into Female and Male (plus
   Neutral), so you can quickly pick a male or female narrator. Every voice remains
   selectable.
 * New: A success popup confirms when a narration is ready and stays on screen for
   10 seconds (with a “View it now” button) before refreshing the post.

#### 4.21.387

 * Change: Audio narration is now managed-first with a fallback to your own key.
   If your managed subscription is enabled, narrations use the managed service (
   with the included 30/month allowance); if a managed call fails and you also have
   your own OpenAI key, it falls back to that so narration never gets blocked. Sites
   without the managed subscription keep using their own OpenAI key.

#### 4.21.386

 * Change: Audio narration now uses your existing OpenAI key directly (the same 
   key the plugin suite already uses for image generation) with no proxy and no 
   monthly quota. The managed service is only a fallback when no OpenAI key is present.
   You no longer need to configure a separate key on the managed server.

#### 4.21.385

 * New: Per-post narrator voice – clicking Generate Audio opens a menu of all 11
   voices (the post’s current/default highlighted); the chosen voice narrates that
   post and is remembered on it, so different posts can use different voices. The
   Settings voice is the site-wide default.
 * Fix: The “Optimise Click Through Rate” button now always shows a clear error 
   message on failure instead of ever failing silently.
 * Fix: The Generate Audio and Optimise Click Through Rate button scripts are now
   delivered inline, fixing intermittent cases where the buttons appeared but did
   nothing.

Older releases are listed in CHANGELOG.md, which ships with the plugin and covers
every
 version back to 4.0.0. They were removed from here because WordPress.org 
truncates this section at 5000 words without saying so, and a build that adds an
entry every time would have crossed that line within a release or two.

## Meta

 *  Version **4.21.557**
 *  Last updated **4 dnevi ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 8.0 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/cloudscale-seo-ai-optimizer/)
 * Tags
 * [ai seo](https://sl.wordpress.org/plugins/tags/ai-seo/)[claude ai](https://sl.wordpress.org/plugins/tags/claude-ai/)
   [schema generator](https://sl.wordpress.org/plugins/tags/schema-generator/)[seo audit](https://sl.wordpress.org/plugins/tags/seo-audit/)
   [seo plugin](https://sl.wordpress.org/plugins/tags/seo-plugin/)
 *  [Advanced View](https://sl.wordpress.org/plugins/cloudscale-seo-ai-optimizer/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

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

## Support

Got something to say? Need help?

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