Title: AlmaSEO SEO Playground
Author: Webstuffguy Labs
Published: <strong>October 24, 2026</strong>
Last modified: October 28, 2026

---

Search plugins

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

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

# AlmaSEO SEO Playground

 By [Webstuffguy Labs](https://profiles.wordpress.org/webstuffguy/)

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

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

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

## Description

**Every SEO plugin keeps a different set of features free. AlmaSEO gives you the
best of all three in one.**

Yoast SEO, Rank Math and All in One SEO each give some features away and charge 
for others, so with any one of them you’re doing without something. AlmaSEO brings
the best free features of all three together in a single plugin, so you don’t have
to choose. Everything below is free, works out of the box, and needs no account.

Already using one of them? The built-in importer brings your titles, descriptions,
settings and redirects across in a few clicks.

**On-page SEO**

 * SEO Health Score for every post and page
 * Meta title, description and focus keyword editor with a live SERP preview
 * Open Graph and Twitter Card meta, canonical URLs and robots controls
 * Keyword suggestions from Google’s public suggest service

**Content analysis**

 * Headline Analyzer and readability analysis
 * Cornerstone content and an evergreen content tracker
 * LLM readiness checks for AI answers

**Structured data**

 * JSON-LD schema: Article, FAQ, How-To, LocalBusiness (154 sub-types), Product,
   Event, Recipe, Person, Organization and more
 * FAQ, How-To, Table of Contents and Breadcrumbs blocks
 * Link attributes (nofollow / sponsored / ugc)

**Technical SEO**

 * XML, News, Video, Image and HTML sitemaps, with IndexNow
 * robots.txt editor and crawl optimization
 * Redirect manager and 404 tracking
 * Image SEO alt and title templates

**Site-wide settings**

 * Search Appearance templates with smart tags
 * Webmaster verification codes, RSS controls and LLMs.txt
 * Role-based access, GA4 integration and a setup wizard

**Bulk editing and content maintenance**

 * Bulk Metadata Editor with find-and-replace and one-click undo
 * Downloadable backups you can restore later
 * Internal Links auto-linker with guardrails
 * Orphan pages, Content Refresh Drafts, Refresh Queue and Date Hygiene Scanner

**Quality and monitoring**

 * E-E-A-T checks, Schema Drift Monitor and Canonical Health

**WooCommerce**

 * Product schema, product sitemaps and per-product indexing control

**Migrate from another SEO plugin**

 * Import from Yoast, Rank Math and AIOSEO: post meta, terms, settings and redirects,
   with a verification report
 * Conflict detection for major SEO plugins

AlmaSEO is not affiliated with Yoast, Rank Math or All in One SEO.

### External services

Most of AlmaSEO runs on your own server and sends nothing anywhere. The features
below are the ones that contact another service. For each one: what the service 
is for, what starts the request, what is sent, and where that provider’s terms and
privacy policy are.

Every request listed here is made by your server, with two exceptions that happen
in a browser instead and are marked as such: the Google Analytics tag runs in your
visitors’ browsers, and Gravatar images load in the browser of whoever is editing
a post.

#### AlmaSEO (app.almaseo.com)

**What it is:** AlmaSEO’s own optional service. Connecting an AlmaSEO account adds
work that does not run inside WordPress: readings of a page’s headline, readability,
dated content, author signals, structured data and orphan status; keyword ideas 
and page figures drawn from your Google Search Console and Google Analytics; cornerstone
ranking; alt text written from the image itself; bulk title and description generation;
and LLM optimisation summaries. Nothing else in the plugin needs an account.

**Before you connect:** the plugin does not contact AlmaSEO on installation or on
any schedule. One lookup can happen without an account, on activation: a site that
still holds the remains of an earlier connection (a stored credential, a recorded
dashboard ID, or a credential your host placed in wp-config.php) asks whether it
is already on an AlmaSEO dashboard, sending your site’s address, domain and plugin
version, so it can be re-linked; a site that never connected holds none of these
and makes no request.

**Connecting:** happens only when an administrator presses Create Connection Token
on the Connection screen. Opening the screen does nothing on its own. Before creating
anything, the plugin checks that the site can work over a token alone and refuses
if it cannot (for example, when another SEO plugin is active whose metadata the 
plugin cannot write). The plugin then creates a connection token for that administrator:
a signed token, valid for 365 days, naming the administrator’s WordPress username.
The plugin does not create a WordPress Application Password. The administrator copies
the token into the AlmaSEO dashboard; the token and the username are the credential
every later request carries, in both directions. The token is accepted only on the
plugin’s own REST routes (almaseo/v1), never as a login to WordPress’s core REST
API (wp/v2), so the dashboard can use only the operations those routes provide, 
such as reading and writing SEO metadata and publishing and managing content (creating
and updating posts, uploading media and adding categories) through the plugin’s 
named operations. To link the site, the plugin asks AlmaSEO whether the site is 
on your dashboard (sending the site’s address), then sends the site’s address, the
plugin version and the credential so the dashboard can confirm it holds this token.
This happens when the token is created, when an administrator presses Check Dashboard
Link, and, while a new token has not yet been linked, with the twice-daily check
for up to 30 days.

**While connected, automatically:** twice a day the plugin checks that the site 
is still linked to your dashboard. That check sends the site’s address and the plugin
version, nothing else, and stops when you disconnect. Your business profile (name,
address, hours and phone number, used for LocalBusiness structured data and bulk
metadata) is downloaded from AlmaSEO and cached at three moments: when the site 
is linked, once a day while the site stays connected, and when a feature needs it
and the cached copy is over a day old. Each request sends the site’s address and
the credential; the profile comes down to your site, nothing goes up.

**In the post editor, without a click:** once connected, four panels request data
on their own, for any user who can edit that post. Each request carries the site’s
address and the credential, plus:

 * Keyword suggestions: when the panel loads, after a pause in typing the focus 
   keyword, on its refresh button, and when a suggestion is clicked. Sends the keyword
   being typed (or the saved keyword, or failing that the post’s title) and the 
   post’s title. Google Suggest is asked on the same triggers whether or not the
   site is connected; see its entry below.
 * Search Console panel: when its tab is opened, or on editor load if it was the
   tab left open last time. Sends the page’s URL and the number of days requested;
   answers are kept for five minutes. The figures are your Search Console data relayed
   by AlmaSEO; the plugin does not contact Google.
 * Analytics panel: the same triggers and values, kept for five minutes, relaying
   your Google Analytics data.
 * LLM optimisation: the same two triggers. Sends the title, up to 8,000 characters
   of content, meta description, schema type, focus keyword and URL.

**Only when you run a feature:** each of these is a button in the admin, available
to a user who can edit the page in question. Every request carries the site’s address
and the credential, plus:

 * Headline suggestions: the headline, page title, the first 4,000 characters of
   the content, meta description, focus keyword and URL.
 * Readability, Date Hygiene, E-E-A-T, Orphan Pages and Schema Drift readings: the
   page title, URL and up to 9,000 characters of its content (6,000 for Orphan Pages),
   with that check’s own findings. E-E-A-T also sends the author’s display name 
   and bio. Orphan Pages also sends the titles and URLs of other pages that could
   link to it. Schema Drift sends the structured data recorded for the page.
 * 404 ranking: the missing paths from your 404 log.
 * Cornerstone suggestions: for every published page, its URL, title, word count
   and number of internal links pointing to it.
 * Alt text for an image: the image itself at medium size, its file name and type,
   its caption and title, the title of the post it belongs to, and the site name.
 * Bulk metadata generation: for each selected post, its title, the first 2,000 
   characters, excerpt, focus keyword, current title and description, headings, 
   and category and tag names.
 * Connection test: the site’s address and plugin version.

**Disconnecting** sends nothing to AlmaSEO. It deletes the connection details stored
on your site and the signing secret behind the connection token, so every token 
the site issued stops working at once, and cancels the twice-daily link check; your
dashboard is not told. Reconnecting creates a new secret and a new token. Disconnecting
also removes any AlmaSEO Application Password left behind by a version before 1.23.0.
Your dashboard can also unlink the site from its side, which clears only the recorded
dashboard link and leaves the token in place.

Terms: https://almaseo.com/terms/ — Privacy: https://almaseo.com/privacy/

#### Google Suggest (suggestqueries.google.com)

**What it is:** Google’s public autocomplete service. It fills the keyword suggestion
panel in the post editor. No account is needed, and it works whether or not AlmaSEO
is connected.

**Trigger:** automatic. The request is made when the SEO panel in the post editor
loads for any user who can edit that post, and again, after a short pause, as the
focus keyword is typed, when the panel’s refresh button is pressed, or when a suggestion
is clicked. Your server caches each answer for an hour, so the same phrase is not
asked twice in that time.

**Data sent:** the focus keyword being typed; if the field is empty, the saved focus
keyword; if there is none, the post’s title. The request goes from your server to
Google, so Google sees your server’s address rather than the editor’s browser.

Terms: https://policies.google.com/terms — Privacy: https://policies.google.com/
privacy

#### Google Analytics (www.googletagmanager.com)

**What it is:** the optional GA4 integration.

**Trigger:** only after an administrator saves a GA4 Measurement ID under AlmaSEO
Analytics. There is no ID by default, and with no ID nothing is loaded. Once an 
ID is saved, every public page load makes the visitor’s browser fetch Google’s `
gtag.js` and report the visit to Google directly. Logged-in administrators are left
out by default (a setting). Two further settings, both off by default, add outbound-
link click events and pass Google’s “anonymize IP” flag; what Google does with that
flag is Google’s decision.

**Data sent:** browser-side, to Google, whatever Google Analytics normally collects:
page addresses, referrers, browser and device details, IP-derived location and its
own cookies. AlmaSEO receives none of it. If you enable this, your site’s privacy
policy should say so.

Analytics terms: https://marketingplatform.google.com/about/analytics/terms/us/ —
Terms: https://policies.google.com/terms — Privacy: https://policies.google.com/
privacy

#### IndexNow (api.indexnow.org or yandex.com/indexnow)

**What it is:** tells search engines that a URL has changed. api.indexnow.org is
run by Microsoft Bing and shares submissions with the other participating engines;
you can point the plugin at Yandex’s endpoint instead.

**Trigger:** off by default. Nothing is sent until an administrator switches IndexNow
on under AlmaSEO  Sitemaps and generates a key. With it on, two things submit: the
Submit button on the Sitemaps screen, which sends your sitemap’s address or the 
URLs the plugin has queued from recent edits; and, if the Delta sitemap is also 
on, a scheduled task that runs after posts or terms change and sends the changed
URLs (up to 100) together with your sitemap addresses in one submission, no more
often than every fifteen minutes.

**Data sent:** your site’s host name, your IndexNow key, the address of the key 
file on your site, and the list of URLs.

IndexNow: https://www.indexnow.org/ — Microsoft terms: https://www.microsoft.com/
en-us/servicesagreement — Microsoft privacy: https://privacy.microsoft.com/privacystatement—
Yandex terms: https://yandex.com/legal/rules/ — Yandex privacy: https://yandex.com/
legal/confidential/

#### Google and Bing sitemap ping (www.google.com, www.bing.com)

**What it is:** asks the two engines to re-read your sitemap.

**Trigger:** the WP-CLI command `wp almaseo sitemaps submit` only. Nothing in the
admin screens and no scheduled task pings either engine. Google retired this endpoint
in 2023, so the request to Google now only comes back with an error; it is listed
because the command still makes it, and it will be removed in a coming release.

**Data sent:** the address of your sitemap.

Google terms: https://policies.google.com/terms — Google privacy: https://policies.
google.com/privacy — Microsoft terms: https://www.microsoft.com/en-us/servicesagreement—
Microsoft privacy: https://privacy.microsoft.com/privacystatement

#### Vimeo (vimeo.com)

**What it is:** fills in titles, descriptions, durations and thumbnails for the 
video sitemap.

**Trigger:** whenever the video sitemap is built, for posts that embed a Vimeo video:
with the default static storage, the daily scheduled rebuild, a rebuild started 
from the Sitemaps screen, or a request for a sitemap whose file is missing; with
dynamic storage, every request for the video sitemap. Video sitemaps and this lookup
are both on by default, so it can happen without you switching anything on, but 
only if your posts contain Vimeo embeds, and no account is involved. Turn off video
sitemaps, or the oEmbed option, under AlmaSEO  Sitemaps  Media to stop it.

**Data sent:** the address of the Vimeo video found in your content, sent by your
server with WordPress’s standard User-Agent, which names the WordPress version and
your site’s address. Nothing about your visitors.

Terms: https://vimeo.com/terms — Privacy: https://vimeo.com/privacy

#### YouTube (www.youtube.com, img.youtube.com)

**What it is:** the same job as the Vimeo entry, for YouTube embeds.

**Trigger:** the same moments as the Vimeo lookup, for posts that embed a YouTube
video. Two requests: WordPress’s standard oEmbed lookup of the video at youtube.
com, and a check that the video’s thumbnail exists at img.youtube.com, remembered
for a day (a week once found). The same Sitemaps  Media settings turn this off.

**Data sent:** the address of the YouTube video found in your content, and its ID
for the thumbnail check, both sent by your server with WordPress’s standard User-
Agent (WordPress version and your site’s address). Nothing about your visitors.

Terms: https://www.youtube.com/t/terms — Privacy: https://policies.google.com/privacy

#### Gravatar (gravatar.com)

**What it is:** WordPress’s avatar service, run by Automattic. The Notes & History
panel in the post editor shows the avatar of each person who left a note, through
WordPress’s standard avatar function.

**Trigger:** browser-side, when someone opens that panel. It follows WordPress’s
own Settings  Discussion  Show Avatars setting; switch that off and no avatar is
requested. Separately, when a post’s author has no other photo, the author’s Gravatar
address is published as the author image in structured data and in the user sitemap;
your server fetches nothing for that.

**Data sent:** a hash of the note author’s email address, which is what a Gravatar
address is made of. The email address itself is not sent.

Terms: https://wordpress.com/tos/ — Privacy: https://automattic.com/privacy/

## Screenshots

[⌊Google Analytics for the page you are editing — views, sessions, engagement and
traffic sources, scoped to that page rather than the whole site. (Requires an AlmaSEO
account.)⌉⌊Google Analytics for the page you are editing — views, sessions, engagement
and traffic sources, scoped to that page rather than the whole site. (Requires an
AlmaSEO account.)⌉[

Google Analytics for the page you are editing — views, sessions, engagement and 
traffic sources, scoped to that page rather than the whole site. (Requires an AlmaSEO
account.)

[⌊Date Hygiene Scanner finds stale years, outdated prices and time-decay problems
hiding in published content, showing the surrounding context and a suggested fix
for each finding.⌉⌊Date Hygiene Scanner finds stale years, outdated prices and time-
decay problems hiding in published content, showing the surrounding context and 
a suggested fix for each finding.⌉[

Date Hygiene Scanner finds stale years, outdated prices and time-decay problems 
hiding in published content, showing the surrounding context and a suggested fix
for each finding.

[⌊Schema Drift Monitor takes a snapshot of your structured data, then tells you 
when a plugin update, theme change or settings tweak has silently broken it.⌉⌊Schema
Drift Monitor takes a snapshot of your structured data, then tells you when a plugin
update, theme change or settings tweak has silently broken it.⌉[

Schema Drift Monitor takes a snapshot of your structured data, then tells you when
a plugin update, theme change or settings tweak has silently broken it.

[⌊Schema markup in the editor: pick the type that matches the page, add a second
type when a page genuinely represents more than one entity, and the right fields
appear automatically.⌉⌊Schema markup in the editor: pick the type that matches the
page, add a second type when a page genuinely represents more than one entity, and
the right fields appear automatically.⌉[

Schema markup in the editor: pick the type that matches the page, add a second type
when a page genuinely represents more than one entity, and the right fields appear
automatically.

[⌊Google Search Console for the page you are editing — clicks, impressions, CTR,
average position, and the queries that surfaced it. (Requires an AlmaSEO account.)⌉⌊
Google Search Console for the page you are editing — clicks, impressions, CTR, average
position, and the queries that surfaced it. (Requires an AlmaSEO account.)⌉[

Google Search Console for the page you are editing — clicks, impressions, CTR, average
position, and the queries that surfaced it. (Requires an AlmaSEO account.)

[⌊LLM Optimization scores how well systems like ChatGPT, Gemini and Google AI Overviews
can read the page, and lists exactly what to improve.⌉⌊LLM Optimization scores how
well systems like ChatGPT, Gemini and Google AI Overviews can read the page, and
lists exactly what to improve.⌉[

LLM Optimization scores how well systems like ChatGPT, Gemini and Google AI Overviews
can read the page, and lists exactly what to improve.

[⌊Redirect Manager sends visitors and search engines from old URLs to new ones. 
Add 301 or 302 rules, test each one from the list, and watch the hit counts to see
which are still catching traffic.⌉⌊Redirect Manager sends visitors and search engines
from old URLs to new ones. Add 301 or 302 rules, test each one from the list, and
watch the hit counts to see which are still catching traffic.⌉[

Redirect Manager sends visitors and search engines from old URLs to new ones. Add
301 or 302 rules, test each one from the list, and watch the hit counts to see which
are still catching traffic.

[⌊Bulk Metadata Editor edits SEO titles and descriptions for many posts at once,
fills the empty ones from your existing content, and takes a backup you can download
before you start.⌉⌊Bulk Metadata Editor edits SEO titles and descriptions for many
posts at once, fills the empty ones from your existing content, and takes a backup
you can download before you start.⌉[

Bulk Metadata Editor edits SEO titles and descriptions for many posts at once, fills
the empty ones from your existing content, and takes a backup you can download before
you start.

[⌊Import & Migrate brings your existing SEO data across from Yoast SEO, Rank Math
or All in One SEO — post meta, term meta, global settings and redirects — one step
at a time, with nothing overwritten unless you ask for it.⌉⌊Import & Migrate brings
your existing SEO data across from Yoast SEO, Rank Math or All in One SEO — post
meta, term meta, global settings and redirects — one step at a time, with nothing
overwritten unless you ask for it.⌉[

Import & Migrate brings your existing SEO data across from Yoast SEO, Rank Math 
or All in One SEO — post meta, term meta, global settings and redirects — one step
at a time, with nothing overwritten unless you ask for it.

[⌊Orphan Pages finds published pages that nothing else on your site links to. Search
engines that discover pages by following links never reach them, so each one comes
with a suggestion for where to link from.⌉⌊Orphan Pages finds published pages that
nothing else on your site links to. Search engines that discover pages by following
links never reach them, so each one comes with a suggestion for where to link from
.⌉[

Orphan Pages finds published pages that nothing else on your site links to. Search
engines that discover pages by following links never reach them, so each one comes
with a suggestion for where to link from.

[⌊Refresh Queue scores every published page on business value, traffic trend, conversion
potential and opportunity size, then ranks them, so you know which page to update
next instead of guessing.⌉⌊Refresh Queue scores every published page on business
value, traffic trend, conversion potential and opportunity size, then ranks them,
so you know which page to update next instead of guessing.⌉[

Refresh Queue scores every published page on business value, traffic trend, conversion
potential and opportunity size, then ranks them, so you know which page to update
next instead of guessing.

[⌊The setup wizard walks through social profiles, title templates and your sitemap
on first run. The defaults work as they are if you would rather not change anything.⌉⌊
The setup wizard walks through social profiles, title templates and your sitemap
on first run. The defaults work as they are if you would rather not change anything
.⌉[

The setup wizard walks through social profiles, title templates and your sitemap
on first run. The defaults work as they are if you would rather not change anything.

## Blocks

This plugin provides 5 blocks.

 *   Table of Contents
 *   How-To
 *   Breadcrumbs
 *   FAQ
 *   Almaseo Html Sitemap

## Installation

 1. Upload the `almaseo-seo-playground` folder to `/wp-content/plugins/`, or install
    AlmaSEO from the Plugins screen in your WordPress admin.
 2. Activate the plugin through the Plugins menu.
 3. Follow the Setup Wizard to configure your site.
 4. (Optional) Connect an AlmaSEO account from AlmaSEO  Connection to enable the cloud-
    powered enhancements described above.

## FAQ

### Do I need an account or an internet connection to use AlmaSEO?

No account, no. Every feature listed in the description works on your own server.
AlmaSEO’s own service is not contacted until you connect an account, with one exception,
described under “External services”: on activation, a site that still holds the 
remains of an earlier connection looks itself up so it can be re-linked. A site 
that never connected makes no request.

A few features do need the internet, because their job is to ask someone else something:
the keyword panel in the post editor asks Google for suggestions as soon as it opens,
IndexNow tells search engines a page changed once you switch it on, video sitemaps
read Vimeo and YouTube, and the optional Google Analytics integration loads Google’s
script for your visitors. Everything else keeps working offline. The “External services”
section lists each one, what starts it, and what it sends.

### Can I import my settings from Yoast, Rank Math, or AIOSEO?

Yes. The Import & Migrate wizard supports all three in a 5-step process: post meta,
taxonomy terms, global settings, redirects, and a verification report.

### Can I use AlmaSEO alongside another SEO plugin?

You can, but it is not recommended to run two SEO plugins at once. AlmaSEO includes
conflict detection and a one-click path to import your data so you can switch cleanly.

### Does connecting an AlmaSEO account send my content to a third party?

Only for the specific features you run, and only after you connect an account; the
AlmaSEO entry under “External services” lists each feature and what it sends. Some
features contact other companies whether or not you have an AlmaSEO account: Google(
keyword suggestions, and Analytics if you enable it), Vimeo and YouTube (video sitemaps),
the IndexNow engines (if you switch IndexNow on), and Gravatar (avatars in the Notes&
History panel). Each is listed there with exactly what is sent and when.

### Does AlmaSEO make requests to my own site?

Yes, though none of these is an outside service. Several checks fetch pages from
your own site to see what a visitor or crawler would get. The health analysis reads
a page’s rendered headings and your robots.txt; Canonical Health and Schema Drift
fetch the pages they check, Schema Drift again on its own after a plugin or theme
update unless you turn that off; the 404 tool re-checks whether a logged path is
still missing; the sitemap tools fetch your own sitemap and robots.txt to validate
them. The structured data preview under Settings, and the `wp almaseo schema scan`
command, fetch whichever address an administrator types in.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

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

Contributors

 *   [ Webstuffguy Labs ](https://profiles.wordpress.org/webstuffguy/)

[Translate “AlmaSEO SEO Playground” into your language.](https://translate.wordpress.org/projects/wp-plugins/almaseo-seo-playground)

### Interested in development?

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

## Changelog

#### 1.28.0

 * Moving from another SEO plugin: custom titles and descriptions that used a tag
   AlmaSEO did not know now come across complete. Yoast SEO dropped that part of
   the text (“Parent | Child” became “Child”); Rank Math SEO and All in One SEO 
   lost the whole title. Tags such as the parent page’s title, the post’s categories
   or year, custom fields and a taxonomy’s terms are now filled from the page, the
   way the old plugin did. A tag that cannot be filled is never shown in search 
   results; the page uses its default title and the Verify step lists it.
 * Fixed: an SEO title or description containing an ordinary hashtag, such as “Summer#
   sale”, was replaced by the default title, even when typed into AlmaSEO. Hashtags
   are now kept as text.
 * Fixed: the “year” and “current day” tags were accepted in titles but filled with
   nothing.
 * New: each category, tag and custom taxonomy term has a “Search engines” choice
   on its edit screen: Default, Always index, or Never index. “Always index” keeps
   that one page in search even when the rest of the taxonomy is hidden. Choices
   brought across from another SEO plugin show here.
 * New: Search Appearance can hide categories and tags that have no posts yet, turn
   off author and date archives (they redirect to the homepage), and hide authors
   with no published posts. All are off unless you switch them on. Settings for 
   these brought across from Yoast SEO, Rank Math SEO or All in One SEO are now 
   imported.
 * Fixed: on a site whose homepage is a static page, the blog page carried the homepage’s
   title and description and had no canonical tag. It now uses its own.
 * Fixed: with WooCommerce “Noindex all products” switched on, robots.txt also blocked
   product pages, so search engines never saw the noindex. Product pages are no 
   longer blocked.

#### 1.27.0

 * Safer defaults. A few settings could quietly hurt a site in search; they now 
   behave like Yoast SEO and WordPress itself. New installs get them straight away.
   On a site that already runs AlmaSEO nothing changes until an administrator sees
   a notice listing exactly what would change on that site and chooses Apply or 
   Keep. Covered: media files not attached to a page redirect to the file instead
   of the homepage; llms.txt leaves out pages you keep out of search engines; page
   2 and later of category and tag archives get the page number in their title; 
   date archive titles show the month or year; post format archives are kept out
   of search results; pages made only of shortcodes no longer publish the shortcode
   text as their description.
 * Fixed: WooCommerce product pages described themselves three times in structured
   data. They now carry one product and a plain web page, and shop and category 
   pages no longer carry a product block per item.
 * Changed: on new installs, AlmaSEO leaves WooCommerce’s own breadcrumb trail alone
   until you turn on the enhanced breadcrumbs, and llms.txt is published when you
   generate or save it rather than automatically. Existing sites keep what they 
   have.
 * Fixed: the 404 log could grow without limit. It now keeps the newest 10,000 addresses
   and skips scanners and probes for files like /.env; search engine crawlers are
   still logged.
 * Fixed: the weekly Evergreen check now works through 200 posts at a time instead
   of all at once.
 * Fixed: AlmaSEO now steps back on the front end when Squirrly SEO, SmartCrawl 
   or Slim SEO is active, as it does for Yoast SEO, Rank Math, All in One SEO, SEOPress
   and The SEO Framework.
 * Fixed: the Sitemaps screen showed image and video sitemaps as on when they were
   off.
 * Fixed: posts with no description no longer print empty social description tags.

#### 1.26.0

 * Fixed: every page carried two robots tags, WordPress’s own and a second one from
   AlmaSEO. AlmaSEO’s choices are now merged into WordPress’s tag, so each page 
   has exactly one.
 * Fixed: your sitemap listed pages that told search engines not to index them: 
   noindexed categories and tags, post types hidden under Search Appearance, noindexed
   products, WooCommerce cart, checkout and account pages, and pages whose canonical
   points elsewhere. They are now left out.
 * Fixed: if something other than WordPress answers /sitemap.xml (such as a sitemap.
   xml file a hosting tool left behind), search engines were handed that file. The
   plugin now tells you, and the notice has a Check again button for after you remove
   it. Your sitemap also answers at /sitemap_index.xml, the address Yoast SEO and
   Rank Math used.
 * Fixed: the sitemap index pointed at files inside /wp-content/uploads/, the “recent
   changes” sitemap kept deleted and noindexed pages, and the Sitemaps Overview 
   could say sitemaps were disabled while they were live.
 * Fixed: on the Sitemaps screen, Add URL, Force Ping, Validate Hreflang, Generate
   Key, Export Settings, the log tools and several other buttons did nothing or 
   stopped with an error, and its messages were never shown. All of them work now.
 * Fixed: SEO titles carried over from another SEO plugin, such as “%%title%% %%
   sep%%”, appeared in search results with the placeholders still in them. They 
   are now filled in.
 * Fixed: your homepage and pages without a chosen schema type were described to
   Google as blog posts. The homepage now describes your business or organization
   with your website; choosing “None” publishes nothing; the site-wide default type
   per post type now applies.
 * Fixed: on the Genesis theme framework, pages had two meta descriptions and two
   canonical tags. Genesis now steps aside for AlmaSEO.
 * Fixed: moving from All in One SEO brought across no post type or taxonomy settings(
   4.1.4 and later) and no organization name, logo or social profiles. A notice 
   now lists any All in One SEO settings that were not brought across. Rank Math’s
   robots setting, unsupported title tags and imported separators are also handled
   correctly.
 * Fixed: the WooCommerce “noindex product categories” and “noindex product tags”
   settings had no effect.
 * Fixed: in the block editor, the Link Attributes option (nofollow, sponsored, 
   ugc) never appeared. It is in the toolbar’s More menu when the cursor is in a
   link.
 * Added: on a brand-new site that has never had an SEO plugin, tag pages are hidden
   from search results by default. Existing sites and sites moving from another 
   plugin keep what they had.
 * Added: SEO Work Log, one list of every change to a page’s SEO title, description,
   focus keyword, canonical, indexing, schema type and social fields, with old and
   new values and who made it.
 * Added: redirects can be imported from and exported to a spreadsheet (CSV). Redirect
   chains get a one-click “Point straight at” fix, and importing redirects from 
   another plugin lists every rule it could not bring across, with the reason.
 * Added: an optional email when a missing page suddenly gets 10 or more visits 
   in a day, and the 404 log keeps every page that linked to a missing address.
 * Added: trashing several pages at once offers redirects for them.
 * Added: business opening hours can have a second shift per day and a list of holiday
   and special hours; location pages can be published as areas served by the main
   business.

#### 1.25.0

 * Added: the page panel warns when another page already has the same focus keyword,
   and links to it, so two pages do not end up competing for the same searches. 
   It updates as you type.
 * Added: an Evergreen weekly summary email. Switch it on from the Evergreen dashboard
   to get a weekly list of stale and watch posts at the site admin address, only
   in weeks with something to look at.
 * Fixed: the Evergreen CSV and PDF buttons did nothing. CSV now exports every post
   matching the filters; PDF is a printable report you can save as PDF.
 * Fixed: Sitemaps > Change Tracking shows its history again, and Export History
   and the Media tab’s Export Report download CSV files (the media report lists 
   every image with its alt text).
 * Fixed: on the Sitemaps screen, several buttons fired twice on the first tab opened(
   two downloads, two snapshots, two confirmations).
 * Fixed: the content update reminder can be switched on again from the Notes & 
   History tab.
 * Fixed: the Overview scorecard could never pass more than 6 of 8 checks. It now
   runs seven real checks and shows what is missing; “Last SEO Change” shows the
   date of the last recorded change instead of a guess.
 * Fixed: the Search Console tab no longer offers a “Request Indexing” link built
   by guesswork.

#### 1.24.0

 * Added: the [almaseo_faq] shortcode shows the questions and answers from the FAQ
   section of the Schema & Meta tab on the page itself, so the visible FAQ and its
   markup always match. It works in the Classic editor and page builders as well
   as the block editor; add layout=”list” to show headings instead of an accordion.
 * Fixed: pages set to noindex are left out of the XML sitemaps, the HTML sitemap
   and the orphan-pages scan, including every noindex imported from Yoast, Rank 
   Math or All in One SEO.
 * Fixed: the [almaseo_html_sitemap] shortcode could show an empty page on sites
   whose sitemap settings were saved by an older version.
 * Fixed: shortcode breadcrumbs (including [aioseo_breadcrumbs], [wpseo_breadcrumb]
   and [rank_math_breadcrumb] on migrated sites) and the Breadcrumbs block now follow
   the separator, home text, “show current page” and schema settings, and no longer
   log a PHP warning on every page.
 * Fixed: a page showing the breadcrumb trail more than once publishes one BreadcrumbList
   instead of several.
 * Fixed: the Bulk Metadata Editor shows and edits the SEO title and description
   the site actually publishes. It showed an out-of-date copy after edits made elsewhere,
   and bulk Append or Find & Replace could put that old wording back on the page.
 * Fixed: LocalBusiness schema uses the business name (a new Business Name field,
   or the site name) instead of the page’s SEO title, and links each location to
   the site’s main Organization.
 * Fixed: choosing FAQ schema without any questions no longer publishes an empty
   FAQPage, and the FAQ help text now says the questions should be visible on the
   page.

#### 1.23.0

 * Security: connecting this site to an AlmaSEO account no longer creates a WordPress
   Application Password; it uses a connection token that an administrator creates
   and copies into the dashboard. That token is accepted only on AlmaSEO’s own REST
   routes (almaseo/v1), never as a login to WordPress’s core REST API. WordPress’s
   own Application Passwords are unaffected.
 * Changed: a connected AlmaSEO account publishes content through the plugin’s own
   named operations instead of WordPress’s core REST API.
 * Fixed: database queries in the sitemap providers, 404 log, redirects, internal
   links and refresh drafts are written with fixed structure and every value bound
   through prepare().
 * Fixed: the 404 log’s date filters used out-of-range date bounds when switched
   off.
 * Fixed: the styled XML sitemap view links its stylesheet properly.

#### 1.22.0

 * Added: change a page’s address and AlmaSEO offers to redirect the old one. The
   offer appears after saving with both addresses filled in, and one click adds 
   it. Renaming the same page twice before answering keeps the first address, the
   one the rest of the web points at.
 * Added: write the schema for a page yourself. A box at the bottom of Schema & 
   Meta takes JSON-LD; tick “Write the schema for this page myself” and exactly 
   that is published on the page and nothing else. It is checked as you type, and
   cannot be switched on while it does not parse.
 * Added: the page panel says when your social title or description has stopped 
   following the SEO one, and offers one click to go back to following.
 * Fixed: filling meta in bulk stored a social title that merely repeated the SEO
   title, which froze it, so later edits to the SEO title left the social one behind.
   Bulk fills no longer store a social value that repeats the SEO one.
 * Fixed: some pages described themselves to Google twice, with two structured-data
   blocks disagreeing about the same fields. Exactly one is published now, whichever
   is right for the page.
 * Fixed: redirects that could never work are refused with the reason: another site’s
   address as the source, a bare domain without https://, a source carrying a ?query,
   a destination that is not a web page, or a redirect pointing back at its own 
   page. Every problem is listed together. The prompt shown when deleting a page
   and the WP-CLI command apply the same rules.
 * Fixed: an imported redirect could take up to an hour to start working. It takes
   effect at once.
 * Fixed: posts brought in through the WordPress importer or a WooCommerce product
   CSV could lose their AlmaSEO titles, descriptions and settings on the site they
   arrived at. Only true duplicates made on the same site are cleaned now.
 * Fixed: the sitemap left out post types that other plugins register, including
   WooCommerce products. They are listed through the post-type sitemap now.
 * Fixed: static sitemap files could be built from the wrong settings and come out
   empty; the hourly news refresh replaced the whole set of static sitemap files
   with the news sitemap alone; and `wp almaseo sitemaps build` failed and left 
   the build lock held for fifteen minutes. The command now builds through the same
   path as the scheduled rebuild, and –force clears a held lock as its help text
   promised.
 * Fixed: `wp almaseo sitemaps submit --indexnow` failed before submitting anything.
   It now sends the sitemap index and reports the service’s answer.
 * Fixed: opening the Connection screen could rotate or delete the site’s credentials
   just by being viewed. Viewing changes nothing; creating a token is an explicit
   button. Test Connection sends one request per click instead of two.
 * Fixed: content refresh reminders and the “search engines are blocked” warning
   appeared on every admin screen, for everyone. They show on the Dashboard and 
   AlmaSEO’s own screens, to people who can act on them, and stay dismissed.
 * Security: operations that change site-wide AlmaSEO settings through the REST 
   API now require an administrator credential, not merely one that can edit posts,
   and an unused connection route that could issue a site credential to anyone holding
   a stored secret has been removed.
 * Security: request fields are checked by type before they are stored, and a field
   arriving as a list where text belongs is dropped rather than passed on. The schema
   type accepted over the API is held to the same list as the editor.
 * Changed: the WooCommerce SEO screen no longer shows sitemap controls that did
   nothing, or a “Pro” badge on a free feature; sitemap coverage is set under Sitemaps
   Types & Rules. The Sitemaps screen no longer offers update-channel or automatic-
   update controls, since WordPress.org handles updates for this build.
 * Changed: the plugin’s admin styles and scripts are loaded through WordPress’s
   own queue instead of being printed into pages, and the readme states precisely
   when the plugin contacts AlmaSEO, YouTube and Vimeo, and what it sends.

#### 1.21.0

 * Fixed: automatic IndexNow submissions never reached the search engines. The scheduled
   submission called a routine that does not exist, so every run failed the moment
   it started — and the result was recorded as a success, so nothing on screen or
   in the log ever said so. Submissions now go out, cover the pages that actually
   changed, and report a failure as a failure.
 * Fixed: YouTube and Vimeo details were missing from the video sitemap. A renamed
   setting meant titles, descriptions, thumbnails and durations were never fetched,
   and Vimeo videos were left out of the sitemap altogether unless the post happened
   to carry a featured image.
 * Fixed: importing a CSV of extra sitemap URLs said “Imported N URLs” and saved
   none of them. The rows are now stored, URLs already on the list are skipped instead
   of erroring, and the counts on screen match the table underneath.
 * Fixed: after an update some screens kept loading the previous version’s stylesheets
   and scripts, because an internal version number had been left frozen at an old
   value.
 * Fixed: the plugin could switch off structured data belonging to other plugins
   and themes. It matched them by name, so an events plugin’s schema and a theme’s
   JSON-LD were silently removed too. Suppressing another plugin’s schema is now
   a setting you turn on, off by default, and it names what it affects.
 * Changed: deleting the plugin now clears its connection details, scheduled jobs
   and custom capability from every site on a WordPress network rather than only
   the one you were looking at. Settings, redirects, schema and your SEO fields 
   are kept, exactly as before.
 * Changed: stronger permission and credential handling. An AlmaSEO connection now
   authenticates only AlmaSEO’s own requests instead of the whole REST API, credentials
   are never sent over an unverified connection, disconnecting genuinely revokes
   access, and a site that has never connected no longer creates a signing key at
   all.
 * Changed: every scheduled job the plugin creates is now removed when it is deactivated,
   including the ones that carry a page reference. Content refresh reminders you
   set are remembered and re-armed when the plugin is switched back on.
 * Changed: the plugin’s admin notices are dismissible, remembered per user, and
   appear only on the screens where the suggested action lives.
 * Changed: removed controls that did nothing — a permanently disabled “Start AI
   Re-Optimization” button, a history “View” button that only announced a diff viewer
   was coming, and a roadmap entry for a feature the plugin does not have.
 * Changed: the plugin no longer writes routine progress messages into the browser
   console. Genuine failures are still reported there.
 * Changed: help and documentation links now point at the AlmaSEO documentation;
   one that led to a missing page has been fixed.
 * Improved: the plugin can now be translated. Thousands of strings, including everything
   in the editor panels, previously carried the wrong identifier and could never
   be translated at all. The bundled translation template has been rebuilt.
 * Improved: the readme now describes every outside service the plugin can contact,
   what triggers it, and what is sent — including that no data reaches AlmaSEO until
   you connect an account.

#### 1.20.0

 * Changed: when a background check has stopped partway, the banner now offers “
   Finish the rest” — it picks up at the page the check stopped on instead of sending
   you to “Scan for Drift”, which starts your whole site again. On a large site 
   that is the difference between checking the handful of pages that were missed
   and re-checking every one of them.
 * Fixed: finishing a scan by hand now clears the background check that was partway
   through, and cancels the one still queued behind it. Before this, the screen 
   could go on reporting a stopped check over a site you had just finished checking,
   and the queued one would have started again from the top.
 * Fixed: an internal filter for looking at a single page’s findings was accepted
   and then quietly ignored, so anything asking for one page got results for the
   whole site — a wrong answer that looks like a right one. Nothing you can click
   was affected; it is fixed before something starts relying on it.

#### 1.19.0

 * Added: the screen now tells you when a check is running in the background. After
   a plugin or theme update, Schema Drift Monitor re-checks your watched pages a
   few at a time, which on a large site takes several minutes — and it did that 
   completely silently. Because each page’s findings are rewritten as the check 
   reaches that page, the list looked shorter than it should while the work was 
   going on, with nothing on screen to explain it. A banner under the title now 
   says how far along it is, counts up on its own, and loads the full list the moment
   it finishes.
 * Added: if a background check stops partway — the site was deployed mid-run, or
   WordPress’s scheduler was interrupted — the banner says so and tells you to press“
   Scan for Drift” to finish the rest, instead of leaving you with a part-checked
   list that looks complete.

#### 1.18.0

 * Fixed: Dismiss now actually dismisses. It used to file the row away and change
   nothing, so the very next scan raised the identical drift as a new finding — 
   the one thing the word promises will not happen. A dismissed change now stays
   quiet, and speaks up again the moment that part of the page changes to something
   different. Reopening the row lifts it.
 * Changed: the findings list now shows Open findings by default. Showing every 
   status put a page you had already dealt with in the list beside the same page
   re-raised by the next scan, which reads as a duplicate rather than as history.
   The other statuses are one click away in the filter.
 * Fixed: half the screen spoke plain English and half did not. The summary line
   is built when the scan runs and still said “headline changed; dateModified changed”
   while the values underneath said “Headline” and “Last modified date”. There is
   now one list of names, used by both.
 * Changed: a reading’s verdict (“No search impact” and the reason for it) now appears
   in the full-width strip under the finding, instead of being squeezed into the
   narrow Summary column where it was hidden entirely on smaller screens.
 * Changed: readings are now given the changed values in the same words and date
   formats you see on screen, so the write-up quotes “Last modified date” and a 
   real date rather than dateModified and a raw timestamp — and it no longer closes
   with generic advice that would fit any page.
 * Fixed: the automatic check that runs after a plugin update now finishes. It used
   to try the whole site in a single background request, which on a large site dies
   partway through — leaving the check permanently half-done, and the findings list
   looking emptier than it should right after an update. It now works through your
   pages in batches until it is genuinely finished.

#### 1.17.0

 * Fixed: Schema Drift could be reading a cached copy of your pages. Most sites 
   sit behind a cache, a CDN or a security proxy, and a check runs as an anonymous
   visitor — exactly the request those are built to answer from cache. So the monitor
   could compare an old copy of a page and report “nothing changed” with complete
   confidence about a version nobody was looking at. Every read now asks past the
   cache, and falls back to a normal request if a firewall objects.
 * Added: “Check now” shows what it actually received — the response code, the title
   of the page that came back, and any cache headers that came with it. If that 
   title is not the one your page shows in a browser, something in front of your
   site served a stale copy, and now you can see that instead of having to guess.
 * Note: because captures made before this update may have been taken from cached
   copies, your first scan after updating may surface differences that were always
   there but could not be seen. Use “Accept current” on any page whose current version
   is correct.

#### 1.16.0

 * Added: “Check now” on any watched page (open “Which pages are being watched?”).
   It loads that one page immediately and shows you what structured data is on it
   right now beside what is in its snapshot — so a blank result finally tells you
   which blank it is: the page has no snapshot yet, the page would not load, everything
   genuinely matches, or the thing you edited is not part of the structured data
   at all. Previously all four looked identical from the findings table.
 * Added: the page now says what Schema Drift actually watches — the structured 
   data, not the visible page. Renaming a post in WordPress often changes nothing
   here, because when an SEO title is set that is what the structured data uses.
   That was not written down anywhere, and it makes a working scan look broken.

#### 1.15.1

 * Changed: Schema Drift now names the changed field in plain English — “Last modified
   date” rather than dateModified, “Star rating” rather than aggregateRating.ratingValue—
   and shows dates the way people write them (“Aug 23, 2026, 10:00 PM”) instead 
   of 2026-08-23T22:00:52-04:00. The technical field name is still there on hover
   if you want it. Your page’s own text is never rewritten, so the before and after
   stays exact.

#### 1.15.0

 * Added: “Accept current” on any Schema Drift finding. It re-reads that one page
   and keeps what the page says now as the new reference point — no re-crawling 
   the rest of your site. Until now the only way to update a reference point was
   to re-check every page, which on a large site meant a finding you had already
   dealt with could never really be cleared.
 * Fixed: Resolve never actually ended a finding. It filed the row away but left
   the old snapshot in place, so the next check compared your page against the outdated
   version and raised the same thing again — while the resolved row stayed on screen.
   That is why one page could appear twice looking identical. Use “Accept current”
   when the page is right; Resolve still just files the row.
 * Changed: the before and after values now appear in a full-width strip underneath
   the finding instead of inside the narrow Summary column, where they were easy
   to miss entirely and were hidden outright on smaller screens.
 * Added: findings for structured data that was added or removed wholesale now show
   which one it was — its type, its name, and the address it pointed to — instead
   of showing no values at all.
 * Changed: when the only thing that changed is the last-modified date, the finding
   says so plainly and is marked low. WordPress rewrites that date every time anyone
   saves a page, so on a site people actually edit it was filling the list with 
   changes that only meant someone had done their job.

#### 1.14.1

 * Fixed: Schema Drift findings could vanish. A scan deleted every open finding 
   before it started, then spent minutes reloading your pages to rebuild them — 
   so anything that stopped it partway (a closed tab, a timeout, a background scan
   triggered by a plugin update) left you with fewer findings than you had, and 
   nothing to say so. Findings are now cleared one page at a time, as each page 
   is re-checked, so a scan that stops early leaves everything it did not reach 
   untouched.
 * This is why a finding could disappear right after updating the plugin: updating
   schedules a background re-scan, and on a large site that scan cleared the table
   and then ran out of time.
 * Fixed: on narrow screens the new before/after values were hidden along with the
   Summary column. They now stay visible — hiding the one thing that says what changed
   defeats the point.

#### 1.14.0

 * Schema Drift now shows you exactly what changed — the old value and the new one,
   side by side, for each field. It used to say only “headline changed”, which is
   the same sentence whether a rating went 4.9 to 4.8 or 4.9 to 2.1, and left you
   to compare two blocks of structured data by hand.
 * Removed and added fields are labelled as such, so a price that vanished reads
   as a price that vanished rather than as a blank space.
 * Your existing findings show this too, with no need to re-scan. The before and
   after were being recorded all along — they were simply never shown to you.

#### 1.13.0

 * New: Schema Drift now shows you WHICH pages it is watching. Because it samples
   rather than covering everything at once, the screen could tell you “144 pages
   watched” and give you no way at all to find out which 144 — so you could edit
   a page, scan, see nothing, and have no idea whether that meant the page was fine
   or simply was not being looked at.
 * Open “Which pages are being watched?” above the buttons for a searchable list,
   with the structured data found on each page and when its snapshot was taken. 
   Search it by title to check one page in particular.
 * If your page is not in the list, the panel says so and tells you what to do: 
   press Capture Baseline again, which always starts with pages it has never looked
   at.

Older releases are not listed here. The changelog is kept to the releases most likely
to matter to someone deciding whether to update.

## Meta

 *  Version **1.28.0**
 *  Last updated **11 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.6 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [meta description](https://wordpress.org/plugins/tags/meta-description/)[redirects](https://wordpress.org/plugins/tags/redirects/)
   [schema](https://wordpress.org/plugins/tags/schema/)[seo](https://wordpress.org/plugins/tags/seo/)
   [sitemap](https://wordpress.org/plugins/tags/sitemap/)
 *  [Advanced View](https://wordpress.org/plugins/almaseo-seo-playground/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

 *   [ Webstuffguy Labs ](https://profiles.wordpress.org/webstuffguy/)

## Support

Got something to say? Need help?

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