Search engines rank pages. Answer engines quote them. Oorank prepares your site for the second kind — it publishes a machine-readable index of your content, gives you per-bot control over who may crawl it, and scores individual pages against the signals AI crawlers actually use.
Everything runs on your own server. Oorank never sends your content to a third-party service, and makes no external requests of any kind.
How this differs from an llms.txt generator
Generating the file is the smallest part of the problem, so it is the smallest part of this plugin. What is here and generally is not elsewhere:
dateModified, recorded when the title, body or excerpt actually changed, rather than on any save.post_content.Publish an llms.txt index
Oorank serves /llms.txt (a linked index of your content) and /llms-full.txt (the same content as plain text) straight from your posts and pages. Pick which post types to include, and Oorank keeps both files in sync as you publish and edit. Noindex, private and password-protected content is excluded. Prefer to write the file yourself? Switch to manual mode and paste your own.
Sites on plain permalinks get physical files written to the site root instead, so the endpoints work either way.
Per post, you can keep a page out of the index entirely or write the one-line description an engine should read instead of the generated excerpt. Per site, you choose the order the sections appear in, cap how many items each one lists, and decide whether robots.txt advertises the file the way it advertises your sitemap.
On a translated site — WPML or Polylang — the index is grouped by language and each language also gets its own single-language file at /de/llms.txt, because one mixed-language index tells an answer engine nothing about which version of a page to quote. Content built with Elementor, Breakdance, Oxygen or SiteOrigin is read from the builder’s own data, so a page whose body is not in post_content still gets a real description instead of a bare title.
Decide which AI bots may crawl you
A per-bot allow/block list covering nineteen crawlers: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, Meta-ExternalAgent, DuckAssistBot, Bytespider, Amazonbot, cohere-ai, CCBot, AI2Bot, ImagesiftBot and Diffbot. Each bot is labelled by what it actually does — AI training, AI search, on-demand fetch, or crawl dataset — so you can opt out of model training without giving up citations in AI search results.
The distinction matters more than it sounds. Blocking GPTBot opts you out of OpenAI’s training data; it does not stop ChatGPT reading your page, because that is OAI-SearchBot indexing you and ChatGPT-User fetching you live. Oorank lists all three separately, and warns you when a choice would cost citations.
Your choices are written into robots.txt. If a static robots.txt already exists, Oorank tells you where it is and can insert a clearly marked block into it, leaving everything you wrote by hand untouched. Optionally, blocked crawlers also receive an X-Robots-Tag: noai, noimageai header.
Alongside the per-bot rules, Oorank publishes a Content-Signal line stating whether search, AI answers and AI training are welcome, and sends the matching Content-Usage: ai-train=n header when you have refused training outright. Both are derived from the choices you already made, and they reach crawlers that are not on any list yet.
Let an AI client read the site directly
Oorank can answer as an MCP server, so a client like Claude can connect to your site and use it as a tool: ask it which pages score worst, what llms.txt currently says, or which posts have gone stale — and tell it to block Meta’s crawler, change which post types llms.txt covers, or rebuild the file.
This does not break the no-external-calls promise, because the direction is inward: the client connects to your site and your site never calls out. It is off by default, gated behind one toggle and a connection token you can rotate or revoke, and the token acts with your own account’s permissions and no more. Nothing is bundled to make it work — no extra libraries, no extra weight in the download.
Publish structured data that does not fight your SEO plugin
Oorank emits a JSON-LD graph describing your site and the page being viewed — WebSite, your publisher identity (an organization, a person, or a local business with its address), WebPage, Article, BreadcrumbList, Product on WooCommerce stores, and FAQPage or HowTo where your content actually contains questions or steps. You can also add your own JSON-LD blocks, choose which pages they appear on, and validate them before they ship.
If another plugin already publishes structured data, Oorank stays out of its way. It watches what Yoast SEO, Rank Math, All in One SEO, SEOPress and Slim SEO put in their graph and emits only the parts they leave out — usually FAQ and How-to. It compares by role rather than by name, so a plugin describing your site as a Person still suppresses Oorank’s Organization: two competing descriptions of one page are worse for an answer engine than one. You can also force full output, or turn it off entirely.
Give your authors an identity
Every article is attributed to its author as an entity rather than a name. Oorank adds LinkedIn, X, Mastodon, GitHub, YouTube and ORCID fields to the WordPress user profile; whatever an author fills in becomes their sameAs — the list that lets an engine tell two writers with the same name apart. Author archives are described as a profile page for that person, and your site’s own publisher identity takes a logo and its own profile links.
Keep freshness dates honest
WordPress updates a post’s modified date on any save at all, so re-assigning a category can make a five-year-old article look edited yesterday. Oorank records when the content itself last changed — the title, body or excerpt — and publishes that date instead. It also flags published content that has not changed inside a threshold you choose, so you can see what an answer engine is quietly discounting.
Audit pages for AI readability
Oorank requests one of your own URLs the way a crawler would — no JavaScript, no cookies — and scores what comes back out of 100 across eight weighted checks:
Every failing check comes with a plain-language fix and a link straight to the screen where you fix it. Scores appear in a meta box on the post edit screen, and a site-wide report ranks your worst pages first so you know where to start.
Built for developers
Zero runtime dependencies and no outbound requests at all. WP-CLI commands cover auditing, llms.txt and crawler access (wp oorank audit, wp oorank llms regenerate, wp oorank bots). Filters cover the bot registry, the settings schema, the admin tabs, the REST routes, the audit checks, the MCP tool table, and the whole structured-data pipeline — the graph itself, the type-to-role map used for deduplication, which plugins to defer to, the Article type per post type, and the author profile fields.
This plugin does not connect to any external or third party service. Nothing is sent off your server, and no remote API is called.
Two things sometimes mistaken for external services:
The MCP server, when you enable it, is inbound only: an AI client you control connects to your site and your site answers. Your site never calls out.