{"id":362427,"date":"2026-10-24T22:22:22","date_gmt":"2026-10-24T22:22:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/almaseo-seo-playground\/"},"modified":"2026-10-28T20:51:45","modified_gmt":"2026-10-28T20:51:45","slug":"almaseo-seo-playground","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/almaseo-seo-playground\/","author":12477640,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.28.0","stable_tag":"1.28.0","tested":"7.1.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"AlmaSEO SEO Playground","header_author":"AlmaSEO","header_description":"Free, complete SEO toolkit for WordPress \u2014 meta titles and descriptions, schema markup, sitemaps, readability and health analysis, and more. An optional AlmaSEO account adds AlmaSEO-powered content freshness and analysis.","assets_banners_color":"a59ee6","last_updated":"2026-10-28 20:51:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/almaseo.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":229,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.23.0":{"tag":"1.23.0","author":"webstuffguy","date":"2026-10-24 22:48:15","revision":3763807},"1.24.0":{"tag":"1.24.0","author":"webstuffguy","date":"2026-10-25 18:34:13","revision":3765074},"1.25.0":{"tag":"1.25.0","author":"webstuffguy","date":"2026-10-25 19:50:44","revision":3765179},"1.26.0":{"tag":"1.26.0","author":"webstuffguy","date":"2026-10-27 02:24:42","revision":3767630},"1.27.0":{"tag":"1.27.0","author":"webstuffguy","date":"2026-10-27 22:28:17","revision":3769621},"1.28.0":{"tag":"1.28.0","author":"webstuffguy","date":"2026-10-28 20:51:45","revision":3771623}},"upgrade_notice":{"1.28.0":"<p>Titles and descriptions moved from Yoast SEO, Rank Math SEO or All in One SEO come across complete, hashtags in titles are kept, and new per-term and empty-archive search settings.<\/p>","1.26.0":"<p>Sitemaps leave out noindexed pages, one robots tag per page, placeholder titles from other plugins filled in, a working Sitemaps screen, an SEO Work Log and redirect CSV import\/export.<\/p>","1.25.0":"<p>Warns about duplicate focus keywords, adds an optional weekly Evergreen email, and makes the export buttons and the Overview scorecard work.<\/p>","1.24.0":"<p>Adds the [almaseo_faq] shortcode. Keeps noindexed pages out of sitemaps, makes breadcrumbs follow your settings, and fixes the Bulk Metadata Editor showing out-of-date titles.<\/p>","1.23.0":"<p>The AlmaSEO account connection no longer creates a WordPress Application Password, and its token works only on AlmaSEO&#039;s own routes. Also tightens database queries across sitemaps, redirects and logs.<\/p>","1.22.0":"<p>Adds redirect offers when a page is renamed and hand-written page schema. Repairs sitemap coverage for WooCommerce products and other custom post types, static sitemap building and the WP-CLI sitemap commands, and removes an unused route that could issue site credentials.<\/p>","1.21.0":"<p>Repairs automatic IndexNow submission, video sitemap details for YouTube and Vimeo, and CSV import of sitemap URLs. Stops the plugin switching off other plugins&#039; structured data, and tightens permission and credential handling.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3763784,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3763784,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3763813,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3763813,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"almaseo\/toc":{"name":"almaseo\/toc","title":"Table of Contents"},"almaseo\/howto":{"name":"almaseo\/howto","title":"How-To"},"almaseo\/breadcrumbs":{"name":"almaseo\/breadcrumbs","title":"Breadcrumbs"},"almaseo\/faq":{"name":"almaseo\/faq","title":"FAQ"},"almaseo\/html-sitemap":{"name":"almaseo\/html-sitemap","title":"Almaseo Html Sitemap"}},"tagged_versions":["1.23.0","1.24.0","1.25.0","1.26.0","1.27.0","1.28.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3763784,"resolution":"1","location":"assets","locale":"","width":1407,"height":848},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3763784,"resolution":"10","location":"assets","locale":"","width":1359,"height":777},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3763784,"resolution":"11","location":"assets","locale":"","width":1383,"height":790},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3763784,"resolution":"12","location":"assets","locale":"","width":809,"height":462},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3763784,"resolution":"2","location":"assets","locale":"","width":1357,"height":853},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3763784,"resolution":"3","location":"assets","locale":"","width":1707,"height":863},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3763784,"resolution":"4","location":"assets","locale":"","width":1568,"height":592},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3763784,"resolution":"5","location":"assets","locale":"","width":1404,"height":809},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3763784,"resolution":"6","location":"assets","locale":"","width":1414,"height":718},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3763784,"resolution":"7","location":"assets","locale":"","width":1600,"height":683},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3763784,"resolution":"8","location":"assets","locale":"","width":1600,"height":915},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3763784,"resolution":"9","location":"assets","locale":"","width":1054,"height":560}},"screenshots":{"1":"Google Analytics for the page you are editing \u2014 views, sessions, engagement and traffic sources, scoped to that page rather than the whole site. (Requires an AlmaSEO account.)","2":"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.","3":"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.","4":"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.","5":"Google Search Console for the page you are editing \u2014 clicks, impressions, CTR, average position, and the queries that surfaced it. (Requires an AlmaSEO account.)","6":"LLM Optimization scores how well systems like ChatGPT, Gemini and Google AI Overviews can read the page, and lists exactly what to improve.","7":"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.","8":"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.","9":"Import &amp; Migrate brings your existing SEO data across from Yoast SEO, Rank Math or All in One SEO \u2014 post meta, term meta, global settings and redirects \u2014 one step at a time, with nothing overwritten unless you ask for it.","10":"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.","11":"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.","12":"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."}},"plugin_section":[262246],"plugin_tags":[5777,726,1117,186,1557],"plugin_category":[55],"plugin_contributors":[276546],"plugin_business_model":[],"class_list":["post-362427","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-meta-description","plugin_tags-redirects","plugin_tags-schema","plugin_tags-seo","plugin_tags-sitemap","plugin_category-seo-and-marketing","plugin_contributors-webstuffguy","plugin_committers-webstuffguy"],"banners":{"banner":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/banner-772x250.png?rev=3763813","banner_2x":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/banner-1544x500.png?rev=3763813","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/icon-128x128.png?rev=3763784","icon_2x":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/icon-256x256.png?rev=3763784","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-1.png?rev=3763784","caption":"Google Analytics for the page you are editing \u2014 views, sessions, engagement and traffic sources, scoped to that page rather than the whole site. (Requires an AlmaSEO account.)"},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-2.png?rev=3763784","caption":"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."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-3.png?rev=3763784","caption":"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."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-4.png?rev=3763784","caption":"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."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-5.png?rev=3763784","caption":"Google Search Console for the page you are editing \u2014 clicks, impressions, CTR, average position, and the queries that surfaced it. (Requires an AlmaSEO account.)"},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-6.png?rev=3763784","caption":"LLM Optimization scores how well systems like ChatGPT, Gemini and Google AI Overviews can read the page, and lists exactly what to improve."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-7.png?rev=3763784","caption":"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."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-8.png?rev=3763784","caption":"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."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-9.png?rev=3763784","caption":"Import &amp; Migrate brings your existing SEO data across from Yoast SEO, Rank Math or All in One SEO \u2014 post meta, term meta, global settings and redirects \u2014 one step at a time, with nothing overwritten unless you ask for it."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-10.png?rev=3763784","caption":"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."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-11.png?rev=3763784","caption":"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."},{"src":"https:\/\/ps.w.org\/almaseo-seo-playground\/assets\/screenshot-12.png?rev=3763784","caption":"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."}],"raw_content":"<!--section=description-->\n<p><strong>Every SEO plugin keeps a different set of features free. AlmaSEO gives you the best of all three in one.<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p>Already using one of them? The built-in importer brings your titles, descriptions, settings and redirects across in a few clicks.<\/p>\n\n<p><strong>On-page SEO<\/strong><\/p>\n\n<ul>\n<li>SEO Health Score for every post and page<\/li>\n<li>Meta title, description and focus keyword editor with a live SERP preview<\/li>\n<li>Open Graph and Twitter Card meta, canonical URLs and robots controls<\/li>\n<li>Keyword suggestions from Google's public suggest service<\/li>\n<\/ul>\n\n<p><strong>Content analysis<\/strong><\/p>\n\n<ul>\n<li>Headline Analyzer and readability analysis<\/li>\n<li>Cornerstone content and an evergreen content tracker<\/li>\n<li>LLM readiness checks for AI answers<\/li>\n<\/ul>\n\n<p><strong>Structured data<\/strong><\/p>\n\n<ul>\n<li>JSON-LD schema: Article, FAQ, How-To, LocalBusiness (154 sub-types), Product, Event, Recipe, Person, Organization and more<\/li>\n<li>FAQ, How-To, Table of Contents and Breadcrumbs blocks<\/li>\n<li>Link attributes (nofollow \/ sponsored \/ ugc)<\/li>\n<\/ul>\n\n<p><strong>Technical SEO<\/strong><\/p>\n\n<ul>\n<li>XML, News, Video, Image and HTML sitemaps, with IndexNow<\/li>\n<li>robots.txt editor and crawl optimization<\/li>\n<li>Redirect manager and 404 tracking<\/li>\n<li>Image SEO alt and title templates<\/li>\n<\/ul>\n\n<p><strong>Site-wide settings<\/strong><\/p>\n\n<ul>\n<li>Search Appearance templates with smart tags<\/li>\n<li>Webmaster verification codes, RSS controls and LLMs.txt<\/li>\n<li>Role-based access, GA4 integration and a setup wizard<\/li>\n<\/ul>\n\n<p><strong>Bulk editing and content maintenance<\/strong><\/p>\n\n<ul>\n<li>Bulk Metadata Editor with find-and-replace and one-click undo<\/li>\n<li>Downloadable backups you can restore later<\/li>\n<li>Internal Links auto-linker with guardrails<\/li>\n<li>Orphan pages, Content Refresh Drafts, Refresh Queue and Date Hygiene Scanner<\/li>\n<\/ul>\n\n<p><strong>Quality and monitoring<\/strong><\/p>\n\n<ul>\n<li>E-E-A-T checks, Schema Drift Monitor and Canonical Health<\/li>\n<\/ul>\n\n<p><strong>WooCommerce<\/strong><\/p>\n\n<ul>\n<li>Product schema, product sitemaps and per-product indexing control<\/li>\n<\/ul>\n\n<p><strong>Migrate from another SEO plugin<\/strong><\/p>\n\n<ul>\n<li>Import from Yoast, Rank Math and AIOSEO: post meta, terms, settings and redirects, with a verification report<\/li>\n<li>Conflict detection for major SEO plugins<\/li>\n<\/ul>\n\n<p>AlmaSEO is not affiliated with Yoast, Rank Math or All in One SEO.<\/p>\n\n<h3>External services<\/h3>\n\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<h4>AlmaSEO (app.almaseo.com)<\/h4>\n\n<p><strong>What it is:<\/strong> 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.<\/p>\n\n<p><strong>Before you connect:<\/strong> 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.<\/p>\n\n<p><strong>Connecting:<\/strong> 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.<\/p>\n\n<p><strong>While connected, automatically:<\/strong> 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.<\/p>\n\n<p><strong>In the post editor, without a click:<\/strong> 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:<\/p>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Analytics panel: the same triggers and values, kept for five minutes, relaying your Google Analytics data.<\/li>\n<li>LLM optimisation: the same two triggers. Sends the title, up to 8,000 characters of content, meta description, schema type, focus keyword and URL.<\/li>\n<\/ul>\n\n<p><strong>Only when you run a feature:<\/strong> 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:<\/p>\n\n<ul>\n<li>Headline suggestions: the headline, page title, the first 4,000 characters of the content, meta description, focus keyword and URL.<\/li>\n<li>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.<\/li>\n<li>404 ranking: the missing paths from your 404 log.<\/li>\n<li>Cornerstone suggestions: for every published page, its URL, title, word count and number of internal links pointing to it.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Connection test: the site's address and plugin version.<\/li>\n<\/ul>\n\n<p><strong>Disconnecting<\/strong> 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.<\/p>\n\n<p>Terms: https:\/\/almaseo.com\/terms\/ \u2014 Privacy: https:\/\/almaseo.com\/privacy\/<\/p>\n\n<h4>Google Suggest (suggestqueries.google.com)<\/h4>\n\n<p><strong>What it is:<\/strong> 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.<\/p>\n\n<p><strong>Trigger:<\/strong> 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.<\/p>\n\n<p><strong>Data sent:<\/strong> 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.<\/p>\n\n<p>Terms: https:\/\/policies.google.com\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>Google Analytics (www.googletagmanager.com)<\/h4>\n\n<p><strong>What it is:<\/strong> the optional GA4 integration.<\/p>\n\n<p><strong>Trigger:<\/strong> only after an administrator saves a GA4 Measurement ID under AlmaSEO \u2192 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 <code>gtag.js<\/code> 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.<\/p>\n\n<p><strong>Data sent:<\/strong> 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.<\/p>\n\n<p>Analytics terms: https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/us\/ \u2014 Terms: https:\/\/policies.google.com\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>IndexNow (api.indexnow.org or yandex.com\/indexnow)<\/h4>\n\n<p><strong>What it is:<\/strong> 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.<\/p>\n\n<p><strong>Trigger:<\/strong> off by default. Nothing is sent until an administrator switches IndexNow on under AlmaSEO \u2192 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.<\/p>\n\n<p><strong>Data sent:<\/strong> your site's host name, your IndexNow key, the address of the key file on your site, and the list of URLs.<\/p>\n\n<p>IndexNow: https:\/\/www.indexnow.org\/ \u2014 Microsoft terms: https:\/\/www.microsoft.com\/en-us\/servicesagreement \u2014 Microsoft privacy: https:\/\/privacy.microsoft.com\/privacystatement \u2014 Yandex terms: https:\/\/yandex.com\/legal\/rules\/ \u2014 Yandex privacy: https:\/\/yandex.com\/legal\/confidential\/<\/p>\n\n<h4>Google and Bing sitemap ping (www.google.com, www.bing.com)<\/h4>\n\n<p><strong>What it is:<\/strong> asks the two engines to re-read your sitemap.<\/p>\n\n<p><strong>Trigger:<\/strong> the WP-CLI command <code>wp almaseo sitemaps submit<\/code> 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.<\/p>\n\n<p><strong>Data sent:<\/strong> the address of your sitemap.<\/p>\n\n<p>Google terms: https:\/\/policies.google.com\/terms \u2014 Google privacy: https:\/\/policies.google.com\/privacy \u2014 Microsoft terms: https:\/\/www.microsoft.com\/en-us\/servicesagreement \u2014 Microsoft privacy: https:\/\/privacy.microsoft.com\/privacystatement<\/p>\n\n<h4>Vimeo (vimeo.com)<\/h4>\n\n<p><strong>What it is:<\/strong> fills in titles, descriptions, durations and thumbnails for the video sitemap.<\/p>\n\n<p><strong>Trigger:<\/strong> 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 \u2192 Sitemaps \u2192 Media to stop it.<\/p>\n\n<p><strong>Data sent:<\/strong> 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.<\/p>\n\n<p>Terms: https:\/\/vimeo.com\/terms \u2014 Privacy: https:\/\/vimeo.com\/privacy<\/p>\n\n<h4>YouTube (www.youtube.com, img.youtube.com)<\/h4>\n\n<p><strong>What it is:<\/strong> the same job as the Vimeo entry, for YouTube embeds.<\/p>\n\n<p><strong>Trigger:<\/strong> 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 \u2192 Media settings turn this off.<\/p>\n\n<p><strong>Data sent:<\/strong> 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.<\/p>\n\n<p>Terms: https:\/\/www.youtube.com\/t\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>Gravatar (gravatar.com)<\/h4>\n\n<p><strong>What it is:<\/strong> WordPress's avatar service, run by Automattic. The Notes &amp; History panel in the post editor shows the avatar of each person who left a note, through WordPress's standard avatar function.<\/p>\n\n<p><strong>Trigger:<\/strong> browser-side, when someone opens that panel. It follows WordPress's own Settings \u2192 Discussion \u2192 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.<\/p>\n\n<p><strong>Data sent:<\/strong> 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.<\/p>\n\n<p>Terms: https:\/\/wordpress.com\/tos\/ \u2014 Privacy: https:\/\/automattic.com\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>almaseo-seo-playground<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install AlmaSEO from the Plugins screen in your WordPress admin.<\/li>\n<li>Activate the plugin through the Plugins menu.<\/li>\n<li>Follow the Setup Wizard to configure your site.<\/li>\n<li>(Optional) Connect an AlmaSEO account from AlmaSEO \u2192 Connection to enable the cloud-powered enhancements described above.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20account%20or%20an%20internet%20connection%20to%20use%20almaseo%3F\"><h3>Do I need an account or an internet connection to use AlmaSEO?<\/h3><\/dt>\n<dd><p>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.<\/p>\n\n<p>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.<\/p><\/dd>\n<dt id=\"can%20i%20import%20my%20settings%20from%20yoast%2C%20rank%20math%2C%20or%20aioseo%3F\"><h3>Can I import my settings from Yoast, Rank Math, or AIOSEO?<\/h3><\/dt>\n<dd><p>Yes. The Import &amp; Migrate wizard supports all three in a 5-step process: post meta, taxonomy terms, global settings, redirects, and a verification report.<\/p><\/dd>\n<dt id=\"can%20i%20use%20almaseo%20alongside%20another%20seo%20plugin%3F\"><h3>Can I use AlmaSEO alongside another SEO plugin?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"does%20connecting%20an%20almaseo%20account%20send%20my%20content%20to%20a%20third%20party%3F\"><h3>Does connecting an AlmaSEO account send my content to a third party?<\/h3><\/dt>\n<dd><p>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 &amp; History panel). Each is listed there with exactly what is sent and when.<\/p><\/dd>\n<dt id=\"does%20almaseo%20make%20requests%20to%20my%20own%20site%3F\"><h3>Does AlmaSEO make requests to my own site?<\/h3><\/dt>\n<dd><p>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 <code>wp almaseo schema scan<\/code> command, fetch whichever address an administrator types in.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.28.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Fixed: the \"year\" and \"current day\" tags were accepted in titles but filled with nothing.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.27.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Fixed: the weekly Evergreen check now works through 200 posts at a time instead of all at once.<\/li>\n<li>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.<\/li>\n<li>Fixed: the Sitemaps screen showed image and video sitemaps as on when they were off.<\/li>\n<li>Fixed: posts with no description no longer print empty social description tags.<\/li>\n<\/ul>\n\n<h4>1.26.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Fixed: on the Genesis theme framework, pages had two meta descriptions and two canonical tags. Genesis now steps aside for AlmaSEO.<\/li>\n<li>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.<\/li>\n<li>Fixed: the WooCommerce \"noindex product categories\" and \"noindex product tags\" settings had no effect.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Added: trashing several pages at once offers redirects for them.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.25.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Fixed: Sitemaps &gt; 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).<\/li>\n<li>Fixed: on the Sitemaps screen, several buttons fired twice on the first tab opened (two downloads, two snapshots, two confirmations).<\/li>\n<li>Fixed: the content update reminder can be switched on again from the Notes &amp; History tab.<\/li>\n<li>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.<\/li>\n<li>Fixed: the Search Console tab no longer offers a \"Request Indexing\" link built by guesswork.<\/li>\n<\/ul>\n\n<h4>1.24.0<\/h4>\n\n<ul>\n<li>Added: the [almaseo_faq] shortcode shows the questions and answers from the FAQ section of the Schema &amp; 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.<\/li>\n<li>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.<\/li>\n<li>Fixed: the [almaseo_html_sitemap] shortcode could show an empty page on sites whose sitemap settings were saved by an older version.<\/li>\n<li>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.<\/li>\n<li>Fixed: a page showing the breadcrumb trail more than once publishes one BreadcrumbList instead of several.<\/li>\n<li>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 &amp; Replace could put that old wording back on the page.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.23.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>Changed: a connected AlmaSEO account publishes content through the plugin's own named operations instead of WordPress's core REST API.<\/li>\n<li>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().<\/li>\n<li>Fixed: the 404 log's date filters used out-of-range date bounds when switched off.<\/li>\n<li>Fixed: the styled XML sitemap view links its stylesheet properly.<\/li>\n<\/ul>\n\n<h4>1.22.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>Added: write the schema for a page yourself. A box at the bottom of Schema &amp; 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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Fixed: an imported redirect could take up to an hour to start working. It takes effect at once.<\/li>\n<li>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.<\/li>\n<li>Fixed: the sitemap left out post types that other plugins register, including WooCommerce products. They are listed through the post-type sitemap now.<\/li>\n<li>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 <code>wp almaseo sitemaps build<\/code> 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.<\/li>\n<li>Fixed: <code>wp almaseo sitemaps submit --indexnow<\/code> failed before submitting anything. It now sends the sitemap index and reports the service's answer.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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 \u2192 Types &amp; Rules. The Sitemaps screen no longer offers update-channel or automatic-update controls, since WordPress.org handles updates for this build.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.21.0<\/h4>\n\n<ul>\n<li>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 \u2014 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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>Changed: the plugin's admin notices are dismissible, remembered per user, and appear only on the screens where the suggested action lives.<\/li>\n<li>Changed: removed controls that did nothing \u2014 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.<\/li>\n<li>Changed: the plugin no longer writes routine progress messages into the browser console. Genuine failures are still reported there.<\/li>\n<li>Changed: help and documentation links now point at the AlmaSEO documentation; one that led to a missing page has been fixed.<\/li>\n<li>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.<\/li>\n<li>Improved: the readme now describes every outside service the plugin can contact, what triggers it, and what is sent \u2014 including that no data reaches AlmaSEO until you connect an account.<\/li>\n<\/ul>\n\n<h4>1.20.0<\/h4>\n\n<ul>\n<li>Changed: when a background check has stopped partway, the banner now offers \"Finish the rest\" \u2014 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.<\/li>\n<li>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.<\/li>\n<li>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 \u2014 a wrong answer that looks like a right one. Nothing you can click was affected; it is fixed before something starts relying on it.<\/li>\n<\/ul>\n\n<h4>1.19.0<\/h4>\n\n<ul>\n<li>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 \u2014 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.<\/li>\n<li>Added: if a background check stops partway \u2014 the site was deployed mid-run, or WordPress's scheduler was interrupted \u2014 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.<\/li>\n<\/ul>\n\n<h4>1.18.0<\/h4>\n\n<ul>\n<li>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 \u2014 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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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 \u2014 and it no longer closes with generic advice that would fit any page.<\/li>\n<li>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 \u2014 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.<\/li>\n<\/ul>\n\n<h4>1.17.0<\/h4>\n\n<ul>\n<li>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 \u2014 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.<\/li>\n<li>Added: \"Check now\" shows what it actually received \u2014 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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.16.0<\/h4>\n\n<ul>\n<li>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 \u2014 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.<\/li>\n<li>Added: the page now says what Schema Drift actually watches \u2014 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.<\/li>\n<\/ul>\n\n<h4>1.15.1<\/h4>\n\n<ul>\n<li>Changed: Schema Drift now names the changed field in plain English \u2014 \"Last modified date\" rather than dateModified, \"Star rating\" rather than aggregateRating.ratingValue \u2014 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.<\/li>\n<\/ul>\n\n<h4>1.15.0<\/h4>\n\n<ul>\n<li>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 \u2014 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.<\/li>\n<li>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 \u2014 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.<\/li>\n<li>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.<\/li>\n<li>Added: findings for structured data that was added or removed wholesale now show which one it was \u2014 its type, its name, and the address it pointed to \u2014 instead of showing no values at all.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.14.1<\/h4>\n\n<ul>\n<li>Fixed: Schema Drift findings could vanish. A scan deleted every open finding before it started, then spent minutes reloading your pages to rebuild them \u2014 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.<\/li>\n<li>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.<\/li>\n<li>Fixed: on narrow screens the new before\/after values were hidden along with the Summary column. They now stay visible \u2014 hiding the one thing that says what changed defeats the point.<\/li>\n<\/ul>\n\n<h4>1.14.0<\/h4>\n\n<ul>\n<li>Schema Drift now shows you exactly what changed \u2014 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.<\/li>\n<li>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.<\/li>\n<li>Your existing findings show this too, with no need to re-scan. The before and after were being recorded all along \u2014 they were simply never shown to you.<\/li>\n<\/ul>\n\n<h4>1.13.0<\/h4>\n\n<ul>\n<li>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 \u2014 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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<p>Older releases are not listed here. The changelog is kept to the releases most likely to matter to someone deciding whether to update.<\/p>","raw_excerpt":"The best free features of Yoast SEO, Rank Math and All in One SEO, combined in one plugin. Free, with no account needed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362427"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webstuffguy"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362427"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362427"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362427"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362427"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362427"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}