PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / 2.7.1
Search Atlas SEO – OTTO AI SEO Automation for WordPress v2.7.1
2.7.1 2.7.2 2.7.0 2.6.26 2.6.25 2.6.24 2.6.23 2.6.22 2.6.21 2.6.20 2.6.19 2.6.18 2.6.17 2.6.16 2.6.15 2.6.14 2.6.13 2.6.12 2.6.11 2.6.10 2.6.9 2.6.8 2.6.7 2.6.6 2.6.5 All 141 releases
← All changes | readme.txt +20 -1315 2.7.0 → 2.7.1 View file →
@@ -3,10 +3,10 @@
3 3 Tags: seo, ai seo, otto, otto seo, schema
4 4 Requires at least: 6.3
5 5 Tested up to: 7.1
6 6 Requires PHP: 8.1
7 -Stable tag: 2.7.0
8 -License: GPL-2.0+
7 +Stable tag: 2.7.1
8 +License: GPL v3
9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.txt
10 10
11 11 AI-powered SEO & GEO for WordPress: OTTO auto-optimizes meta, schema & content, and helps you rank on Google and in AI search.
12 12
@@ -70,9 +70,9 @@
70 70
71 71 == Frequently Asked Questions ==
72 72
73 73 = What does the Search Atlas SEO plugin do? =
74 -It connects your WordPress site to Search Atlas so OTTO, our AI optimisation engine, can work on your pages. It applies titles, descriptions, alt text, headings, internal links and schema, and it lets you publish content straight from Search Atlas into WordPress in one click. You need a Search Atlas account to use it.
74 +It connects your WordPress site to Search Atlas so OTTO, our AI optimization engine, can work on your pages. It applies titles, descriptions, alt text, headings, internal links and schema, and it lets you publish content straight from Search Atlas into WordPress in one click. You need a Search Atlas account to use it.
75 75
76 76 = Do I need a paid Search Atlas account to use this plugin? =
77 77 Yes. The plugin connects to your Search Atlas account, and OTTO's AI-driven SEO features are available on paid Search Atlas plans.
78 78
@@ -95,8 +95,24 @@
95 95 = 2.6.22 =
96 96 2.6.22 fixes OTTO breaking Divi-built pages and stops a partly finished update from taking your site's front end down. Update as soon as you can.
97 97
98 98 == Changelog ==
99 += 2.7.1 =
100 +* Fix: The Changes Log admin page no longer shows misaligned headings or inconsistent toolbar control sizing
101 +* Fix: A "%" character in a saved settings value no longer fatals the page, and the plugin now survives partially-completed upgrades
102 +* Fix: Direct-access protection was added to PHP files that were missing it
103 +* Fix: Discouraged PHP functions were replaced with WordPress-native APIs across the codebase, confirmed dead code was removed, and the remaining intentional native calls are now documented
104 +* Fix: Audited and resolved SQL query safety findings across the plugin
105 +* Fix: Audited and resolved input sanitization and output escaping gaps across admin and public-facing code, including AJAX and settings save paths
106 +* Fix: Added missing nonce and capability checks across admin endpoints, AJAX handlers, and settings page actions
107 +* Fix: Redirects are now routed through safe WordPress redirect functions, data-directory writes are centralized, and legacy redirect rows with un-sanitized source URLs are healed automatically
108 +* Fix: Removed stray production debug logging and correctly scoped error handlers
109 +* Fix: The plugin FAQ now uses American spelling ("optimization"), matching the rest of the listing
110 +* Fix: Audited direct database queries, caching, and schema changes for WordPress.org compliance
111 +* Fix: Resolved internationalization findings so plugin text is properly translatable
112 +* Fix: Resolved the remaining zero-risk and newly-reported findings from ongoing WordPress.org Plugin Check scans
113 +* Improvement: Compatibility-checker plugin icons are now bundled locally instead of loaded from an external host
114 +
99 115 = 2.7.0 =
100 116 * New Feature: Headless WordPress support — the WordPress backend and a decoupled public frontend now stay in sync through SSO and heartbeat, with SEO data exposed over WPGraphQL, frontend-aware canonical and og:url rehosting, taxonomy canonical overrides, bulk payload resolution, and a dedicated Headless Mode section in Advanced settings
101 117 * New Feature: Safe OTTO Persistence restore — original Yoast, Rank Math and AIOSEO values are backed up before OTTO writes to them, nothing is written without explicit consent, and a restore action rolls every value back to its original state
102 118 * New Feature: Language Alternates (hreflang) can now be switched on or off per post and page from the editor settings
@@ -133,1316 +149,5 @@
133 149 * Fix: The Gutenberg SEO sidebar no longer shows a duplicate URL Slug field
134 150 * Fix: Social titles and descriptions no longer persist pre-filled post defaults, so renamed posts and edited excerpts update their social metadata correctly
135 151 * Security: White Label JSON imports no longer lock out the settings password recovery flow, so Forgot Password keeps working when a new whitelabel-settings.json is deployed
136 152
137 -= 2.6.25 =
138 -* Fix: Breadcrumb structured data no longer includes an invalid or dangling item on archive pages
139 -* Fix: The six Post/Page Editor "Disable" switches now actually suppress the matching frontend output, instead of only hiding the editor meta box
140 -* Security: Settings sanitization no longer lets raw POST input override sanitized values, closing a way crafted input could bypass sanitizers
141 -* Fix: Corrupted Local Business logo values are automatically repaired instead of continuing to serve a broken URL
142 -* Fix: Video sitemaps now detect theme-injected video players, instead of silently omitting every video on themes that inject players at render time
143 -* Security: The OTTO Debug page and its AJAX handlers are now fully disabled, instead of being reachable by any site admin
144 -* Improvement: The WordPress admin footer space is now hidden on MetaSync admin pages
145 -* Fix: OTTO no longer strips page content on Yootheme sites, by restricting link and heading persistence to Gutenberg blocks
146 -* Security: Whitelabel password recovery now uses single-use, short-lived reset links instead of emailing the password directly
147 -* Fix: Imported SEO values now consistently lose to OTTO through a single precedence resolver, instead of being overridden inconsistently across different code paths
148 -* Fix: The Menu Icon settings field no longer fatals when its value contains a percent sign
149 -* Security: Debug Mode's wp-config.php backups are now written atomically and no longer leave guessable, credential-bearing backup files in the web root
150 -
151 -= 2.6.24 =
152 -* Improvement: OTTO crawl notifications are now held in a durable queue with bounded retries and backoff, so large webhook batches are no longer silently truncated and each URL's outcome is recorded
153 -* Improvement: The sitemap settings screen no longer offers page-builder and internal post types in its post-type pickers
154 -* Improvement: The sitemap taxonomy picker now lists only genuine content taxonomies, hiding navigation menus, link categories and similar internal ones
155 -* Improvement: The promotional sidebar is now hidden once the site is connected, giving admin pages their full width back, and Quick Links point to working pages — the dead SEO Academy link is gone, Documentation and Contact Support were added, and branded links are hidden on whitelabeled installs
156 -* Improvement: The Local Business Type selector now shows a neutral "Select Type" placeholder instead of appearing pre-selected when no type has been chosen
157 -* Improvement: The Compatibility page now detects Bricks Builder when it is installed as a theme rather than a plugin
158 -* Security: MCP JWT tokens are now bound to the API key that issued them, so rotating the key or disconnecting the site revokes existing tokens immediately instead of leaving them valid for 24 hours
159 -* Security: Failed MCP API-key authentication attempts are now counted, throttled and locked out instead of being accepted at unlimited speed
160 -* Security: The schema markup editor's background requests now require edit permission on the target post, so lower-privileged users can no longer read other authors' drafts, private posts or password-protected content
161 -* Security: Removed the shared whitelabel/debug credential, required administrator rights for OTTO debug tools, gated Google Index credential and destructive debug actions, disabled raw database and option reads over MCP, and reduced telemetry to path-only context that honors opt-out
162 -* Security: The HTML editor and whitelabel recovery now require the matching capability, Developer Tools passwords are hashed and migrated off plaintext, and both MCP bridges run through one authenticated, rate-limited handler
163 -* Security: Redirect destinations are now validated before use, closing an open-redirect risk in the redirections module
164 -* Fix: A /sitemapN.xml URL with no sitemap behind it now returns 404 instead of serving the home page under a 200, which was creating unlimited soft-404 duplicate URLs for crawlers
165 -* Fix: Sitemap generation now reports a real failure when the sitemap could not be stored, instead of showing success while the site serves no sitemap
166 -* Fix: Opening an OTTO preview no longer signs administrators out of wp-admin or breaks the admin session check
167 -* Fix: MetaSync no longer emits a second Article JSON-LD block on posts that already have one from Yoast, Rank Math or AIOSEO
168 -* Fix: Slashes, backslashes and quotes are preserved in Local Business and Article schema values, so a name like 24/7 "Test" Plumbing is no longer output as 247 Test Plumbing
169 -* Fix: Search engine crawlers whose user agent omits the brand name (Yahoo's Slurp, Applebot, Sogou, Exabot and others) are now recognized as search engines and served optimized pages instead of being throttled
170 -* Fix: OTTO's category and tag SEO values are no longer mirrored into Yoast / Rank Math / AIOSEO storage when the matching OTTO Persistence setting is turned off
171 -* Fix: OTTO's structured data is no longer copied into Rank Math or Yoast storage when the structured data Persistence setting is turned off
172 -* Fix: Rank Math's robots tag is now suppressed when MetaSync holds a robots value for the post, so exactly one robots meta tag ships
173 -* Fix: Removing MetaSync's breadcrumb from a third-party schema graph no longer breaks Rank Math's own schema logic
174 -* Fix: Posts synced from Content Genius keep the page template the site actually uses, instead of being forced onto the theme's plain template and losing their layout
175 -* Fix: Redirects now preserve the incoming query string, including through redirect chains, and OTTO no longer serves mismatched HTML and SEO metadata when its internal fetch is redirected elsewhere
176 -* Fix: The WordPress admin sidebar no longer drifts down the screen while scrolling on MetaSync admin pages
177 -* Fix: The connect status box no longer squeezes the "Website Not Registered" message into a one-word-per-line column with a detached warning icon
178 -* Fix: The "Page Builder Detected" notice now appears only on the plugin settings screen where the setting lives, instead of repeating on every plugin page
179 -* Fix: Previewing a draft no longer serves the home page instead of the draft on sites using SiteGround Optimizer — OTTO now skips WordPress core preview requests
180 -* Fix: The Local Business logo is no longer lost when the settings are saved — the selected image survives the save instead of being rewritten into a broken link, so both the admin preview and the logo published in structured data stay correct
181 -* Fix: The SearchAtlas Dashboard admin page no longer fatals after an in-place upgrade when one plugin file is still being served from a stale cache
182 -* Fix: Redirections sweep — 24 verified issues fixed, including importers failing on serialized data, the search box triggering a bulk delete, a hit-counter race, non-deterministic rule ordering, duplicate rules on re-import, missing redirect-loop guards and silently dropped save failures
183 -* Fix: Media optimization sweep — 18 verified issues fixed, including data loss in the replace strategy (sub-size originals deleted while only the full-size URL was rewritten), an author-role privilege escalation, srcset entries pointing at missing files, and a race between cron and browser batch ticks
184 -* Fix: Robots / sitemap / indexing sweep — 25 verified issues fixed, including core's "discourage search engines" setting being overwritten, the virtual robots.txt never being served on the frontend, IndexNow rejecting platform keys, existing Sitemap: lines being destroyed on update, and uninstall leaving everything behind
185 -
186 -= 2.6.23 =
187 -* Improvement: The plugin now automatically detects when a host is blocking GET/POST traffic to Search Atlas, both on activation and on a weekly recheck, instead of requiring the site owner to run the check manually
188 -* Improvement: Pages that don't rely on sessions can now be cached by the host again on SiteGround/Oxygen sites using OTTO's HTTP render path, restoring page-load speed
189 -* Improvement: The Custom Pages STATUS column now shows "Published" / "Draft" / "Pending Review" instead of the raw "Publish" verb, and no longer looks like a clickable button
190 -* Improvement: The Excluded URLs table's description text is now readable in dark mode, and the Recheck button no longer deletes the entry it was rechecking
191 -* Improvement: OTTO's stale suggestion fallback is now retained for a fixed 12 hours
192 -* Improvement: Removed the non-functional "Grant Temporary Support Access" option from the Report Issue page, since it never actually granted any access
193 -* Improvement: Lowered the minimum required PHP version from 8.2 to 8.1 (AVIF image conversion still requires PHP 8.2+; WebP is unaffected)
194 -* Security: Schema/JSON-LD output is now safely encoded everywhere it's emitted, closing a script-injection risk from crafted field values
195 -* Fix: "Auto Draft" no longer gets stored as the page's social title/description when the social meta box is opened before a post has a real title
196 -* Fix: On non-English sites, a localized "Auto Draft" placeholder (e.g. "Automatischer Entwurf") no longer leaks into the page title, og:title or twitter:title — the earlier fix only recognized the English placeholder text
197 -* Fix: OTTO's status indicators (admin bar, debug bar, SEO columns) now correctly show a manually excluded URL as disabled instead of still reporting it as enabled
198 -* Fix: "Ends with" and "regex" OTTO URL exclusion rules are now honored on the page a visitor actually loads, not just when a URL is queued for optimization
199 -* Fix: A redirect rule no longer causes OTTO's internal page fetch to re-enter itself repeatedly, which could exhaust the site's PHP workers and take it offline
200 -* Fix: Restored host-level page caching on sites combining a booking plugin with SiteGround Optimizer, which had been forced into an always-uncached state
201 -* Fix: The page's <head> tag is no longer rewritten in a way that breaks other plugins or host layers that inject scripts or styles into the head
202 -* Fix: Google Fonts using multiple font families no longer get truncated to a single font on OTTO-rendered pages
203 -* Fix: Blog posts synced from Content Genius no longer lose their tables, and post markup is no longer mangled on PHP 8.4
204 -* Fix: Deleting the last excluded URL on a page beyond the first no longer dead-ends the list on a false "No excluded URLs found" state
205 -* Fix: Hidden admin pages (Local Business, Breadcrumbs, Site Verification, Setup Wizard) now show a proper browser tab title instead of a blank one
206 -* Fix: OTTO's internal values are no longer mirrored into Yoast / Rank Math / AIOSEO storage when the matching OTTO Persistence setting is turned off
207 -
208 -= 2.6.22 =
209 -* Improvement: The WordPress admin sidebar now shows a focused 8-item menu by default, with the remaining pages reachable from the plugin's in-page sidebar and a new search box for finding them
210 -* Improvement: The Redirections, 404 Monitor, Heartbeat Error Monitor and Media Optimization lists now have a results-per-page selector that remembers each user's choice
211 -* Improvement: The classic editor's separate MetaSync meta boxes (SEO, Robots, Canonical, Redirection, Social and Open Graph, Schema, Video Sitemap) are consolidated into a single tabbed "SEO Suite" box with a live social preview
212 -* Improvement: OTTO diagnostic response headers are now sent only while Debug Mode is on, so they no longer appear on public responses or leak the product name on white-labeled installs
213 -* Security: Refreshing the Plugin Auth Token now requires administrator permissions
214 -* Fix: Pages built with Divi are no longer broken by OTTO — an HTML parsing flaw discarded every attribute following an unquoted attribute value, which stacked carousel slides, threw the header and footer out of position and left the page growing without settling
215 -* Fix: Articles synced from Content Genius no longer repeat the contents of a bulleted list as plain paragraphs directly beneath it
216 -* Fix: SEO titles and descriptions imported from All in One SEO now have their smart tags resolved instead of being stored literally, which had left tokens such as #post_title rendering as the page title and suppressing OTTO
217 -* Fix: A page no longer emits two conflicting og:description tags when a third-party SEO plugin owns the output for that post
218 -* Fix: og:title and twitter:title are no longer left off the page when a third-party SEO plugin's tags are suppressed — a replacement is now emitted from the MetaSync title instead of the raw post title
219 -* Fix: When OTTO cannot apply its suggestions, the un-optimized page is now cached for at most 60 seconds instead of the host's full cache lifetime, so a brief hiccup no longer pins un-optimized markup for hours and looks like the OTTO title reverting
220 -* Fix: A slow or unreachable OTTO connection no longer ties up the site's PHP workers — repeated calls to a failing endpoint now pause briefly before being retried, and requests that never needed optimization (404s, static files, robots.txt and well-known paths) skip the lookup entirely
221 -* Fix: A partially updated install no longer takes the front end down with a fatal error when another plugin writes post meta
222 -* Fix: Stale or malformed scheduled OTTO background jobs are now skipped instead of causing fatal errors
223 -* Fix: Exporting white-label settings no longer downloads the file twice
224 -* Fix: The Local Business logo remove icon is now a small badge offset from the image instead of an oversized button overlapping the preview
225 -
226 -= 2.6.21 =
227 -* Improvement: The Sitemap Settings screen now warns when a generated News or Video sitemap contains 0 URLs, so it is clear whether that is expected or a misconfiguration
228 -* Improvement: Added optional SEO Title, Meta Description, Noindex and Nofollow columns to the Posts and Pages admin list (enable via Screen Options)
229 -* Fix: OTTO no longer emits a redundant Vary: Accept-Encoding header, which could cause CDN edge caches to treat pages as non-cacheable and route every visitor to origin PHP
230 -* Fix: Importing Yoast advanced robots meta no longer throws a fatal error when the stored value is not a plain string
231 -* Fix: Page-cache warmer and performance-auditor requests are no longer throttled by OTTO rendering, which had been preventing some sites page caches from populating and made PageSpeed scores appear artificially low
232 -* Fix: Removed the redundant Index checkbox from Common Robots settings, fixed a case where No Index set via the meta box could be silently ignored when advanced robots data was present, and simplified noindex output to only include indexing/crawling directives
233 -* Fix: The SEO Health dashboard now reads the same SEO title and description a page actually uses, instead of showing OTTO value when the customer own sidebar value was what really rendered
234 -* Fix: The plugin REST API no longer returns 401 on sites with a strict logged-in-users-only REST restriction from a security plugin or snippet, which had been silently breaking publishing and syncing on those sites
235 -
236 -= 2.6.20 =
237 -* Improvement: The OTTO Debug comparison panel now shows the Meta Description when OTTO delivers it as raw header HTML instead of a structured replacement
238 -* Improvement: Added a tooltip to the Content Genius Synchronization card explaining that "Sync Now" sends the site's categories and authors so published articles are assigned correctly
239 -* Security: Added the missing permission and nonce checks to the Heartbeat Error Monitor's bulk actions
240 -* Fix: The trash icon on the "Remove" button in the Schema Markup meta box is aligned correctly again
241 -* Fix: Sitemaps are no longer corrupted by stray PHP notices or warnings emitted by other plugins, which previously produced invalid XML that search engines rejected
242 -* Fix: The "Default Page Builder" dropdown no longer renders its option labels invisible unless they are hovered
243 -* Fix: Corrected the malformed robots meta tag produced when SEO data is synced into Rank Math
244 -* Fix: Open Graph and Twitter tags are no longer stripped when the per-post "Enable Open Graph and Social Media Tags" toggle is off, so Yoast SEO and All in One SEO can supply their own again
245 -* Fix: The delete icon in the Robots.txt Backup History panel now uses a consistent color across WordPress versions
246 -* Fix: The Compatibility page no longer reports the site's active theme as "Not installed" when the theme's display name differs from its folder name
247 -* Fix: The Local Business logo "Add or Upload File" button opens the media library again
248 -* Fix: Bulk actions chosen from the control at the bottom of the Redirections, 404 Monitor and Heartbeat Error Monitor lists now apply instead of doing nothing
249 -* Fix: Saved Local Business details are now output as LocalBusiness structured data on the front end
250 -* Fix: The per-page "Disable OTTO" toggle now also suppresses previously stored OTTO titles and descriptions instead of continuing to serve them
251 -* Fix: Values entered in the "Advanced Robots Meta" meta box are kept after saving a post instead of resetting on refresh
252 -* Fix: The "no results" placeholder no longer appears under short checkbox lists in Sitemap Settings when nothing has been searched
253 -* Fix: A custom SEO title or meta description set in the SEO sidebar now always takes precedence on the live page, instead of being overridden by OTTO when OTTO is connected
254 -
255 -= 2.6.19 =
256 -* Improvement: Removed the unused legacy "Optimal Settings" page
257 -* Improvement: Reworked the Search Atlas connection to a pull-based flow so sites behind firewalls that block inbound callbacks can still connect reliably
258 -* Fix: Resolved a case where content failed to sync to WordPress due to a www/non-www hostname mismatch during connection
259 -* Fix: robots.txt no longer continues to reference sitemap URLs after the sitemaps have been deleted or disabled
260 -* Fix: Sitemap generation, including video and news sitemaps, no longer exhausts server memory on sites with large content catalogs
261 -* Fix: The video sitemap no longer produces invalid XML when a post description contains HTML entities or shortcodes
262 -* Fix: OTTO no longer breaks concatenated CSS/JS URLs (for example Jetpack Boost), so optimized pages render with their styles intact
263 -* Fix: "Delete All Sitemaps" now reliably removes all sitemaps even when one is served from a stale cache
264 -* Fix: Restored compatibility with the Enfold/Avia builder so the Accordion Toggle Title field accepts letters, not just numbers
265 -* Fix: Deleted robots.txt backup history entries no longer reappear after refreshing the page
266 -
267 -= 2.6.18 =
268 -* Improvement: Increased the White Label plugin-name limit so custom plugin names of up to 18 characters are no longer truncated
269 -* Improvement: Added explanatory tooltips across the admin settings so the purpose of each option is clear
270 -* Improvement: Made the API key error message readable when a stored key cannot be read and re-authentication is required
271 -* Security: The Search Atlas API key is now masked in the settings UI and encrypted at rest
272 -* Fix: Customer-set Open Graph and Twitter/social values now take priority over OTTO on optimized pages, and a social image is always output
273 -* Fix: Reverting a single optimized image no longer deletes its converted WebP file, and re-syncing content restores images that were previously broken
274 -* Fix: Bing IndexNow verification no longer fails with "key not found" on hosts that serve the key as a static file
275 -* Fix: robots.txt no longer advertises a sitemap URL when the XML sitemap is disabled or not generated
276 -
277 -= 2.6.17 =
278 -* Improvement: Fixed the Refresh Token button's oversized icon and misalignment on the settings page
279 -* Improvement: The Redirections search field now triggers a search when pressing Enter, not only when clicking the Search button
280 -* Fix: Prevented a fatal error when WordPress internally checks for a white screen after saving a theme file
281 -* Fix: Prevented a fatal error when clearing edge cache for a single URL
282 -* Fix: Prevented invalid `http://Array` canonical URLs from being output and cleaned up already-corrupted stored values
283 -
284 -= 2.6.16 =
285 -* Security: Whitelabel password is now encrypted at rest instead of stored in plain text
286 -* Security: Prevented path traversal from unvalidated slugs in imported ZIP manifests
287 -* Security: Validated file paths built from ZIP manifest slugs before reading them
288 -* Performance: Capped image-processing resource usage to prevent unbounded memory consumption
289 -* Performance: Added a maximum image dimensions setting that downscales oversized images before conversion
290 -* Performance: Cached image dimensions to avoid repeated file reads on every page render
291 -* Performance: Batched the content URL rewrite query to prevent database table locks
292 -* Performance: Raised the memory limit before heavy image processing to avoid out-of-memory failures
293 -* Performance: Reduced memory usage during HTML rendering on large pages
294 -* Performance: Prevented memory exhaustion caused by bot and vulnerability-scanner traffic
295 -* Performance: Prevented image conversion from exceeding PHP's maximum execution time during media optimization
296 -* Improvement: Surfaced the Focus Keyword as a read-only field in the Gutenberg SEO sidebar
297 -* Improvement: Excluded Website Studio / custom HTML pages from SEO audit, inventory, and analysis surfaces
298 -* Improvement: Hid SEO meta fields on Website Studio-synced pages and show a read-only notice instead
299 -* Improvement: Labeled Website Studio-synced pages with a post state in the admin Pages list
300 -* Improvement: Stopped admin notices from causing layout shift and viewport scroll when navigating between plugin features
301 -* Improvement: Fixed checkbox alignment with their labels on the Redirections screen
302 -* Improvement: Bundled the default plugin logo locally instead of hotlinking it
303 -* Improvement: Fixed icon alignment on the Schema Markup metabox
304 -* Improvement: Show a sitemap conflict notice on the Video and News sitemap tabs when another SEO plugin is active
305 -* Improvement: Fixed a color mismatch and text crowding on the Schema Markup metabox Remove button
306 -* Improvement: Fixed the "Hide Dashboard" option so it actually hides the dashboard from the admin menu, and corrected its help text
307 -* Improvement: Streamlined the plugin entry file for maintainability
308 -* Fix: Fixed several bugs surfaced by static analysis
309 -* Fix: Fixed broken thumbnails for orphaned images and cleaned up converted files when the originals are deleted
310 -* Fix: Made multi-page imports idempotent so re-importing no longer creates duplicate pages when a slug collides
311 -* Fix: MetaSync REST authentication now coexists with third-party JWT authentication plugins
312 -* Fix: Heartbeat status badge now reflects a stale or dead sync instead of always showing "Connected"
313 -* Fix: Purge page and edge cache after import to prevent stale-asset white screens on republish
314 -* Fix: Fixed white-label leaks where product names appeared across admin, Site Health, toolbar, and import screens
315 -* Fix: Restored the XML Sitemap and other REST responses that could return blank
316 -* Fix: Prevented OTTO from silently serving un-optimized HTML on Divi and other page-builder pages
317 -* Fix: Ensured canonical optimization is reliably applied
318 -* Fix: Stopped query strings from being stripped, which caused search and query-only URLs to serve the home page for logged-in and cache-bypass users
319 -* Fix: The post-edit Redirection metabox now applies per-post redirects on the frontend
320 -* Fix: Stopped serving schema markup when no schema has been deployed
321 -* Fix: The canonical metabox now emits the configured canonical URL
322 -* Fix: Prevented the CPU load gate from dropping sync jobs on hosts where CPU-core detection fails
323 -* Fix: The XML sitemap no longer hijacks sitemap URLs when disabled or deleted, allowing Rank Math, Yoast, and AIOSEO sitemaps to work
324 -* Fix: Purge page and edge cache when clearing the OTTO cache, so stale optimized markup (such as a hidden injected heading) is no longer served
325 -* Fix: Removed duplicate <meta name="description"> tags on OTTO-optimized pages when MetaSync is the only active SEO plugin
326 -* Fix: Stopped the meta description from being dropped when a synced third-party SEO plugin (Yoast, Rank Math, AIOSEO) has an empty description field
327 -
328 -= 2.6.15 =
329 -* Improvement: Added a search icon to the SEO Health search field
330 -* Improvement: Fixed the sort-arrow placement in the SEO Health table column headers
331 -* Improvement: Prevented multi-page imports from nesting imported pages under existing unrelated (non-imported) parent pages
332 -* Fix: Stopped the plugin from removing featured images on sites that offload media with WP Stateless
333 -* Fix: Prevented og:description from auto-filling with raw page-builder shortcodes on Divi and Elementor pages, so social and link previews show clean text
334 -* Fix: Served the IndexNow key file dynamically instead of writing it to disk, so key verification works on read-only web roots and on nginx hosts that block direct access to static .txt files
335 -* Fix: Resolved the "IndexNow key not found" (400) error when configuring Bing IndexNow, so setup completes successfully
336 -* Fix: Made the Instant Indexing service-account JSON upload accept the file by its extension, so it saves reliably across all browsers and operating systems
337 -* Fix: Restored the white-label light logo in the admin header on light theme
338 -
339 -= 2.6.14 =
340 -* Improvement: Content Genius "User Roles to Sync" now lists only roles that can author content
341 -* Improvement: Added a dropdown arrow indicator to the Image Library "Bulk Actions" and "All Images" filter fields
342 -* Improvement: Added consistent top padding between Advanced Settings section headers and their content
343 -* Improvement: Stopped the OTTO debug toolbar from rendering twice on Oxygen Builder pages
344 -* Fix: Prevented OpenGraph description generation from rendering the full page in the head, which dropped Elementor loop-grid CSS and broke page layout
345 -* Fix: Scoped the OTTO Cache-Control private header to the HTTP render path so it no longer disables host/CDN caching site-wide
346 -* Fix: Scoped OTTO SiteGround no-cache to pages with suggestions, preventing a site-wide cache bypass and CPU spikes
347 -* Fix: Resolved a 500 error on plugin activate/deactivate on SiteGround and stopped OTTO from interfering with the Elementor editor
348 -* Fix: Fixed the Instant Indexing "Clear Configuration" button on the Indexation Control page
349 -
350 -= 2.6.13 =
351 -* Improvement: Made the Media Optimization "Optimize" and "Revert" buttons equal in size
352 -* Improvement: Fixed stacked filter dropdowns in the Changes Log filter bar
353 -* Improvement: Fixed the cache directory path overflowing its container on the Cache tab
354 -* Improvement: Improved breadcrumb code-box contrast in light mode and added click-to-copy on snippet boxes
355 -* Improvement: Added vertical spacing between the Auth Token field and Refresh Token button on the Settings page
356 -* Improvement: Added vertical spacing between settings form rows so blocks no longer merge together
357 -* Security: Wrapped admin nonce outputs in esc_attr() to prevent XSS in HTML attributes
358 -* Fix: Prevented lazy-load video iframe CSS from breaking page layout and hiding homepage content
359 -* Fix: Prevented a fatal "undefined constant" error during OTTO rendering on pre-2.6.11 installs
360 -* Fix: Corrected OTTO double-encoding of "&" in HTML attributes that broke theme icon fonts
361 -* Fix: Stopped OTTO from renumbering Divi column width classes and collapsing page layouts
362 -
363 -= 2.6.12 =
364 -* New Feature: The imported Webstudio(LPS) home page is now set as the WordPress front page
365 -* New Feature: Added persistent audit logging for Webstudio(LPS) ZIP imports
366 -* Improvement: Execution Settings fields now display side-by-side in a responsive two-column layout
367 -* Improvement: Hardened the White Label menu slug and fixed settings-save validation
368 -* Improvement: OTTO rendering is now skipped on custom and Webstudio(LPS)-imported pages
369 -* Improvement: Deleting a custom or Webstudio(LPS) page now cleans up shared assets and resets the front page when needed
370 -* Improvement: Webstudio(LPS) home imports now use the project UUID as the per-project deduplication key
371 -* Security: Added nonce and capability checks to the Instant Indexing AJAX handlers (Google GIAPI and Bing IndexNow)
372 -* Security: Added nonce and capability checks to the redirections list-table actions
373 -* Security: Added nonce and capability checks to the 404 Monitor list-table actions
374 -* Security: Hardened input sanitization for per-post snippets and the hero image URL
375 -* Fix: Prevented duplicate H1 headings on Content Genius synced posts
376 -* Fix: Resolved a fatal error during ZIP import caused by an undefined temporary-file helper in REST/MCP context
377 -* Fix: Prevented a fatal "class not found" error on plugin update when the installed directory name differs from the package slug
378 -* Fix: Batched SEO indexation option imports to prevent PHP memory exhaustion on large sites
379 -* Fix: Corrected connection status to show "Not Connected" after manual API key entry and Sync Now
380 -* Fix: Guarded get_current_screen() calls to prevent fatal errors in REST context
381 -* Fix: Execution Settings now reports the real server upload limit instead of a hardcoded 128 MB
382 -* Fix: Fixed a case where activating the plugin caused 404s on all pages except the home page
383 -* Fix: Prevented a TypeError when a non-string value was passed to meta element handling
384 -* Fix: The "Disable SEO Meta Box" setting now correctly hides the SEO meta box in the Classic editor
385 -* Fix: The "Disallow Empty Archives" toggle is now saved correctly on SEO Controls
386 -
387 -= 2.6.11 =
388 -* New Feature: Added SEO Title & Meta Description fields to the Classic editor, matching the Gutenberg sidebar
389 -* New Feature: Added a configurable OTTO cache TTL setting under Advanced Settings → Cache Management
390 -* New Feature: Added a ZIP upload endpoint and MCP tool for importing landing pages
391 -* New Feature: Import Open Graph and Twitter social titles and descriptions from Yoast, Rank Math, and AIOSEO
392 -* New Feature: Import Open Graph and Twitter social images from Yoast, Rank Math, and AIOSEO
393 -* Improvement: Added a pre-flight memory check before image conversion to avoid exhausting PHP memory
394 -* Improvement: Batch optimizer batch size now adapts to available server memory
395 -* Improvement: Replaced unbounded media queries with paginated queries in the batch optimizer
396 -* Improvement: Sub-size image conversion is now split across requests to reduce peak memory usage
397 -* Improvement: Cron batch processing now respects the server's max_execution_time limit
398 -* Improvement: WordPress core sitemap is automatically disabled while the MetaSync sitemap is active
399 -* Improvement: Redirect saves now warn when the destination URL does not resolve
400 -* Improvement: The MCP sitemap check now uses the plugin's virtual sitemap tracking instead of physical files
401 -* Improvement: 404 Monitor no longer logs WordPress system paths as broken links
402 -* Improvement: Added a magnifier icon to the Media Optimization search field
403 -* Fix: OTTO no longer corrupts inline JavaScript by collapsing modern operators during rendering
404 -* Fix: Resolved fatal errors on Divi sites during OTTO HTTP rendering and from a missing admin navigation class
405 -* Fix: Prevented fatal errors from missing dependencies — telemetry autoload, the 404 Monitor database class, the DOMDocument extension, and a removed Yoast SEO title separator method
406 -* Fix: OTTO titles, descriptions, and schema now persist reliably — saved even when unchanged, back-filled to SEO plugin fields, kept after un-deploy, and output when OTTO is off
407 -* Fix: Stopped duplicate Open Graph/Twitter tags and cleared social meta when duplicating a post
408 -* Fix: Archive pages now output their own canonical URL and og:url instead of the first post's
409 -* Fix: WebP picture tag rewriting now applies to Divi featured images
410 -* Fix: Sitemap now includes pages and custom post types when category/tag filters are set
411 -* Fix: Resolved a schema markup settings key inconsistency in the settings API
412 -* Fix: Settings saves no longer show a false error notice, meta-box checkboxes persist, and a race condition that could wipe settings was resolved
413 -* Fix: OTTO image alt text now applies when pages use relative image URLs
414 -* Fix: Polished admin UI — Optimization Rate stats card alignment, tab icon centering, and XML Sitemap checkbox spacing
415 -
416 -= 2.6.10 =
417 -* New Feature: Media Optimization — compress images and serve next-gen WebP/AVIF formats to improve page load speed
418 -* New Feature: Added post type, taxonomy, and URL exclusion controls across all sitemaps
419 -* New Feature: Added per-file Delete buttons for individual XML sitemaps (General, News, Video)
420 -* Improvement: Switched sitemap generation to virtual-only mode with regenerate-on-miss to resolve nginx 403 errors
421 -* Improvement: Renamed sitemap Save buttons to "Save & Generate Sitemap" across the General, News, and Video tabs
422 -* Improvement: Throttled bot crawl-log requests to reduce server load on high-traffic sites
423 -* Fix: Resolved a case where the plugin caused site outages on cart/checkout and non-GET requests
424 -* Fix: Restored meta boxes and SEO fields on custom post types
425 -* Fix: OTTO no longer reports as installed on projects with non-matching UUIDs
426 -* Fix: Preserved Divi's late-injected CSS during OTTO server-side rendering and fixed Divi blog/portfolio AJAX pagination
427 -* Fix: Respected Yoast SEO titles and descriptions when OTTO is undeployed
428 -* Fix: Scoped OTTO cache keys and rate limits per site on Multisite installs
429 -* Fix: Skipped OTTO rendering on XML endpoints to prevent invalid output
430 -* Fix: Sanitized malformed self-closing tags during OTTO rendering that could expand site navigation
431 -* Fix: Prevented duplicate H1 headings when content already contains the post title
432 -* Fix: Guarded the mime_content_type() call to prevent fatal errors on hosts without the fileinfo extension
433 -* Fix: Deduplicated URLs and filtered junk entries from the XML sitemap
434 -* Fix: The XML Sitemap sidebar now stays fixed instead of scrolling with the page
435 -* Fix: 404 Monitor date filters now persist across pagination and sorting and apply only when the filter button is clicked
436 -* Fix: Connection status no longer flips to "Not Connected" on idle plugin pages
437 -* Fix: Corrected WP Rocket compatibility render-mode detection
438 -* Fix: Suppressed admin notices from rendering inside the setup wizard header
439 -* Fix: Removed dangling breadcrumb references when stripping third-party BreadcrumbList schema
440 -* Fix: Breadcrumbs checkbox values now persist correctly when unchecked
441 -* Fix: Fixed the Quick Links table background and borders in dark mode
442 -* Fix: Fixed dashicon button icon misalignment on some sites
443 -* Fix: Tightened REST API auth callbacks and fixed primary category cleanup on custom post types
444 -* Fix: Fixed the perpetual Sync Now throttle message by separating the manual-sync cooldown from the heartbeat
445 -
446 -= 2.6.9 =
447 -* Security: Move API key authentication from query parameter to Authorization Bearer header
448 -* Security: Fix X-Forwarded-For IP spoofing in OTTO bot detector — trust Cloudflare header first
449 -* Security: Cache-Control changed from public to private to prevent CDN nonce sharing
450 -* Fix: OTTO heading replacement corrupted when heading contains inline elements (e.g. span tags)
451 -* Fix: SSO one-click auth fails on sites with external object cache
452 -* Fix: Guard against missing DOMDocument extension in check_and_fix_post_content
453 -* Fix: POST heartbeat before GET ping on manual API key save to register WPWebsiteHeartbeat
454 -* Fix: Strict-equality bug in is_virtual_mode() causing Virtual badge not to show after first request
455 -* Fix: Remove newline-to-br replacement that injects whitespace into synced content
456 -* Improvement: API key input field now reverts to previous valid key on validation failure
457 -* Improvement: Deployed OTTO titles no longer show on frontend when Disable OTTO for Logged in Users is enabled
458 -* Improvement: Robots.txt Disallow / warning now triggers correctly with fixed regex matching
459 -* Improvement: Robots.txt timestamps now respect WordPress timezone setting instead of hardcoded UTC
460 -
461 -= 2.6.8 =
462 -* Security: Use hash_equals() for timing-safe API key comparison in custom pages API
463 -* Security: Resolve 4 Snyk Code MEDIUM findings — DOM XSS and info exposure
464 -* Security: Fix open-redirect vulnerability in redirection plugin with domain validation
465 -* Fix: Original image permanently deleted before converted file is validated — data loss on Imagick memory failure
466 -* Fix: Light SA logo not visible on light theme
467 -* Fix: Strip OTTO post meta when WordPress pages are cloned or duplicated
468 -* Fix: Sitemap and LLMs.txt transients not invalidated when content is updated
469 -* Improvement: Make bot statistics table responsive at narrow viewports
470 -* Improvement: Refactor sitemap collect_all_urls() to eliminate N+1 query explosion
471 -* Improvement: Exclude Beaver Builder templates from sitemap generation
472 -* Improvement: Upgrade routine flag logic and unit tests for Beaver Builder template exclusion
473 -
474 -= 2.6.7 =
475 -- Fix: OTTO buffer caching empty/error pages
476 - - Fix: PHP lexicographic string comparison in execution time validation
477 - - Fix: Plugin causing server overload via unbounded cron accumulation
478 - - Fix: Replace TRUNCATE with bounded delete in 404 monitor add()
479 - - Fix: Add redirect-loop detection to edit and import paths
480 - - Fix: Non-atomic OTTO cache lock allowing concurrent workers to bypass lock
481 - - Fix: Remove duplicate inline JS causing double POST on excluded URL add
482 - - Fix: Replace TOCTOU rate limiter with atomic wp_cache_add/incr pattern
483 - - Fix: Fill empty catch blocks in OTTO render strategy with error_log and telemetry
484 - - Fix: Harden JWT verification and protect sensitive wp_options in MCP server
485 - - Fix: Breadcrumbs disable_schema checkbox state not persisting on save
486 - - Fix: OTTO title/schema override checks live suggestions when third-party SEO plugin active
487 - - Fix: Centralize cron-hook cleanup on plugin deactivation
488 - - Fix: API key validation fails when WordPress Home URL uses www subdomain
489 - - Fix: Add per-user transient caching to admin bar status indicator
490 - - Fix: Make sitemap generation memory-safe with streaming and filesystem fallbacks
491 - - Fix: Add static flag guard to eliminate redundant schema queries
492 - - Fix: Create Redirect button from 404 Monitor not opening redirection form
493 - - Security: Remediate 47 semgrep findings across plugin codebase
494 -
495 -= 2.6.6 =
496 -- Fix: Invalidate OTTO JS detection transient on settings save and cache clear
497 - - Fix: Harden MCP tool registration to prevent fatal error on missing class
498 - - Fix: Heartbeat public-hash cache-key mismatch
499 - - Fix: TypeError on strtolower() with array @type in OTTO crawl-notify endpoint
500 - - Fix: Gate admin JS loading to MetaSync pages only
501 - - Fix: Process OTTO webhook URLs in background via WP-Cron
502 - - Fix: Optimize sync history cleanup with fetch-then-delete pattern
503 - - Fix: Cache OTTO manual exclusion list with transient and add composite index
504 - - Fix: Use SELECT COUNT(*) instead of loading all records in get_count()
505 - - Fix: Remove blocking Facebook Graph API call from wp_head
506 - - Fix: Only load MetaSync admin CSS on plugin pages
507 - - Fix: Lazy-load MCP server and SEO-inventory controller for non-MCP requests
508 - - Fix: Broken SQL placeholder in get_attachment_by_name()
509 - - Fix: Refactor rate limiter to use per-key transients instead of wp_options blob
510 -
511 -= 2.6.5 =
512 -- Feat: Native-First SEO Write Layer — sync all MetaSync/OTTO optimizations to native WordPress SEO meta fields
513 - - Feat: Per-post advanced robots directives — nofollow, noarchive, nosnippet, noimageindex, max-snippet, max-image-preview, max-video-preview
514 - - Feat: Redirect health checker — MCP tool + admin panel
515 - - Feat: Redirect loop detection on create/save
516 - - Fix: Reduce memory footprint by gating heavy init on non-MetaSync AJAX requests
517 - - Fix: ArgumentCountError resolved by replacing printf with echo in code-snippets template
518 - - Fix: Unhook Elementor filters during MCP update_site_info under API key auth
519 - - Fix: Rename 16 non-prefixed AJAX actions to use metasync_ prefix
520 - - Fix: Promo sidebar overlap with main nav at narrow viewports
521 - - Fix: OTTO DOM corruption when page text contains less-than followed by digits
522 - - Fix: Restore case-sensitive SVG/HTML5 attributes after OTTO DOM processing
523 - - Fix: MetaSync status badge not updating on disconnect/reconnect
524 - - Fix: Remove duplicate canonical tags on sites without third-party SEO plugin
525 - - Fix: Submit Report button icon vertical alignment
526 - - Fix: 404 Monitor pagination layout and filter row overflow
527 - - Fix: Responsive layout for Redirections tablenav filters and search
528 -
529 -= 2.6.4 =
530 -- Fix: LLMs.txt settings now correctly persisted on save
531 - - Fix: Hidden diagnostic post no longer triggers Jetpack Social or RSS auto-share
532 - - Fix: mb_encode_numericentity() fatal on hosts without mbstring extension replaced with pure-PHP fallback
533 - - Fix: class-metasync-term-plugin-sync.php require_once guarded with file_exists to prevent fatal on Nexcess hosting
534 - - Fix: wp_tempnam() undefined fatal in Dimension Injector when called outside wp-admin context
535 - - Fix: WpeCommon::purge_url() undefined fatal in cache purge on WP Engine now guarded with method_exists
536 - - Fix: MCP_Tool_Cache_Purge_All class not found fatal guarded with class_exists check
537 - - Fix: Google Index require_once calls guarded with file_exists to prevent fatal when files are missing
538 - - Fix: PHP 8.1 add_submenu_page(null) deprecation fixed in import page and HTML visual editor
539 -
540 -= 2.6.3 =
541 -- Feature: BreadcrumbList schema auto-generated from post hierarchy with cross-plugin deduplication for Yoast, Rank Math, and AIOSEO
542 - - Feature: Hreflang language alternates support with WPML integration for multilingual sites
543 - - Feature: LLMs.txt generator with dedicated settings page and MCP tools
544 - - Feature: News sitemap and video sitemap generation
545 - - Feature: Taxonomy term SEO meta synced to Yoast, Rank Math, and AIOSEO for category and tag archive pages
546 - - Feature: Open Graph output extended with article timestamps, author, section, tags, and og:image dimensions
547 - - Feature: MCP tools for SEO plugin audit — read, diff, sync, and conflict detection across installed SEO plugins
548 - - Feature: MCP tools for OTTO pipeline — trigger optimization, check status, and verify SEO output
549 - - Feature: MCP cache-purge tools for per-URL and full-site cache invalidation
550 - - Feature: Whitelabel color personalization for admin UI
551 - - Improvement: Composer classmap autoloader covering all plugin classes, removing 55+ scattered require_once calls
552 - - Improvement: MCP rate limiter wired into all tool calls with proper 429 responses
553 - - Improvement: GA4 event tracking replaces Mixpanel for plugin analytics
554 - - Improvement: Execution time limit added to MCP database query tool to prevent long-running queries
555 - - Fix: OTTO title and meta replacement no longer strips dollar signs from values like $500
556 - - Fix: Google Instant Indexing now auto-submits on post publish
557 - - Fix: LLMs.txt generation now excludes noindex posts
558 - - Fix: Missing PHP DOM extension handled gracefully in HTML-to-builder converter
559 - - Fix: Yoast and AIOSEO term meta storage corrected; SEO conflict handler fixed for term archive pages
560 - - Fix: WP Engine cache integration no longer calls non-existent purge_url() method; Throwable errors now caught
561 - - Fix: Beaver Builder templates excluded from sitemap generation
562 - - Fix: Gutenberg blockquote block no longer shows invalid content error after OTTO applies changes
563 - - Fix: Redirections page filter and search controls no longer trigger add-redirection form validation
564 - - Fix: Settings page no longer shows Synced label and invalid API key error simultaneously
565 - - Fix: Unsaved changes notification close button now works correctly
566 - - Fix: Composer autoloader updated with missing class entries to prevent fatal errors on fresh installs
567 -
568 -= 2.6.2 =
569 -- Improvement: Whitelabel now supports separate logo uploads for light and dark admin themes
570 - - Improvement: Breadcrumbs settings panel redesigned with cleaner layout and more configuration options
571 - - Fix: Page title tags now update correctly when Yoast SEO is active
572 - - Fix: OTTO optimizations no longer disappear when Rank Math is installed alongside the plugin
573 - - Fix: Duplicate keywords meta tag no longer appears in page source after OTTO applies keyword recommendations
574 - - Fix: Theme builder selector no longer lists builders that are not installed or detected on the site
575 - - Fix: MCP server now returns descriptive error messages instead of generic failures
576 - - Fix: MCP server correctly handles post status and primary category fields
577 - - Fix: MCP server now supports Twitter card meta fields and bulk taxonomy term operations
578 - - Fix: Plugin sidebar icon and menu now match standard WordPress appearance
579 - - Fix: Long field labels in Settings no longer overflow their column
580 - - Fix: 404 Monitor bulk actions bar stays on one line instead of wrapping
581 - - Fix: Breadcrumbs settings section now shows its icon correctly
582 -
583 -= 2.6.1 =
584 -- Feature: Bulk SEO health dashboard — check pages missing meta title, description and schema
585 - - Feature: New schema types: LocalBusiness, HowTo, VideoObject
586 - - Feature: Extended schema types: Event, JobPosting, Review, Course, Organization, Person, WebSite
587 - - Feature: Breadcrumbs module with HTML output and BreadcrumbList schema
588 - - Feature: Primary category selector in post editor sidebar
589 - - Feature: Internal link suggestions in post editor
590 - - Feature: Site Verification page added to SEO navigation
591 - - Feature: CPU load awareness and deferral settings
592 - - Feature: Whitelabel-aware promo sidebar and quick links settings
593 - - Improvement: Replace all emoji icons with WordPress Dashicons across admin UI
594 - - Improvement: Compatibility page redesign: accordion rows, themes, CDN, troubleshooting section
595 - - Fix: Duplicate schema markup and meta descriptions on multiple pages
596 - - Fix: Sync handlers returning HTTP 200 with empty body on internal WP_Error — PHP 8 fatal prevented
597 - - Fix: Old UI flashing before new UI loads on page transition
598 - - Fix: UI misalignment on Dashboard and various admin pages
599 - - Fix: Schema markup not rendering correctly
600 - - Fix: NitroPack purge conflict on page-load path
601 - - Fix: Image alt-text fallback on Oxygen HTTP render path
602 - - Fix: Content Genius page sync full-width on Oxygen Builder
603 - - Fix: Crawl monitoring showing no data despite successful crawls
604 - - Fix: Oxygen Builder synced post content not visible on front-end
605 - - Fix: Restore Performance and CPU settings tab removed during refactor
606 - - Fix: Replace burst mode heartbeat with lightweight connection-ping
607 - - Fix: Render OTTO-persisted otto_jsonld in frontend schema output
608 - - Fix: schema_types returning empty array in wordpress_get_post_by_url
609 - - Fix: Correct Rate Now review URL and replace emoji star with Dashicon
610 - - Fix: Telemetry noise and whitelabel JSON decode bug
611 - - Fix: Add save button to Site Verification, Local Business, Code Snippets pages
612 - - Fix: Remove dead wp_ajax_metasync hook pointing to non-existent method
613 - - Fix: robots_txt_backups table missing on fresh activation
614 - - Fix: WP admin sidebar plugin icon vertical misalignment
615 -
616 -= 2.5.27 =
617 -- Fix: Image alt-text unreliable on Oxygen theme HTTP render path; added string-based fallback
618 -- Fix: Content Genius page sync renders full-width on Oxygen Builder
619 -- Fix: Apostrophe truncation in SEO extract functions causing content to be cut short
620 -- Fix: Crawl monitoring module shows no data despite successful crawl executions
621 -- Fix: Oxygen Builder synced post content not visible on front-end
622 -- Fix: CPU performance tab missing from Advanced Settings after refactor
623 -- Fix: JSON-LD schema deduplication: duplicate blocks on the same page
624 -- Fix: Schema/JSON-LD suppression for OTTO when third-party SEO plugins (Yoast, Rank Math, AIOSEO) are active
625 -- Fix: Remove dead `wp_ajax_metasync` hook pointing to non-existent `sync_items` method
626 -- Fix: Add missing `display_cpu_deferral_notice` method to `Metasync_Admin`
627 -- Fix: Oxygen Builder page template override guard in `create_page()` and `update_page()` (REST API)
628 -- Fix: Stale-options overwrite in `test_heartbeat_api_connection()`; replace burst-mode heavy heartbeat with lightweight connection-ping endpoint
629 -- Fix: Image alt-text string-based fallback in OTTO HTTP render path; Divi `data-et-multi-view` JSON attribute handling
630 -- Feature: Internal link suggestions in post editor sidebar
631 -- Feature: Replace burst-mode heavy heartbeat (`SyncCustomerParams`) with lightweight `connection-ping` endpoint — reduces payload and server load during key-pending state
632 -- Feature: MCP sync log: log changes, rollback, 90-day auto-clear, and manual clear button
633 -- Feature: Code minification and delivery (JS minifier)
634 -- Feature: CPU load awareness: adaptive deferral based on server load
635 -- Improvement: MCP `wordpress_get_post_by_url` extended to return full SEO metadata (title, description, schema, OG fields, focus keyword)
636 -- Improvement: MCP System diagnostics and read-only database access tools (`wordpress_get_system_info`, `wordpress_get_active_plugins`, `wordpress_get_cron_jobs`, `wordpress_db_query`)
637 -- Improvement: MCP `wordpress_get_seo_inventory` tool: bulk SEO health data across all posts in one call
638 -- Improvement: Log - fatal-only filtering — `capture_php_error()` now passes only `E_USER_ERROR` and `E_RECOVERABLE_ERROR`; warnings, notices, and deprecations are dropped
639 -- Improvement: Log - level gate in `send_to_sentry()` and `TelemetryManager::send_message()` — info/warning/debug events never reach the proxy
640 -- Improvement: Log - debug window reduced from 60 min to 15 min (900s transient TTL) for faster re-reporting of recurring fatal errors
641 -- Improvement: Logging cleanup - removed 15+ dead `log_heartbeat('info', ...)` calls (method already early-returns on `'info'`)
642 -- Improvement: Logging cleanup - removed operational noise from `Metasync_Rate_Limiter`, `Metasync_Cache_Purge`, and `Metasync_API_Backoff_Manager`
643 -
644 -= 2.5.26 =
645 -* Improvement: AIOSEO compatibility
646 -* Fix: preg_replace backreference injection in title deduplication (titles with \$N sequences)
647 -* Fix: Title tag deduplication and SEO plugin conflict handlers
648 -* Fix: API rate limiting causes stale cache and robots/canonical settings ignored
649 -* Fix: Dollar signs being stripped from image alt text
650 -* Fix: Heading deployment on Divi/page-builder sites
651 -* Fix: PHP 7.4 compatibility — polyfills for str_contains/str_starts_with/str_ends_with and match expression rewrites
652 -* Feature: NitroPack full flush + targeted object cache
653 -* Feature: WP Database & Object Caching cleanup
654 -
655 -= 2.5.25 =
656 -**Bug Fixes:**
657 -* Fix: OTTO persistence not syncing titles, descriptions, OG/Twitter fields were only written when persistence was enabled, but OTTO's own render filters read those same staging keys; added coverage for regular posts/pages; OG/Twitter persistence now also writes to RankMath and Yoast equivalents so SEO plugins pick up OTTO data; OG renderer falls back to OTTO staging keys when persistence keys are empty
658 -* Fix: DB column missing on older installs now self-heals all three required columns
659 -* Fix: Cap WP announce ping to max 5 per plugin activation lifecycle — removed unbounded cron retry; counter resets on fresh activation and clears on deactivation
660 -* Fix: Dollar signs stripped from image alt text during deployment
661 -* Fix: Heading deployment broken on some outdated Divi versions
662 -* Fix: One case of duplicate meta name="description tags when MetaSync and AIOSEO coexist
663 -* Fix: XML sitemap auto-update not triggering when posts published via Gutenberg
664 -* Fix: Divi header/footer hidden on blog posts synced via Content Genius
665 -
666 -= 2.5.24 =
667 -**Bug Fixes:**
668 -* Fix: Whitelabel slug not respected in admin links — \"Add Redirect\", \"404 Monitor\" tab, and \"Import from SEO Plugins\" buttons were using hardcoded `searchatlas-*` slugs instead of the configured WL slug
669 -* Fix: Hardcoded SearchAtlas/Search Atlas brand strings replaced with whitelabel-aware output across admin views, dev panel, site health checks, and MCP tool descriptions
670 -* Fix: \"SearchAtlas AI Pages\" dashboard widget title ignoring whitelabel plugin name setting
671 -* Fix: Whitelabel icon lost after exporting and importing the plugin on a different site — icon is now bundled inside the export ZIP and restored to the new site's uploads directory on import
672 -* Fix: Whitelabel icon not shown on WordPress Dashboard → Updates page — icon injected into the `update_plugins` site transient so the correct branded icon appears regardless of the update API response
673 -
674 -= 2.5.23 =
675 -**Bug Fixes:**
676 -* Fix: MetaSync WP plugin breaks Elementor front-end spacing — SimpleHtmlDOM `stripRN` was stripping whitespace between inline elements; now set to `false`
677 -* Fix: Elementor headings override Global Fonts after Content Genius sync — removed forced Roboto font so headings inherit site's Global Font settings
678 -* Fix: Elementor Canvas template incorrectly applied when syncing articles as posts
679 -* Fix: Admin bar status icon now reflects missing UUID as a distinct warning state (orange) rather than generic disconnected state
680 -
681 -**Improvements:**
682 -* Performance: Added transient cache to OTTO JS check to reduce overhead on every request
683 -* Improvement: Cache Purge — Added per-URL purge support
684 -* Improvement: Cache Purge — Query string normalization strips UTM/gclid/fbclid params before purge so all URL variants resolve to the same canonical URL
685 -* Improvement: Cache Purge — Edge CDN purge integrations targeted via configuration
686 -* Improvement: Remove non-publishable roles (Subscriber, Contributor) from Content Genius User Roles to Sync setting
687 -* Improvement: Validation message added when publishing AI Landing Pages with plain permalink structure
688 -
689 -**Features:**
690 -* Feature: WordPress Site Health Integration — MetaSync now registers checks in the WP Site Health panel
691 -* Feature: Media Optimization
692 -* Feature: Rate the Plugin notice — shows a dismissible prompt after 7 days of usage; hidden when whitelabel is enabled
693 -
694 -**Refactoring:**
695 -* Removed `instant-index/` vendor tree (~714 files); replaced Google SDK with native PHP implementation
696 -* Decomposed `Metasync_Admin` god object (17,849 lines) into 10 focused classes; admin reduced to ~3,986 lines
697 -* Decomposed `Metasync_Public` into focused classes; REST API routes extracted to `Metasync_Rest_Api`
698 -* Extracted 23 inline JavaScript blocks into proper `.js` files loaded via `wp_enqueue_script`
699 -
700 -= 2.5.22 =
701 -* Improvement: Heartbeat connection/pool logic to reduce the number of external requests
702 -* Improvement: Adapt scenarios of Idle WpRocket + Active Kinsta Cache that was preventing the cache to be purged.
703 -
704 -= 2.5.21 =
705 -###Features
706 - - Add hosting cache integration (WP Engine + Kinsta) with per-provider toggles in Advanced → Cache
707 - Management
708 - - Add WP Engine native cache purge (Varnish + Memcached) via `WpeCommon`
709 - - Add Kinsta native full-page cache purge via `KinstaCache::kinsta_cache_purge_full()`
710 -
711 - ###Bug Fixes
712 - - Fix: SEO placeholder tokens (%%title%%, %sitename%, #post_title#, etc.) now resolved to real values on
713 - import from Yoast / Rank Math / AIOSEO
714 - - Fix: Customer schema markup being injected into the global site header
715 - - Fix: WP Rocket compatibility — OTTO no longer disables WP Rocket JS/CSS optimization features
716 - - Fix: WP Rocket + Kinsta cache conflict causing meta title/description to revert
717 - - Fix: CSS injection methods (`enqueue_page_custom_css`, Elementor, Divi) missing from `Metasync_Public`
718 - - Fix: Plugin URI and Author URI fields silently discarding valid URLs
719 -
720 -= 2.5.20 =
721 -* Fixed a case where a empty Otto meta description was overwriting the existing one.
722 -
723 -= 2.5.19 =
724 -New Features
725 -
726 - - SEO Sidebar in Post Editor — Edit Meta Title, Meta Description and URL slug directly from the post/page
727 - editor sidebar
728 - - Bot Detection Layer for OTTO — Detects and tracks bots with statistics dashboard
729 - - Bing Instant Indexing — Submit URLs directly to Bing
730 - - Plugin Setup Wizard — Guided setup process for new users
731 - - Execution Settings — New controls under Advanced Settings
732 - - Debug Mode Auto-Disable & Safety Limits — Automatically disables after a set period
733 - - Enhanced Error Categorization — Improved monitoring with categorized error tracking
734 - - Virtual robots.txt / sitemap.xml — Served virtually when host blocks direct file writes
735 - - OTTO 404-Specific Filtering — Filter OTTO suggestions for 404 pages
736 - - Heartbeat reliability improvements
737 -
738 - Improvements
739 -
740 - - Schema Markup disable option — Can now be toggled per Post/Page Editor settings
741 - - Whitelabel form validation — Prevents partial saves without whitelabel mode activation
742 - - Host Blocking in whitelabel — Host blocking now covered by whitelabel settings
743 - - Support Token rate limiting — Properly enforced during login
744 - - Report Issue with Sentry User Feedback — Image attachments supported
745 - - MCP Tool API key auth — Fixed permission checks for API key-authenticated requests
746 -
747 - Bug Fixes
748 -
749 - - Fixed OTTO removing original meta description when no OTTO description deployed
750 - - Fixed plugin breaking Elementor front-end spacing when span tag was inner H1
751 - - Fixed WP Rocket + Kinsta cache conflict causing meta titles/descriptions to disappear
752 - - Fixed ALT text not applied on home page and other pages for Custom Theme
753 - - Fixed Plugin URI and Author URI not being saved
754 - - Fixed UI issues in admin screens
755 - - Fixed sync logs not showing newest info after filtering
756 - - Fixed exported whitelabel settings not uploading to another site
757 - - Fixed plugin settings hiding in plugin menu but not under WordPress General settings
758 - - Fixed Import SEO Data missing from access control list
759 -
760 - Stability / PHP 8.1+ Compatibility
761 -
762 - - 13 improvements with deprecated PHP functions below PHP V8.0
763 -
764 -= 2.5.18 =
765 -* Removed JWT-based temporary support access token system
766 -* Improved internal code documentation
767 -
768 -= 2.5.17 =
769 -* New: Administrator-Controlled Remote Support - Support access now requires explicit consent with secure, time-limited JWT tokens you generate and control
770 -* New: Support Access Management UI - Generate, view, and revoke support tokens directly from plugin settings
771 -* New: Email notifications when support tokens are generated, used, or revoked
772 -* Security: Connect to Search Atlas now uses time-limited, single-use tokens instead of persistent credentials
773 -* Security: Added rate limiting to Connect to Search Atlas authentication
774 -
775 -= 2.5.16 =
776 -* New: Administrator-Controlled Remote Support - Support access now requires explicit consent with secure, time-limited tokens you generate and control
777 -* Security: Enhanced Search Atlas SSO authentication with time-limited tokens
778 -* Security: Improved access control for administrative functions
779 -* Security: Added rate limiting to authentication endpoints
780 -* Improvement: Optimized token validation for better performance
781 -
782 -= 2.5.15 =
783 -* **Fix:** Improved compatibility with the **NitroPack** cache plugin.
784 -* **Fix:** Resolved a compatibility issue with the **Divi Timeline** widget.
785 -* **Fix:** Resolved a compatibility issue with the **Divi MultiView** widget.
786 -* **Fix:** Fixed an issue where static text in Advanced Settings displayed "OTTO/SA" instead of the **White Label** name.
787 -* **Fix:** Improved input validation within the **Redirection** form.
788 -* **Fix:** Fixed an issue where the **Cancel** button in the Redirection feature was not triggering.
789 -* **Fix:** Resolved an issue where **General Settings** would reset after a White Label password was set.
790 -* **Improvement:** Enhanced the filter and search modules in the **Redirection** section.
791 -* **Improvement:** When a new sitemap is generated, the **robots.txt** file will now automatically update with the correct link.
792 -* **Improvement:** Simplified plugin navigation for a better user experience.
793 -* **Improvement:** Removed deprecated files and unnecessary logs to optimize performance.
794 -* **Improvement:** Added **MCP** support.
795 -* **Improvement:** Added data persistence with **granularity** support.
796 -* **Improvement:** Improved notification messaging to better inform users about plugin updates.
797 -* **Feature:** Added full support for **Oxygen Builder**.
798 -* **Feature:** **Plugin Access Control:** Added a setting under Advanced Settings to define which user roles can access the plugin.
799 -* **Feature:** **Advanced Access Control:** White Label users can now disable specific settings or features per user role (**Settings \> White Label \> Advanced Access Control**).
800 -* **Feature:** Added a dedicated **Import SEO Data** screen.
801 -* **Feature:** Added an option to set all external links to `target="_blank"` (**Settings \> General \> Post/Page Settings**).
802 -* **Feature:** Added an option to add `rel="nofollow"` to all external links (**SEO \> Indexation \> Indexation Control**).
803 -* **Miscellaneous:** Minor cross-compatibility improvements for legacy PHP versions.
804 -
805 -= 2.5.14 =
806 -* **Fix:** Fixed a case of compatibility with Formidable Form Builder
807 -* **Fix:** Fixed a case of compatibility with Essentials Theme
808 -* **Fix:** Small adjustments in overall code for performance
809 -* **Improvement:** Improvement of OTTO SSR system
810 -* **Improvement:** Small adjustments in the UX
811 -* **Improvement:** Improvement of suggestions persistence in WP DB.
812 -
813 -= 2.5.13 =
814 -* **Fix:** Fixed a case where new published article was only showing headers
815 -* **Fix:** Fixed a case of compatibility with Essentials Theme
816 -* **Fix:** Small adjustments in overall code for performance
817 -* **New Feature: Whitelabel Plugin Export -** We included a feature to export a version of the plugin with your WL info. You could now easily install the plugin through different hosts, without the need to manually update/include the WL settings.
818 -* **New Feature: Import from RankMath/Yoast/AIOSEO -** We included a feature to import Robots.txt, Sitemap.xml, Schemas and Indexation Options from SEO Plugins.
819 -* **New Feature: Advanced Settings -> Clear Transient Cache -** We included a feature to clear the transient cache used to boost page performance. The cache stores the deployed changes from the platform, avoiding unnecessary process to apply the changes.
820 -* **Improvement:** Small adjustments in OTTO SSR
821 -* **Improvement:** Small adjustments in Light Theme version
822 -* **Improvement:** We included a option in the Settings to Disable OTTO Toolbar.
823 -* **Improvement:** Otto Toolbar is Whitelabel friendly (Apply WL name)
824 -
825 -= 2.5.12 =
826 -* **Fix:** Fixed a case of compatibility with Slider Revolution
827 -* **Fix:** Fixed a case of duplication in content synced
828 -* **Fix:** Small adjustments in PHP Warnings being triggered
829 -* **Fix:** Fixed a case of custom child theme triggering errors in error log
830 -* **New Feature: Light/Dark Theme -** We included a feature that allow users to switch the plugin colors to a light version.
831 -* **New Feature: Content Genius Authors -** We included a feature under settings where you could choose what user roles would be synced with Content Genius
832 -* **New Feature: OTTO Changes Viewer -** We included a feature to check what changes are being applied in a page optimized by OTTO.
833 -* **Improvement:** We improved the OTTO detection system.
834 -* **Improvement:** Changes in Robots.txt could be rollbacked with a historic of changes
835 -* **Improvement:** We included a option in the Indexation feature to disallow Category pages.
836 -* **Improvement:** Small optimizations in the code for page speed improvement.
837 -
838 -= 2.5.11 =
839 -* **Fix:** Fixed a case of compatibility with Woocommerce
840 -* **Fix:** Fixed a case of redirections not working when the target URL was deleted
841 -* **Fix:** Fixed a case of Error Logs not displaying correctly
842 -* **Fix:** Fixed a case of PHP Warning due outdated PHP version
843 -* **Fix:** Fixed a case of custom child theme triggering errors in error log
844 -* **New Feature: Report a Issue -** We included a feature that allow users to notify Issues directly from the plugin.
845 -* **Improvement:** We improved the Whitelabel settings to hide specific features if needed.
846 -* **Improvement:** Improvements on system messages
847 -
848 -= 2.5.10 =
849 -* **Fix:** Fixed a case of compatibility with Gravity Forms
850 -* **Fix:** Fixed a case of compatibility with Elementor Pro
851 -* **Fix:** Fixed a case of compatibility with DIVI
852 -* **Fix:** Fixed a case where the post editor preview was blocked
853 -* **Fix:** Fixed a case of original meta title and meta description being overwritten by OTTO
854 -* **New Feature: Custom Pages -** We included a feature that allow users to create custom pages bypassing existing Themes and Styles.
855 -* **New Feature:** **OTTO Excluded URLs -** We included under Compatibility Tab, a option to Turn off OTTO changes per URL.
856 -* **New Feature:** **Import Redirections -** Users could now import redirections from .csv file or directly from Yoast/RankMath/AIOSEO.
857 -* **Improvement:** We improved the Whitelabel settings to hide specific features if needed.
858 -* **Improvement:** Minor changes in core functions.
859 -* **Improvement:** Excluded from Sitemap generator URLs that aren't related with live pages.
860 -
861 -= 2.5.9 =
862 -* **Fix:** Fixed a case where the plugin was duplicanting the meta description tag
863 -* **Fix:** Fixed a case where the post editor was preventing user to save OG tags.
864 -* **New Feature:** We included in advanced settings a option to test the connectivity between host and the platform.
865 -* **New Feature:** Users could generate SITEMAP.xml directly in the plugin (This function will disable current sitemap.xml plugins)
866 -* **New Feature:** User could Enable/Disable storing OTTO Meta Title and Meta Description into the Database. When enabled, it will overwrite Meta Title and Meta Description of Yoast/RankMath, etc, and the old meta title and meta description
867 -* **Improvement:** We improved the Whitelabel settings to hide specific features if needed.
868 -* **Improvement:** Minor changes in cross-compatibility with outdated PHP versions.
869 -
870 -= 2.5.8 =
871 -* **Fix:** Some conditions was preventing saving new/edit posts directly from the editor
872 -* **Fix:** Non-standard tags found in body of the page, are being detect as plain text.
873 -* **New Feature:** White Label Clients could turn on/off Plugin features in Whitelabel Settings.
874 -* **Improvement:** Minor changes in cross-compatibility with outdated PHP versions.
875 -
876 -= 2.5.7 =
877 -
878 -
879 -= 2.5.6 =
880 -* **Prevention**: New error detection system.
881 -* **White Label**: 1-click Auth will sync the logo from the WL dashboard
882 -* **Fixes & UX**: Allow Rollback changes in Meta Title and Meta Description that was being stored in the Database.
883 -
884 -= 2.5.5 =
885 -* **Performance**: Significant improvement to dashboard loading speed.
886 -* **White Label**:
887 - * New dedicated White Label settings screen (Settings\>White Label).
888 - * Added password protection for White Label settings.
889 -* **Logging**: Introduced Sync Logs to display implemented website changes.
890 -* **Fixes & UX**: Minor UX adjustments and a fix for a false positive XSS issue in unused code.
891 -* **System**: Minor OTTO system optimizations to reduce disk space and memory usage.
892 -
893 -= 2.5.4 =
894 -* HotFix: In some cases, the **error log** was becoming too large, causing host performance to slow down.
895 -
896 -= 2.5.3 =
897 -* Included Compatibility Screen V.1, that shows most common Themes and plugins and compatibility
898 -* Improved error logs system
899 -
900 -= 2.5.2 =
901 -No changelog available.
902 -
903 -= 2.5.1 =
904 -* **Improved Dashboard Loading** for public dashboard URLs.
905 -* **Enhanced compatibility** with naked URLs (non-www) on the platform.
906 -* **Refined the Connection Status Bar.**
907 -* **Fixed a bug** where the Connection Tips Box didn't expand when clicked.
908 -* **Enabled the storage** of meta titles and descriptions in the database.
909 -* **Added an option** to disable the dashboard view from the settings page.
910 -* **Created a setting** to disable the Connection Status Bar from the admin bar.
911 -* **Implemented a new Telemetry system** to streamline bug detection.
912 -* **Resolved an issue** that caused error logs to be generated multiple times.
913 -* **Optimized the rendering of AMP pages** to prevent unrecognized HTML tags.
914 -
915 -= 2.5.1 =
916 -* **Improved Dashboard Loading** for public dashboard URLs.
917 -* **Enhanced compatibility** with naked URLs (non-www) on the platform.
918 -* **Refined the Connection Status Bar.**
919 -* **Fixed a bug** where the Connection Tips Box didn't expand when clicked.
920 -* **Enabled the storage** of meta titles and descriptions in the database.
921 -* **Added an option** to disable the dashboard view from the settings page.
922 -* **Created a setting** to disable the Connection Status Bar from the admin bar.
923 -* **Implemented a new Telemetry system** to streamline bug detection.
924 -* **Resolved an issue** that caused error logs to be generated multiple times.
925 -* **Optimized the rendering of AMP pages** to prevent unrecognized HTML tags.
926 -
927 -= 2.5.0 =
928 -* **Search Atlas SSO**
929 - * Users can now authenticate the plugin with a single click, eliminating manual setup steps and streamlining the entire process.
930 -* **OTTO One-Click Activation**
931 - * After successful authentication, if an OTTO project exists in Search Atlas, its configurations are automatically imported and applied within WordPress.
932 -* **White Label Branding**
933 - * The white label experience has been significantly improved. Upon one-click authentication, any configured white label settings are automatically imported. This includes:
934 - * Plugin Name
935 - * Logo
936 - * OTTO Name
937 - * Dashboard URL
938 - * From then on, all plugin connections reflect the customer’s white label branding. These settings are also accessible in a new **Advanced tab** within the plugin settings.
939 -* **Dashboard Access**
940 - * Direct access to the customer’s OTTO project dashboard is now available from within the plugin.
941 -* **Plugin Redesign**
942 - * The plugin has been fully rebranded with a refreshed design that aligns with the current Search Atlas dashboard, offering a more consistent and modern user experience.
943 -* **Reset Plugin**
944 - * A new option has been added to fully reset plugin configurations back to their default values.
945 -* **Error Logs**
946 - * Enhanced error logging is now available. When WordPress debug modes are enabled, the plugin can generate anonymous logs that may be shared with the specialist team for troubleshooting.
947 -* **Search Atlas SSO**
948 - * Users can now authenticate the plugin with a single click, eliminating manual setup steps and streamlining the entire process.
949 -* **OTTO One-Click Activation**
950 - * After successful authentication, if an OTTO project exists in Search Atlas, its configurations are automatically imported and applied within WordPress.
951 -* **White Label Branding**
952 - * The white label experience has been significantly improved. Upon one-click authentication, any configured white label settings are automatically imported. This includes:
953 - * Plugin Name
954 - * Logo
955 - * OTTO Name
956 - * Dashboard URL
957 - * From then on, all plugin connections reflect the customer’s white label branding. These settings are also accessible in a new **Advanced tab** within the plugin settings.
958 -* **Dashboard Access**
959 - * Direct access to the customer’s OTTO project dashboard is now available from within the plugin.
960 -* **Plugin Redesign**
961 - * The plugin has been fully rebranded with a refreshed design that aligns with the current Search Atlas dashboard, offering a more consistent and modern user experience.
962 -* **Reset Plugin**
963 - * A new option has been added to fully reset plugin configurations back to their default values.
964 -* **Error Logs**
965 - * Enhanced error logging is now available. When WordPress debug modes are enabled, the plugin can generate anonymous logs that may be shared with the specialist team for troubleshooting.
966 -* **Disable SSO**
967 - * Disable 1 Click WP Authentication from Dashboard
968 -
969 -BUG FIXES:
970 -
971 -* Disabled Canonical redirects generating loops
972 -* Check if URL could be crawled
973 -* Duplicated element with YITH plugin
974 -* FAQ format conflict with Theme Builder
975 -* Conflict with Hostify Booking Engine plugin
976 -* Old version of Elementro Pro breaking CSS
977 -
978 -= 2.4.4 =
979 -* Bug Fix: When user is logged via SSO, validate if the auth token is set
980 -
981 -= 2.4.3 =
982 -* HotFix 1: When user is logged via SSO, persist the session in the admin area
983 -
984 -= 2.4.2 =
985 -* Bug fix 1: large log size for heavy traffic sites
986 -
987 -= 2.4.1 =
988 -* Bugfix 1: Imported Posts published with duplicate images
989 -
990 -= 2.4.0 =
991 -* Feature 1: Single Sign On to WP from Dashboard
992 -* Feature 2: Modifying Existing Posts with CA AI
993 -* Improvement 1: Improved Error Handling for menu Image field
994 -* Improvement 2: Notification about permalink compatibility
995 -* Improvement 3: Remove outdate UI component (Clear Cache Button)
996 -* Improvement 4: Delete Zipped logs older than 30 days
997 -* Improvement 5: Displaying Block Quote elements from CA
998 -* Bug fix 1: Table of Contents not Working for some sites
999 -* Bug fix 2: FAQ Section not comming in correctly for some sites
1000 -* Bug fix 3: Error warning while publishing to WP Elementor on some sites
1001 -* Bug fix 4: Fatal Error triggered on invalid URI
1002 -* Bug fix 5: Preserve redirection for forward slash ending urls
1003 -
1004 -= 2.3.11 =
1005 -* Feature 1: Modifying Existing Posts with Content Assistant AI
1006 -
1007 -= 2.3.10 =
1008 -* Bug fix 1: Critical Error with undeclared global Post Object
1009 -
1010 -= 2.3.8 =
1011 -* Bug fix 1: Check out flow breaking on some sites
1012 -
1013 -= 2.3.7 =
1014 -* Bug fix 1: Otto Interfering with some non-native Ajax requests
1015 -
1016 -= 2.3.6 =
1017 -* Bug fix 1: Activating Otto SSR breaks UI on some sites
1018 -
1019 -= 2.3.5 =
1020 -* Bug fix 1: Argument Count Error on some custom themes
1021 -* Bug fix 2: Missing Title on some sites
1022 -* Improvement 1: Serve Otto improved changes to Bot
1023 -
1024 -= 2.3.4 =
1025 -* Bug fix 1: Error Viewing blog posts in some Nginx sites
1026 -* Improvement 1: Otto Crawl monitoring
1027 -* Improvement 2: Remove redundant requests to back end
1028 -
1029 -= 2.3.3 =
1030 -* Bug fix 1: Checkout failure on some sites
1031 -
1032 -= 2.3.2 =
1033 -* Bug fix 1: Fatal Error on empty tag attributes
1034 -* Bug fix 2: Plugin Breaking Grid Page Sites
1035 -
1036 -= 2.3.1 =
1037 -* Improvement 1: Real Time Server Side Rendering - No HTML Cache
1038 -
1039 -= 2.3.0 =
1040 -* Bug fix 1: Fix 500 error when publishing a post
1041 -* Bug fix 2: Fix OTTO SSR disabling the WordPress edit menu
1042 -* Bug fix 3: Fix rest_forbidden error when publishing blog post
1043 -* Bug fix 4: Fix OTTO breaking website layout (top-bar)
1044 -* Improvement 1: Session Based Rendering
1045 -* Improvement 2: Reset Heartbeat API calls to 5-minute intervals
1046 -* Improvement 3: Update plugin layout and implement white-labelling
1047 -* Improvement 4: Implement new caching mechanism
1048 -
1049 -= 2.2.7 =
1050 -* Bug fix 1: Fix 429 page issue
1051 -* Improvement 1: Disabling Otto on error pages like 404
1052 -
1053 -= 2.2.6 =
1054 -* Improvement 1: Refactored CI/CD Pipelines and added releases
1055 -
1056 -= 2.2.5 =
1057 -* Bug fix 1: Critical error on metasync logs page
1058 -* Bug fix 2: Purchase process affected on Ecommerce Sites
1059 -
1060 -= 2.2.4 =
1061 -* Bug fix 1: AI page builder formatting
1062 -* Bug fix 2: Categories not syncing
1063 -
1064 -= 2.2.3 =
1065 -* Bug Fix 1: Compatibility Improvements
1066 -* Bug Fix 2: Hero Image not showing on some posts
1067 -* Bug Fix 3: Post title missing on some posts
1068 -
1069 -= 2.2.2 =
1070 -* Feature 1: Clear Otto Caches Button
1071 -* Feature 2: Option to disable Otto for logged in Users
1072 -* Bug fix 1: Hero Image not getting Updated
1073 -
1074 -= 2.2.1 =
1075 -* Bugfix 1: Fix login Loop Issue on Sites with OTTO SSR
1076 -* Bugfix 2: Fix Otto SSR Caching Problem on the Admin Side
1077 -* Bugfix 3: Fix H1 rendering on published Posts
1078 -
1079 -= 2.2.0 =
1080 -* Bugfix 1: Fix login Issues on Sites with OTTO SSR
1081 -* Bugfix 2: Accepting UUID to activate OTTO on Wordpress
1082 -* Feature 1: Alerting users to remove OTTO JS before activating OTTO SSR
1083 -* Feature 2: Instant deployment of changes made on OTTO dashboard
1084 -
1085 -= 2.1.1 =
1086 -* bugfix 1: Logging System - Fix Corrupted Zip Files
1087 -
1088 -= 2.1.0 =
1089 -* Feature : Server Side Rendering of the Otto Pixel
1090 -
1091 -= 2.0.0 =
1092 -* Feature 1: Metasync Specific Site Log Monitoring & Logging
1093 -* Bugfix 1: Failed Image Syncing
1094 -* Bugfix 2: Fix AI landing Page Visibility
1095 -* Bugfix 3: Headings Coming over with #000000
1096 -
1097 -= 1.9.3 =
1098 -* Fixed : Error Publishing Blog Article
1099 -
1100 -= 1.9.2 =
1101 -* Fix : Renamed DB Migration Class to Prevent Conflict
1102 -
1103 -= 1.9.1 =
1104 -* Feature 1: Stability Improvements
1105 -
1106 -= 1.9.0 =
1107 -* Bug fixes
1108 -* Fixed PHP 7.1.x compatibility issues
1109 -
1110 -= 1.8.9 =
1111 -* Enhanced security measures
1112 -
1113 -= 1.8.8 =
1114 -* Improved general page settings
1115 -
1116 -= 1.8.7 =
1117 -* Enhanced compatibility with WordPress Dashboard
1118 -
1119 -= 1.8.6 =
1120 -* Server-side improvements
1121 -
1122 -= 1.8.5 =
1123 -* Additional server optimizations
1124 -
1125 -= 1.8.4 =
1126 -* Resolved logic issues for white labels
1127 -
1128 -= 1.8.3 =
1129 -* Fixed isset issues for white labels and public view
1130 -
1131 -= 1.8.2 =
1132 -* Addressed isset issues for white labels and error logging
1133 -
1134 -= 1.8.1 =
1135 -* Fixed isset issues for white labels
1136 -
1137 -= 1.8.0 =
1138 -* Fixed "Sync now" plugin list addition
1139 -
1140 -= 1.7.9 =
1141 -* Fixed content removal in Debug Log
1142 -
1143 -= 1.7.8 =
1144 -* Fixed content removal in Debug Log
1145 -
1146 -= 1.7.7 =
1147 -* Improved Default Debug Log
1148 -
1149 -= 1.7.6 =
1150 -* Enhanced Default Debug Log
1151 -
1152 -= 1.7.5 =
1153 -* Improved Debug functionality
1154 -
1155 -= 1.7.4 =
1156 -* General code improvements
1157 -
1158 -= 1.7.3 =
1159 -* Continued code enhancements
1160 -
1161 -= 1.7.2 =
1162 -* Fixed various errors
1163 -
1164 -= 1.7.1 =
1165 -* Addressed metasync error logging
1166 -
1167 -= 1.7.0 =
1168 -* Enhanced code and integrated Otto
1169 -
1170 -= 1.6.9 =
1171 -* Improved compatibility with Divi Child theme
1172 -
1173 -= 1.6.8 =
1174 -* Fixed issues with figure tags
1175 -
1176 -= 1.6.7 =
1177 -* Enhanced support for Iframe tags
1178 -
1179 -= 1.6.6 =
1180 -* Redirects updated after White Label changes
1181 -
1182 -= 1.6.5 =
1183 -* Code and White Label improvements
1184 -
1185 -= 1.6.4 =
1186 -* General code improvements
1187 -
1188 -= 1.6.3 =
1189 -* Continued code enhancements
1190 -
1191 -= 1.6.2 =
1192 -* Code improvements and menu renaming
1193 -
1194 -= 1.6.1 =
1195 -* Code enhancements and White Label updates
1196 -
1197 -= 1.6.0 =
1198 -* Code improvements and added Sub Pages functionality
1199 -
1200 -= 1.5.9 =
1201 -* Code improvements and HTML format fixes
1202 -
1203 -= 1.5.8 =
1204 -* Code improvements and HTML format fixes
1205 -
1206 -= 1.5.7 =
1207 -* Code enhancements and bug fixes
1208 -
1209 -= 1.5.6 =
1210 -* Code improvements and bug fixes
1211 -
1212 -= 1.5.5 =
1213 -* General code improvements
1214 -
1215 -= 1.5.4 =
1216 -* Code enhancements
1217 -* Fixed List Item components
1218 -
1219 -= 1.5.3 =
1220 -* Code improvements
1221 -* Integrated Divi
1222 -
1223 -= 1.5.2 =
1224 -* Code enhancements
1225 -* Fixed Elementor activation bug
1226 -
1227 -= 1.5.1 =
1228 -* General code improvements
1229 -
1230 -= 1.5.0 =
1231 -* Continued code enhancements
1232 -
1233 -= 1.4.9 =
1234 -* General code improvements
1235 -
1236 -= 1.4.8 =
1237 -* Added CSS for Search Atlas
1238 -* Code enhancements
1239 -
1240 -= 1.4.7 =
1241 -* Added Permalink Structure Validator
1242 -* Enhanced Page Editor checks
1243 -* Option to choose Page Editor
1244 -* Code improvements and bug fixes
1245 -
1246 -= 1.4.6 =
1247 -* Code enhancements and bug fixes
1248 -
1249 -= 1.4.5 =
1250 -* Code improvements and bug fixes
1251 -* Removed deprecated features from codebase
1252 -
1253 -= 1.4.4 =
1254 -* Code enhancements and bug fixes
1255 -* Added option to enable/disable features menu in General settings
1256 -
1257 -= 1.4.3 =
1258 -* Changed post permalink approach to prevent conflicts
1259 -* Updated page template to default instead of blank
1260 -* Set page parent to main if page doesn't exist
1261 -* Fixed permalink function in getPagesList
1262 -* Resolved minor bugs and improved code
1263 -
1264 -= 1.4.2 =
1265 -* Added new API endpoint `getPostByURL` to find posts by URL
1266 -* Updated README content and "Tested up to" attribute to latest version
1267 -* Updated `getPagesList` API to display all pages in JSON response
1268 -* Fixed bug in retrieving `post_id` in API codes
1269 -* Improved Pages management API for sub pages
1270 -
1271 -= 1.4.1 =
1272 -* Added three new API endpoints for creating pages
1273 -* Renamed heartbeat endpoints and functions
1274 -* Updated heartbeat categories and user sync limits and responses
1275 -* Updated plugin name and description
1276 -* Added plugin banner for marketplace page
1277 -* Removed Sitemaps feature, functions, and routes
1278 -* Added option to enable/disable Schema on Posts and Pages
1279 -* Improved General Settings UI/UX
1280 -* Fixed bugs and enhanced code
1281 -
1282 -= 1.4.0 =
1283 -* Feature: Basic Markdown support `[markdown] MARKDOWN CONTENT [/markdown]`
1284 -* Feature: Set a new Landing Page via API
1285 -* API code improvements and bug fixes
1286 -
1287 -= 1.3.4 =
1288 -* Enhanced Error Logs viewer and messages
1289 -* Added new error logs API
1290 -* Fixed `createPost` API code bug
1291 -
1292 -= 1.3.3 =
1293 -* Performance enhancements and bug fixes
1294 -
1295 -= 1.3.2 =
1296 -* Fixed bugs related to post and page images
1297 -
1298 -= 1.3.1 =
1299 -* Updated UI for HTML Accordion components
1300 -
1301 -= 1.3.0 =
1302 -* Editor/APIs: Added HTML Accordion support via shortcode `[accordion]CONTENT[/accordion]`
1303 -* APIs: Enabled editing drafts or published posts and pages multiple times without duplication via permalink
1304 -* APIs: Allowed manual addition of schema/scripts/styles to posts and pages
1305 -* APIs: Improved `deleteItem` endpoint code to comply with REST standards
1306 -* APIs: Numerous bug fixes and code enhancements for better performance and stability
1307 -
1308 -= 1.2.8 =
1309 -* Added new business type "Tree Services" to Business SEO page
1310 -
1311 -= 1.2.7 =
1312 -* Added Error Logs GET API endpoint
1313 -* Enabled functionality to trigger on-demand payload requests
1314 -* Added heartbeat HTTP request error information to Error Logs
1315 -* Set a limit of one thousand records for categories and users
1316 -
1317 -= 1.2.6 =
1318 -* Fixed issue displaying all fields in Optimal Settings
1319 -
1320 -= 1.2.5 =
1321 -* Enabled selecting the author of a post/page randomly in Create/Update item APIs
1322 -* Added ALT text for hero images in Create/Update item API payloads
1323 -* Set specific post dates within the last two months in Create API
1324 -* Added validation for `post_date` in Create/Update item APIs
1325 -* Refactored Create/Update item API code
1326 -
1327 -= 1.2.4 =
1328 -* Added feature and menu to enable/disable Open Graph, Facebook, and Twitter meta tags for all posts and pages
1329 -* Updated plugin version and README file
1330 -
1331 -= 1.2.3 =
1332 -* Enabled returning revisions for posts or pages in the update endpoint
1333 -* Added or updated post tags in Create and Update endpoints
1334 -* Included tags list in heartbeat API payload
1335 -
1336 -= 1.2.2 =
1337 -* Optimized Create and Update endpoints for media uploads
1338 -* Added redirection functionality in Create and Update endpoints
1339 -* Enabled/disabling comments in Create and Update APIs
1340 -* Fixed category updates in heartbeat API
1341 -* Resolved issue uploading previously unuploaded images to media in Create API
1342 -
1343 -= 1.2.1 =
1344 -* Added hero image attribute `hero_image_url` in Create or Update post endpoint
1345 -* Refactored image upload code to use URLs in Create/Update endpoints
1346 -* Updated plugin README file
1347 -
1348 -= 1.2.0 =
1349 -* Added post author in Create post endpoint
1350 -* Included users in heartbeat API with `users` attribute
1351 -* Assigned authors to attachments when uploading images to the media library
1352 -* Rebuilt post content tags based on HTML rules
1353 -
1354 -= 1.1.9 =
1355 -* Enabled saving images from URLs to the WordPress media library
1356 -* Added functionality to save images from URLs in Create/Update endpoints
1357 -* Implemented checks for existing images from URLs in Update endpoint
1358 -
1359 -= 1.1.8 =
1360 -* Corrected home URL storage in the 404 Monitor database
1361 -* Identified correct page URLs in the 404 Monitor for redirection
1362 -* Utilized correct URLs from the 404 Monitor for Redirection
1363 -
1364 -= 1.1.7 =
1365 -* Sent post categories as a list to backend requests
1366 -* Enabled auto-generation of the plugin's authorization key
1367 -* Displayed a message when the Search Atlas API key is not saved
1368 -
1369 -= 1.1.6 =
1370 -* Updated the title of General Settings
1371 -* Updated plugin screenshots
1372 -
1373 -= 1.1.5 =
1374 -* Added/Replaced categories for posts with a key to append categories in update items
1375 -* Synchronized post categories in Create/Update item endpoints
1376 -* Refactored code to sync customer website configurations and post categories
1377 -
1378 -= 1.1.4 =
1379 -* Fixed issue sending categories as JSON in heartbeat payload
1380 -* Removed special characters from category JSON
1381 -* Fixed heartbeat request interval settings
1382 -
1383 -= 1.1.3 =
1384 -* Removed login fields for obtaining JWT token from General Settings
1385 -* Removed dashboard link from the plugin
1386 -* Set heartbeat frequency to every 5 minutes
1387 -* Configured heartbeat requests to trigger on saving General Settings
1388 -
1389 -= 1.1.2 =
1390 -* Removed double quotes and forward slashes from JSON-LD Schema
1391 -
1392 -= 1.1.1 =
1393 -* Fixed article name issue in JSON-LD Schema
1394 -* Added plugin icon to the plugin directory
1395 -* Added plugin screenshots to the plugin directory
1396 -* Included changelogs in the plugin's README file
1397 -
1398 -= 1.1.0 =
1399 -* Added a button to manually force heartbeat sending to the server
1400 -* Displayed the last sync timestamp to monitor heartbeat status
1401 -* Added input field to save the Search Atlas API key in General Settings
1402 -* Included Search Atlas API key in the header of Heartbeat API
1403 -* Removed JWT token and Customer ID from Heartbeat Request
1404 -
1405 -= 1.0.9 =
1406 -* Added `meta_description` and `meta_robots` to the payload
1407 -* Fixed issue updating categories consistently in the payload
1408 -* Fixed issue adding two different `meta_robots` values in the header
1409 -* Included blog categories in the Heartbeat payload
1410 -
1411 -= 1.0.8 =
1412 -* Updated post/page permalinks during post updates via API payload
1413 -* Updated post categories during post updates via API payload
1414 -
1415 -= 1.0.7 =
1416 -* Added categories during post creation
1417 -* Included Permalink URL during page creation
1418 -* Set default post type to Post and post status to Publish
1419 -
1420 -= 1.0.6 =
1421 -* Added new sanitization for JSON-LD to echo in the header
1422 -* Removed third-party URLs from post data in the plugin
1423 -
1424 -= 1.0.5 =
1425 -* Created new `deleteItem` API to delete posts
1426 -* Refactored JSON-LD schema code to include all posts and pages
1427 -* Added prepare method in WHERE clause fields of queries
1428 -
1429 -= 1.0.4 =
1430 -* Added new sanitization for all POST and GET variables
1431 -* Refactored all plugin code
1432 -
1433 -= 1.0.3 =
1434 -* Added sanitization for all missing POST/REQUEST variables
1435 -* Implemented escape methods for all internal print variables
1436 -* Refactored all select boxes to use select options
1437 -* Removed redundant code from the plugin
1438 -
1439 -= 1.0.2 =
1440 -* Fixed issue excluding post IDs from sitemaps via API or General Settings
1441 -* Fixed issue sanitizing null values in common settings
1442 -
1443 -= 1.0.1 =
1444 -* Fixed invalid token issue in Heartbeat API
1445 -* Fixed exception handling in LinkGraph login response
1446 -
1447 -= 1.0.0 =
1448 -Initial release.
153 +Older release notes are available in the CHANGELOG.md file included with the plugin.