=== Everlange Connect – llms.txt, AI robots.txt & JSON-LD ===
Contributors: aeotool
Tags: llms-txt, ai, robots-txt, json-ld, schema
Requires at least: 5.8
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.5.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Free llms.txt and AI-crawler robots.txt for your site, generated locally — no account needed. Get cited by ChatGPT, Perplexity, Claude and Gemini.

== Description ==

Everlange Connect makes your WordPress site readable by AI answer engines — **for free, out of the box, no account required**.

Activate it and it immediately serves, from your own content:

* **/llms.txt** — a structured, AI-ready index of your site: title, tagline, pages and latest posts, each with a real description. Descriptions come from your SEO plugin's meta description (Yoast SEO, Rank Math, SEOPress) when set, then your excerpt, then the content itself. Content marked noindex is left out. Served virtually — it never shadows a physical llms.txt file, and it is always up to date because it is built at request time.
* **robots.txt directives for AI crawlers** — GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, CCBot, Bingbot — appended after your existing rules. Your robots.txt is never replaced.
* **AEO Score dashboard widget** — a free local quick-check (10 signals, score out of 100) right on your wp-admin dashboard. The check only requests your own site and is cached for 12 hours.

No signup, no external call, no tracking: the free features run entirely on your server, from what WordPress already knows about your site.

**Optional: connect an everlange.com account**

