=== TWT AEO Ultimate ===
Contributors: jadeslair
Tags: woocommerce, answer engine optimization, knowledge graph, schema, structured data
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 2.15.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

AEO plugin: get cited by ChatGPT, Perplexity, Gemini & Google AI Overviews. Connected schema, llms.txt, E-E-A-T + enhanced WooCommerce AEO.

== Description ==

**AEO Ultimate** AEO Ultimate is a fully modular optimization engine built to make your WordPress site discoverable, readable, and highly citable by AI search engines and LLM agents. As search evolves from traditional links to AI-generated answers, the plugin prepares your site by delivering connected @graph JSON-LD schema, explicit publisher/author identity (E-E-A-T), and dedicated AI-agent discovery files (like llms.txt). Designed to run smoothly alongside your existing SEO setup, AEO Ultimate lets you toggle only the features you need—ensuring you never duplicate schema or cause plugin conflicts.

Fully modular: enable only what your site needs. Every feature toggles independently.

= 🛒 WooCommerce AEO =

Built for stores: every commerce feature exists so an answer engine can quote your catalogue accurately.

* **Product Schema Engine** — every product publishes a connected Product or ProductGroup @graph with per-variant offers, identifiers, images, reviews, shipping from your live zones, and your return policy.
* **Extension-Aware Pricing** — products from Bookings, Subscriptions, Bundles and similar extensions publish "From" prices or ranges, never a definite price their own page contradicts.
* **Product FAQs** — every FAQ source on a product page is assembled into one FAQPage node, with free and AI generators for the questions shoppers actually ask.
* **Products Dashboard** — walks your whole catalogue with search and pagination, names exactly what each product is missing, and generates schema in bulk.
* **Google Merchant Center** — compares your catalogue against what Google actually lists, surfacing missing products, rejected items, and price mismatches.
* **Bing Merchant Center** — the same catalogue comparison for Microsoft's shopping index.
* **Smart Collections** — publishes your "Starter Kit" and "Under $500" style categories as real Collections with structured data an AI assistant can quote.
* **Promotions & Price Rules** — quantity breaks and member prices published as honest price specifications, with coupon codes sent to Merchant Center.
* **AI Image Alt Text** — fills missing product image alt text in bulk, one AI call per image, so every product image is content an answer engine can use.
* **Plays Nicely** — WooCommerce's own Product schema is only replaced with your one-click consent, and if AEO Ultimate for WooCommerce runs alongside, this plugin stands down automatically so nothing publishes twice.

= 🔍 Schema Markup & Structured Data =

The core engine. It detects the schema already on each page, classifies page intent (homepage, service page, blog post, location page, or product), and outputs clean JSON-LD **only where it's missing** — never duplicating what your SEO plugin already provides. Structured data includes Organization, Article, NewsArticle, Person (author), FAQPage, Service, Product (with Brand and Offer), LocalBusiness, ContactPoint, Event, Review, AggregateRating, and BreadcrumbList. The Command Center gives you a live readiness score, duplicate-schema conflict alerts, and real-time AI-crawler activity. When a page carries more than one schema type, they're automatically woven into a single connected `@graph` — one identity spine (WebSite → Organization → WebPage) with every entity cross-referenced by `@id` — so AI crawlers read your site as one web of facts instead of scattered fragments.

= 🤖 AI Ready: llms.txt & Crawler Control =

`llms.txt` and `llms-full.txt` endpoints, Markdown content negotiation for AI agents, Content-Signal headers, semantic Breadcrumb signals, RFC 8288 Link headers for agent discovery, an Agent Skills Index (`/.well-known/agent-skills/`), an Agent Search REST API, MCP/WebMCP discovery, OAuth/OIDC discovery, an RFC 9727 API catalog, and per-bot rate limiting and blocking for 20+ AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, and more). The plugin can create the `/.well-known/` agent-discovery files for you so your site reads as "agent ready" — verify it with a checker like isitagentready.com. Automatic setup needs server write access; where that's unavailable, you get copy-and-paste instructions to add the files by hand. You decide exactly which AI systems may read, cite, or train on your content.

= 🏢 Company & Publisher Identity =

Organization JSON-LD (legal name, logo, contact points, sameAs), an explicit `article:publisher` / `article:author` Open Graph split, a sitewide `fb:app_id` for Meta Domain Insights, and one-click import from Yoast or Rank Math.

