Title: Unseat Connector
Author: Ken Lundin
Published: <strong>July 1, 2026</strong>
Last modified: July 1, 2026

---

Search plugins

![](https://ps.w.org/unseat-connector/assets/banner-772x250.png?rev=3594150)

![](https://ps.w.org/unseat-connector/assets/icon-256x256.png?rev=3594150)

# Unseat Connector

 By [Ken Lundin](https://profiles.wordpress.org/kglundin/)

[Download](https://downloads.wordpress.org/plugin/unseat-connector.2.7.4.zip)

 * [Details](https://wordpress.org/plugins/unseat-connector/#description)
 * [Reviews](https://wordpress.org/plugins/unseat-connector/#reviews)
 *  [Installation](https://wordpress.org/plugins/unseat-connector/#installation)
 * [Development](https://wordpress.org/plugins/unseat-connector/#developers)

 [Support](https://wordpress.org/support/plugin/unseat-connector/)

## Description

Unseat Connector is the official WordPress plugin for the [unseat.ai](https://unseat.ai)
content platform from Unseat AI Corporation. It lets the platform publish and manage
SEO-optimized content on your site, and exposes the signals AI crawlers (ChatGPT,
Claude, Perplexity, Gemini) look for.

**What it does:**

 * **SEO Meta Fields** — Registers Rank Math, Yoast SEO, and SEOPress meta fields(
   title, description, focus keyword, social tags) for REST API read/write access.
   Works with or without an SEO plugin installed.
 * **Site Health Endpoint** — Provides a `/wp-json/seo-machine/v1/status` endpoint
   that reports WordPress version, active SEO plugin, permalink structure, and potential
   plugin conflicts.
 * **llms.txt Serving** — Serves your `llms.txt` and `llms-full.txt` pages as plain
   text at their canonical URLs, making your content index machine-readable for 
   AI crawlers.
 * **IndexNow Key** — Serves your IndexNow verification key file as plain text.
 * **AI-Crawler Allowlist** — Injects an explicit `robots.txt` allowlist for GPTBot,
   ClaudeBot, PerplexityBot, CCBot, Google-Extended, Applebot, and other LLM crawlers
   with `Crawl-delay: 0`.
 * **Fallback SEO Meta Tags** — When no SEO plugin is active, emits `<meta name="
   description">`, canonical, OpenGraph, and Twitter Card tags from the connector’s
   meta fields.
 * **Optional GA4 Tag** — Injects a Google Analytics 4 measurement ID via `wp_enqueue_script`
   when configured through the REST endpoint.

**Requirements:**

 * WordPress 5.5 or higher
 * PHP 7.4 or higher
 * An [unseat.ai](https://unseat.ai) account (for the publishing platform; the SEO
   meta and llms.txt serving features work without one)

### External services

This plugin can optionally load **Google Analytics 4** (gtag.js) from Google. This
integration is **off by default** and is only activated after a site administrator
sets a GA4 Measurement ID (format `G-XXXXXXXX`) through the plugin’s REST endpoint(`
POST /wp-json/seo-machine/v1/ga4`). No external service is contacted until that 
ID is configured.

What it is used for: when a Measurement ID is configured, the plugin enqueues Google’s
analytics script from `https://www.googletagmanager.com/gtag/js` so the site owner
can measure website traffic.

What data is sent and when: while a Measurement ID is configured, the script loads
on front-end page views for visitors who are not logged-in administrators (logged-
in administrators are excluded to avoid inflating analytics). On each such page 
view the visitor’s browser sends the standard Google Analytics data directly to 
Google — for example the page URL, referrer, IP address, and device/browser information.
No data is sent when no Measurement ID is configured, and the plugin itself does
not collect, store, or transmit any of this data to unseat.ai or to any other party.

This service is provided by Google. By configuring a GA4 Measurement ID you are 
choosing to use Google Analytics on your site; please review Google’s terms and 
privacy policy:

 * Google Analytics Terms of Service: https://marketingplatform.google.com/about/
   analytics/terms/us/
 * Google Privacy Policy: https://policies.google.com/privacy
 * How Google uses information from sites or apps that use its services: https://
   policies.google.com/technologies/partner-sites

No other external services are contacted by this plugin. All SEO meta, llms.txt,
IndexNow, robots.txt, sitemap, status, and cache-flush features operate entirely
on your own server.

## Installation

 1. Install directly from the WordPress plugin directory, or upload the plugin zip 
    via Plugins > Add New > Upload Plugin.
 2. Activate the plugin.
 3. Verify the connector is working by visiting `https://yoursite.com/wp-json/seo-machine/
    v1/status` (requires authentication).

The unseat.ai platform will automatically detect the connector during onboarding.

## FAQ

### Do I need Rank Math, Yoast, or SEOPress installed?

No. The connector registers SEO meta fields that work with or without an SEO plugin,
and emits its own meta/OpenGraph/Twitter Card tags when none is active.

### What is llms.txt?

llms.txt is a machine-readable index of your site content, similar to robots.txt
but designed for AI language models. It helps AI search engines discover and cite
your content.

### Does this plugin collect any data?

The plugin itself does not collect or store any visitor data — it adds REST API 
endpoints to your existing WordPress installation, and all of that data stays on
your server. The unseat.ai platform connects to these endpoints using your WordPress
application password.

The one exception is the **optional** Google Analytics 4 integration: if an administrator
configures a GA4 Measurement ID, the plugin loads Google’s analytics script so visitor
analytics data is sent from the visitor’s browser to Google. This is off until you
configure it. See the **External services** section above for exactly what is sent
and links to Google’s terms and privacy policy.

### Can I use this without an unseat.ai account?

Yes. The SEO meta field registration, llms.txt serving, and robots.txt allowlist
all work independently. The status endpoint is primarily useful for the unseat.ai
platform.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Unseat Connector” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Ken Lundin ](https://profiles.wordpress.org/kglundin/)
 *   [ Unseat AI ](https://profiles.wordpress.org/unseatai/)

[Translate “Unseat Connector” into your language.](https://translate.wordpress.org/projects/wp-plugins/unseat-connector)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/unseat-connector/),
check out the [SVN repository](https://plugins.svn.wordpress.org/unseat-connector/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/unseat-connector/)
by [RSS](https://plugins.trac.wordpress.org/log/unseat-connector/?limit=100&mode=stop_on_copy&format=rss).

## 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 `RankMath\
   Sitemap\Cache::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.

## Meta

 *  Version **2.7.4**
 *  Last updated **4 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.5 or higher **
 *  Tested up to **7.0**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [AI](https://wordpress.org/plugins/tags/ai/)[llms.txt](https://wordpress.org/plugins/tags/llms-txt/)
   [rest-api](https://wordpress.org/plugins/tags/rest-api/)[schema](https://wordpress.org/plugins/tags/schema/)
   [seo](https://wordpress.org/plugins/tags/seo/)
 *  [Advanced View](https://wordpress.org/plugins/unseat-connector/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/unseat-connector/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/unseat-connector/reviews/)

## Contributors

 *   [ Ken Lundin ](https://profiles.wordpress.org/kglundin/)
 *   [ Unseat AI ](https://profiles.wordpress.org/unseatai/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/unseat-connector/)