Unseat Connector

Changelog

2.7.4

  • WordPress.org reviewer-fix pass (prefixing). All functions (unseat_connector_*), constants (UNSEAT_CONNECTOR_* / UNSEAT_*), options (unseat_*), and the enqueued script handle (unseat-connector-ga4) use the plugin’s unique prefix. Added inline comments at each do_action() / function call into third-party plugin hooks (Rank Math, GoDaddy WPaaS, Cloudflare) documenting that those names are owned by those plugins and are intentionally invoked unprefixed, so they are not mistaken for unprefixed plugin code.

2.7.3

  • WordPress.org reviewer-fix pass for resubmission.
  • Documented the optional Google Analytics 4 integration as a third-party external service in the readme (what is sent, when, and links to Google’s Terms of Service and Privacy Policy).
  • Tightened the /wp-json/seo-machine/v1/status endpoint permission from edit_posts to manage_options, since it reports site configuration and software/plugin version details that should be limited to administrators.
  • The two front-end output buffers (head <title> dedupe and the sitemap Cache-Control TTL cap) are now explicitly closed on the shutdown hook via a level-matched check, instead of relying on implicit shutdown flushing — so they can never leave the output-buffer stack misaligned for other components.
  • Hardened the sitemap-request detection to read $_SERVER[‘REQUEST_URI’] through wp_unslash() + sanitize_text_field() and wp_parse_url(), matching the text-file handler.

2.7.2

  • Publish-time prevention: the sitemap-invalidation hook now also calls RankMathSitemapCache::invalidate_storage() (when present). Rank Math 1.0.272+ stores sitemap caches under indexed names the per-type invalidation misses — proven live by an 11-day frozen sitemap that survived every other flush; invalidating storage on each publish makes that freeze class structurally impossible.
  • The robots.txt Sitemap line for the fallback sitemap now carries a content fingerprint (&v=): managed-host gateways rewrite no-cache headers in transit and CDNs cache the constant URL, so the cache key now rotates whenever content changes — an edge cache can never serve a stale copy to a crawler reading current robots.txt.