= ✍️ Author & Company E-E-A-T =

An E-E-A-T scorecard for both your author and company (publisher) entities. Author profiles output as Person schema with EducationalOccupationalCredential and sameAs — job titles, credentials, expertise areas, years of experience, and social links — alongside your organization details. The plugin suggests the missing trust items and applies them semi-automatically. Includes optional author boxes and hover cards, plus a completeness score across every author.

= 🖼️ Image SEO & Open Graph =

Generate image alt text and Open Graph titles, descriptions, and share images — **automatically from your content or with AI**. A unified Open Graph and Twitter/X Card manager scans every page for coverage and lets you edit `og:title`, `og:description`, `og:image`, `og:type`, `twitter:card`, and `twitter:creator` from one screen. Everything works in bulk: fill every missing social description, every missing alt text, and every missing FAQ, Service, or Contact schema across the whole site with one click — AI-powered bulk actions always show the billed call count and ask for confirmation first, and content-based ones are free.

= 🛒 WooCommerce & Shopping =

Automatic Product schema built from your product attributes (Brand, Offer, price, availability, GTIN/MPN/SKU), optional AI product-description enrichment, and live sync against your Google Merchant Center and Bing Merchant Center feeds — tracking price and availability mismatches, identifier gaps, and item-level rejection codes.

= 📍 Local SEO =

Build LocalBusiness schema with a predictive business-type picker, opening hours, service area, and geo coordinates. Audit NAP (name, address, phone) consistency against Google Knowledge Graph, Google Business Profile, and Bing Maps — and get a list of the directories and citation sites you should be listed on, tailored to your industry.

= 🗺️ Sitemaps, Indexing & News =

A cached XML sitemap at `/aeo-sitemap.xml` with per-post-type controls and collision protection against Yoast, Rank Math, and AIOSEO. IndexNow instantly pings Bing, Yandex, and other engines on publish. A Google News sitemap with NewsArticle schema kicks in when your content qualifies as news. And a **Not Indexed** report uses the Google Search Console URL Inspection API to find pages that are published but missing from Google's index, then flags likely causes — thin content, keyword stuffing, missing heading hierarchy — so you know what to update.

= 📊 Command Center: Analytics & Performance =

Connect Google Search Console, Google Analytics 4, and Bing Webmaster Tools for a single AEO performance view. Run Google PageSpeed Insights audits — the Lighthouse score plus the Core Web Vitals (LCP, CLS, FCP, TBT) that affect both ranking and how cleanly AI crawlers render your pages, cached for six hours. A traffic-leak scan cross-references GA4 (last 28 days) with PageSpeed to surface your highest-traffic pages that also bounce hard on slow mobile loads, and a content scan flags on-page anti-patterns — inline scripts, external scripts in content, base64 images, and iframes — that page builders and AI-pasted code often introduce. When Google and Bing surface their AI search reports (AI Mode and AI Overviews), the Command Center links you straight to them.

= 🛠️ More Tools =

Customer Reviews with context-aware AggregateRating/Review schema, display shortcodes, and industry-based suggestions for where to collect more reviews. A "Last Updated" freshness badge. PR Bridge AI, which detects press-release intent in your posts and offers ways to distribute them. And an AI Prompt Rate Limiter to protect your API budget.

= External Services & TWT Agency =

Optional AI features connect to Anthropic Claude, OpenAI, Google Gemini, and Perplexity using your own API keys. Other optional integrations cover Google and Microsoft APIs, IndexNow, and PR wire services. Nothing is sent anywhere until you configure a feature and explicitly trigger it — see the FAQ for the full list with terms and privacy links, and the bundled EXTERNAL-SERVICES.md for the complete outbound-link inventory. Optional TWT Agency connectivity is available; the plugin is fully functional standalone.

== Installation ==

= Automatic installation (recommended) =

1. In your WordPress dashboard, go to **Plugins → Add New Plugin**.
2. Search for **TWT AEO Ultimate**.
3. Click **Install Now**, then **Activate** once installation finishes.

You can also install from a downloaded ZIP: on the **Plugins → Add New Plugin** screen, click **Upload Plugin**, choose the `twt-aeo-ultimate.zip` file, then **Install Now** and **Activate**.

= Manual installation (FTP) =

1. Upload the entire `twt-aeo-ultimate` folder to your `/wp-content/plugins/` directory.
2. Activate the plugin via the **Plugins** screen in your WordPress dashboard.

