Title: AI Rank Suite — AI Search, llms.txt, Schema &amp; SEO
Author: namishams
Published: <strong>October 12, 2026</strong>
Last modified: October 12, 2026

---

Search plugins

![](https://ps.w.org/ai-rank-suite/assets/banner-772x250.png?rev=3740630)

![](https://ps.w.org/ai-rank-suite/assets/icon-256x256.png?rev=3740630)

# AI Rank Suite — AI Search, llms.txt, Schema & SEO

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

[Download](https://downloads.wordpress.org/plugin/ai-rank-suite.0.2.45.zip)

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

 [Support](https://wordpress.org/support/plugin/ai-rank-suite/)

## Description

More and more people ask ChatGPT, Claude, Perplexity or Google’s AI Overviews instead
of scrolling a page of blue links — and an assistant names one or two businesses
in its answer, not ten. AI Rank Suite tells you whether yours is one of them, and
fixes the things on your site that decide it.

That is the whole idea. An assistant does not “rank” your pages. It fetches a handful
of URLs, reads them, and writes one answer. Four things decide whether you are in
that answer, and this plugin is built around all four — with a complete classic 
SEO toolkit alongside, because Google still sends the clicks you have today.

#### 1. Can an assistant find the right pages?

An AI crawler pulls a few URLs per question, not your whole site. `llms.txt` is 
the one file where **you** choose which few.

 * **llms.txt and llms-full.txt**, generated from your own content and served at
   your site root
 * Pin your most important pages to the top, in the order you want them read — not
   in date order
 * One sentence of meaning attached to every link, so the file explains your site
   instead of just listing it
 * A live token count, so the file never grows past what a model will actually read
 * Preferred citation, contact and content-usage lines that a model reads word for
   word
 * **Control 31 named AI crawlers individually** — OpenAI, Anthropic, Google, Perplexity,
   Apple, Meta, Amazon, Mistral, plus ByteDance/Doubao, Baidu/ERNIE, Alibaba/Qwen,
   Huawei, Tencent and DeepSeek. Allow the ones you want citing you, block the ones
   you don’t.
 * Where a vendor publishes no crawler name, the plugin says so instead of selling
   you a rule that cannot be enforced

#### 2. Can it read what it finds?

Models read in chunks. A page with descriptive subheadings, a self-contained opening
paragraph and a few lists or tables survives being summarised. A wall of prose does
not.

 * **An AI score for every page**, next to the classic SEO score, in the editor 
   sidebar and the classic meta box
 * Concrete checks, not a vague grade: does the opening paragraph answer the question
   in the first 40 words, is there roughly one subheading per 300 words, are any
   paragraphs over 120 words, are there lists or tables, is there a question-style
   heading, is this page even in your llms.txt
 * Every check comes with the fix and what it is worth
 * A site-wide list of every page and its score, filtered by what is actually broken—
   weak scores, missing descriptions, thin content, accidentally noindexed
 * Runs on your own server. No AI key needed for any of the scoring.

#### 3. Will it quote you by name?

An answer needs a source it can name and a fact it can trust.

 * **Structured data across 77 schema.org types** — Article, Product, Service, FAQ,
   HowTo, Recipe, Event, JobPosting, Course, Review, VideoObject, Person, LocalBusiness
   and more — set per page or as site-wide rules
 * **Local SEO with 97 LocalBusiness types**, opening hours and multiple locations
 * Open Graph and Twitter cards, social profiles, per-platform share images
 * Automatic FAQ, speakable and video structured data from what is already on the
   page

#### 4. Is it actually working?

Everything above is a guess until you check it.

 * **AI Answer Simulation (Pro).** Write the questions your customers really ask(“
   who does company formation in Dubai?”), and the plugin puts them to an AI model
   and reads the answer back: were you named, how early in the answer, in what tone,
   and **who was named instead of you**.
 * Up to 25 monitored questions and 10 tracked competitors
 * Every run is stored, so it becomes a trend line rather than a one-off screenshot
 * Honest about what it is: a repeatable simulation against the AI model you configure.
   It is not a live scrape of the ChatGPT, Gemini or Perplexity apps, and nobody
   can promise you that.

#### And everything you expect from an SEO plugin

 * Title and meta description templates, site-wide and per content type, with a 
   live Google result preview
 * XML sitemaps, plus news and video sitemaps, and an HTML sitemap block for readers
 * Robots control per page, per archive, and a full robots.txt editor
 * Google Search Console positions, Google Analytics 4, Matomo, Microsoft Clarity
   and PageSpeed Insights
 * Instant indexing through IndexNow (Bing, Yandex, Seznam, Naver) and the Google
   Indexing API
 * **(Pro)** A rank tracker with position history, and Bing Webmaster Tools alongside
   Search Console
 * **(Pro)** Backlink monitoring from real referrer traffic, with optional connections
   to Ahrefs, Semrush, Moz, Majestic, Sistrix, DataForSEO and seven SERP APIs
 * **(Pro)** Broken, redirected and unreachable link checking across the whole site
 * A redirect manager with regular expressions and CSV import/export, plus a 404
   monitor
 * **(Pro)** An internal link graph — what links to what, how deep each page sits,
   which pages are orphans — computed entirely on your own server
 * Breadcrumbs, image alt text and title templates, canonical control, cornerstone
   pages
 * WooCommerce product schema **(free)**, plus Google Merchant Center and Meta catalog
   feeds **(Pro)**
 * A cookie consent banner with Google Consent Mode v2, in opt-in (GDPR), opt-out(
   CCPA) or automatic mode
 * **(Pro)** Scheduled email reports you can put your own agency branding on

#### You do not have to switch SEO plugins to try this

This is the part most people ask about first. AI Rank Suite is built to run **beside**
Yoast, Rank Math, All in One SEO, SEOPress, The SEO Framework, Slim Seo, Squirrly,
WPSSO, Schema Pro or Jetpack, not instead of them.

Turn it on and, by default, your existing SEO plugin keeps doing exactly what it
does today — titles, descriptions, canonicals, Open Graph, its own schema. AI Rank
Suite adds only the layer nothing else on your site is doing: llms.txt, AI crawler
control, AI page scoring and AI Answer Simulation. Every part of your page’s `<head
>` gets exactly one owner, checked on the rendered page, so you never end up with
two titles or two sets of structured data.

When you are ready to consolidate, one setting hands the whole `<head>` over. And
if you want to move your existing work across first, the importer reads **Yoast,
Rank Math, All in One SEO, SEOPress, The SEO Framework, Slim SEO, Squirrly, SmartCrawl,
Genesis, Jetpack, SEO Ultimate, WP Meta SEO, Redirection and WooCommerce** — without
deactivating or modifying the source plugin, filling only empty fields by default,
and with an undo journal for every run.

#### Built for real sites

 * Measured on a 50,000-post fixture: the analyzer, the link graph, the sitemaps
   and every admin screen hold up
 * Long jobs (scoring, imports, the link graph, bulk work) run in resumable background
   batches with their own indexed tables — a timeout resumes where it stopped instead
   of starting over
 * Works with WPML, Polylang, TranslatePress and Weglot, including the two different
   shapes those plugins use for translations
 * Detects and reads Elementor, Divi, Beaver Builder, Bricks, Oxygen, WPBakery, 
   ACF, The Events Calendar, WP Recipe Maker, WP Job Manager and more, so builder-
   rendered content is scored and put in your sitemaps
 * SEO fields appear inside Elementor’s own Page Settings, writing to the same values
   as the block editor sidebar
 * Every module can be switched off, and a disabled module loads no code at all
 * Your settings and data are **kept** when you deactivate or uninstall, unless 
   you explicitly ask for them to be removed

#### Free vs Pro

**Free, forever.** Nothing in the free plugin expires, counts down, or stops working,
and none of it needs an API key:

 * Titles, meta descriptions and templates with a live Google preview
 * Open Graph, Twitter cards, social profiles
 * XML, news, video and HTML sitemaps
 * All 77 schema.org types, Local SEO with opening hours and locations
 * llms.txt and llms-full.txt, checked against Google’s own Agentic Browsing rules
 * Individual control over 31 named AI crawlers, with a served-file verifier
 * The AI readiness score for every page — computed on your server, no key
 * The full site audit and the content list with its filters
 * Redirects with regex and CSV import/export, plus the 404 monitor
 * Breadcrumbs, robots.txt editor, image SEO, canonicals
 * All 14 importers — Yoast, Rank Math, AIOSEO, SEOPress and the rest — with undo
 * WooCommerce product schema; WPML, Polylang, TranslatePress, Weglot
 * Search Console, GA4, Matomo, Clarity and PageSpeed connections
 * Cookie consent banner with Google Consent Mode v2

**Pro adds** the features that write with AI on your own key, and the measurement
moat:

 * AI Answer Simulation — 25 questions, trend line, share of voice, who was named
   instead of you
 * AI Autopilot — writes every missing description, title, FAQ and alt text, with
   a full undo
 * AI writing on your own key: descriptions, titles, FAQs, alt text, schema, translations
 * Insights: trends, movers, issue leaderboard
 * Rank tracker and keyword planner
 * Backlink monitoring that re-reads the linking page
 * Broken-link checker and internal link graph with suggestions
 * Bulk editing, catalog feeds for Merchant Center and Meta
 * Third-party SEO data providers (Ahrefs, Semrush, Moz, DataForSEO and more)
 * Scheduled white-label email reports

Pro is sold per year through Freemius, starting at one site, with updates and support
included, and a 14-day money-back guarantee. Details and pricing: https://airanksuite.
com

#### External services

This plugin can talk to the third-party services below. **None of them are contacted
unless you switch that feature on and supply your own credentials or identifier.**
With a fresh install and nothing entered, the plugin makes no outbound requests 
except the ones WordPress itself makes. For each service: what it is for, what is
sent and when, and its terms and privacy policy.

 * **AI providers (Pro): OpenAI, Anthropic, Google Gemini, Mistral, xAI, Perplexity,
   Groq, Cohere, Azure OpenAI, DeepSeek, Qwen, and any OpenAI-compatible endpoint
   including a local Ollama, LM Studio or vLLM.** Used only when you enter an API
   key, and only for the actions you trigger: generating descriptions, titles, FAQs,
   alt text or schema, and running AI Answer Simulation. What is sent: the text 
   of the page you are working on, after e-mail addresses, phone numbers, shortcodes,
   scripts and anything you wrap in `[airanksuite-private]` have been stripped out.
   Your key is stored encrypted. Terms and privacy: OpenAI https://openai.com/policies/
   terms-of-use and https://openai.com/policies/privacy-policy; Anthropic https://
   www.anthropic.com/legal/consumer-terms and https://www.anthropic.com/legal/privacy;
   Google https://policies.google.com/terms and https://policies.google.com/privacy;
   Mistral https://legal.mistral.ai/ and https://legal.mistral.ai/terms/privacy-
   policy/; xAI https://x.ai/legal/terms-of-service and https://x.ai/legal/privacy-
   policy; Perplexity https://www.perplexity.ai/hub/legal/terms-of-service and https://
   www.perplexity.ai/hub/legal/privacy-notice; Groq https://groq.com/terms-of-use
   and https://groq.com/privacy-policy; Cohere https://cohere.com/terms-of-use and
   https://cohere.com/privacy; Microsoft Azure https://azure.microsoft.com/support/
   legal and https://privacy.microsoft.com/privacystatement; DeepSeek https://cdn.
   deepseek.com/policies/en-US/deepseek-terms-of-use.html and https://cdn.deepseek.
   com/policies/en-US/deepseek-privacy-policy.html; Alibaba Qwen https://www.alibabacloud.
   com/help/legal and https://www.alibabacloud.com/help/privacy-policy. A self-hosted
   endpoint sends data only to the server you named.
 * **Google Search Console API and Google Analytics Data API** (www.googleapis.com,
   analyticsdata.googleapis.com, analyticsadmin.googleapis.com, oauth2.googleapis.
   com, accounts.google.com): read-only, to show your search positions and traffic,
   and only after you connect a Google account — either with “Sign in with Google”(
   next entry) or with your own Google Cloud OAuth credentials. Sent: your OAuth
   token and the property you selected, each time the report screens load or the
   daily snapshot runs. https://policies.google.com/terms and https://policies.google.
   com/privacy
 * **AI Rank Suite connect service** (airanksuite.com/google-connect), run by us,
   the authors of this plugin: used only if you press “Sign in with Google” instead
   of entering your own Google Cloud credentials. It holds the Google OAuth client,
   so that you do not have to create a Google Cloud project. Sent when you press
   the button: your site address, the plugin version and a one-time random value
   that ties the answer to your browser. Sent afterwards, whenever Google’s access
   token has expired and a report needs a new one: your site address and the refresh
   token Google issued for your connection. It receives none of your Search Console
   or Analytics data. Those requests go from your site to Google directly. Disconnecting,
   or entering your own credentials, stops all contact. Terms https://airanksuite.
   com/agb and privacy policy https://airanksuite.com/datenschutz
 * **Google tag / Google Analytics 4** (www.googletagmanager.com): if you enter 
   a measurement ID, the Google tag is loaded on your public pages and visitors’
   page views are reported to Google, subject to the consent banner you configure.
   https://policies.google.com/terms and https://policies.google.com/privacy
 * **Google PageSpeed Insights API** (www.googleapis.com): sends a page URL of yours
   to Google to fetch its performance score, only when you press the button. https://
   developers.google.com/speed/docs/insights/v5/get-started, https://policies.google.
   com/terms and https://policies.google.com/privacy
 * **Google Indexing API** (indexing.googleapis.com): sends URLs of yours to Google
   when you ask for them to be indexed, using your own service account. https://
   developers.google.com/search/apis/indexing-api/v3/quickstart, https://policies.
   google.com/terms and https://policies.google.com/privacy
 * **Google Places API** (places.googleapis.com): only in Local SEO, with your own
   key, to look up your business listing when you press the button. https://cloud.
   google.com/maps-platform/terms and https://policies.google.com/privacy
 * **OpenStreetMap Nominatim** (nominatim.openstreetmap.org): only in Local SEO,
   and only when you press “Find coordinates from the address”. Sent: the street,
   postal code, city, region and country you typed into the business address, and
   a user agent naming this plugin and your site address, as Nominatim’s usage policy
   asks. It returns the latitude and longitude for your LocalBusiness markup; no
   key is needed. Usage policy https://operations.osmfoundation.org/policies/nominatim/,
   terms https://osmfoundation.org/wiki/Terms_of_Use and privacy policy https://
   osmfoundation.org/wiki/Privacy_Policy
 * **IndexNow** (api.indexnow.org, www.bing.com/indexnow, yandex.com/indexnow, search.
   seznam.cz/indexnow): if you enable it, sends the URL of a page of yours and your
   IndexNow key to these search engines when the page is published or updated. Nothing
   else is sent. Terms https://www.indexnow.org/; Microsoft privacy https://privacy.
   microsoft.com/privacystatement; Yandex https://yandex.com/legal/confidential/;
   Seznam https://www.seznam.cz/ochranaudaju
 * **Bing Webmaster Tools API** (ssl.bing.com): with your own API key, to read your
   Bing positions and inbound links when the report screens load. Sent: your key
   and your site URL. https://www.microsoft.com/servicesagreement and https://privacy.
   microsoft.com/privacystatement
 * **Microsoft Clarity** (www.clarity.ms): if you enter a Clarity project ID, the
   Clarity tag is loaded on your public pages and visitor sessions are recorded 
   by Microsoft, subject to your consent banner. https://clarity.microsoft.com/terms
   and https://privacy.microsoft.com/privacystatement
 * **Matomo**: only if you enter the address of your own Matomo instance (self-hosted
   or Matomo Cloud). The tracking snippet reports page views to that instance, and
   the Reporting API is read with your token to show visits from AI assistants. 
   Data goes to the server you named and nowhere else. Matomo Cloud terms https://
   matomo.org/matomo-cloud-terms-of-service/ and https://matomo.org/privacy-policy/
 * **SEO data providers (Pro): Ahrefs, Semrush, Moz, Majestic, Sistrix, Ryte, DataForSEO,
   SerpApi, Serper, ScaleSERP, ValueSERP, Zenserp, TrajectSERP.** Optional, each
   with your own key, used to look up keyword positions and backlinks when you ask
   for them. Sent: your key and the keyword or domain you are looking up. Ahrefs
   https://ahrefs.com/terms and https://ahrefs.com/legal/privacy-policy; Semrush
   https://www.semrush.com/company/legal/terms-of-service/ and https://www.semrush.
   com/company/legal/privacy-policy/; Moz https://moz.com/terms-of-use and https://
   moz.com/privacy-policy; Majestic https://majestic.com/support/terms and https://
   majestic.com/support/privacy-policy; Sistrix https://www.sistrix.com/data-privacy/(
   its terms are shown at sign-up); Ryte https://en.ryte.com/about/tos/ and https://
   en.ryte.com/about/privacy/; DataForSEO https://dataforseo.com/terms-of-service
   and https://dataforseo.com/privacy-policy; SerpApi https://serpapi.com/legal (
   terms and privacy on one page); Serper https://serper.dev/terms and https://serper.
   dev/privacy; ScaleSERP, ValueSERP and TrajectSERP https://trajectdata.com/traject-
   data-terms-of-service/ and https://trajectdata.com/privacy-policy/; Zenserp https://
   zenserp.com/terms and https://zenserp.com/privacy
 * **Google Ads API (Pro)** (googleads.googleapis.com): only for keyword ideas in
   the rank tracker, with …

## Screenshots

[⌊The dashboard: your site's AI search score, the three things worth doing next,
and the numbers behind them.⌉⌊The dashboard: your site's AI search score, the three
things worth doing next, and the numbers behind them.⌉[

The dashboard: your site’s AI search score, the three things worth doing next, and
the numbers behind them.

[⌊Site Audit: every published page checked against 37 rules, the comparative problems
a single page score cannot see.⌉⌊Site Audit: every published page checked against
37 rules, the comparative problems a single page score cannot see.⌉[

Site Audit: every published page checked against 37 rules, the comparative problems
a single page score cannot see.

[⌊The editor: an AI score and a classic SEO score for the page you are writing, 
with the Google snippet preview and every check spelled out.⌉⌊The editor: an AI 
score and a classic SEO score for the page you are writing, with the Google snippet
preview and every check spelled out.⌉[

The editor: an AI score and a classic SEO score for the page you are writing, with
the Google snippet preview and every check spelled out.

[⌊The llms.txt editor: the file assistants read, with its token count, the pages
it lists, and a live preview of exactly what a crawler receives.⌉⌊The llms.txt editor:
the file assistants read, with its token count, the pages it lists, and a live preview
of exactly what a crawler receives.⌉[

The llms.txt editor: the file assistants read, with its token count, the pages it
lists, and a live preview of exactly what a crawler receives.

[⌊AI crawler controls: the named crawlers from OpenAI, Anthropic, Google, Perplexity,
Apple, Meta and others, allowed or blocked one at a time.⌉⌊AI crawler controls: 
the named crawlers from OpenAI, Anthropic, Google, Perplexity, Apple, Meta and others,
allowed or blocked one at a time.⌉[

AI crawler controls: the named crawlers from OpenAI, Anthropic, Google, Perplexity,
Apple, Meta and others, allowed or blocked one at a time.

[⌊Every page with its score in one list, filtered down to what is actually broken:
weak scores, missing descriptions, thin content, accidentally noindexed.⌉⌊Every 
page with its score in one list, filtered down to what is actually broken: weak 
scores, missing descriptions, thin content, accidentally noindexed.⌉[

Every page with its score in one list, filtered down to what is actually broken:
weak scores, missing descriptions, thin content, accidentally noindexed.

[⌊Structured data: schema.org types applied per page or as a site-wide rule, with
a preview of the JSON-LD that will ship.⌉⌊Structured data: schema.org types applied
per page or as a site-wide rule, with a preview of the JSON-LD that will ship.⌉[

Structured data: schema.org types applied per page or as a site-wide rule, with 
a preview of the JSON-LD that will ship.

## Blocks

This plugin provides 4 blocks.

 *   Table of contents
 *   FAQ
 *   How-to
 *   HTML sitemap

## Installation

 1. In WordPress, go to **Plugins  Add New**, search for **AI Rank Suite**, and click**
    Install Now**, then **Activate**. Or upload the plugin folder to `/wp-content/plugins/`
    and activate it from the Plugins screen.
 2. The setup wizard opens on first activation. It takes about three minutes and every
    step writes real settings — nothing is a preview.
 3. **If you already run another SEO plugin**, the wizard detects it and defaults to
    running alongside it. You do not have to deactivate anything. Optionally, import
    your titles, descriptions, redirects and settings from it on the same screen.
 4. On the **llms.txt** screen, turn the file on and pin the five or ten pages you 
    most want an assistant to read. Check it at `https://yoursite.com/llms.txt`.
 5. On the **AI Crawlers** screen, decide which AI crawlers may read your site.
 6. On the **Content** screen, press **Analyze** to score every page. This runs in 
    the background; you can leave the screen.
 7. Optional: on the **AI Engine** screen, add an API key from OpenAI, Anthropic, Google
    or any OpenAI-compatible provider if you want AI writing and AI Answer Simulation.
    Everything else works without one.

**Requirements:** WordPress 6.4 or newer and PHP 8.1 or newer. The plugin will not
load on older PHP and will tell you so rather than fataling.

## FAQ

### Does this replace Yoast or Rank Math?

It can, but it does not have to, and on day one it does not. If another SEO plugin
is active, AI Rank Suite defaults to adding only the AI-search layer — llms.txt,
AI crawler control, AI page scoring, AI Answer Simulation — and leaves your titles,
descriptions, canonicals, Open Graph and schema exactly as they are. Nothing about
your current search results changes.

If you later want one plugin instead of two, switch the compatibility mode to let
AI Rank Suite own the whole `<head>`, import your settings and content fields from
the other plugin, and then deactivate it. Doing it in that order means you never
have a gap.

### Can I really run it with Rank Math (or Yoast, or AIOSEO) installed at the same time?

Yes, and that is the intended way to start. Every part of the page head — title,
description, canonical, robots, Open Graph, Twitter cards, JSON-LD, hreflang — is
assigned exactly one owner, and the assignment is enforced on the finished HTML 
rather than by hoping the two plugins use different hooks. So you will not get duplicate
titles or two competing sets of structured data. Detection covers Yoast, Rank Math,
All in One SEO, SEOPress, The SEO Framework, Slim Seo, Squirrly, WPSSO, Schema Pro
and Jetpack.

### Do I need an OpenAI or Claude API key?

No, and most of the plugin never asks for one. Page scoring, llms.txt, schema, sitemaps,
the link checker, redirects, the internal link graph, Search Console, indexing, 
imports — all of it runs without any AI key, entirely on your own server.

A key is needed for exactly two things: AI writing (descriptions, titles, FAQs, 
alt text, schema suggestions) and AI Answer Simulation. You bring your own key from
OpenAI, Anthropic, Google, Mistral, xAI, Groq, DeepSeek, Qwen, Azure OpenAI, OpenRouter
or any OpenAI-compatible endpoint — including a model running locally through Ollama,
LM Studio or vLLM, in which case nothing leaves your machine at all.

### What does it cost to run if I do use AI?

You pay your AI provider directly at their list price; the plugin adds nothing on
top. To keep that from being a surprise, the plugin estimates the cost of a job **
before** you run it, records the actual cost after, and enforces spending limits—
out of the box, $10 a day, $100 a month, and $25 for any single bulk job, with a
hard stop when a limit is hit. You can change or remove all three.

In practice: a meta description on a small model costs a fraction of a cent, so 
writing descriptions for a few hundred pages is a coffee. AI Answer Simulation is
the more expensive one because it asks a full model a real question — budget for
it per run, not per page.

### What is llms.txt, and does anything actually read it?

llms.txt is a plain markdown file at the root of your site — `yoursite.com/llms.
txt` — that tells an AI system what your site is, which pages matter, and how you
want to be credited. Think of it as robots.txt’s opposite: robots.txt says what 
not to read, llms.txt says what to read first.

Honest answer on adoption: it is a proposed convention, not a ratified standard,
and no AI vendor has publicly committed to honouring it. It costs you nothing to
publish, it is trivially cheap to serve, and if the convention holds you are already
there. The plugin also produces `llms-full.txt`, which contains the actual text 
of your chosen pages as markdown — useful today for anyone who feeds your site to
a model deliberately. Neither file is the whole strategy, which is why page structure,
schema and measurement are the other three quarters of this plugin.

### Does it work on a multilingual site?

Yes. WPML, Polylang, TranslatePress and Weglot are supported, including the two 
different ways they work — WPML and Polylang give each translation its own post,
TranslatePress and Weglot translate one post on the fly. Pages are scored, listed
and sitemapped per language, the content list filters by language, and hreflang 
is handled. The admin interface itself is available in English and German.

### Will it cope with a large site?

It is built for that case specifically. Every long-running job — page scoring, imports,
the internal link graph, bulk edits, the link checker — runs as a resumable background
job in its own indexed database tables, processing a slice at a time. A PHP timeout
or a killed request resumes at the cursor rather than starting again. The link graph
and the URL inventory were measured on a 50,000-post fixture with over 700,000 internal
links inside a 128 MB memory limit, and every admin screen was checked at that size.

If your host is aggressive about request limits, everything continues on the next
tick. Nothing here depends on WP-Cron running reliably.

### Is my content or data sent anywhere?

Only where you send it. With no keys configured, nothing leaves your server.

When you do use an AI feature, the page’s text is sent to **the provider you chose**,
and only after e-mail addresses, phone numbers, shortcodes, HTML comments, scripts
and anything you wrap in `[airanksuite-private]…[/airs-private]` are stripped out—
the preview tells you exactly what was removed before anything is sent. Page content
is also framed as untrusted data in the prompt, so text on one of your pages cannot
issue instructions to the model.

Your API keys are stored encrypted at rest. All scoring, the link graph, link suggestions,
sitemaps, schema and the audits run locally with no external call at all. The full
list of services and what each one receives is in the **External services** section
above.

### What happens to my data if I deactivate or uninstall?

Nothing is deleted. Settings, scores, redirects, keywords and history are kept by
default so that deactivating to test something, or reinstalling, never costs you
work. If you genuinely want everything removed, there is an explicit switch for 
it under Settings  Data, and only then does uninstalling clear the plugin’s options
and tables.

### Will this make ChatGPT recommend my business?

No plugin can promise that, and you should be wary of any that does. What this one
does is remove the reasons an assistant would not: it makes your pages retrievable,
gives them a structure a model can summarise without mangling, states in machine-
readable form what your business is and how to cite it, and then measures whether
your name shows up in answers to the questions you care about. The measurement is
the point — you get a trend line rather than a hunch.

### Does it slow my site down?

The front end does very little: meta tags, JSON-LD and the redirect check, all from
cached values. Sitemaps, llms.txt and catalog feeds are cached and served from rewrite
rules, not built on each request. The heavy work — scoring, crawling links, building
the graph — happens in the admin as background jobs, never in a visitor’s request.
Any module you do not use can be switched off completely, and a disabled module 
loads no code.

### I run WooCommerce. What do I get?

Product structured data with prices, availability, brand and reviews (including 
from Judge.me, Yotpo and the common brand plugins), a Google Merchant Center feed
and a Meta / Instagram catalog feed served from cached URLs those platforms can 
poll, and a catalog audit that tells you which products are missing the fields those
feeds require. The Catalog Feeds screen only appears when WooCommerce is active.

### Can I give a client or an editor limited access?

Access follows WordPress itself: the plugin’s screens and routes are for administrators,
and a route that names a post also asks WordPress whether this user may read or 
edit that post. The plugin no longer ships capabilities of its own.

### I’m migrating from another SEO plugin. Will I lose my work?

The importer reads Yoast, Rank Math, All in One SEO, SEOPress, The SEO Framework,
Slim SEO, Squirrly, SmartCrawl, Genesis, Jetpack, SEO Ultimate, WP Meta SEO, Redirection
and WooCommerce. It never modifies or deactivates the source plugin, so your old
setup stays intact and reversible. By default it fills only fields that are empty
here and tells you exactly how many values it left alone and why; every run is logged
and can be undone. It also imports redirects from a CSV or JSON handover file, previewing
what it would do before it does it.

### Does it support the block editor and page builders?

Both. SEO and AI fields appear in the block editor sidebar, in the classic meta 
box, and inside Elementor’s own Page Settings — all three writing to the same values.
Content rendered by Divi, Beaver Builder, Bricks, Oxygen, WPBakery, Elementor and
ACF is read for scoring and sitemaps, so builder-heavy pages are not scored as if
they were empty.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“AI Rank Suite — AI Search, llms.txt, Schema & SEO” is open source software. The
following people have contributed to this plugin.

Contributors

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

[Translate “AI Rank Suite — AI Search, llms.txt, Schema & SEO” into your language.](https://translate.wordpress.org/projects/wp-plugins/ai-rank-suite)

### Interested in development?

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

## Changelog

#### 0.2.45

 * The plugin’s own capabilities no longer guard anything. Every REST route and 
   every screen asks WordPress directly, and the capability stands in the route 
   itself: `current_user_can( 'manage_options' )`. Routes that name a post also 
   ask WordPress about that post.
 * The Roles screen is gone with them. It handed out four capabilities that now 
   decide nothing, and an installation that still carries them has them removed 
   on update. Access follows WordPress roles: administrators manage the plugin.
 * A test fails the build if a route is registered without a WordPress capability
   on the spot, or if one of the old capabilities is checked anywhere.

#### 0.2.44

 * Every REST route now asks WordPress for one of its own capabilities before the
   plugin capability is considered. A plugin capability can be handed to any role
   in Settings, Roles, so it can never be the only gate.
 * Values read from $_SERVER and $_COOKIE are sanitized, not only unslashed.
 * The audit export hands spreadsheet rows to the browser, which writes the file.
   Nothing is echoed from the route, and a cell that starts with an equals sign 
   is written as text, so a spreadsheet cannot run it as a formula.
 * llms.txt is stripped of markup on output.

#### 0.2.43

 * **Elementor no longer overwrites a title applied elsewhere.** Elementor keeps
   its own copy of the SEO title, description, keyword and noindex switch in its
   page settings and posts all of them on every save, layout edits included. Written
   back as they came, that copy put the old title back over one applied minutes 
   earlier from the AI review, the block-editor sidebar or the content list. The
   panel now remembers what it handed the builder and writes only the fields that
   were changed inside Elementor. The meta box and the block-editor sidebar already
   behaved this way; a test now holds all three to it.
 * **Long keyword lists fold.** A page can carry a hundred keywords, and the meta
   box and the sidebar drew every one of them as a chip, a wall that pushed the 
   page down and a counter that read “100 / 10”. Both now show the first twelve (
   eight in the sidebar), one chip says how many more there are, and the opened 
   list scrolls inside a box. The limit reads 100, which is what it always was.

#### 0.2.42

 * **The SEO score is a formula.** Four pillars with fixed points, one hundred in
   total: keyword 40 (in the title, the description, the URL, the first paragraph,
   a subheading, the density and an image alt), title and description 25, structure
   20 (one H1, heading order, 300+ words, alt texts, a compact slug), links 15. 
   Until now the keyword checks fed no score at all, so a page with the keyword 
   nowhere scored like one with it everywhere. Without a focus keyword the keyword
   pillar earns nothing and the score cannot pass 60. The four numbers are shown
   under the rings in the editor sidebar and the meta box.
 * **llms.txt written in one click.** “Write everything” gives every page in both
   files a summary (from the AI engine when a key is stored, from the page’s first
   sentences otherwise), writes the site’s lead paragraph and rebuilds both files,
   with a progress bar. Pages that already have a summary are kept unless you choose
   to rewrite.
 * **Site Audit: seven more rules, a way out of every finding, and a spreadsheet.**
   Meta description length, missing focus keyword, keyword missing from the title,
   very long slug, post without a featured image, no internal links out, oversized
   featured image. Every finding links to the optimiser as well as to the editor,
   and the whole run exports as CSV.
 * **Measure has an overview.** Search Console and Analytics for the same days side
   by side, each against the same days before, the two lines on one axis, the top
   pages with both numbers. Bing sits next to Google: the Search Console property
   beside the site Bing expects, with Bing’s import from Search Console one click
   away.
 * **Image SEO counts the media library.** How many images have no alt text, are
   wider than 2500 pixels or heavier than 500 KB, the largest ones listed, and one
   run that writes the missing alt texts from the template, fifty at a time.
 * **Import shows what is there.** The plugin that is installed or left data behind
   gets a card with the numbers and the buttons; the rest are one line each. Yoast
   and SEOPress have their marks.
 * **The AI proposal compares against the page as it is now.** “Now” in the title
   and description review showed the snapshot the proposal had taken when it was
   written; after an earlier apply that was an old title, and the content list, 
   reading the page, showed the real one. The review now reads the current values
   with every load and says when the metadata changed since the proposal.
 * **Job postings carry what Google’s report asks for.** datePosted from the post
   date, a job ID, the applicant country for remote jobs, and whether applying happens
   on the page.

#### 0.2.41

 * **The Pro package carries its translations again.** The 0.2.40 Pro build shipped
   without the languages folder, so every screen fell back to English on a German
   site. The build now refuses to run without the translation sources, and the release
   check verifies that the compiled catalogues are in the package.
 * **The word counter is called Words again.** The tab under Content had been renamed
   Length; the counter of every page’s words, and of the whole site, is the same
   tab and now says so.

#### 0.2.40

 * **The dashboard takes a score reading itself.** WP-Cron only runs when somebody
   visits the site, so on a quiet site the daily reading added in 0.2.39 could wait
   for days. When the dashboard opens and the last reading is older than twenty 
   hours, it takes one on the spot. The findings card gained a button: “Run an audit
   now” starts one and opens Site Audit, where it runs slice by slice.
 * **The editor toolbar shows both scores.** The pinned AI Rank Suite button carries
   GEO and SEO as two small pills in their verdict colours, and it sits first in
   the pinned row. With Rank Math active, its two pinned score buttons step back
   into the ⋮ menu, where its sidebar still opens, so the toolbar holds one set 
   of numbers instead of two.
 * **Keywords in bulk.** The keyword field in the meta box and in the sidebar accepts
   a pasted list (commas, semicolons or line breaks) and adds every entry at once,
   and the AI suggestions have an “Add all” button. Ten remains the ceiling.
 * **The meta box and the sidebar look like WordPress.** Core blue for every button,
   the secondary as an outline of the same blue, 3 and 4 pixel corners, core input
   borders, no gradients and no tinted shadows. The score rings are honey rather
   than marigold, and the number sits in the centre of the ring in every browser:
   it is HTML laid over the ring now, not SVG text rotated back into place.
 * **The post list says what Rank Math says.** The SEO details column adds the schema
   type the page will carry and three link counts as icons: internal, external and
   incoming. Score pills are top-aligned like every other cell, so they stay next
   to the title when another column makes the row tall.

#### 0.2.39

 * **The AI search score is read once a day.** The dashboard’s “AI search score 
   over time” card promised one point per recalculation, by hand or on schedule,
   and only the first half was true: a point was stamped when somebody pressed Recalculate,
   and on a site where nobody did, the line’s last date stayed where it was for 
   weeks. A daily job (`airanksuite_job_score_snapshot`, listed under Autopilot’s
   systems) now takes a reading, so the line moves on its own. Recalculate still
   adds a point on the spot.
 * **Both trend cards say when they last moved and when they move next.** Under 
   the score card: the last reading and the next automatic one. Under the findings
   card: the last completed audit and the next scheduled one, or, when none is scheduled,
   that an audit has to be run or scheduled for the line to gain a point. A last
   label from three weeks ago is a schedule now, not a fault.
 * **The “Open findings” tile updates with the chart under it.** Finishing an audit
   cleared the chart’s cache but not the tile’s, so for up to five minutes the chart
   showed the new run while the tile kept the old count.

#### 0.2.38

 * **Recurring events are scheduled on init, not on plugins_loaded.** Scheduling
   an event asks every plugin for its list of cron schedules, and WooCommerce translates
   the label of its schedules while answering. Asked during our boot, that made 
   WooCommerce load its translations before init, which WordPress 6.7 and later 
   report as a notice under WP_DEBUG, against this plugin. All eight recurring events(
   job resumer, retention, rank snapshots, backlink checks, listing refresh, reports,
   audit alerts, AI visibility) now go through one helper, `Cron::ensure()`, that
   waits for init. On a site without WooCommerce nothing changes; on a site with
   it the notice is gone.
 * **Running an import needs a WordPress administrator.** 0.2.37 added that check
   to the settings import and the backup restore, and left it off the plugin importer,
   which can replace settings, redirects and post data just the same. Starting, 
   ticking and cancelling an import run, and reading an uploaded file, now require`
   manage_options` as well. Listing the sources, detecting installed plugins, exporting
   and reading the backup stay with the plugin’s own capability.

#### 0.2.37

 * **Changing who may do what needs a WordPress administrator.** The plugin has 
   its own capabilities so that an agency can hand “manage settings” to an editor.
   That capability alone also opened the role editor, so somebody who had been given
   it could have given it, or anything else the plugin offers, to further roles.
   The role editor now requires WordPress’ own `promote_users` as well. The same
   second check, `manage_options`, was added to the other routes that reach beyond
   the plugin’s settings: writing and restoring .htaccess, importing a settings 
   file, restoring a settings backup, the maintenance tasks under Developer tools,
   and creating, changing or testing a webhook, which sends site data to an address
   somebody typed in. WordPress is asked first, so a refused request does not use
   up the rate limit. For an administrator nothing changes.
 * **Values reach JavaScript as JSON.** The toolbar’s script received its REST address
   and nonce by text substitution into the source, and the Matomo snippet had its
   address and site id pasted between quotes. Both now get one JSON object built
   by `wp_json_encode()`. The addresses were the site’s own, so nothing could be
   injected, but a value that is encoded for a URL is not encoded for a script, 
   and only one of the two is right.
 * **Structured data is printed with the default JSON encoding.** The JSON-LD in
   the page head was encoded with flags that leave slashes and non-ASCII characters
   as they are. With the defaults every slash is escaped, so no headline can close
   the script element, and the output is the same data to every consumer.
 * **Six importer queries pass the table name as an identifier.** The readers for
   Redirection, Rank Math and All in One SEO appended the other plugin’s table name
   to the statement. It travels as `%i` now, like everywhere else.

#### 0.2.36

 * **Everything the plugin names is named `airanksuite` now.** Options, tables, 
   post and term meta, capabilities, scheduled events, hooks, constants, the REST
   namespace (`airanksuite/v1`), script handles and the WP-CLI command (`wp airanksuite`)
   used a four-letter abbreviation that the directory’s review found too short to
   be safe from collisions with other plugins. **Your data moves by itself**: on
   the first request after the update, before any setting is read, tables are renamed,
   options and meta keys are carried across, capabilities and scheduled events follow.
   Nothing is copied row by row and nothing is left behind under the old names. 
   Shortcodes already typed into pages, such as `[airs_breadcrumbs]` and `[airs_business_hours]`,
   keep working under their old names as well as the new ones, and so does the `[
   airs-private]` marker. A settings export or a pre-update backup made by an earlier
   version restores under today’s names. If you wrote code against the old hooks,
   constants or REST paths, replace `airs` with `airanksuite` in it.
 * **A route that names a post asks WordPress about that post.** A plugin capability
   says what somebody may do with the plugin, not which posts they may see. Reading
   a post’s schema or its PageSpeed result needed only “view reports”, so a role
   with that capability could read them for a colleague’s private draft. Those routes
   now require `read_post` on the post itself, and writing requires `edit_post`.
   The same check was added where a post id arrives in the body or in a list: applying
   an internal link suggestion, rejecting or undoing an Autopilot proposal, a bulk
   run over chosen ids, submitting a URL for indexing. The Autopilot queue and log,
   the content list and its CSV leave out drafts the current user could not open
   in WordPress.
 * **No SQL statement is assembled any more.** The redirect list built its ORDER
   BY from the sort the screen asked for. The value came from an allow-list, so 
   it was never injectable, but a statement put together from pieces cannot be told
   apart from one that is. Every list in the plugin now sends one constant statement:
   the sort column travels as an identifier placeholder, the direction selects one
   of two literals, and a filter that is not in use is switched off by a flag instead
   of being left out of the text. Same results, same order, same paging.
 * **The sitemap’s browser view is a file.** The XSL stylesheet behind `/sitemap.
   xsl`, CSS included, was a string inside the PHP source; it is `assets/sitemap/
   sitemap.xsl` now, and PHP only serves it.
 * **No translation is loaded before init.** A cron interval label was translated
   while modules scheduled their events on plugins_loaded, which WordPress 6.7 and
   later report as a notice under WP_DEBUG. The interval was a copy of WordPress’
   own `weekly` and is gone.
 * **Four services were missing from the list of external services**, and are documented
   with what is sent, when, and their terms and privacy policies: OpenStreetMap 
   Nominatim (“Find coordinates from the address” in Local SEO), our own connect
   service behind “Sign in with Google”, the Google Ads API (Pro keyword ideas),
   and the webhooks you configure yourself.

#### 0.2.35

 * **Every database query goes through $wpdb->prepare().** 107 reads and writes 
   were built as strings with the table name interpolated and no placeholder at 
   all. None carried user input, but a query that is not prepared cannot be told
   apart from one that should have been, and the directory’s review said so. Table
   names are now passed as %i identifiers, IN lists get one placeholder per value,
   and LIKE patterns go through esc_like(); nothing is pasted into SQL by hand any
   more.
 * **No plugin CSS is printed into the page.** The upgrade menu entry’s colour, 
   the boot skeleton behind the admin app, the upgrade screen’s stylesheet and the
   post-list score columns were each an echoed
 * **The head arbiter cannot leave its output buffer open.** If another plugin opened
   a buffer above ours and never closed it, finish() gave up and the plugin’s own
   ob_start() stayed open for the rest of the request. Foreign buffers are flushed
   through first now, and a shutdown guard closes ours if nothing else did.
 * **The admin app never guesses where admin-ajax.php is.** The endpoint always 
   came from PHP, but the script kept a literal /wp-admin/admin-ajax.php as a last
   resort, which is wrong on every renamed or subdirectory admin. The fallback is
   gone.
 * **The compiled admin and editor bundles ship with their source.** assets/admin/
   src and assets/editor/src, the two Vite configs and the build steps in the readme,
   so anyone can read or rebuild what runs.
 * **Every external service is documented with its terms and privacy policy**, host
   by host: the Google APIs, the Google tag, IndexNow and its four endpoints, Bing
   Webmaster Tools, Microsoft Clarity, Matomo, Places, PageSpeed, the AI providers
   and the SEO data providers.
 * One review platform that has withdrawn API access from all plugins no longer 
   appears in the local directory suggestions.
 * **Two answer-simulation reads were behind the licence gate.** The trend and the
   competitor matrix are reports on data already collected, and an inactive licence
   is meant to pause new work, never to hide what exists. Both read freely now, 
   as every other report does.
 * **A site that moves from Pro to the free edition no longer fires empty cron events.**
   The rank snapshot, the answer simulation, the e-mail report and the backlink 
   re-check stayed in the cron table with nothing listening, so WordPress ran them
   into nothing on schedule for ever. Any scheduled event of this plugin’s with 
   no module behind it is removed once, the first time the plugin loads after the
   change.
 * **The free edition’s admin no longer asks for routes it does not have.** The 
   dashboard card, the content screen, the analyzer and the licence tab each requested
   an endpoint that only exists with a Pro module installed and left a 404 in the
   browser console; each asks the module list first now, and the licence tab says
   what the free edition is instead of reading a licence that cannot exist.
 * The 404 monitor explains what it records and where an entry goes, instead of 
   showing one line when it is empty.
 * The free edition never ran its uninstall cleanup. The Pro build wires it to Freemius’
   own uninstall hook inside a file the free package does not carry, so the “remove
   my data on uninstall” setting there was a switch connected to nothing. The free
   edition registers WordPress’ uninstall hook itself now; data is still kept unless
   you opted out of keeping it.
 * Nine explanatory captions added in 0.2.34 (the score ring, the four counters,
   the three trend notes, the directories hint in Local SEO) had no German translation
   and showed in English on German sites. They have one now.

#### 0.2.34

 * **The dashboard says what it is connected to, and what is being done with AI.**
   The card that reports the agent now carries the wiring underneath it: a row of
   every service the plugin is plugged into — the AI engines, Search Console, Matomo,
   Analytics, Bing, IndexNow, WooCommerce — each with what stops working while it
   is dark, fed by one moving artery that carries current only while an engine can
   actually answer. Under it, the ten kinds of work the plugin does with a model
   and which engine each one goes to. It is drawn with or without a key: without
   one, the same diagram greys out, which is the argument for connecting one.
 * **Every figure now says what it counts.** Calls today, spend today, the run’s
   progress, the run’s cost, an engine’s load, the score in the ring, pages scored,
   open findings, broken links and each of the three trend lines carry one sentence
   explaining what is measured, over what window, and whether the number is metered
   or forecast.
 * **Five figures were measuring the wrong thing.** “Calls today” and “Spent today”
   counted from UTC midnight while the site keeps its own clock, so in the Gulf 
   every morning until 4am reported the wrong day. A finished run went on advertising
   the estimate it opened with instead of the metered cost of the calls it actually
   made, and showed a full progress bar beside the word “idle”. The search clicks
   sparkline selected the _oldest_ thirty snapshots, so on any site with more history
   it froze on its first month for ever. The findings line plotted a run that was
   still crawling, drawing a cliff that reversed itself an hour later, and labelled
   its points in UTC while the score line beside it used the site’s timezone. The
   coverage line bucketed its days in UTC for the same reason.
 * **On a translated site the desks were invisible.** The panel matched each job
   against the _translated_ name of its desk, so on a German or French install nothing
   matched and the whole lower half of the diagram rendered empty, with no error
   anywhere. Jobs now carry a language-independent key. The engine load bar likewise
   divides by a total the server sends rather than by the length of whatever list
   the screen happened to be holding.

#### 0.2.33

 * **The compliance work from the WordPress.org review reaches the Pro edition too.**
   Analytics tags are enqueued rather than printed into wp_head, so they are visible
   to the script loader and to caching layers, and Consent Mode’s requirement that
   its default runs before the Google tag is a declared dependency instead of a 
   hook priority that another plugin could land inside. The cookie banner’s stylesheet
   moved to the head, where it belongs, and no longer arrives after the banner it
   styles. Five reads of `$_SERVER` that carried a `phpcs:ignore` are sanitized 
   through one helper that unslashes before it sanitizes.
 * **The licence gate cannot be filtered into refusing.** `airanksuite/licensing/
   allows` still lets a host or an agency widen access; it can no longer narrow 
   it, so a third-party snippet cannot lock a customer out of something they have
   paid for.

#### 0.2.32

 * **The WordPress.org edition carries no licensing code at all.** Directory guideline
   5 forbids a hosted plugin from locking any feature behind a licence, and says
   the locked code must not even be present. The build already left the Pro modules
   out; it now also leaves out the licensing module, the Freemius SDK and the licence
   bootstrap, so no code path remains in the free package that could answer “no”
   to a feature. The licence gate additionally refuses to enforce anything, and 
   refuses to be filtered into enforcing anything, without the Pro build’s own marker.
 * **Analytics tags are enqueued instead of printed.** The Google tag, its configuration,
   Microsoft Clarity, Matomo and the consent banner used to print `<script>` and`
   <style>` straight into `wp_head`, which makes them invisible to the script loader
   and to every caching or optimisation layer. They register handles and attach 
   inline code now. Consent Mode’s requirement that its default runs before the 
   Google tag is expressed as a dependency rather than a hook priority, so nothing
   can land between them, and the cookie banner’s stylesheet moved to the head instead
   of arriving after the banner it styles.
 * **Request input is sanitized rather than excused.** Five reads of `$_SERVER` 
   were annotated with `phpcs:ignore` instead of being cleaned. Headers and the 
   request URI are attacker-influenced like any other input, and they now go through
   one helper that unslashes before it sanitizes, in that order.
 * **Translations come from the directory.** WordPress.org generates and serves 
   language packs for a hosted plugin, and a bundled catalogue silently shadows 
   whatever the community contributes. The free package ships the `.pot` for translators
   and nothing compiled.
 * **A plugin role could edit posts WordPress would not open for it.** The SEO editor
   preset grants “edits titles, descriptions and keywords”; it never said _which_
   posts, and the content route did not ask. A user holding that capability could
   rewrite the SEO title, description, slug, robots and canonical of any post over
   the REST API, including somebody else’s private draft, and read that draft’s 
   text and previews from the same screen. The route now makes the object check 
   WordPress makes: `edit_post` before any write, `read_post` before an unpublished
   post is shown at all, and an unreadable id answers “not found” rather than confirming
   it exists. Two tests hold it from both sides.
 * **A clean audit no longer shows the last one’s findings.** The dashboard tile
   derived the run from the newest row in the findings table. A run that finds nothing
   writes no rows, so the newest row still belonged to the run before it and the
   number stayed up after everything was fixed; a run in progress, conversely, was
   counted half-finished. The tile now reads the run the auditor publishes when 
   it completes, which is the same run the audit report shows. No finished run, 
   no number.
 * **A large redirect import cannot time out half-applied.** Fifty thousand rows,
   each a lookup and a write, do not fit in one PHP time limit, and what a timeout
   left behind was some redirects live, the rest missing, and nothing on screen 
   saying which. The import now applies two thousand rows per request and answers
   with where to continue; the screen walks through the slices and reports the totals
   as before.

#### 0.2.31

 * **The page drawer no longer runs off the right edge.** On a window around 1100px
   wide the drawer’s own column was sized by its content rather than by the drawer,
   so the header chips, the tab strip and the whole right-hand rail were drawn 40px
   past the edge and cut off; the search preview looked clipped and the view switch
   broke into two rows. The drawer’s column is now an explicit track that cannot
   exceed the drawer, every grid inside the rail is the same, the preview frames
   fill the rail, and the view switch reads Google, AI answer, Social, X on one 
   line.
 * **Titles show their dash, not `&#8211;`.** WordPress hands the admin a texturised
   title with the dash as an HTML entity, and the drawer header, the list row and
   the SEO title fallback printed it literally. Decoded once on the server, so every
   screen gets the same plain text.

#### 0.2.30

 * **The admin looks like WordPress again.** An earlier pass gave the plugin its
   own typeface, its own violet and softer, rounder surfaces so it would stop looking
   like every other SEO plugin. It worked, and it was the wrong goal: the people
   who use this are WordPress administrators, and what reads to a designer as identity
   reads to them as a SaaS dashboard dropped into their admin. The typeface is now
   the admin’s own, the working colour is core’s blue, the radii and card shadows
   are core’s, and the violet survives only as the accent on the score ring. The
   upgrade page keeps the website’s look on purpose; that page is the shop window.
 * **The dashboard verdict now sees the audit.** It read site checks, broken links
   and missing descriptions and then declared “no failing check, no broken link 
   and every page described” on a site whose audit, one click away, held 43 warnings.
   Critical findings now outrank everything but a disconnected engine; warnings 
   sit just below a broken link.
 * **Every calculation was read end to end.** The AI-search score, the audit score,
   the page GEO and SEO scores, the library averages, the numeric sort and the null
   handling all check out; the arithmetic is consistent (pass 1, warn ½, fail 0,
   weighted) and unanalysed pages are excluded from averages rather than counted
   as zero. One accessibility slip: the score ring told screen readers “0 / 100”
   for a page it drew as “not yet scored”. Fixed.
 * **Every route the screens call exists** (176 of 176) and every field they read
   is one the server sends. Six more strings were built as English fragments and
   are translated now, including the dry-run summary on the autopilot.

#### 0.2.29

 * Build housekeeping only, no change to the plugin itself. The release script wrote
   the finished build into one folder and the second copy was made by hand afterwards,
   so that folder held the version before the one just shipped, every time. Both
   are written by the script now, and both keep the newest three builds.

#### 0.2.28

 * **The dashboard said “0 open findings” while the audit it linked to reported 
   335.** The tile counted the site checks, a handful of foundation tests, but wore
   the audit’s label. The first number anyone looks at gave an all-clear that was
   wrong by 43 warnings and 292 notices. It reads the audit now, from the same query
   as the chart below it, so the two cannot disagree. A test holds the arithmetic.
 * **“Pages scored over time” stopped at 20,000 pages and started its total at zero.**
   Three faults in one chart: a hard stop after 20,000 analyses with nothing on 
   screen saying so, pagination by OFFSET with no ORDER BY (so two loads of the 
   same site could draw different curves), and a cumulative line that ignored everything
   scored before the last sixty days — drawing a site with 40,000 scored pages as
   a line rising from nothing. Stable keyset pagination, no silent ceiling, and 
   the curve starts where the site already was.
 * **More English on a German install:** the audit’s “156 pages · 30 rules · 21 
   passing” line, “nothing outstanding”, the severity counts, and “Page 1 of 7” 
   on two screens. All were built as template literals, which is why they were invisible
   to the translation test as well.

Found by an independent audit of the 0.2.27 release. Every finding above was reproduced
before it was fixed.

#### 0.2.27

 * **The AI can no longer write a meta description longer than the limit.** It was
   asked for 120-155 characters and returned 196, and the editor drew its own red
   bar under it: the product told you the text was too long and had written it itself.
   A prompt is a request, and the JSON schema …

## Meta

 *  Version **0.2.45**
 *  Last updated **8 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [aeo](https://wordpress.org/plugins/tags/aeo/)[ai seo](https://wordpress.org/plugins/tags/ai-seo/)
   [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/ai-rank-suite/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

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

## Support

Got something to say? Need help?

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