Skip to content

Releases: PenZenMaster/rankmath-rest-bridge

v2.11.1 — Fix display_on:all snippet renderer bug

Choose a tag to compare

@PenZenMaster PenZenMaster released this 01 May 22:55

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

Choose a tag to compare

@PenZenMaster PenZenMaster released this 01 May 21:51

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)

Choose a tag to compare

@PenZenMaster PenZenMaster released this 01 May 21:13

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 init time so the REST handler can access it directly.
  • POST /check-updates now 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

Choose a tag to compare

@PenZenMaster PenZenMaster released this 01 May 20:48

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_Post stub class and is_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

Choose a tag to compare

@PenZenMaster PenZenMaster released this 25 Apr 21:27

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

Choose a tag to compare

@PenZenMaster PenZenMaster released this 25 Apr 19:52

HFCM-free snippet injection via wp_options. Snippet CRUD, cache purge, auto-update via plugin-update-checker v5.5.