2.7.1

  • Deep-flush endpoint now also purges Rank Math’s file-based sitemap cache (uploads/rank-math/sitemap-cache/*.xml) and reports per-file deletion failures — live evidence showed a sitemap that survived post updates, transient clears, a module toggle, and a full wp_cache_flush(), which only a stale cached file explains.
  • Fallback sitemap responses now set a session cookie so managed-host gateways (observed: GoDaddy WPaaS rewriting Cache-Control to public/max-age=31d in transit) and downstream CDNs treat the constant URL as uncacheable — without this, the “cache-immune” fallback could itself be frozen at the edge.

2.7.0

  • Cache-immune fallback sitemap served live at ?unseat_sitemap=1 (no caching at any layer, so it can never go stale) and advertised via a Sitemap: line in robots.txt. Protects crawler discovery of new posts when the SEO plugin’s cached sitemap freezes (observed in production: a persistent object cache ignoring per-key deletes left a sitemap frozen across post updates, transient clears, and a sitemap-module toggle).
  • New authenticated deep-flush endpoint POST /wp-json/seo-machine/v1/flush (administrators only): performs a whole-namespace wp_cache_flush() — the one mechanism that clears an object-cache backend ignoring per-key deletes — then re-fires sitemap invalidation and a rewrite-rules flush. Intended for the unseat.ai platform’s automated drift remediation.

2.6.1

  • IndexNow key file now served with an explicit HTTP 200. The text-file handler echoed the correct key body but left WordPress’s virtual-path 404 status in place, so Bing’s async IndexNow key validation rejected the file and silently dropped every submitted URL. Also applies to the llms.txt / llms-full.txt endpoints.

2.6.0

  • Duplicate <title> dedupe: collapses duplicate title tags in the document head (keeps the first), fixing the common “Multiple title tags” SEO error that occurs when a theme’s title-tag support and an SEO plugin (or another source) both emit a title. Safe on every site — only removes duplicates, never the sole title, so it can never leave a page title-less. Supersedes the standalone unseat-title-dedupe.php mu-plugin.

2.5.3

  • Cloudflare Edge cache purge on publish via the Cloudflare WordPress plugin hook, so a freshly published/updated URL and the sitemap are served fresh from the edge. Removed an earlier non-functional direct-API purge path.

2.5.2

  • Renamed plugin to “Unseat Connector” — the official plugin from Unseat AI Corporation, owner of the unseat.ai platform. Folder slug remains unseat-connector so existing installs upgrade in place.

2.5.1

  • Connector-side cache flush on publish: when the connector receives a publish or update, it issues a cache-purge request to known host CDN gateways (WP Engine, Cloudways, Kinsta) so the sitemap and freshly-published URL are served from the edge rather than a stale layer.

2.5.0

  • Sitemap cache hygiene: on publish/update, the plugin now invalidates the Rank Math sitemap cache and sets a short Cache-Control: max-age header on sitemap_index.xml and per-type sitemap responses so downstream CDNs revalidate sooner.

2.4.0

  • WordPress.org Plugin Check pass (clean) and reviewer-fix pass for resubmission. Folder slug remains unseat-connector so existing installs upgrade in place.
  • Added explicit Text Domain: unseat-connector header.
  • Switched parse_url() to wp_parse_url() for consistency across PHP versions.
  • Sanitized $_SERVER[‘REQUEST_URI’] with isset() + wp_unslash() + sanitize_text_field() before parsing.
  • Escaped the plain-text llms.txt page output through esc_html().
  • Reworked GA4 tag injection to use wp_enqueue_script() + wp_add_inline_script() instead of raw <script> tags in wp_head.

2.3.3

  • Full SEOPress support and graceful AIOSEO fallback for SEO coverage reporting.

2.3.2

  • SEO meta renderer for sites with no SEO plugin (description, canonical, OpenGraph, Twitter Card).

2.3.1

  • Static-file fallback for /llms.txt and /llms-full.txt. On every save of the llms-txt and llms-full-txt pages the plugin now also writes a real file at the WordPress root (ABSPATH/llms.txt, ABSPATH/llms-full.txt) so hosts that strip .txt URLs before WordPress is invoked still serve the file.
  • IndexNow key file gets the same static-file fallback (any 32-hex-char .txt page).
  • Static files are removed across all retraction paths: unpublishing a page, trashing a page, and permanent delete.

2.3.0

  • Fixed /llms.txt and /llms-full.txt 301-redirecting to trailing-slash variants. The plugin now suppresses WordPress’s redirect_canonical for these paths so AI crawlers that don’t follow redirects get the file directly on the canonical URL.
  • Added explicit AI-crawler allowlist to robots.txt via the robots_txt filter (GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-Web, anthropic-ai, PerplexityBot, Perplexity-User, CCBot, Google-Extended, Applebot, Applebot-Extended, Amazonbot, Bytespider, Meta-ExternalAgent, FacebookBot, cohere-ai, cohere-training-data-crawler, DuckAssistBot, Diffbot, YouBot — each with Allow: /, Disallow: /wp-admin/, Crawl-delay: 0). No filter is injected when the site’s “Discourage search engines” setting is on.

2.1.0

  • Added Yoast SEO field support alongside Rank Math.
  • Added OpenGraph and Twitter Card meta field registration.
  • Improved conflicting plugin detection (AIOSEO, SEOPress, Squirrly).
  • Added analytics conflict detection (Site Kit, MonsterInsights, ExactMetrics).

2.0.0

  • Combined three separate mu-plugins into a single standard plugin.
  • Added backwards-compatible guard constants for legacy mu-plugins.
  • Added IndexNow key file serving.

1.0.0

  • Initial release — SEO meta fields, status endpoint, llms.txt serving.

Plugin Website
Visit website

Author
Ken Lundin
Version:
2.7.4
Last Updated
July 1, 2026
Requires
WordPress 5.5
Tested Up To
WordPress 7.0
Requires PHP
7.4

Share Post

Join our newsletter.

Get insights into what’s happening at ChangelogWP right in your inbox. We don’t believe in spam.