=== Website LLMs.txt === Contributors: ryhowa, samsonovteamwork Tags: llm, ai, seo, rankmath, yoast Requires at least: 5.8 Tested up to: 6.9.4 Requires PHP: 7.2 Stable tag: 8.4.0 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Automatically generate and manage LLMS.txt files for LLM/AI content understanding, with full Yoast SEO, Rank Math, SEOPress, and AIOSEO integration. == Description == **Website LLMs.txt** generates and manages an `llms.txt` file, a structured, AI-ready index that helps large language models like ChatGPT, Claude, and Perplexity understand your site’s most important content. ### How llms.txt works Traditional sitemaps and robots files guide search engines. But as AI-driven systems such as ChatGPT, Claude, and Perplexity increasingly ingest web content, they benefit from a clear, structured list of a site’s most important URLs. `llms.txt` offers that: a plain-text or Markdown list of essential public URLs, optionally annotated with titles, descriptions, and grouping, designed for AI consumption rather than general web crawling. ### Key benefits ✅ **AI discovery readiness**: future-proof your site for AI indexing and content retrieval. ✅ **Fully automatic**: the plugin builds and updates your `llms.txt` file on its own schedule. ✅ **SEO plugin integration**: works seamlessly with Yoast SEO, Rank Math, SEOPress, and AIOSEO, automatically excluding content marked as *noindex* or *nofollow*. ✅ **Advanced controls**: choose post types, customize file titles or descriptions, attach optional Markdown files, and trigger manual regeneration. ✅ **Developer-friendly**: includes filters such as `llms_generator_get_post_meta_description` for description logic, performance tuning, and custom indexing behavior. ✅ **AI crawler detection**: opt in to track whether GPTBot, ClaudeBot, or PerplexityBot are actually reading your site’s `llms.txt`. ✅ **WooCommerce & multisite ready**: respects product visibility rules and scales easily across large or networked sites. ✅ **Privacy-first experiment**: anonymous, encrypted telemetry helps reveal which bots are accessing `llms.txt` files across the web. ### Activation & setup 1. Activate the plugin. 2. Visit *Settings → LLMs.txt* to configure post types, update frequency (immediate, daily, or weekly), and optional crawler logging. 3. The plugin generates `llms.txt` (and optionally `llms-full.txt`) and serves it from your site root. 4. Content updates trigger automatic regeneration. All noindex/nofollow rules from your SEO plugin are respected. 5. If you enable AI crawler logging, local and global logs record each visit from known AI bots, viewable right inside your WordPress dashboard. ### Use cases for llms.txt - Publishers, SaaS companies, developers, and documentation sites that want to make their content easier for AI systems to interpret. - SEO-driven websites teting AI engine optimization tactics. - Agencies and site owners preparing for the next phase of AI search and retrieval. ### The llms.txt experiment & further reading - [Are AI bots actually reading llms.txt files?](https://completeseo.com/are-ai-bots-actually-reading-llms-txt-files/) - [Everything we know about llms.txt](https://completeseo.com/everything-we-know-about-llms-txt/) == Installation == 1. Upload the plugin files to `/wp-content/plugins/website-llms-txt` 2. Activate the plugin through the *Plugins* screen in WordPress 3. Go to *Settings → LLMs.txt* to configure options and generate your file == Frequently Asked Questions == = What is llms.txt? = `llms.txt` is a plain-text or Markdown file placed at the root of your domain (for example `https://example.com/llms.txt`) that lists your site’s most important public URLs. It helps large language models (LLMs) like ChatGPT, Claude, and Perplexity better understand your site’s structure and priority content. = How does the Website LLMs.txt plugin work? = The plugin automatically generates and maintains your `llms.txt` file based on published content. It pulls titles and descriptions from your site, respects SEO plugin settings (Yoast SEO, Rank Math, SEOPress, and AIOSEO), and excludes anything marked as *noindex* or *nofollow*. The file is then served from your site root, ready for AI crawlers to read. = How often is llms.txt updated? = You can set the update frequency in the plugin settings: immediate, daily, or weekly. You can also click “Generate Now” in the admin panel to rebuild the file at any time. = Does this guarantee visibility in ChatGPT, Claude, or Perplexity? = No. There’s no guarantee that any AI model will immediately use `llms.txt`, but it’s clear that several systems, including GPTBot, ClaudeBot, and PerplexityBot, are already crawling these files. Using `llms.txt` positions your site ahead of the curve as AI indexing becomes more structured. = What’s the difference between llms.txt and llms-full.txt? = `llms.txt` is a concise, curated list of key URLs. `llms-full.txt` is an optional extended file generated by the plugin that includes a more comprehensive export of your site’s content. It’s useful for documentation sites, developer platforms, or large content hubs that want to expose additional structure to AI systems. = What if my host doesn’t allow writing to the root directory? = The plugin includes fallback logic for environments such as WordPress VIP or read-only hosting. In those cases, it serves `llms.txt` virtually through WordPress rewrite rules, so the file is still accessible at `https://example.com/llms.txt`. = Does it work with SEO plugins like Yoast or Rank Math? = Yes. It automatically integrates with Yoast SEO, Rank Math, SEOPress, and AIOSEO. Pages marked as *noindex* or *nofollow* in any of those plugins will be excluded from your `llms.txt` file automatically. = Can I track which AI bots visit my llms.txt file? = Yes. When crawler logging is enabled, visits from AI crawlers such as GPTBot, ClaudeBot, and PerplexityBot are recorded. You can view these visits in your WordPress dashboard. If you opt into the global experiment, your data is anonymized and encrypted before contributing to a shared dataset that tracks AI bot behavior across thousands of sites. = Will it conflict with sitemap.xml or robots.txt? = No. `llms.txt` complements your sitemap and robots file. Sitemaps tell search engines what to crawl; `llms.txt` helps AI systems understand what’s most valuable. They work together without overlap or conflict. = Can I customize what appears in llms.txt? = Yes. You can include or exclude specific post types, add a custom title or description, and even attach Markdown (`.md`) files to individual posts or pages. The plugin provides a straightforward settings panel and per-page controls for fine-tuning output. = I’m a developer. Are there filters or hooks available? = Yes. Filters such as `llms_generator_get_post_meta_description` and others allow you to modify how descriptions are generated or extend what metadata appears in the file. Developers can also adjust caching behavior, database queries, and output formatting. = Is any personal data shared when I enable crawler logging? = No. All telemetry is privacy-first. Local logs remain on your site. If you opt into the public experiment, only anonymized data (bot name, timestamp, and a hashed version of your domain) is shared. No content, user, or identifiable data is ever transmitted. == Changelog == = 8.4.0 = 🤖 Server-side bot classification • Bot taxonomy is now sourced from the Visibility Kit API (cached for 24h via a transient) rather than baked into the plugin. New bots and reclassifications take effect without a plugin update. • Telemetry payloads now include the raw User-Agent string. The server is the source of truth for bot/botType. • Bundled fallback list still ships with the plugin so detection keeps working when the API is unreachable. • Internal: per-page-load detection now iterates the API list in (priority DESC, length DESC) order so longer/more-specific UA matches win. = 8.3.4 = 🐛 Fix • Resolves a fatal error ("Call to a member function setup() on null") that could occur when Rank Math is active but its setup wizard has not been completed. The Rank Math integration now also checks that `rank_math()->variables` is initialized before calling it. Thanks to the reporter on the wp.org support forum. = 8.3.3 = 🚀 New: Visibility Kit AI referral tracking • Connect the plugin with an email to track AI referral sessions and AI search bot indexing for your site. • New in-plugin "AI Search Traffic" widget showing referral session counts for ChatGPT, Claude, Gemini, and Perplexity. • Announcement banner renders across wp-admin inviting connection, with a persistent per-user dismiss. • If a domain was previously connected under a different email, the plugin now offers an inline "Take it over with this email" flow. No support ticket required. 🤖 Expanded AI bot detection • Reclassified bots into user-action, search-indexing, and training categories. • Added ChatGPT-User, Claude-User, Perplexity-User, OAI-SearchBot, Claude-SearchBot, Applebot, TikTokSpider, Meta-ExternalFetcher, Meta-ExternalAgent, and more. • Detection now runs on every page load (not only /llms.txt), with per-bot-per-page-per-hour throttling on remote telemetry. • Local bot log format migrated to a keyed-by-bot structure with counts; existing data migrates automatically on first read. 🛡️ Security and code quality • All POST/SERVER superglobal reads now use wp_unslash() with appropriate sanitizers (sanitize_text_field, sanitize_email, esc_url_raw). • Admin page outputs escaped with esc_attr(), esc_textarea(), and esc_html() in place of raw echo and = short-echo tags. • Translator comments added for printf'd strings containing HTML tags. • parse_url() → wp_parse_url(), unlink() → wp_delete_file(), strip_tags() → wp_strip_all_tags(), date() → gmdate() for UTC outputs. 🧹 Housekeeping • Added VK option cleanup (embed token, connected email, summary cache) to uninstall. • Domain Path header now resolves to an included languages/ directory. • Tested up to WordPress 6.9; reduced to 5 tags for wp.org compliance. = 8.2.8 = 🔧 Fixes and integrations previously staged in source control • Flywheel-aware cleanup: root llms.txt is now deleted correctly from Flywheel's split www/ directory layout on plugin deactivation and uninstall, alongside the uploads-dir copies. • Slim SEO integration: respects Slim SEO's per-post noindex flag when generating llms.txt, and pulls Slim SEO meta descriptions when available. • Multisite activation: network-wide activate handles each subsite's rewrite rules, and new subsites created afterward get rules installed automatically via wp_initialize_site. = 8.2.7 = 🔒 Security: Hardened admin interface against potential XSS vectors • Improved sanitization and escaping for dynamic post type labels used in admin form fields. • Replaced label-based array keys with post type slugs to prevent attribute injection risks. • Ensures all dynamic values used in HTML attributes are properly escaped with esc_attr(). • Prevents potential stored XSS scenarios caused by maliciously registered custom post type labels. • Minor stability improvements to avoid PHP notices when settings values are missing. = 8.2.6 = 🛠 Fix: Correct WPML slugs and duplicate URLs in llms.txt • Fixed an issue where original language slugs (e.g. .de) were duplicated and appeared for both original and translated pages. • The generator now resolves the real WPML permalink for each language, instead of reusing the source language slug. • Each language entry is now written with its own correct localized URL (no mixed or duplicated slugs). • Prevents cases where translated pages were listed with the original language URL. • Ensures llms.txt contains only valid, language-correct links for all WPML translations. = 8.2.5 = 🛠 **Fix: Multilingual llms.txt generation with WPML** • The generated `llms.txt` file now contains **all WPML language versions at once**. • Each language is rendered with its **correct localized permalink** (`/en/`, `/ro/`, etc.). • The output is **no longer dependent on the currently viewed language**. • This ensures that a single `llms.txt` file always exposes **all valid multilingual URLs**, regardless of which language version is accessed. Result: * One unified `llms.txt` * All WPML languages included * All links resolve correctly * No missing or fallback-to-default-language URLs = 8.2.4 = 🛠 Improvement: Gravity Forms exclusion control • Added an option to exclude Gravity Forms form fields from the generated llms.txt output. • When disabled, all Gravity Forms markup (`