Title: Ooky AI Visibility
Author: cloudweld
Published: <strong>August 29, 2026</strong>
Last modified: August 29, 2026

---

Search plugins

![](https://ps.w.org/ooky-ai-visibility/assets/banner-772x250.png?rev=3671918)

![](https://ps.w.org/ooky-ai-visibility/assets/icon.svg?rev=3671918)

# Ooky AI Visibility

 By [cloudweld](https://profiles.wordpress.org/cloudweld/)

[Download](https://downloads.wordpress.org/plugin/ooky-ai-visibility.0.3.3.zip)

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

 [Support](https://wordpress.org/support/plugin/ooky-ai-visibility/)

## Description

Ooky AI Visibility makes your WordPress site discoverable and accurate to AI assistants:
ChatGPT, Claude, Perplexity, Google’s AI Overviews, and other LLM-driven crawlers.

The plugin does four things:

 1. **Serves distilled “cleaned HTML” to AI bots.** When a known AI crawler hits a 
    content page and an eligible artifact has been published, the plugin returns a 
    noise-free, parity-gated version of that page (no nav/footer/scripts) in place 
    of your theme’s markup, so models read your facts instead of your chrome. Humans
    always get your normal page.
 2. **Injects schema.org JSON-LD into your pages.** Your latest published structured
    data is added to `<head>` so AI and search crawlers can index your brand facts.
 3. **Serves brand intelligence at well-known AI paths.** When an AI bot fetches `/
    llms.txt`, `/llms-full.txt`, `/agents.md`, `/.well-known/ai-manifest.json`, or `/.
    well-known/mcp`, the plugin returns a structured summary of your business, revalidated
    against the current Ooky hostname owner on every request.
 4. **Tracks AI-bot visits.** On every front-end request—including the discovery paths—
    the plugin checks the User-Agent against a maintained registry. Detected visits
    enter a persistent, retrying local queue with stable IDs before delivery to Ooky.

Cleaned-HTML serving and JSON-LD injection read the same published artifacts as 
Ooky’s managed edge through an authenticated per-page API. They are revalidated 
rather than stale-served; if nothing is published or a fetch fails, your page renders
normally. Removing the local API key disables both behaviors. A site with a strict`
Content-Security-Policy` (no `unsafe-inline` for `script-src`) may need to allow
the injected JSON-LD block.

The same integration is also available as a Node/Next.js SDK (`@ooky/sdk`) and a
Cloudflare Worker, all sharing an identical API contract.

You need a free Ooky account and the reveal-once domain API key. Without that key,
manifest serving, cleaned HTML, JSON-LD, and analytics stay inactive; this prevents
a former domain owner from fetching the successor’s intelligence after a transfer.

#### What you get

 * `/llms.txt` answered by your own domain, not a third-party
 * AI-bot visit log per model, per page, per day in the Ooky dashboard
 * No file writes, so it works on read-only managed hosts (WP Engine, Kinsta, Pantheon)
 * Request-local event queueing; WP-Cron delivers and retries outside the visitor
   response
 * Compatible with caching plugins (W3 Total Cache, WP Rocket, LiteSpeed) for your
   normal content
 * Honors WordPress permalinks; no Apache mod_rewrite or nginx config needed

#### Who it’s for

 * Brands worried that ChatGPT or Claude is making things up about their company
 * SaaS, ecommerce, and content sites that want to be cited by AI assistants
 * Agencies managing several client sites who want a single dashboard for AI visibility
 * Anyone curious which AI crawlers are actually visiting their site

### Privacy

The plugin transmits data to the Ooky API (default: `https://api.ooky.ai`) in two
situations.

**Manifest fetch.** When an AI bot (or anyone) requests one of the plugin’s served
paths (`/llms.txt`, etc.), the plugin fetches your brand manifest from `https://
api.ooky.ai/api/public/manifest/<your-domain>/<kind>`. It sends the registered domain
in the URL, the reveal-once API key as a Bearer credential, and a fresh random nonce.
Ooky uses them only to bind the response to the domain’s current hostname claim 
and echoes the nonce; the plugin does not send visitor data in this fetch.

**Bot event.** When the User-Agent of an incoming front-end request matches a known
AI bot (e.g. GPTBot, ClaudeBot), the plugin POSTs a small event to `https://api.
ooky.ai/api/ingest/events`. The event contains: the matched bot name, the User-Agent
string, the request path, the HTTP method, the request timestamp, a client-generated
event ID, and (when present) the visitor’s two-letter country code from Cloudflare’s
CF-IPCOUNTRY header (never the IP address itself). The event includes your API key
as a Bearer token to authenticate the source.

**AI-referral event.** For a human visit referred by a recognized AI platform, the
plugin sends the classified source, only the referrer’s scheme and host (never its
path, query, or fragment), the destination path/method, timestamp, event ID, and
optional two-letter country. Events first enter a capped per-site database outbox;
WP-Cron atomically claims and retries delivery with the same event ID, and Settings
Ooky shows queue depth, the last successful delivery, and any safety-cap drops.

The plugin does **not** transmit:

 * Human visitor IP addresses, cookies, session identifiers, or full AI conversation/
   search URLs
 * Page content or POST bodies
 * Logged-in user identities
 * Form data, search terms, or any input fields

All outbound calls are made over HTTPS. The API endpoint and base URL can be overridden
via the **Settings  Ooky  API base** field for self-hosted Ooky deployments.

If you uninstall the plugin via the **Delete** action in **Plugins**, WordPress 
runs `uninstall.php`, which removes every option, transient, scheduled event, and
per-site outbox table the plugin created. After uninstall no Ooky data remains in
your database.

For our full privacy policy and DPA, see [https://ooky.ai/privacy](https://ooky.ai/privacy).

## Screenshots

[⌊Distilled cleaned HTML: when an AI bot hits a page, Ooky serves a parity-checked,
chrome-free version (semantic HTML + schema.org JSON-LD) in place of your theme's
markup. Humans always get your normal page.⌉⌊Distilled cleaned HTML: when an AI 
bot hits a page, Ooky serves a parity-checked, chrome-free version (semantic HTML
+ schema.org JSON-LD) in place of your theme's markup. Humans always get your normal
page.⌉[

Distilled cleaned HTML: when an AI bot hits a page, Ooky serves a parity-checked,
chrome-free version (semantic HTML + schema.org JSON-LD) in place of your theme’s
markup. Humans always get your normal page.

[⌊The Settings → Ooky page where you paste the API key.⌉⌊The Settings → Ooky page
where you paste the API key.⌉[

The Settings  Ooky page where you paste the API key.

[⌊The AI Sessions dashboard in your Ooky workspace, showing which crawlers visited.⌉⌊
The AI Sessions dashboard in your Ooky workspace, showing which crawlers visited
.⌉[

The AI Sessions dashboard in your Ooky workspace, showing which crawlers visited.

[⌊A live /llms.txt response served from a WordPress site.⌉⌊A live /llms.txt response
served from a WordPress site.⌉[

A live `/llms.txt` response served from a WordPress site.

## Installation

 1. In WordPress admin, go to **Plugins  Add New** and search for **Ooky AI Visibility**.
 2. Click **Install Now**, then **Activate**. For a manual install, upload `ooky-ai-
    visibility.zip` via **Plugins  Add New  Upload Plugin**.
 3. Go to **Settings  Ooky** and paste your API key from your Ooky dashboard.
 4. (Optional) Override the registered domain if it differs from this site’s host.
 5. Visit `/llms.txt` on your site to confirm the manifest is being served.

If `/llms.txt` returns 404 after activation, go to **Settings  Permalinks** and 
click **Save** to flush rewrite rules. The plugin attempts this automatically on
activate, but managed hosts occasionally cache the rules table and need a manual
flush.

## FAQ

### Do I need a paid Ooky account?

No. The free plan covers a single domain. Paid plans add more brands, more LLM coverage,
and longer retention. See [https://ooky.ai/pricing](https://ooky.ai/pricing).

### What data does the plugin send to ooky.ai?

Two event types are sent. Bot events contain the bot name, User-Agent, request path/
method, domain, and optional two-letter country. AI-referral events for human visits
contain the classified AI source, the AI referrer’s origin only (for example `https://
chatgpt.com`, never its path/query/fragment), the destination path/method, and optional
country. The plugin sends no IP addresses, cookies, session IDs, page bodies, or
form input. See Privacy below.

### Is serving cleaned HTML to AI bots cloaking?

No. Cloaking means showing search engines different content than people in order
to manipulate rankings, and the cleaned HTML is the opposite of that on every count:

 * It is derived from the same page, not independent copy. Ooky requires at least
   95% visible-token containment plus a similarity sanity floor. A failed page is
   excluded unless an authorized user explicitly accepts that exact artifact; the
   decision is recorded.
 * It is never routed to search or social crawlers. Only positively categorized 
   AI bots receive the distilled representation; Googlebot, Bingbot, link-preview
   bots, uncategorized bots, and humans receive your origin page.
 * Humans always get your real page. Only known AI crawlers (GPTBot, ClaudeBot, 
   and similar) receive the cleaned version; every human visitor gets your normal
   theme output, unchanged.
 * It is installation-scoped and reversible. The plugin serves only artifacts you
   explicitly publish, and removing its local API key disables cleaned-HTML serving
   and JSON-LD injection.

### /llms.txt returns 404: what now?

Most often, WordPress hasn’t flushed rewrite rules. Go to **Settings  Permalinks**
and click **Save** (don’t change anything). If the route still 404s, check that 
your permalink structure is set to anything other than “Plain”; rewrite rules only
work in pretty-permalink mode.

### Does it work with caching plugins?

Yes, with one caveat: make sure your cache plugin doesn’t shadow `/llms.txt`, `/
agents.md`, or the `/.well-known/*` paths. Most cache plugins skip these automatically
because they aren’t visited by humans. If you see stale content at `/llms.txt`, 
purge your cache or add those paths to the exclude list.

### I updated my brand intelligence in Ooky, but /llms.txt still shows the old version

The plugin asks Ooky for the current published artifact on every request and sends
a private, no-store response. If an upstream hosting or CDN cache still shows an
older response, purge that cache and exclude the well-known Ooky paths; the plugin
itself does not retain a manifest body.

### How do I rotate the API key?

Open your domain in the Ooky dashboard, click **Integrations  WordPress  Rotate 
key**, copy the new key, paste it into **Settings  Ooky** here, and save. The old
key is invalidated immediately.

### Is the plugin compatible with WordPress Multisite?

It is built to work per-site: each subsite stores its own API key and registered
domain, and uninstall clears both per-site and network-level options. Network activation
across a large number of subsites has not yet been exhaustively tested, so if you
run a big network, validate on a staging subsite first.

### Where can I see the plugin’s bot registry?

The plugin ships with a built-in list of ~30 known AI crawlers and refreshes it 
hourly from `https://api.ooky.ai/api/public/bots`. The refresh is non-blocking and
falls back to the bundled list if the API is unreachable.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Ooky AI Visibility” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ cloudweld ](https://profiles.wordpress.org/cloudweld/)

[Translate “Ooky AI Visibility” into your language.](https://translate.wordpress.org/projects/wp-plugins/ooky-ai-visibility)

### Interested in development?

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

## Changelog

#### 0.3.3

 * Adds a no-store, nonce-bound health proof at `/__ooky/health` so a live WordPress
   connection can establish its hostname claim without a separate setup step.

#### 0.3.2

 * Security: manifests, cleaned HTML, and JSON-LD are revalidated on every request
   and are never stale-served from WordPress transients. This prevents content from
   a hostname’s former Ooky owner being replayed after an explicit ownership transfer.
 * Security: served manifests use private, no-store cache headers; legacy manifest
   transients are cleared once on upgrade, while legacy dynamic page transients 
   are ignored and expire naturally.
 * Security: manifest and page fetches carry the domain Bearer key plus a fresh 
   nonce. Successful responses must echo that nonce with the complete Ooky hostname
   claim, generation, and exact edge namespace; revoked/former-owner keys and replayed
   intermediary 200s fail closed.

#### 0.3.1

 * Reliability: analytics events now use an atomic per-site database outbox. Concurrent
   visitor requests cannot overwrite one another, and a new event arriving during
   a flush remains queued.
 * Reliability: WP-Cron workers claim rows with short leases before sending. Parallel
   flushes cannot deliver the same live claim, crashed claims recover automatically,
   failed sends retain the original event ID with bounded exponential backoff, and
   no network request runs while a database transaction or lock is held.
 * Operations: the 1,000-row safety cap and drop counter are concurrency-safe; activation/
   upgrades migrate the legacy option queue, and uninstall removes the outbox table.

#### 0.3.0

 * New: **cleaned-HTML serving.** AI bots hitting a content page are now served 
   the published, parity-gated distilled HTML for that page (`text/html`) in place
   of your theme’s render, the same distillation as Ooky’s managed edge, without
   a DNS change. Humans and search/social crawlers always get your normal page.
 * New: **JSON-LD injection.** Your published schema.org structured data is injected
   into `<head>` on normal page renders so AI/search crawlers index your brand facts.
   Escaping matches the SDK/Worker/edge serializers; a `ooky_jsonld` filter lets
   you adjust or drop blocks (e.g. to avoid duplicating another SEO plugin’s Organization
   schema).
 * Both features read an authenticated per-page API, used a 1h local cache in version
   0.3.0, and use a 3s hot-path timeout. They fall through to your normal page whenever
   nothing is published or a fetch fails; removing the local API key disables them.
   Version 0.3.2 removes artifact caching at the hostname-ownership boundary.

#### 0.2.1

 * Security: the API key is no longer rendered into the settings form. The field
   now ships empty and shows only a masked hint (last 4 chars); a blank save preserves
   the saved key, and a new “Remove key” checkbox clears it explicitly.
 * New: events now include the visitor country (from Cloudflare’s CF-IPCOUNTRY header)
   so the geo panel populates for WordPress sites behind Cloudflare. No IP addresses
   are sent.
 * Hardening: the advanced “API base” override is validated on save; it must be 
   an http(s) URL ending in `/api` and must answer a live probe of `/public/bots`,
   surfacing typos in wp-admin instead of as silent 404s.
 * Hardening: this release added short-TTL negative caching on manifest and bot-
   registry fetch failures and lowered public-path fetch timeouts to 3s. Version
   0.3.2 removes manifest negative caching; bot-registry caching remains safe and
   enabled.
 * New: `you` and `phind` added to UTM-source referral detection, matching the SDK
   and Worker tiers.
 * Fix: a bare `{}` MCP POST is now handled on the legacy path (parity with the 
   SDK and Worker) instead of being batch-rejected.
 * Hardening: passes the WordPress.org Plugin Check clean: the text domain matches
   the plugin slug (so translations load just-in-time), every request input is unslashed
   and sanitized, and manifest output is served with documented escaping. Tested
   up to WordPress 7.0.

#### 0.2.0

 * New: AI referral attribution: human visits arriving from ChatGPT, Perplexity,
   Claude, Gemini, Copilot and other AI platforms (Referer header or `utm_source`)
   now fire `ai_referral` events, powering the attribution views in your Ooky dashboard.
   Same platform list as the Ooky SDK and Worker tiers.
 * New: real MCP server: `POST /mcp` (and `/.well-known/mcp`) now answers standard
   MCP JSON-RPC 2.0 (`initialize`, `tools/list`, `tools/call get_brand_info`) so
   AI agents can query your brand directly. The legacy `{tool, arguments}` protocol
   keeps working.
 * New: bare `/mcp` path served, matching the SDK and Worker tiers (some platforms
   intercept `/.well-known/*`).

#### 0.1.1

 * Fix: activation hook now uses a failsafe second-chance flush on init, so rewrite
   rules survive deactivate/reactivate cycles on managed hosts that cache the `rewrite_rules`
   option.
 * Fix: bot-event firing moved from init priority 1 to priority 50, after rewrite-
   rule registration. Resolves a race where a slow DNS lookup to the Ooky API could
   starve route registration for the same request.
 * Fix: plugin’s own served paths (`/llms.txt`, `/agents.md`, etc.) no longer fire
   analytics events. Eliminates a possible response hang when the upstream API is
   unreachable.
 * Hardening: settings sanitize callbacks accept malformed input safely; `Plugin::
   getApiBase()` re-validates stored URLs on read; admin render dies with a proper
   403 for non-admin users.
 * Added `uninstall.php`: full plugin uninstall now clears all options, transients,
   and scheduled cron events.

#### 0.1.0

 * Initial release. Serves `/llms.txt`, `/llms-full.txt`, `/agents.md`, `/.well-
   known/ai-manifest.json`, `/.well-known/mcp`. Fires bot-detection events to the
   Ooky ingest endpoint.

## Meta

 *  Version **0.3.3**
 *  Last updated **3 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [AI](https://wordpress.org/plugins/tags/ai/)[analytics](https://wordpress.org/plugins/tags/analytics/)
   [llms](https://wordpress.org/plugins/tags/llms/)[llms.txt](https://wordpress.org/plugins/tags/llms-txt/)
   [seo](https://wordpress.org/plugins/tags/seo/)
 *  [Advanced View](https://wordpress.org/plugins/ooky-ai-visibility/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/ooky-ai-visibility/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/ooky-ai-visibility/reviews/)

## Contributors

 *   [ cloudweld ](https://profiles.wordpress.org/cloudweld/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/ooky-ai-visibility/)