= After activating =

1. Go to **TWT AEO → Modules** to review and enable the features you want.
2. Set up your publisher identity under **TWT AEO → E-E-A-T** (the **Company** tab).
3. Complete each author's E-E-A-T data on their profile under **Users → All Users**.
4. Configure bot visibility and access controls at **TWT AEO → AI Ready**.

**Important:** After activating, go to **Settings → Permalinks** and click **Save Changes** once. This flushes rewrite rules so the virtual routes for `/llms.txt`, `/llms-full.txt`, and `/aeo-sitemap.xml` resolve correctly.

== Frequently Asked Questions ==

= Which schema types (structured data) does this plugin generate? =
JSON-LD for Organization, Article, NewsArticle, Person/author (with EducationalOccupationalCredential and sameAs), FAQPage, Service, Product (with Brand and Offer), LocalBusiness (with opening hours and geo coordinates), ContactPoint, Event, Review and AggregateRating, and BreadcrumbList. Each type is added only when it suits the page and isn't already present.

= Does it support llms.txt and AI search engines like ChatGPT and Perplexity? =
Yes. It serves `/llms.txt` and `/llms-full.txt`, offers Markdown content negotiation for AI agents, sends Content-Signal headers, and gives you per-bot rate limiting and blocking for 20+ AI crawlers — the signals that help ChatGPT, Claude, Perplexity, and Google AI Overviews discover and cite your content.

= Does this plugin conflict with Yoast SEO or Rank Math? =
No. AEO Ultimate detects active SEO suites and steps back from any metadata they already output (Organization, Article, Open Graph). It acts as an enhancement layer, adding the signals those suites typically miss — `article:publisher`, rate-limit controls for 20+ AI agents, author credential schema, and `llms.txt` processing.

= What is llms.txt and why do I need it? =
`llms.txt` is an emerging standard (see llmstxt.org) that gives AI systems a clean, machine-readable summary of what your site contains and how to access it. Think of it as a `robots.txt` written for language models. The companion endpoint `/llms-full.txt` serves your content as clean Markdown so crawlers can ingest it without parsing token-heavy HTML.

= Why does the publisher/author Open Graph split matter? =
Standard social tags often blur authorship by failing to separate your brand from the individual writer. AEO Ultimate keeps them distinct: `article:publisher` establishes the company identity, while `article:author` links to the individual author. AI models use this split to assess authority and attribute content accurately.

= What does the Meta Business Sync do? =
It adds the sitewide `fb:app_id` tag, which links your domain to your Meta Developer App. That unlocks the Meta Domain Insights dashboard and helps Meta attribute your content correctly across its ad and AI systems. Most SEO plugins don't output this tag.

= Can I block specific AI bots or engines safely? =
Yes. Under **TWT AEO → AI Ready → Security & Rate Limiting**, each of 20+ known AI crawlers has a Block toggle and a custom rate-limit override. Blocking a bot writes a `Disallow` entry to your virtual `robots.txt` and returns a 403 on its requests — both advisory and hard enforcement.

= Will the rate limiter affect my human visitors? =
No. The filter matches requests by User-Agent against the known AI crawler list only. Regular browsers, ordinary visitors, and traditional search engines (like Googlebot) pass through unaffected.

= Will this add overhead or slow down my site? =
No. Frontend metadata, schema, and virtual assets are served from the WordPress Transients API with a 1-hour cache. Heavier work runs only when a post is saved or settings change. The crawler rate limiter adds a single transient read per page load, and only for known AI agents.

= Does it monitor site performance and analytics? =
Yes. The Command Center connects Google Search Console, Google Analytics 4, and Bing Webmaster Tools in one view, and runs Google PageSpeed Insights audits (the Lighthouse score plus Core Web Vitals — LCP, CLS, FCP, TBT), cached for six hours. A traffic-leak scan combines GA4 and PageSpeed to surface high-traffic pages that bounce hard on slow mobile loads, and a content scan flags performance anti-patterns like inline scripts and base64 images. Everything is optional and stays off until you connect the relevant service with your own credentials.

