Title: OperStack AI Visibility
Author: operstack
Published: <strong>September 22, 2026</strong>
Last modified: September 22, 2026

---

Search plugins

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

![](https://ps.w.org/operstack-ai-visibility/assets/icon-256x256.png?rev=3708171)

# OperStack AI Visibility

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

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

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

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

## Description

When somebody asks ChatGPT or Perplexity a question your business answers, the assistant
fetches a handful of pages and quotes them. If it cannot reach your site, cannot
tell what your business is, or finds nothing on the page worth quoting, it names
somebody else.

Three things happen here that do not happen in a file generator.

#### 1. It answers the question nobody can answer

**How many people did ChatGPT actually send you last month?** Almost no site owner
knows. In Google Analytics those visits hide under “direct” or sit as a referral
from chatgpt.com that nobody opens. This plugin counts them on your own site and
shows one small table: ChatGPT 12, Perplexity 3, Claude 1, by day and over seven,
thirty and ninety days.

It is counted in the visitor’s browser rather than while the page is built, and 
that is the whole point: half of WordPress sites sit behind a page cache or a CDN,
where the HTML is served without PHP running at all. Anything counted during the
render would miss most of the traffic and report a number far too low.

Nothing about the visitor is stored, only which assistant and how many. The address
is hashed for an hour so one person is not counted twice, and is never written to
a row. If the answer is zero, you get a zero, which is also an answer.

#### 2. It checks the page while you write it

Open any post or page and the AI Visibility box shows a traffic light and the checks
behind it, re-read as you type. These are the things that decide whether a page 
is the one quoted, and none of them are about files:

 * **Does the first paragraph answer, or introduce?** A page that opens with “In
   this article we will look at” is told so, and told what to put there instead.
 * **Are the subheadings the questions people type?** “How much does it cost” is
   matched to a question. “Pricing” is not.
 * **Is there a list or a table?** That is the shape an assistant reuses when it
   builds an answer.
 * **Is there a figure, a price or a date?** Most questions that reach an assistant
   are how much, how long and how many. A page with no numbers on it answers none
   of them.
 * **Do the links say where they go?** The words inside a link are read as a description
   of what is on the other end. “Read more” describes nothing.
 * **Is the title shown whole, is there enough on the page, is there a summary of
   its own, is it recent, and can an assistant read it at all** (a password-protected
   page never will).

It runs on the text in the editor, before you save, and it makes no outbound request
of any kind: your text goes to your own site’s PHP and the verdicts come back.

#### 3. It fixes what it can, and says what it will not

Every finding on the site screen that the plugin can repair itself carries the button
that repairs it. One click allows the answer fetchers, publishes the map, publishes
the agent card, puts your business details into the page code, or clears the “discourage
search engines” box that was silently overriding everything else.

Where it cannot, it says so plainly instead of pretending. If a robots.txt file 
sits in your web root, WordPress cannot override it: the screen says blocked rather
than allowed, prints the exact lines to paste, and leaves the file alone, because
editing a file in your web root is not this plugin’s business.

#### What it publishes

 * **robots.txt rules** for OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-
   User, Claude-SearchBot, Claude-User, DuckAssistBot and Applebot. The training
   crawlers are left exactly as they are, because whether to feed them is your decision,
   not ours.
 * **A map at /llms.txt**, a plain list of your pages with one line each, written
   for assistants rather than for people, and rebuilt as you publish.
 * **An agent card** at /.well-known/agent.json, so an automated caller can find
   out what this site is and where its map lives.
 * **Business schema** with your real type: a dentist marked as a dentist, a roofer
   as a roofing contractor, with your phone, address and hours.
 * **A meta description** where your theme leaves one out, stepping aside quietly
   if Yoast, Rank Math, AIOSEO or SEOPress is already writing one.

#### Your assistant can do the setup

Everything the plugin knows is readable and writable over the WordPress REST API.
Create an application password in your profile, give it to Claude or another assistant,
and ask it to set the site up. It will read what is missing, ask you for the facts
it cannot know (your phone, your address, your hours), write them in, and tell you
what it could not do.

The plugin never invents a fact about your business. If it does not know your phone
number, it says so instead of guessing.

#### What it does not do

It does not write your pages, promise rankings, or send anything anywhere. It has
no account, no key and no telemetry, and it makes no request to any server but your
own.

It also cannot tell you whether an assistant names you or a competitor when somebody
asks, because answering that means asking them, and this plugin asks nobody anything.
A free check that reads your site from the outside and answers that is at oper-stack.
com/ai-visibility, and it needs no account either.

## FAQ

### Does the editor box send my draft anywhere?

No. It posts the text to your own site, over your own site’s REST API, and gets 
a list of verdicts back. Nothing is stored and no outside server is involved. The
checks are plain PHP running on your own server.

### Will this conflict with my SEO plugin?

No. It checks for Yoast, Rank Math, AIOSEO and SEOPress and does not write a second
meta description over theirs. The page checks are about being quoted in an answer,
which is a different question from the one those plugins score.

### Does it block AI from training on my content?

No, and it does not unblock it either. Training crawlers keep whatever rules you
already had. This plugin only opens the fetchers that quote you in an answer, which
is a different set.

### The traffic light says half done. Is that bad?

It is a checklist, not a grade. A short page that answers one question completely
can be quoted while showing amber, and the notes say which lines to ignore when 
that is your case. Nothing here changes what visitors see.

### I do not see /llms.txt

It should appear the moment the plugin is active, whatever your permalink settings
are. If it does not, visit Settings, then Permalinks, and press Save: that rebuilds
the address rules. If a file named llms.txt already sits in your site root, that
file wins and WordPress cannot override it.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

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

Contributors

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

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

### Interested in development?

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

## Changelog

#### 0.3.0

 * New: a traffic light in the post editor. Ten checks on the page in front of you,
   re-read as you type, covering whether the first paragraph answers or introduces,
   whether the subheadings are shaped like questions, whether there is a list, a
   figure or a date worth quoting, whether the links name where they go, and whether
   an assistant can read the page at all. It runs on your own server and makes no
   outbound request.
 * New: a dashboard widget with the site traffic light, the checks still outstanding,
   and the number of visits assistants sent in the last thirty days.
 * New: one-click fixes. Every finding the plugin can repair itself now carries 
   the button that repairs it, including clearing the “discourage search engines”
   box that silently overrides every other setting. Where it cannot repair something,
   such as a robots.txt file in your web root, it says so and leaves the file alone.
 * New: the settings screen is now three tabs, and the visits tab shows totals over
   seven, thirty and ninety days as well as a day-by-day table, instead of one thirty-
   day figure.
 * New: a switch in the editor box to keep a page out of the map for assistants.
   The plugin already honoured that mark when an assistant set it over the REST 
   API; now the author can set it themselves.
 * Changed: the date counting started is recorded when the plugin is activated, 
   and on upgrade it is taken from the oldest day already counted rather than from
   today, so a zero is always shown next to the day it started being true.
 * Fixed: the site screen reported the business details as published whenever the
   fields were filled in, even with the switch that publishes them turned off, and
   counted that as a pass.
 * Fixed: the page checks called mbstring functions that WordPress does not shim,
   which would have been a fatal error on a host built without that extension.
 * Fixed: a page that had never been saved was marked as out of date, next to a 
   note printing today as its last update.

#### 0.2.3

 * Fixed: password-protected pages were listed in llms.txt together with the opening
   sentence of the text they exist to hide, and the same text was published as the
   page description. They are excluded now, everywhere.
 * Fixed: the site title, the tagline and every page title reached assistants HTML-
   escaped. WordPress stores them that way, so a site called Joe’s Diner was published
   to every assistant as Joe's Diner, in llms.txt, in the agent card and in the 
   business markup. They are decoded now, the way core does it when it sends mail.
 * Hardened: the visit counter accepted an unlimited number of calls from one address,
   and it wrote to the database before checking whether the referrer was an assistant
   at all. An unknown referrer is now rejected before anything is stored, and one
   address counts at most thirty visits of the same assistant per hour. That ceiling
   is far above what a real page reaches and far below what it takes to move a daily
   total; it is a damper on casual abuse, not a claim that the number cannot be 
   inflated by somebody determined.
 * Fixed: the link to /llms.txt was printed in the head of every page even when 
   the file was switched off, pointing assistants at a 404.
 * Fixed: two PHP notices in the head of the front page on sites that show the blog
   there and have no tagline.
 * Fixed: the list of missing business details printed raw English keys on translated
   screens.
 * Escaping: slashes stay escaped in the JSON-LD block, and both file responses 
   now send X-Content-Type-Options: nosniff.

#### 0.2.2

 * Fixed: on a site using the default plain permalinks, /llms.txt and the agent 
   card were not served at all. WordPress answered them with a redirect that led
   nowhere, so the two files this plugin exists to publish were missing on every
   site that had never changed its permalink settings. Both are now served from 
   the address itself, with or without rewrite rules.
 * Tested on WordPress 7.1.

#### 0.2.1

 * The visit counter no longer treats ordinary search as an AI assistant. Referrals
   from ya.ru and duckduckgo.com were being counted as Alice and DuckDuckGo AI, 
   which inflated the number against what your analytics shows. Alice is alice.yandex.
   ru and the DuckDuckGo assistant is duck.ai; only those count now.
 * Added Google AI Studio, DeepSeek, Meta AI and Phind.

#### 0.2.0

 * Counts visits from AI assistants on your own server, so the owner can finally
   see whether ChatGPT sends anyone.
 * Settings screen with a plain-words state of every signal.

#### 0.1.0

 * First release.

## Meta

 *  Version **0.3.0**
 *  Last updated **18 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [AI](https://wordpress.org/plugins/tags/ai/)[ChatGPT](https://wordpress.org/plugins/tags/chatgpt/)
   [llms.txt](https://wordpress.org/plugins/tags/llms-txt/)[schema](https://wordpress.org/plugins/tags/schema/)
   [seo](https://wordpress.org/plugins/tags/seo/)
 *  [Advanced View](https://wordpress.org/plugins/operstack-ai-visibility/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

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

## Support

Got something to say? Need help?

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