=== CiteProof – AI Search Visibility, SEO & GEO ===
Contributors: citeproof
Tags: ai seo, geo, ai visibility, schema, llms.txt
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 2.75.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

AI SEO & GEO: get your site read and cited in ChatGPT, Perplexity and Gemini answers, with schema and llms.txt. Works with Yoast.

== Description ==

CiteProof is the WordPress side of [CiteProof](https://citeproof.co). The platform audits how AI engines answer questions about your business; the plugin makes the changes on the site, page by page, and reports back.

**Alone or next to your SEO plugin.** Every module has an "automatic" mode that steps aside when Yoast SEO, Rank Math, WPML, Polylang, TranslatePress or Weglot already does the job. You can install it today without touching what you have.

**What it does on the site**

* **The SEO box in the editor** — under every post: the page's AEO score, one plain sentence, and at most three things to do with the button that does them (write the short answer, add the customer questions, insert the link to another page, fix the description or the title, make the page visible, turn schema back on). Body-text fixes in one line. Every one of the sixteen checks under "Details". The same list in the block editor sidebar and in the pre-publish panel. A sortable AEO column in the posts list.
* **Drafts written by the platform** — a short answer and up to three customer questions written only from the page's saved text; anything with numbers or questions not on the page is dropped. You approve them in the editor. Monthly quota shown next to the button.
* **Content for the AI engines** — a TL;DR box, a FAQ block that becomes FAQPage schema, an author box with Person and sameAs, an entity manager (Wikidata, founders).
* **Schema engine** — one JSON-LD graph with stable ids: WebSite, Organization or LocalBusiness, WebPage, BreadcrumbList, Article and Person, Product on WooCommerce. Defaults per post type, override per page.
* **Per-page meta** — title, description, canonical, robots with templates, quick edit and bulk edit.
* **Open Graph / X cards, XML sitemap, redirects with a 404 log, breadcrumb, virtual llms.txt.**
* **Local SEO, multi-location** — one LocalBusiness node per branch with address, phone, opening hours, geo and map link; shortcodes for the visible cards.
* **IndexNow** — every publish, update, slug change and deletion is sent to Bing, Yandex, Seznam, Naver and Yep.
* **hreflang** — per-page alternates, mirror sites, x-default, also in the sitemap.
* **AI bot control** — a robots.txt panel per crawler (search vs training), a log of verified crawler visits, access-log reading.
* **Internal links written for you** — for every orphan page, the page that already covers the topic and the phrase to put the link on; "Insert link" writes it there (first occurrence, outside headings, code and existing links), "Connect the first N" does them all, every link is in a log with "Remove". In the editor, the same button on the phrases of the current text.
* **Image alt text** — images without alt get the media-library alt, caption, title or a cleaned file name at output; optionally a vision model describes them through the platform.
* **Search Console that acts** — clicks, impressions, CTR and position for the last 28 days with deltas, read from the platform (the plugin never talks to Google), turned into three lists: titles and descriptions to rewrite (draft ready, one Save), pages losing clicks, question queries to add as FAQ.
* **Fact sheet, /ai-info and the Brand tab** — one sheet with the facts about the business (shared with the dashboard), a consistency scan of the site against it, one-click alignment of the Organization schema, an About page score, and an /ai-info page (HTML, JSON-LD, Markdown).
* **An admin app, not a settings page** — Overview with the average AEO score and the weakest pages, AI crawler visits over 14 days, a five-point "what to do now" list, pages never read by an AI, URLs invented by AI (with one-click redirects), wrong facts open on the platform, and the log of what the plugin did on its own. A guided first run in five steps.
* **Importer** — per-post meta, templates, redirects, schema settings and locations from Yoast SEO and Rank Math.

**What it does with the platform**

* Receives the fixes generated by the audit (JSON-LD, meta tags, robots.txt, llms.txt) and applies them, or queues them for review (review-only mode is on by default).
* Rolls a fix back exactly, keyed by fix id.
* Sends a compact content-health snapshot every 15 minutes (AEO scores, orphan pages, images without alt, IndexNow state) so the dashboard can show what needs work.
* Tracks visits from AI crawlers and sends them in batches.

**Honest notes, the same ones you find in the interface**

* llms.txt is served because customers ask for it; no engine has announced it reads it.
* IndexNow is not read by Google. It still matters: Bing's index feeds ChatGPT search and Copilot.
* The AEO score is an extractability index, not a traffic forecast. Hints tell you what to add, never what to claim.
* Alt text generated by the model describes what is visible; it never invents brands, prices or names.

== External services ==

The plugin works without any account. It contacts the services below only in the cases described.

**CiteProof platform (citeproof.co)** — only after you paste an API key from a CiteProof account (Settings, or step 1 of the guided first run). It is used to receive the fixes of the audit, report what was applied, show Search Console data and AI drafts, and keep the dashboard up to date. Sent: the site URL and plugin version; visits from AI crawlers (user agent, path, time); the result of each applied fix; a content-health snapshot (counts, page ids, titles and URLs, never the text of a page); for AI drafts and image descriptions, the text of that page or the URL of that image, only when you press the button or turn the option on. Removing the key stops every call.
Terms: https://citeproof.co/terms — Privacy: https://citeproof.co/privacy

**IndexNow (api.indexnow.org, operated by Microsoft Bing with Yandex, Seznam, Naver and Yep)** — each time a page is published, updated or deleted, when IndexNow is active. It is active by default only when no other SEO plugin handles it; switch it off in CiteProof → SEO. Sent: the changed URLs, the site host and the site's IndexNow key.
Documentation: https://www.indexnow.org/documentation — Privacy: https://privacy.microsoft.com/privacystatement

**OpenAI and Perplexity public IP lists** — when the AI-bot log verifies a visit claiming to be GPTBot, OAI-SearchBot, ChatGPT-User, PerplexityBot or Perplexity-User, the plugin downloads the crawler's published IP ranges (at most once a day) to tell real crawlers from impostors. Nothing about your site is sent: it is a plain download of a public file.
OpenAI: https://openai.com/gptbot.json (privacy: https://openai.com/policies/privacy-policy/) — Perplexity: https://www.perplexity.com/perplexitybot.json (privacy: https://www.perplexity.ai/hub/legal/privacy-policy)

== Installation ==

1. Install it from Plugins → Add New (search "CiteProof"), or upload the ZIP.
2. Activate it.
3. The guided first run opens. Everything that runs on the site works right away, with no account. To connect the platform, paste the key from your CiteProof dashboard (Settings → Plugin; 68 characters, starts with ctm_) in step 1 or in CiteProof → Settings.
4. Review-only mode is on: fixes from the platform wait in "Pending fixes" until you approve them. Switch it off when you trust the flow.
5. Open any post: the "CiteProof · SEO" box under the editor says what to do, with the button that does it.

== Frequently Asked Questions ==

= Do I need an account? =

No. The SEO modules (meta, schema, sitemap, redirects, breadcrumb, Open Graph, hreflang, IndexNow, local SEO, internal links, AEO score, the /ai-info page, AI crawler control, alt fill at output) work without an account, with no limits.

= What does the free account add, and what do the plans add? =

A free account (created from the plugin in a minute) connects the site to the platform: the page-by-page diagnosis, the Search Console panel, questions tracked in ChatGPT answers, and every month 10 AI drafts, 30 image descriptions and 5 AI rewrites of titles and descriptions. A paid plan raises those to 150, 300 and 200 a month, audits the site on five AI engines (ChatGPT, Perplexity, Gemini, Claude, Google AI) and prepares fixes after every audit that you approve in the plugin. The plugin always tells you how much of the month's quota is left.

= Can I keep Yoast SEO or Rank Math? =

Yes. In "automatic" mode the plugin does not print a second title, description, schema, sitemap, Open Graph or IndexNow when one of them is active. You can force any module on or off in CiteProof → SEO. The importer copies your existing meta, templates, redirects and locations if you decide to switch.

= What is the AEO score? =

A 0–100 index of how easy a page is for an AI engine to extract and cite: sixteen weighted checks (short answer at the top, title with the customer's question, description, questions with answers, subheadings, short paragraphs, lists or tables, enough text, concrete numbers, author with a job title, recently updated, links to other pages and to a source, images described, structured data on, business name in the text, visible to the engines). A check that partly passes earns half; a check that does not apply is left out. It is not a traffic forecast and it is not the dashboard's visibility score.

= Does the plugin change my content? =

Only when you press a button. It adds blocks around the content (short answer on top, questions and author box at the bottom, both optional) and fills empty alt attributes at output. "Insert link" wraps one phrase that is already in the text with a link, and "Remove" takes it off; "Use the draft" writes the short answer and questions you approved into their fields. Fixes from the platform are written to the head, robots.txt or llms.txt, never inside a post, and each one can be rolled back.

= What does the SEO box in the editor show? =

The page's AEO score and at most three things to do, in plain words, each with the button that does it. Everything technical sits under "Details" (the sixteen checks with their outcome) and "More options" (canonical, robots, internal links, schema, social, languages, locations). The block editor sidebar shows the same list.

= What data leaves my site? =

With an API key set, the plugin sends to the platform (citeproof.co): the site URL and plugin version, visits from AI crawlers (user agent, path, time), the result of each applied fix, and a content-health snapshot (counts, page ids, titles and URLs, never the text of a page). If you turn on automatic alt text, the URLs of images without alt are sent so a vision model can describe them. IndexNow sends changed URLs to api.indexnow.org. Nothing else is sent and nothing is sent without a key.

= Does it talk to Google? =

No. The Search Console panel reads a summary from the platform, where you connected Search Console with your own Google account. The plugin never asks for Google credentials.

= Is llms.txt useful? =

Honestly, not yet. No AI engine has announced it reads the file. The plugin serves it because customers ask for it and it costs nothing; it is not a ranking factor and the interface says so.

= Why is IndexNow "not read by Google"? =

Google does not use the IndexNow protocol. Bing, Yandex, Seznam, Naver and Yep do. It still matters for AI visibility because Bing's index feeds ChatGPT search and Copilot.

= How does automatic alt text work? =

Two layers. At output, an image without alt gets the media-library alt, the caption, the title or a cleaned file name (a camera name like IMG_4521 yields nothing). If you opt in, images without any alt are sent to the platform in batches of ten and a vision model describes what is visible in your language; the text lands in the media library where you can correct it. There is a monthly quota per account and the count is shown.

= Can I have several locations? =

Yes. CiteProof → Locations: each one becomes a LocalBusiness node with address, phone, email, opening hours, coordinates and map link, linked to the Organization. Assign a page to a location from the SEO box; show the details with `[citami_location]`, `[citami_locations]` or `[citami_opening_hours]`.

= What does "review-only mode" mean? =

Fixes generated by the platform are queued in CiteProof → Pending fixes instead of being written to the site. You approve or reject each one. It is on by default; switch it off when you want fixes applied automatically. Every applied fix can be revoked later.

= Does it work with page builders and caching plugins? =

The head output, sitemap, redirects and IndexNow are independent of the builder. The TL;DR, FAQ and author box are added through the standard content filter, so builders that bypass it (some Elementor templates) will not show them: use the shortcodes `[citami_tldr]` and `[citami_faq]` inside the builder instead. Caching plugins are fine; the sitemap and llms.txt are served before the cache layer in most setups. The plugin has been tested on its own test harness; please report anything odd on a real site.

= Does it slow the site down? =

The front end adds one small stylesheet on singular pages and a few database reads that WordPress caches. The internal-link index is stored in one option and refreshed on save; the editor panel caches its work per page. Access-log reading and alt generation run in the background.

= How do I remove it completely? =

Deactivate and delete from Plugins. The uninstall routine removes every option, transient, cron event and per-page cache the plugin created. Per-post fields (SEO title, description, TL;DR, FAQ, alt source) stay in the post meta so nothing is lost if you reinstall.

= Is it multisite-safe? =

Options are per site and the uninstall routine iterates the network. Each site needs its own API key.

== Screenshots ==

1. The SEO box under a post: score, one sentence, three things to do with their buttons, body-text fixes in one line.
2. The block editor sidebar with the same list, and the details closed at the bottom.
3. Overview: average AEO score and weakest pages, AI crawler visits over 14 days, what to do now, the four numbers, done by the plugin.
4. Brand: site consistency with the fact sheet, About page score, /ai-info.
5. AI bots: the three policies, per-bot rules, verified visits, robots.txt preview.
6. Internal links: orphan pages with the phrase and the "Insert link" button, the log with "Remove".
7. Search Console: 28-day KPIs and the three lists of things to do.
8. SEO: module status in green, advanced settings folded.

== Changelog ==

= 2.75.0 =
* Overview: "What your plan includes" — the same list as the CiteProof dashboard and the Wix and Shopify apps, with what is unlocked and from which plan the rest opens. A plan paid on Wix or Shopify counts here too.

= 2.74.0 =
* Connect with one click: sign in to CiteProof (or create a free account with your email) and the plugin receives its key by itself, nothing to copy. The key is traded server to server with a one-time code.

= 2.73.3 =
* Links to the CiteProof dashboard (Open the dashboard, Settings → Plugin, plans, questions, articles, brand) carry the language of this WordPress, so the dashboard opens in Italian, German or English.
* Brand: the fact sheet's own phone number is no longer reported as "a different phone" on the contact page.

= 2.73.2 =
* Admin tables: the quick filter above long tables no longer borrows the round dot of the Pages filter buttons (its own CSS class).
* Links: in the "the link will land here" preview a heading no longer runs into the sentence under it.

= 2.73.1 =
* The stylesheet of the /ai-info pages is registered and printed only through the WordPress style API (wp_register_style, wp_enqueue_style, wp_print_styles): no hand-written link tag.
* German: the table filter, the API key label in the guided setup and counts with one item read correctly; contact pages called "kontakt" or "anfahrt" are checked against the fact sheet.

= 2.73.0 =
* German: the whole plugin interface is available in German (de_DE, de_AT, de_CH; Swiss spelling with "ss"). Texts the plugin writes on the site (About page draft, AI info page, llms.txt sections) follow the site language too.
* German sites: "ueber-uns", "haeufige-fragen" and similar slugs are recognised as About and FAQ pages; opening hours accept "geschlossen".
* The site language (it / en / de) is sent to the platform for AI drafts, image descriptions and link sentences.

= 2.72.1 =
* WooCommerce: the plugin tells the platform the site's language with the catalog, so the texts written from the dashboard (category guides, product rewrites, link sentences) come out in the language of the store, not the one set in the dashboard.

= 2.72.0 =
* Links: the link plan can now be seen and used from the platform dashboard too (Internal links page): the same plan, the same AI sentences to review, the same log and undo, the weekly switch. The plugin stays where the plan is computed and the texts are written; the dashboard talks to it through the site's API key.
* Links: a sentence proposed from the dashboard shows in the plugin's Links tab as well, and the other way round.

= 2.71.4 =
* Links: when the AI could not write a sentence for a page (no link words, no related page, no text, site not connected) the reason is shown in place of the button, so no click ends in an error.
* Links: the AI is offered the whole page title before pieces cut from it, so links read as a natural mention.
* Fixed two PHP 8.4 deprecation notices (explicitly nullable parameters).

= 2.71.3 =
* Links: before applying a sentence written by the AI you can correct it (the link words must stay in it, once); until you press Apply the page does not change.

= 2.71.2 =
* Links: the AI sentence button says it uses one AI rewrite and how many are left this month (and disappears when none are left); short, natural link words are offered to the AI first; a clearer message when a page has no words to link with yet.

= 2.71.1 =
* Links tab: the site link plan's table and the AI sentence preview no longer show stray empty boxes (the plan form is laid out as a block).

= 2.71.0 =
* Links: a link plan for the whole site. The plugin finds the pages that need links (orphans, pages with one or two inbound links, pages Google shows between position 4 and 20), links them with the words people search in Search Console or with their title, from pages that already contain those words. Never two links to the same page from one page, never the same words towards two different pages, at most 3 new links per page. Apply all or a selection, or let the plugin write up to 10 a week; every link can be undone. For pages that need links when no page contains their words, the AI can rewrite one sentence of the closest page to hold the link: you see before and after and apply it yourself; undo puts the original sentence back (uses one AI rewrite of the month).

= 2.70.3 =
* llms.txt: on WooCommerce stores the "Product categories" section was never printed (the virtual file was served before WooCommerce registered its taxonomies); the cart, checkout and account pages are no longer listed under "Main pages".

= 2.70.2 =
* Review fixes for the WordPress.org directory: scripts and styles through the enqueue API, sanitised nonces, no contact with the platform before the owner connects the site, one name (CiteProof) on every site.

= 2.70.1 =
* Plugin Check pass before the WordPress.org review: every output escaped, every request value sanitised, justified exceptions documented in the code. No change in behaviour.

= 2.70.0 =
* WooCommerce: product descriptions rewritten from the dashboard (facts, use cases, specifications, FAQ) are applied to the product together with the SEO title and meta description; the previous text is kept for "Undo".

= 2.69.0 =
* WooCommerce: the category mini guide comes in two parts: two or three sentences in the category description (above the products) and the buying criteria, "ideal for" and frequently asked questions printed below the grid, with FAQPage in JSON-LD.

= 2.68.0 =
* WooCommerce categories are sent to the platform together with the products: text above the grid, SEO meta, image, best sellers of each category.
* "Category truth": the platform scores every category (text that helps choose, doorway pages, empty pages, uncategorised products) and says which one to start from.
* The category mini guide approved in the dashboard is written into the category description, with the previous text kept for "Undo".

= 2.67.0 =
* WooCommerce: once a day the plugin sends your products (best sellers first, up to what your plan covers) to the platform, which checks what AI shopping answers need: price, availability, GTIN, brand, variants, images, descriptions, return and shipping policies. Nothing in the store is changed.

= 2.66.0 =
* Pages to exclude: the pages listed in the dashboard (auto-apply settings) get nothing from the fixes: no schema, no meta tags, and the FAQ page is not created or rewritten if its address is excluded. "/checkout/*" covers the page and everything below it, "/contact" that page only. The list arrives with the periodic sync.

= 2.65.0 =
* Schema is applied only when it is complete: a JSON-LD with placeholders (such as "[Phone]" or "TODO"), an empty value or a missing required property (address and phone for a local business, answers for a FAQ, price for a product) is not applied and the message says what is missing. This holds for automatic fixes, for fixes received from the platform and for "Approve".
* Fixes received by the periodic sync go live on their own only when the platform has released them for auto-apply; all the others wait for your approval. This also fixes the sync stopping with an error on PHP 8.
* A fix made of several JSON-LD blocks is now accepted.
* Approve, Reject and Revoke tell the platform exactly what happened, so a fix you rejected is not applied again automatically.

= 2.64.1 =
* AI bot log: a request that WordPress or an SEO plugin redirects (for example /sitemap.xml sent to the sitemap index) is now recorded as a redirect, not as an error. The 404 log no longer lists those addresses as invented.

= 2.64.0 =
* Search Console: every "title and description to rewrite" row has "Write with AI": the platform writes the title and description from the searches people really make for that page (no invented numbers), and can propose a new page heading (H1). "Write the first 3 with AI" does three pages at once. Nothing changes until you press "Use the draft"; the H1 changes only if you tick its box.
* Editor: next to the page's Search Console searches, "Write title and description from these searches (AI)" fills the SEO fields and offers the new H1 for the page title. Saved with the page.
* Pages tab: the AI proposal can also change the H1, with the same tick box.
* The automatic draft (without AI) no longer stops mid-sentence.

= 2.63.0 =
* Internal links: suggestions only offer words that can really become a link (not words found only in a heading or already inside a link); when a link cannot be added, the editor says why.
* "In short" box: three looks (tinted box, accent line only, plain text), the "In short:" label can be hidden, and the colour can be changed (SEO → Advanced → Content for AI).
* FAQ: if the page already has a FAQ (Yoast or Rank Math block, or a "FAQ" section in the text) the plugin adds only the missing questions inside it, in the same style, instead of a second FAQ section; the structured data gets one FAQ list with all the questions. The previous behaviour is still available as an option. A FAQ can also be shown as plain headings instead of drop-downs.
* The AI-readiness score and the AI drafts count the questions already on the page.

= 2.62.0 =
* /ai-info is now optional and off on new sites: no engine has announced it reads such a page. Turn it on from Brand or in the guided first run. Sites where it was already live keep it. It is no longer a step in the "What to do now" list.

Older releases are listed in changelog.txt inside the plugin folder.

== Upgrade Notice ==

= 2.37.0 =
The AEO score is now a sidebar in the block editor. Nothing to configure.

= 2.32.0 =
The Redirects tab now shows the URLs AI assistants invented about your site, with a suggested redirect. Nothing to configure.

= 2.31.1 =
Elementor pages are finally read by the AEO score and the automatic description; cache plugins are purged after fixes. Update recommended for every site with a page builder or a cache plugin.

= 2.31.0 =
Published brand documents from the dashboard now appear under /ai-info/<name>/. Nothing to configure.

= 2.30.0 =
New Brand tab with the fact sheet, the consistency scan and /ai-info. Fill in the sheet (or let the dashboard send it) to switch them on.

= 2.29.1 =
First real-WordPress run and a meta description fix. No settings change.

= 2.29.0 =
Visual refresh and QA pass. No settings change; clear your page cache once so the new stylesheet is picked up.
