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