Releases: PenZenMaster/rankmath-rest-bridge
Release list
v2.11.1 — Fix display_on:all snippet renderer bug
Bug fix: snippets with display_on:all not rendering
Root cause: rmb_output_snippets() used a switch statement that handled 'entire_website' but not 'all' — the value RankRocket sends for sitewide snippets. Any snippet tagged display_on: all fell through to the default case, matched neither the 'page_id:' prefix nor the numeric check, and was silently dropped on every page.
Confirmed affected snippets: Any snippet where the RankRocket audit pipeline set display_on: all, including map embed styles and sitewide meta tags.
Fix: Added 'all' as the primary case in the renderer switch — it is now the canonical value for sitewide rendering. Also added 'home' and 'homepage' as aliases for 'front_page' to handle other values the remote system may send.
Full display_on value table after this fix:
| Value | Renders on |
|---|---|
all |
Every page (primary RankRocket value) |
entire_website |
Every page (legacy alias) |
front_page |
WordPress front page only |
home / homepage |
WordPress front page (aliases) |
all_pages |
All Pages post type |
all_posts |
All Posts / singles |
page_id:X |
Specific post/page by ID |
| Numeric string | Specific post/page by ID |
Action required: No data changes needed. After installing this update, existing snippets tagged display_on: all will begin rendering immediately without any re-push from RankRocket.
v2.11.0 — Physical robots.txt + Deactivation Warning
What's new in v2.11.0
robots.txt now persists after deactivation
POST /robots-txt writes a physical robots.txt file to the WordPress webroot (ABSPATH) in addition to saving content to the database. Because the web server serves physical files directly — bypassing WordPress entirely — the robots.txt content remains active even if this plugin is deactivated or removed.
Behaviour by scenario:
| Action | Result |
|---|---|
| Save non-empty content | Physical file written; web server serves it |
| Clear content | Physical file deleted; WP virtual robots.txt takes over |
| Plugin deactivated | Physical file remains; no change to robots.txt |
| Plugin re-activated | Activation hook syncs DB content to physical file if missing |
GET /robots-txt now includes a physical_file_managed boolean so the audit engine can confirm the physical file is plugin-owned.
Deactivation confirmation dialog
When an admin clicks Deactivate on the Plugins screen, a native browser confirmation dialog appears listing:
- Will STOP working: Schema JSON-LD injection, custom page titles, XML sitemap endpoint, llms.txt endpoint
- Will PERSIST: All SEO metadata (post meta), physical robots.txt at webroot
The dialog does not block deactivation — it ensures the admin is informed before proceeding.
What does NOT persist (by design)
Schema injection, page title overrides, the sitemap endpoint, and llms.txt are generated dynamically and cannot be preserved without the plugin active. The deactivation warning covers these explicitly.
Upgrade: Install via Dashboard > Updates. On activation the plugin will automatically sync any existing robots.txt database content to the physical file.
v2.10.1 — Check for Updates fix (private plugin)
Bug fix: Check for Updates (private plugin)
Problem: The update check button was calling delete_site_transient('update_plugins'), which triggers WordPress to contact api.wordpress.org to re-check all plugins. Since RankRocket SEO is a private plugin never listed on WordPress.org, this was incorrect and could hang on restricted hosts — making the button appear unresponsive.
Fix:
- Removed all contact with WordPress.org from the update check flow.
- PUC checker instance is now stored globally at
inittime so the REST handler can access it directly. POST /check-updatesnow calls$checker->checkForUpdates()— which fetches only the private GitHub manifest JSON, nothing else.- The UI immediately reports the result: either "Version X.Y.Z is available" or "You are running the latest version."
- Button label restored to "Check for Updates".
Upgrade path: Install this update via Dashboard > Updates. After installing, the "Check for Updates" button will work correctly and report results immediately without any WordPress.org communication.
v2.10.0 — AEO/GEO Audit Data Layer
What's new in v2.10.0
AEO/GEO Audit Data Layer
Five new REST endpoints under rankrocket-seo/v1, consumed by the external RankRocket audit engine:
| Endpoint | Purpose |
|---|---|
GET /canonical-urls/preview |
Machine-readable canonical URL set — the join spine for GSC/GA4/GBP joins. Resolves the long-standing P2 backlog gap. |
GET /aeo-geo/readiness |
Top-level readiness snapshot with 4-dimension scoring (entity clarity, source guidance, schema depth, llms completeness) and a data-depth badge. |
GET /aeo-geo/entity |
Structured entity signals: NAP, business_facts from llms config, homepage schema types, source priority label. |
GET /aeo-geo/schema-audit |
Per-canonical-URL schema type inventory with missing-opportunity detection (LocalBusiness, FAQPage, BreadcrumbList, Service). |
GET /aeo-geo/source-sync |
Canonical vs sitemap vs llms.txt partition — shows which post-type URLs appear in the sitemap vs llms.txt. |
Bug fix: "Check for Updates" / "Clear Update Cache" button
POST /check-updates was calling wp_update_plugins() synchronously, which makes a blocking HTTP request to api.wordpress.org. On hosting environments with short PHP max_execution_time limits, the process was killed before a response could be sent — making the button appear unresponsive. The call has been removed; clearing the transients is sufficient. The button is now labelled Clear Update Cache and directs you to Dashboard > Updates to trigger a fresh check.
Test suite hardening (PHP 8.4)
- Added
WP_Poststub class andis_admin()stub to the test bootstrap — required for PHP 8.4's strict class type enforcement. - Fixed two pre-existing assertion bugs in
CanonicalUrlSetTest.php. - All 129 unit tests pass.
Upgrade path: standard WordPress plugin update via Dashboard > Updates after clicking Clear Update Cache.
v2.0.5 — Fix WSOD on Cloudways/LiteSpeed
Critical fix: WSOD caused by register_activation_hook calling flush_rewrite_rules() on activation on some Cloudways/LiteSpeed hosts. Removed activation hook; rewrite rule + flush now handled safely in init via version-keyed option.
v1.2.0 — HFCM-free snippet store + auto-update
HFCM-free snippet injection via wp_options. Snippet CRUD, cache purge, auto-update via plugin-update-checker v5.5.