PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / trunk
Search Atlas SEO – OTTO AI SEO Automation for WordPress vtrunk
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 2.6.4 2.6.3 2.5.23 All 138 releases
metasync / readme.txt

readme.txt in Search Atlas SEO – OTTO AI SEO Automation for WordPress trunk, at readme.txt

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