= Which AI agent-discovery standards does it support? =
It can serve an Agent Skills Index (`/.well-known/agent-skills/`), an MCP server card and WebMCP context injection, OAuth/OIDC discovery, an RFC 9727 API catalog, RFC 8288 Link headers, Content-Signal headers, and semantic Breadcrumb signals — alongside `llms.txt`, `llms-full.txt`, and Markdown content negotiation. Each endpoint toggles independently, and where automatic `/.well-known/` file creation needs server write access you'll get copy-and-paste instructions instead.

= What are the system requirements? =
PHP 7.4 or higher (PHP 8.0+ recommended) and WordPress 6.2+. For full functionality on WordPress 7.0 and its modern data views, MySQL 8.0 and a PHP memory limit of at least 256MB are recommended.

= What external services does this plugin connect to? =
Only the ones you configure, and only when you trigger them:

* **Anthropic Claude** — AI writing and enrichment. [Terms](https://www.anthropic.com/legal/aup) | [Privacy](https://www.anthropic.com/legal/privacy)
* **OpenAI** — descriptions, OG images, image analysis. [Terms](https://openai.com/policies/terms-of-use) | [Privacy](https://openai.com/policies/privacy-policy)
* **Google Gemini** — descriptions, vision, grounded lookups. [Terms](https://policies.google.com/terms) | [Privacy](https://policies.google.com/privacy)
* **Perplexity** — brand authority and gap research. [Terms](https://www.perplexity.ai/hub/legal/terms-of-service) | [Privacy](https://www.perplexity.ai/hub/legal/privacy-policy)
* **Google APIs** — Search Console, Analytics, Knowledge Graph, Business Profile, Merchant Center. [Terms](https://policies.google.com/terms) | [Privacy](https://policies.google.com/privacy)
* **Microsoft / Bing APIs** — Webmaster Tools, Merchant Center, Maps Local Search. [Terms](https://www.microsoft.com/en-us/servicesagreement) | [Privacy](https://www.microsoft.com/en-us/privacy/privacystatement)
* **IndexNow** — URL submission on publish. [Terms & Privacy](https://www.indexnow.org/terms)
* **EIN Presswire** — press-release distribution. [Terms](https://www.einpresswire.com/legal/terms) | [Privacy](https://www.einpresswire.com/legal/privacy)
* **EasyPRwire** — press-release distribution. [Terms](https://easyprwire.com/terms-and-condition) | [Privacy](https://easyprwire.com/privacy-policy)
* **TWT Agency** (optional) and opt-in token telemetry. [Terms](https://tampawebtech.com/plugin-terms/) | [Privacy](https://tampawebtech.com/plugin-privacy-policies/)

Each request sends only the data needed for that action, using your own API key. No site-visitor personal data is ever transmitted. The plugin also displays outbound links to industry directories and documentation sites — no data is sent to those; the complete inventory with each site's terms and privacy policy ships in EXTERNAL-SERVICES.md inside the plugin folder.

== Screenshots ==

1. **Command Center** — Real-time AI Crawler Watch monitor and bot traffic breakdown.
2. **AI Ready Configuration** — Per-bot rate limits and block toggles for 20+ AI agents.
3. **Company Profile Manager** — Brand identity fields and Meta Business integration.
4. **Author Profile Extensions** — Custom fields on the WordPress user profile for certifications and credentials.
5. **Schema Detector** — Auto-detects FAQ, Service, and Contact pages, fills in missing JSON-LD, and flags duplicate-schema conflicts.
6. **Image SEO** — Finds images missing alt text across your posts and pages and generates descriptive, AEO-friendly alt attributes.
7. **Modules Screen** — Enable or disable each feature independently.
8. **WooCommerce AEO** — Product schema with one-click sync to Google and Bing Merchant Center, integrity scoring, and rejection logs.
9. **Not Indexed** — Uses Google Search Console to surface published pages missing from Google's index and flags likely causes: thin content, high keyword density, and missing heading hierarchy.

== Changelog ==

= 2.15.0 =
* Fixed: every scanning screen stopped silently at the 200 most recent items. The WooCommerce Products tab, Social Graph, and the Schema Detector's FAQ, Service and Contact tabs now page through your entire catalogue in blocks, with a pager that says exactly which items each page scanned — on a 1,000-product store, 800 products were invisible to these screens before this.
* New: a Scan Again button on the WooCommerce Products tab re-runs the scan on demand and confirms what it found.
* New: every commerce feature is always a visible tab on the WooCommerce screen. A module that is off (Promotions, Smart Collections, Google/Bing Merchant Center) now shows as a dimmed tab with an "Off" chip that takes you to Modules to enable it — before, an off module's tab simply didn't exist, so you could never learn the feature was there.
* Fixed: switching to the Smart Collections or Promotions tab dropped the AEO header banner; both pages now carry the same banner as the rest of the WooCommerce screen.
* New: on Image SEO, "Add an image" for a page with no images opens the WordPress media library right there and sets your chosen image as the page's featured image — no detour through the editor.
* Improved: the tab menu is bolder — the active tab is now a filled blue pill — and the summary cards respond to hover.
* Changed: WooCommerce's own basic Product schema block is no longer suppressed silently. The Products tab now asks who should publish Product schema — one click makes AEO the only source (recommended), and WooCommerce's block can be restored at any time.
* Improved: on a paginated catalogue the summary cards now say "(this page)" so a clean first page is never mistaken for a clean store, and "Generate Schema for All" stays available whenever any part of the catalogue is unscanned.
* New: the Social Graph summary adds a "Missing Title/Desc" card, the cards are more compact so the row fits, and a Rescan All button sits right above them. The Twitter Cards card now reports live coverage — the plugin outputs a card on every page once active, so "0" only ever meant "0 customised" — and names your SEO plugin when that plugin manages cards instead.
* New: search boxes on the WooCommerce Products tab and the Social Graph table. Both search the whole catalogue — product name, content, and SKU — not just the rows on screen, and the results paginate like everything else. Ported from AEO Ultimate for WooCommerce.
* Improved: every paginated table now shows its pager above and below the table, so you never scroll a 200-row page to change pages.
* New: the Social Graph summary cards now describe your whole site, not just the newest 200 items. Rescan All walks every page, post and product in batches (with live progress) and stores a site-wide census; the cards show those totals with a note saying when the census ran. Before the first census, the cards say plainly that they cover only the newest block.
* Improved: the Twitter Card column now shows the card every page actually gets ("large image · default") instead of a vague "auto" — the site-wide card applies automatically once the plugin is active, per-page choices override it, and the type matches whether the page really has an image to attach (checked through the same saved → featured → gallery chain as og:image itself).
* Fixed: a product with gallery images but no featured image counted as "missing og:image" — and shared with no image. Both the Open Graph output and the Social Graph scan now fall back to the first gallery image. (Also removed the duplicate Rescan button on the Social Graph page.)
* New: the FAQ detector now scans WooCommerce product pages too. A product whose FAQ answers are already published through the product FAQ assembler counts as covered; a product with FAQ-shaped content and no schema is flagged like any page.
* Fixed: the Social Graph bulk description tools ("Use existing meta descriptions" and the AI generator) skipped products entirely — on a store, where most rows are products, the AI run reported "0 created" with hundreds of rows still missing. Products are now included, a product's short description counts toward its content, and the finish message reports how many items were skipped for thin content instead of hiding them.

= 2.14.0 =
* New: the setup wizard's Autopilot now does real work in the background — fills missing FAQ and Service schema from content already on your pages, adds contact-page schema from your business profile, and fills social descriptions from your existing meta descriptions. All free, no AI calls. Every step checks whether another plugin already provides that surface first and skips itself if so, and the completion screen reports exactly what was done and what was skipped and why.
* New: Smart Collections and Promotions live as tabs on the WooCommerce screen instead of separate sidebar entries.
* Fixed: on large stores, "Generate Schema for All" only processed the 200 most recent products; it now walks your whole catalogue in batches with live progress, and anything it cannot generate is listed by name with the reason.
* Fixed: products could show "missing schema" that Generate for All refused to touch — the plugin's own saved schema now counts as schema present, ending the contradiction.
* Fixed: the Dashboard's "Scan All Pages" stopped silently at 200; it now hands the remainder to a background scan. The Social Graph header also now says honestly when it has scanned the 200 most recent of a larger site instead of presenting the cap as your total.
* Fixed: pages with no images at all were invisible to Image SEO; they are now flagged — an answer engine cites the pages that give it the most to work with, and a page with no image gives it less. Products with no image get an explicit "No image" warning on the WooCommerce table too.
* New: on the Dashboard, a product missing Product schema is generated in one click with the full product data (offers, identifiers, shipping) instead of showing a "no form defined" error.
* New: the advanced commerce schema from AEO Ultimate for WooCommerce, now built in. A richer connected @graph on every page (your organization reads as an OnlineStore, placeholder emails are never published, collection archives are typed properly), a far more complete Product schema (per-variant offers, sale price specifications, identifiers, shipping from your live zones, return policy, one assembled FAQ node per product), and two new opt-in modules: Smart Collections (publish your "Starter Kit" / "Under $500" categories as real Collections with an ItemList) and Promotions & Price Rules (quantity breaks and member prices as honest UnitPriceSpecification entries, coupon codes sent to Merchant Center). Both new modules need WooCommerce and are off by default — and if you run AEO Ultimate for WooCommerce alongside, this plugin automatically stands down so nothing publishes twice.

= 2.13.0 =
* Bug fix (important): llms.txt, llms-full.txt, ai.txt, the Markdown version of your pages, and the Agent Skills documents were being HTML-escaped even though they are plain text — so AI crawlers received `&gt;` instead of the `>` blockquote the llms.txt spec requires, and `&amp;` instead of `&`. All of these endpoints now serve the clean document.
* Bug fix (WordPress 7): bulk AI social descriptions could stop immediately with "Method using_max_output_tokens does not exist". Optional AI settings that a given WordPress AI Client version doesn't support are now skipped instead of cancelling the generation.
* New: bulk actions on every screen that used to need one click per page. Schema Detector's FAQ, Service, and Contact tabs each get a "Generate All" / "Create for All" button (all free — no AI calls, nothing billed), and Image SEO plus WooCommerce Products get "fill all missing alt text" buttons that use AI vision — those state the exact number of billed calls, ask you to confirm before running, show live progress, and can be stopped at any time. Bulk actions only fill what is missing; nothing you already saved is touched.
* Bug fix (important, WordPress 7 only): AI generation through WordPress 7's connected providers never actually ran. If you left the Claude and OpenAI key fields blank — as the settings screen tells you to on WordPress 7 — meta descriptions and other AI features failed with "returned no content" or "this WordPress AI Client version cannot generate text", without ever contacting a provider. The plugin was checking for methods on WordPress's prompt builder in a way that can never succeed. It now runs the request properly, and when something does go wrong it shows WordPress's own explanation instead of a generic message.
* Feature: new "What this plugin writes" panel on the Schema Conflict Detector page. Nine things this plugin publishes — site identity schema, Article, Service, Contact page schema, breadcrumbs, llms.txt, /sitemap.xml, the meta description and the AI crawler log — now each have an on/off switch, and each row tells you whether another plugin you have installed is already writing the same thing. Seven of these previously had no setting at all, so if you ran Yoast or Rank Math alongside this plugin you had two of each and no way to stop it short of deactivating the plugin.
* Note: everything is switched ON by default, exactly as it behaved before, so updating changes nothing on your site. Nothing is ever switched off for you, and this plugin will never suggest you remove another one.
* Improvement: if you also run AEO Ultimate for WooCommerce, you can now choose which plugin writes each shared thing — your site identity schema, llms.txt, the XML sitemap, meta descriptions, breadcrumbs and local business schema. Previously both wrote all of them, and for most of them there was no setting to turn either one off. You choose on that plugin's ownership screen; this plugin then steps aside for whatever you handed over and keeps writing the rest.
* Note: nothing changes unless you run both plugins and make that choice. On its own, this plugin behaves exactly as before — there is no new setting here.

= 2.12.1 =
* Bug fix (important): on hosting without the PHP libsodium extension, saving or reading any stored key or token could trigger a critical error. Encryption now detects what the server actually supports, so these sites work normally again. If you have seen "There has been a critical error on this website" on a settings screen, this release is likely the fix.
* Bug fix: the Not Indexed page could stop loading with a PHP fatal error when it encountered scan results saved by an older version of the plugin. Stored results are now read defensively.
* Bug fix: module pages that attach themselves to another WordPress menu (for example Appearance &rarr; Author Schema) were registered without a capability, so they never appeared and produced a PHP warning. They now use the same permission as the rest of the plugin.
* Improvement: WooCommerce cart, checkout, and my account pages are no longer reported as "not indexed". WooCommerce marks them noindex by design, so they were noise — and they no longer consume Search Console inspection quota.
* Improvement: issues on the Not Indexed page that can be fixed automatically now show a "Fix" button, which generates FAQ schema or fills in image alt text without leaving the page.

= 2.12.0 =
* Bug fix: the Author Entity (E-E-A-T) admin page could stop loading with a PHP fatal error on some sites. The author data lookup now returns a consistent structure, so the author profiles, certification counts, and summary totals render reliably.

= 2.11.0 =
* New unified Knowledge Graph: when a page would output two or more schema blocks (for example Organization + FAQPage, or a post with an author), they are now woven into a single connected `@graph` — one identity spine (WebSite → Organization → WebPage) with every entity cross-referenced by `@id` — instead of separate, disconnected JSON-LD blocks. Pages with only one schema type are left exactly as before.
* Consolidates duplicate Organization output, links each page's primary entity (Article, FAQPage, Service, Product) to the WebPage, and emits the author (Person) and publisher (Organization) once, referenced by `@id`.
* New Knowledge Graph admin page to define entities, relationships, and per-URL about/mentions mappings, with Wikipedia/Wikidata `sameAs` grounding.

= 2.10.0 =
* New Smart 404 Rescue module (default off): turns 404s into fixes with no per-404 logging. Ignores hacker/bot probes, matches dead URLs to the closest page by typo-distance, auto-heals broken internal links at the source (with undo), and 302s visitors on.
* Smart 404 Lost Page Recovery uses your existing Search Console connection to find pages Google still ranks that now 404 (renamed/moved content), and auto-creates permanent 301s to the closest live page — applying to crawlers too, so equity transfers. Ambiguous matches are listed for one-click approval; a GSC 404 export can also be pasted in.
* Smart 404 admin page to run the lost-page scan, approve redirects, review/remove 301s, undo heals, and extend the hostile-probe patterns.

= 2.9.1 =
* Product schema now emits Google's newly documented merchant-listing fields: `priceValidUntil` on every offer, `validFrom`/`validThrough` for scheduled sales (simple and variable products), and the recommended `category` property mirrored from WooCommerce product categories.
* New AI Google Product Category resolver: one click maps a product to Google's official Product Taxonomy and adds it to the schema as a `CategoryCode` object, so Google Shopping and AI shopping agents read the same category. Cached per product.
* Category alignment audit: Google and Bing Merchant Center sync now flags products whose on-page category disagrees with the feed, as a new Category Mismatch signal in the Integrity Score.

= 2.9.0 =
Initial public release on WordPress.org.

* Schema Advisor and Detector — Organization, Article, NewsArticle, Person, FAQPage, Service, Product, LocalBusiness, ContactPoint, Event, Review, AggregateRating, and BreadcrumbList JSON-LD, added only where missing.
* AI Ready — `llms.txt` and `llms-full.txt`, Markdown content negotiation, Content-Signal headers, and per-bot rate limiting and blocking for 20+ AI crawlers.
* Author E-E-A-T profiles and Company/publisher identity (`article:publisher`, `fb:app_id`).
* Open Graph and Twitter/X Card manager with optional AI-generated share images.
* WooCommerce Product schema with Google and Bing Merchant Center sync.
* Local SEO with LocalBusiness schema and NAP consistency auditing.
* XML and Google News sitemaps, IndexNow, Image SEO alt text, Reviews, and a Not Indexed scanner.

== Upgrade Notice ==

= 2.12.1 =
Fixes a critical error on servers without the PHP libsodium extension, where storing or reading a saved key or token could take a page down. Also fixes a fatal error on the Not Indexed page. Recommended for all sites.

= 2.12.0 =
Fixes a PHP fatal error that could prevent the Author Entity (E-E-A-T) admin page from loading. Recommended for all sites using author profiles.

= 2.11.0 =
Adds the unified Knowledge Graph: pages that output multiple schema types now ship one connected `@graph` (a cross-referenced entity spine) instead of scattered JSON-LD blocks, with duplicate Organization output consolidated. Single-schema pages are unchanged.

= 2.10.0 =
Adds the Smart 404 Rescue module: self-healing internal links, hacker-probe filtering, and Gemini-grounded external-link detection that auto-creates 301s — all without a bloated 404 log table.

= 2.9.1 =
Adds Google's newly recommended merchant-listing fields (priceValidUntil, sale validFrom/validThrough, and product category) plus a one-click AI resolver for the official Google Product Category (CategoryCode) to WooCommerce Product schema.

= 2.9.0 =
Initial public release on WordPress.org.