Everlange Connect is also the companion plugin for [everlange.com](https://everlange.com), the Answer Engine Optimization (AEO) platform. Connect an account (Pro plan or higher) and the plugin applies the fixes generated by your 67-criteria audit automatically, server-side:

* **JSON-LD structured data** — injected in the page head, matched per page, with automatic deduplication against Yoast SEO and Rank Math (Organization / WebSite types are skipped when those plugins are active).
* **Curated llms.txt and robots.txt** — the dashboard-generated versions replace the local ones as the single source of truth.
* **AI citation monitoring** across 10 answer engines, meta / Open Graph tags, FAQ schema, and more.

**Built to be safe**

* The plugin never writes to your posts, pages or database content — everything is injected at render time through standard WordPress hooks.
* Global kill-switch and per-module toggles.
* One-click rollback to any of the last 3 applied bundle versions.
* If everlange.com is unreachable, the plugin keeps serving its local cache — your optimizations stay online.
* Site-scoped key (never your account API key), revocable at any time from the everlange.com dashboard.

== Installation ==

1. Install the plugin via Plugins → Add New (search for "Everlange Connect"), or upload the `aeo-tool-connect` folder to `/wp-content/plugins/`.
2. Activate it. That's it for the free features: /llms.txt and the AI-crawler robots.txt directives are served immediately, and the AEO Score widget appears on your dashboard.
3. Optional — to connect an everlange.com account: generate a pairing code in your dashboard (Account → Connected sites → Generate a pairing code, valid 15 minutes), then in WordPress go to Settings → Everlange, paste the 8-character code and click **Connect**. The first optimization bundle is synced immediately, then refreshed twice a day.

== External services ==

**In free (standalone) mode, the plugin makes no external request at all**: llms.txt, the robots.txt directives and the AEO Score widget are generated locally, from your own site.

Once you choose to connect an account, the plugin connects to **everlange.com** (the plugin author's own service) to retrieve the optimization bundle generated for your site: JSON-LD, curated robots.txt directives and llms.txt content are generated by your everlange.com account and pulled by the plugin.

Exactly three API calls are made, all over HTTPS to `https://everlange.com`:

1. **Pairing** (once, when you click Connect): sends the pairing code you typed, your site URL, your WordPress version and the plugin version. Returns a key scoped to this site only.
2. **Bundle pull** (twice a day via WP-Cron, or when you click Sync now): sends your site domain, authenticated with the site-scoped key. Returns the optimization bundle.
3. **Status ping** (after a bundle is applied): sends the applied bundle version, the list of active modules (e.g. jsonld, robots, llms), your WordPress version and the plugin version, so your everlange.com dashboard can display the sync status.

No personal data, no post or page content, no visitor data, no analytics and no usage tracking are ever transmitted. Apart from these three calls, the plugin only makes requests to your own site: the AEO Score dashboard widget fetches your own homepage, robots.txt, llms.txt and sitemap to compute its local quick-check — nothing is sent to everlange.com for that.

Service provider: Everlange — [Terms of service](https://everlange.com/cgu) — [Privacy policy](https://everlange.com/confidentialite)

== Screenshots ==

1. The AEO Score widget on the wp-admin dashboard — free local quick-check, 10 signals, no account.
2. The virtual /llms.txt served from your own content: pages and posts with real descriptions.
3. AI-crawler directives appended to robots.txt — your existing rules are preserved.
4. The settings page: modules, master switch, and optional account connection.

== Frequently Asked Questions ==

= Do I need an everlange.com account? =

No. The free features — /llms.txt, the AI-crawler robots.txt directives and the AEO Score widget — work immediately on activation, with no account and no external request. An account (Pro plan or higher) is only needed for the automatic application of audit fixes (JSON-LD, curated content, monitoring).

= Which SEO plugins are supported for llms.txt descriptions? =

The free llms.txt uses your meta descriptions from Yoast SEO, Rank Math or SEOPress when they are set, and falls back to the excerpt, then to the content itself. Content marked noindex by Yoast SEO, Rank Math or SEOPress is excluded.

= Will this conflict with Yoast SEO or Rank Math? =

No. When Yoast SEO or Rank Math is active, Everlange Connect skips the JSON-LD types those plugins already emit (Organization and WebSite) to avoid duplicate structured data. Meta tag management stays entirely with your SEO plugin — this plugin does not touch titles or meta descriptions.

= What happens if everlange.com is unreachable or my subscription ends? =

The plugin fails open on content: it keeps serving the last synced bundle from its local cache, so nothing disappears from your site. If the last successful sync is older than 48 hours you will see a warning in the WordPress admin. If the site key is revoked from the everlange.com dashboard, all modules are disabled automatically and an admin notice is shown.

= Can I undo an applied optimization? =

Yes, two ways. Instantly: uncheck the master switch (or a single module) in Settings → Everlange — output stops immediately and no data is lost. Or use the Rollback section to restore any of the last 3 applied bundle versions in one click. The plugin never modifies your content or database tables, so there is nothing else to clean up.

== Changelog ==

= 1.5.0 =
* Free llms.txt upgraded: it now lists your latest posts as well as your pages, and every entry carries a real description — your SEO plugin's meta description first (Yoast SEO, Rank Math, SEOPress), then the excerpt, then the content itself, trimmed.
* Content marked noindex by your SEO plugin is excluded from llms.txt: what is hidden from search engines is not advertised to answer engines either.
* Plugin listing rewritten around the free features, with screenshots. Nothing changes for connected sites: the dashboard bundle remains the single source of truth once paired.

= 1.4.1 =
* Settings page: a dismissible box asking for Android beta testers. It appears only on the plugin's own settings screen, never as a dashboard notice, it is hidden for good once dismissed, and the choice is stored per user so one administrator does not decide for the others. No tracking, no external request.

= 1.4.0 =
* Standalone mode: the plugin now works without an account. On activation it serves AI-crawler directives in robots.txt and a llms.txt built from your own site, so you can verify it does something before signing up. Connect an everlange.com account to add JSON-LD, the 67-criteria audit and monitoring.
* Standalone output steps aside automatically as soon as a site is paired: the dashboard remains the single source of truth.

= 1.3.1 =
* Renaming: the plugin and all its screens now use the Everlange name. aeotool.io became everlange.com; the previous domain still redirects, so existing connections keep working — no action required.
* Links, dashboard widget and help text updated to everlange.com.

= 1.3.0 =
* New modules (all opt-in, all reversible): virtual /ai.txt (AI crawling policy), /.well-known/security.txt (RFC 9116 trust signal), /humans.txt, and the IndexNow key file /{key}.txt (instant Bing indexing — feeds ChatGPT/Copilot freshness). Physical files are never shadowed.
* Meta module: rel=canonical emitted only where WordPress core does not (non-singular views, no SEO plugin) and snippet directives (max-snippet:-1, max-video-preview:-1) added through the wp_robots filter, append-only.
* Rewrite rules are flushed once automatically after this update.


= 1.2.3 =
* Fix: re-pairing after a key revocation or disconnect now clears the saved all-OFF module choice. Previously the plugin silently injected nothing after a re-pair (modules stayed disabled) while the everlange.com dashboard reported successful applies.

= 1.2.2 =
* Widget copy: the full-audit note now correctly lists the 10 AI engines covered by everlange.com (ChatGPT, Gemini, Perplexity, Claude, Copilot, Grok, Google AI Overviews, DeepSeek, Mistral, Google AI Mode).

= 1.2.1 =
* Fix: when the site key has been revoked from the everlange.com dashboard, the AEO Score widget now shows the "run the full audit" call-to-action again instead of "view my full report" (a revoked pairing is no longer treated as connected).

= 1.2.0 =
* New: free "AEO Score" widget on the wp-admin dashboard — a local quick-check of 10 AEO signals (JSON-LD, meta description, Open Graph, title, html lang, robots.txt + AI-bot directives, llms.txt, XML sitemap, RSS feed) with a score out of 100, a pass/fail checklist and a one-click link to the full 67-criteria audit on everlange.com.
* The quick-check runs entirely against your own site (no external calls), is cached for 12 hours and can be refreshed manually. Visible to administrators only.

= 1.1.0 =
* New "meta" module: injects description + Open Graph / Twitter tags on wp_head, only when no SEO plugin (Yoast / Rank Math) is active. Never emits a <title>.
* FAQPage structured data is now supported through the JSON-LD module.

= 1.0.0 =
* Initial release.
* Pairing with everlange.com via 8-character code (site-scoped key).
* JSON-LD injection on wp_head with per-page matching and Yoast/Rank Math deduplication.
* Append-only robots.txt AI-bot directives.
* Virtual /llms.txt endpoint (only when no physical file exists).
* Twice-daily background sync (WP-Cron) + manual Sync now.
* Local cache fail-open, stale-sync (48 h) and revocation admin notices.
* Global kill-switch, per-module toggles, rollback of the last 3 bundle versions.

== Upgrade Notice ==

= 1.2.1 =
Small fix on the AEO Score widget: a revoked pairing now falls back to the audit call-to-action. Safe update.

= 1.2.0 =
Adds a free "AEO Score" quick-check widget to the wp-admin dashboard (10 local signals, score out of 100, administrators only). The check only requests your own site and is cached for 12 hours. Safe update: no behavior change for the existing modules.

= 1.1.0 =
Adds an optional "meta" module (description + Open Graph / Twitter tags, injected only when no SEO plugin such as Yoast or Rank Math is active) and FAQPage support through the JSON-LD module. Safe update: the new module ships disabled by default.

= 1.0.0 =
Initial release.
