{"id":290537,"date":"2026-04-11T19:08:30","date_gmt":"2026-04-11T19:08:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/llm-override\/"},"modified":"2026-04-12T16:59:53","modified_gmt":"2026-04-12T16:59:53","slug":"llm-override","status":"publish","type":"plugin","link":"https:\/\/sv.wordpress.org\/plugins\/llm-override\/","author":18282614,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.1.7","stable_tag":"1.1.7","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"LLM Override","header_author":"Fran Barbero","header_description":"M2M (Machine-to-Machine) translation engine for GEO. Compiles your HTML into clean Markdown for AI crawlers (ChatGPT, Claude). Control your data contract and prevent hallucinations.","assets_banners_color":"bbc2ce","last_updated":"2026-04-12 16:59:53","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/llmoverride.com","header_plugin_uri":"https:\/\/llmoverride.com","header_author_uri":"https:\/\/profiles.wordpress.org\/vanguardhive\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":61,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.6":{"tag":"1.1.6","author":"vanguardhive","date":"2026-04-11 20:11:48"},"1.1.7":{"tag":"1.1.7","author":"vanguardhive","date":"2026-04-12 16:59:53"}},"upgrade_notice":{"1.1.5":"<p>Crucial compatibility layer patch for shortcode visual builders (Divi, WPBakery). Upgrade highly recommended to restore correct <code>.txt<\/code> endpoints and Grounding schemas.<\/p>","1.1.4":"<p>Security and compliance release addressing all issues raised during the WordPress.org plugin review. Resolves inline script enqueuing, output escaping, and removes non-permitted files from distribution.<\/p>","1.0.1":"<p>New Yoast SEO compatibility warnings added to the dashboard. Essential if you are using Yoast SEO simultaneously.<\/p>","1.0.0":"<p>Initial release of LLM Override.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3504117,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3504117,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3504143,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3504143,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.6","1.1.7"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3504117,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3504117,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3504117,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3504117,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3504117,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Dashboard with M2M engine status, bot hit counter, intercepted URL count, and health checklist.","2":"\"Before vs. After\" empirical simulation \u2014 raw HTML versus the structured Markdown payload an AI actually receives.","3":"Content Rules panel \u2014 Site Manifest configuration.","4":"llms.txt Config page \u2014 AJAX regeneration, real-time inclusion\/exclusion stats, endpoint preview.","5":"Per-post native WordPress Metabox \u2014 exclude from AI manifests or manually override the M2M payload."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[216196,2591,226124,4608,186],"plugin_category":[49,55],"plugin_contributors":[259995],"plugin_business_model":[],"class_list":["post-290537","plugin","type-plugin","status-publish","hentry","plugin_tags-chatgpt","plugin_tags-geo","plugin_tags-llm","plugin_tags-markdown","plugin_tags-seo","plugin_category-maps-and-location","plugin_category-seo-and-marketing","plugin_contributors-vanguardhive","plugin_committers-vanguardhive"],"banners":{"banner":"https:\/\/ps.w.org\/llm-override\/assets\/banner-772x250.png?rev=3504143","banner_2x":"https:\/\/ps.w.org\/llm-override\/assets\/banner-1544x500.png?rev=3504143","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/llm-override\/assets\/icon-128x128.png?rev=3504117","icon_2x":"https:\/\/ps.w.org\/llm-override\/assets\/icon-256x256.png?rev=3504117","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/llm-override\/assets\/screenshot-1.png?rev=3504117","caption":"Dashboard with M2M engine status, bot hit counter, intercepted URL count, and health checklist."},{"src":"https:\/\/ps.w.org\/llm-override\/assets\/screenshot-2.png?rev=3504117","caption":"\"Before vs. After\" empirical simulation \u2014 raw HTML versus the structured Markdown payload an AI actually receives."},{"src":"https:\/\/ps.w.org\/llm-override\/assets\/screenshot-3.png?rev=3504117","caption":"Content Rules panel \u2014 Site Manifest configuration."},{"src":"https:\/\/ps.w.org\/llm-override\/assets\/screenshot-4.png?rev=3504117","caption":"llms.txt Config page \u2014 AJAX regeneration, real-time inclusion\/exclusion stats, endpoint preview."},{"src":"https:\/\/ps.w.org\/llm-override\/assets\/screenshot-5.png?rev=3504117","caption":"Per-post native WordPress Metabox \u2014 exclude from AI manifests or manually override the M2M payload."}],"raw_content":"<!--section=description-->\n<p><strong>The AI era has a problem: ChatGPT, Claude, and Perplexity are making up facts about your brand.<\/strong><\/p>\n\n<p>They crawl your raw HTML \u2014 a format built for humans \u2014 and hallucinate the gaps. Traditional SEO\ncannot fix this. A static sitemap cannot fix this. LLM Override fixes this.<\/p>\n\n<p><strong>LLM Override<\/strong> is a Machine-to-Machine (M2M) interception engine for WordPress. It speaks the\nlanguage AI crawlers actually understand: clean, structured Markdown with semantic context \u2014 served\nin real time, directly from your site, without modifying a single page.<\/p>\n\n\n\n<h3>How AI systems read your content<\/h3>\n\n<p>Most AI tools for WordPress generate a list of URLs. That tells an AI crawler <em>where<\/em> your content\nis. LLM Override tells AI crawlers <em>what your content means<\/em> \u2014 making your brand accurately\nrepresented across AI-powered search engines.<\/p>\n\n<p>When a bot visits your page, LLM Override intercepts the request before WordPress renders any HTML,\nand responds with a structured Markdown payload containing:<\/p>\n\n<ul>\n<li>Your content, cleaned of scripts, ads, and UI noise<\/li>\n<li>A YAML frontmatter block with your canonical title, URL, and last-updated timestamp<\/li>\n<li>Your <strong>Site Manifest<\/strong> \u2014 verifiable organization facts included in your \/llms.txt<\/li>\n<\/ul>\n\n<p>This is Generative Engine Optimization (GEO): making your content accessible and accurately represented to AI systems.<\/p>\n\n\n\n<h3>How it works<\/h3>\n\n<ol>\n<li>LLM Override adds a <code>&lt;link rel=\"alternate\" type=\"text\/markdown\"&gt;<\/code> tag into your page <code>&lt;head&gt;<\/code>.<\/li>\n<li>An AI crawler discovers this link and follows it \u2014 that's the standard Content Negotiation protocol.<\/li>\n<li>It appends <code>?view=raw<\/code> to your URL and sends the request.<\/li>\n<li>LLM Override intercepts at the WordPress routing layer \u2014 no HTML is rendered, no theme loads.<\/li>\n<li>The crawler receives clean, semantic Markdown. Accurate content. No hallucinations.<\/li>\n<\/ol>\n\n<p>Your human visitors never see any of this. Their experience is unchanged.<\/p>\n\n\n\n<h3>Core Features (Free)<\/h3>\n\n<p><strong>M2M Interception Engine<\/strong>\n\u2705 Intercepts AI bot requests via <code>?view=raw<\/code> \u2014 works on any page, any post type\n\u2705 Converts HTML to clean Markdown using <code>league\/html-to-markdown<\/code>\n\u2705 Strips <code>&lt;script&gt;<\/code>, <code>&lt;style&gt;<\/code>, <code>&lt;iframe&gt;<\/code>, and empty elements before conversion\n\u2705 Disables page caching (WP Rocket, LiteSpeed, W3TC, Cloudflare) for M2M requests to guarantee fresh content\n\u2705 Adds <code>X-Robots-Tag: noindex<\/code> to Markdown responses to prevent duplicate content flags\n\u2705 Adds <code>X-Content-Processing<\/code> transparency header declaring conversion method and source\n\u2705 Adds YAML frontmatter: title, canonical URL, last modified date, plugin version<\/p>\n\n<p><strong>Content Rules<\/strong>\n\u2705 <strong>Site Manifest<\/strong> \u2014 provide verifiable organization facts in your \/llms.txt site manifest<\/p>\n\n<p><strong>llms.txt Standard Compliance<\/strong>\n\u2705 Dynamic <code>\/llms.txt<\/code> endpoint \u2014 always current, zero static files, works on any hosting\n\u2705 Extended <code>\/llms-full.txt<\/code> endpoint \u2014 includes content snippets for deeper AI context\n\u2705 Semantic Blockquote \u2014 select a global context page via UI to auto-generate the site manifest\n\u2705 Link Grouping \u2014 automatically categorizes links by post type (Pages, Optional, etc.) per llmstxt.org specs\n\u2705 Both endpoints automatically respect <code>noindex<\/code> rules from Yoast SEO, Rank Math, SEOPress, and AIOSEO\n\u2705 Announces <code>\/llms.txt<\/code> in your <code>robots.txt<\/code> for passive bot discovery\n\u2705 <code>&lt;link rel=\"alternate\" type=\"text\/markdown\"&gt;<\/code> auto-injected into every page <code>&lt;head&gt;<\/code><\/p>\n\n<p><strong>Precision Control<\/strong>\n\u2705 Native WordPress metabox on every post\/page: exclude from AI manifests or override the M2M payload manually\n\u2705 \"View as AI\" button in the WordPress Admin Bar: see exactly what any AI bot receives from any page<\/p>\n\n<p><strong>Shadow Analytics Lite<\/strong>\n\u2705 Tracks global M2M interception hits with a simple counter in your dashboard\n\u2705 GDPR-compliant: IP addresses are hashed daily, never stored in plain text\n\u2705 Detects 58 known AI bots across 4 categories (Training, Query, Discovery, Scraping)<\/p>\n\n<p><strong>Enterprise Sanitization<\/strong>\n\u2705 Strips Unicode corruption before delivery: BOM markers, Zero-Width Spaces, Non-Breaking Spaces, Soft Hyphens \u2014 the exact characters that cause parser errors in ChatGPT and Claude\n\u2705 Transient-based caching (12-hour TTL) for endpoint performance \u2014 with one-click AJAX flush<\/p>\n\n<p><strong>Developer API<\/strong>\n\u2705 14 documented action\/filter hooks for extending behavior without modifying plugin files\n\u2705 Clean OOP architecture with full Composer autoloading<\/p>\n\n\n\n<h3>Built to WordPress standards<\/h3>\n\n<p>LLM Override is developed following strict WordPress coding standards. Every function prefixed,\nevery output escaped, every database query prepared, every nonce verified. No direct filesystem\noperations. No raw SQL injection. No short PHP tags.<\/p>\n\n<p>The plugin passes the official WordPress Plugin Check tool with zero errors and zero warnings.<\/p>\n\n\n\n<h3>LLM Override Pro \u2014 Industrial-scale GEO<\/h3>\n\n<p>The free version covers the complete core M2M engine. Large sites and agencies need scale.<\/p>\n\n<p><strong>Pro unlocks:<\/strong>\n* \ud83e\udd16 <strong>AI Copilot<\/strong> \u2014 per-post AI-generated Markdown with custom personas (GPT, Claude, DeepSeek, OpenRouter via BYOK)\n* \u2699\ufe0f <strong>Batch Accelerator<\/strong> \u2014 compile your entire site in the background via Action Scheduler, no timeouts\n* \ud83d\udcca <strong>Full GEO Analytics<\/strong> \u2014 granular telemetry: which bots, which pages, which entities were injected\n* \ud83d\udd2c <strong>Autopilot llms.txt<\/strong> \u2014 AI-drafted manifesto grounded in your actual content\n* \ud83c\udfe2 <strong>Agency MCP Server<\/strong> \u2014 expose a full Model Context Protocol endpoint for external agent orchestration<\/p>\n\n<p><a href=\"https:\/\/llmoverride.com\">Explore Pro features \u2192<\/a><\/p>\n\n\n\n<h3>GEO Compliance<\/h3>\n\n<p>LLM Override follows the principle of Content Faithfulness: everything served to\nAI bots is a faithful representation of your visible web content, optimized for\nmachine consumption but never altered in substance.<\/p>\n\n<ul>\n<li>Content is converted from HTML to Markdown without semantic changes<\/li>\n<li>No content is added or removed from individual page responses<\/li>\n<li>Structured data (JSON-LD) is extracted directly from visible page content<\/li>\n<li>Full transparency via X-Content-Processing HTTP headers<\/li>\n<li>Content Faithfulness Score tracks parity between HTML and Markdown outputs<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>llm-override<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate via the <em>Plugins<\/em> menu in WordPress.<\/li>\n<li>Go to <strong>LLM Override &gt; Dashboard<\/strong> \u2014 your M2M engine is active immediately after activation.<\/li>\n<li>(Optional) Set your Site Manifest under <strong>LLM Override &gt; Content Rules<\/strong>.<\/li>\n<li>(Optional) Review your <code>\/llms.txt<\/code> output and configure included post types under <strong>LLM Override &gt; llms.txt Config<\/strong>.<\/li>\n<\/ol>\n\n<p>No configuration is required for basic operation. The M2M interceptor works out of the box.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20geo%20and%20why%20does%20it%20matter%20more%20than%20seo%20right%20now%3F\"><h3>What is GEO and why does it matter more than SEO right now?<\/h3><\/dt>\n<dd><p>SEO (Search Engine Optimization) optimizes for Google's crawler \u2014 a bot that ranks pages and\nshows links. GEO (Generative Engine Optimization) optimizes for AI models like ChatGPT, Claude,\nand Perplexity \u2014 systems that synthesize answers and cite sources. The key difference: Google\nshows your page. AI answers replace your page with a summary. If that summary is wrong, your\nbrand is damaged. GEO is how you control what that summary says.<\/p><\/dd>\n<dt id=\"what%20is%20m2m%20interception%3F%20why%20not%20just%20use%20a%20sitemap%3F\"><h3>What is M2M interception? Why not just use a sitemap?<\/h3><\/dt>\n<dd><p>A sitemap tells an AI where your URLs are. M2M interception controls what an AI receives when\nit visits those URLs. LLM Override sits between the AI crawler and your WordPress theme: when\na bot requests your page, instead of getting raw HTML full of navigation, ads, and JavaScript,\nit receives clean, structured Markdown with your canonical facts already embedded. A sitemap\nis a phone book. M2M interception is the actual conversation.<\/p><\/dd>\n<dt id=\"does%20this%20change%20anything%20for%20my%20human%20visitors%3F\"><h3>Does this change anything for my human visitors?<\/h3><\/dt>\n<dd><p>Nothing. Human visitors always receive your normal WordPress theme. The M2M layer is invisible:\nit only activates when the <code>?view=raw<\/code> parameter is present, which only AI crawlers\nfollowing the <code>&lt;link rel=\"alternate\"&gt;<\/code> standard will use. There is no redirect, no separate\nURL, no parallel site to maintain.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20llms.txt%20and%20what%20llm%20override%20actually%20does%3F\"><h3>What is the difference between llms.txt and what LLM Override actually does?<\/h3><\/dt>\n<dd><p>llms.txt is a directory: a list of your important URLs. It helps AI crawlers discover your\ncontent. LLM Override does that (via the dynamic <code>\/llms.txt<\/code> endpoint) \u2014 and then goes further:\nwhen the AI crawler visits each of those URLs, it receives a semantically structured Markdown\npayload, not raw HTML. The <code>\/llms.txt<\/code> file is the door. M2M interception controls what\nhappens inside the room.<\/p><\/dd>\n<dt id=\"is%20%2Fllms.txt%20a%20real%20file%20on%20my%20server%3F\"><h3>Is \/llms.txt a real file on my server?<\/h3><\/dt>\n<dd><p>No, and this is intentional. LLM Override generates <code>\/llms.txt<\/code> dynamically on every request.\nThis means it always reflects your latest published content \u2014 no stale data, no manual\nregeneration needed after publishing new pages. It also means it works on any hosting\nenvironment, including read-only filesystems and managed platforms, without requiring\nwrite access to your server root.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20wordpress%20vip%2C%20kinsta%2C%20wp%20engine%2C%20or%20other%20managed%20hosts%3F\"><h3>Does it work with WordPress VIP, Kinsta, WP Engine, or other managed hosts?<\/h3><\/dt>\n<dd><p>Yes. Because LLM Override never writes files directly to the filesystem, it is compatible\nwith any hosting environment, including those with read-only or restricted filesystem access.\nThe plugin uses only the WordPress Options API, Transients API, and WordPress Rewrite Rules \u2014\nthe standard APIs that work everywhere.<\/p><\/dd>\n<dt id=\"what%20is%20the%20site%20manifest%3F\"><h3>What is the Site Manifest?<\/h3><\/dt>\n<dd><p>The Site Manifest is a block of verifiable organization facts \u2014 your canonical brand\ndescription, key figures, certifications \u2014 that appears in your \/llms.txt site manifest.\nEvery time ChatGPT or Claude reads your site's \/llms.txt, it receives this factual summary\nas context. Write only verifiable facts that match your visible web content.<\/p><\/dd>\n<dt id=\"what%20is%20yaml%20frontmatter%20and%20why%20does%20it%20help%3F\"><h3>What is YAML frontmatter and why does it help?<\/h3><\/dt>\n<dd><p>YAML frontmatter is structured metadata placed at the very beginning of a Markdown document,\nin a format that AI models are specifically trained to parse and prioritize. LLM Override\nautomatically adds frontmatter to every payload containing: your page title, canonical URL,\nlast modified date, and your Corporate Manifest. This metadata is processed before the\nbody content \u2014 giving you context control at the highest-priority position in the document.<\/p><\/dd>\n<dt id=\"what%20seo%20plugins%20does%20it%20integrate%20with%3F\"><h3>What SEO plugins does it integrate with?<\/h3><\/dt>\n<dd><p>LLM Override automatically reads <code>noindex<\/code> and <code>nofollow<\/code> rules from Yoast SEO, Rank Math,\nSEOPress, and AIOSEO. Any page you have excluded from search engines in those plugins will\nalso be excluded from your <code>\/llms.txt<\/code> and <code>\/llms-full.txt<\/code> manifests automatically \u2014 with\nzero manual configuration. The integration is implemented at the database level (direct\n    wp_postmeta query) for maximum performance and zero dependency on those plugins being active.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20%2Fllms.txt%20and%20%2Fllms-full.txt%3F\"><h3>What is the difference between \/llms.txt and \/llms-full.txt?<\/h3><\/dt>\n<dd><p>\/llms.txt is a concise, standard-compliant manifest: titles, URLs, and M2M links for all\nyour public content. <code>\/llms-full.txt<\/code> is an extended version that includes a content snippet\nfor each URL (truncated to 500 characters, sanitized Markdown) \u2014 useful for documentation\nsites, knowledge bases, or any site where giving AI crawlers an immediate content preview\nimproves retrieval accuracy.<\/p><\/dd>\n<dt id=\"what%20does%20the%20%22view%20as%20ai%22%20button%20do%3F\"><h3>What does the \"View as AI\" button do?<\/h3><\/dt>\n<dd><p>It adds a button to the WordPress Admin Bar visible only to administrators. On any singular\npost or page, clicking it opens the raw M2M Markdown payload exactly as an AI crawler would\nreceive it \u2014 including your YAML frontmatter and Site\nManifest. It is an empirical verification tool: see exactly what you are serving,\nbefore you assume.<\/p><\/dd>\n<dt id=\"what%20ai%20bots%20does%20it%20detect%3F\"><h3>What AI bots does it detect?<\/h3><\/dt>\n<dd><p>LLM Override includes a dictionary of 58 known AI crawlers across 4 behavioral categories:\nTraining bots (harvesting data for model training), Query bots (real-time RAG requests),\nDiscovery bots (sitemap and manifest crawlers), and Scraping bots (unclassified AI traffic).\nDetection uses User-Agent matching on the <code>template_redirect<\/code> hook. Detected bots are\nautomatically served Markdown without requiring the <code>?view=raw<\/code> parameter.<\/p><\/dd>\n<dt id=\"does%20this%20affect%20my%20seo%20rankings%3F\"><h3>Does this affect my SEO rankings?<\/h3><\/dt>\n<dd><p>No. LLM Override adds <code>X-Robots-Tag: noindex<\/code> to all M2M Markdown responses, which tells\nGooglebot and Bing to ignore them. Your standard HTML pages remain exactly as they are and\ncontinue to be indexed normally. LLM Override operates on a completely separate delivery\nchannel that search engine crawlers do not follow.<\/p><\/dd>\n<dt id=\"does%20it%20conflict%20with%20caching%20plugins%3F\"><h3>Does it conflict with caching plugins?<\/h3><\/dt>\n<dd><p>No. LLM Override detects active caching layers (WP Rocket, LiteSpeed Cache, W3 Total Cache,\nFastCGI, Varnish, Cloudflare) and programmatically disables them exclusively for M2M\nrequests. Your human visitors continue to be served cached pages normally. Only bot\nrequests via the M2M channel bypass cache \u2014 by design, to guarantee fresh content delivery.<\/p><\/dd>\n<dt id=\"i%20am%20a%20developer.%20what%20hooks%20are%20available%3F\"><h3>I am a developer. What hooks are available?<\/h3><\/dt>\n<dd><p>LLM Override exposes 14 documented hooks:<\/p>\n\n<p><strong>Filters:<\/strong>\n    llm_override_markdown_output \u2014 modify the final Markdown string before delivery\n    llm_override_yaml_frontmatter \u2014 modify or extend the YAML frontmatter array\n    llm_override_pre_convert_content \u2014 replace the raw HTML before conversion (used by Pro AI Copilot)\n    llm_override_llmstxt_entries \u2014 filter the URL list before <code>\/llms.txt<\/code> is rendered\n    llm_override_excluded_post_ids \u2014 add custom exclusion logic for manifests\n    llm_override_bot_user_agents \u2014 extend the bot detection dictionary<\/p>\n\n<p><strong>Actions:<\/strong>\n    llm_override_bot_detected \u2014 fires when a known bot is intercepted (used by Shadow Analytics)\n    llm_override_before_markdown_output \u2014 fires before Markdown is echoed\n    llm_override_after_markdown_output \u2014 fires after delivery\n    llm_override_llmstxt_generated \u2014 fires after <code>\/llms.txt<\/code> is regenerated\n    llm_override_settings_after_general \u2014 extend the settings panel (used by Pro)\n    llm_override_dashboard_after_kpis \u2014 extend the dashboard (used by Pro)<\/p><\/dd>\n<dt id=\"is%20it%20gdpr-compliant%3F\"><h3>Is it GDPR-compliant?<\/h3><\/dt>\n<dd><p>Yes. Shadow Analytics Lite stores bot activity logs, but never in association with identifiable\nuser data. IP addresses detected during bot interception are hashed using a daily-rotating\nsalt before storage \u2014 making them non-reversible and non-identifiable. No data is transmitted\nto external servers in the free version.<\/p><\/dd>\n<dt id=\"does%20it%20send%20data%20to%20openai%2C%20anthropic%2C%20or%20other%20ai%20companies%3F\"><h3>Does it send data to OpenAI, Anthropic, or other AI companies?<\/h3><\/dt>\n<dd><p>No. The free version is entirely self-contained. It intercepts incoming AI crawler requests\nand serves them Markdown \u2014 it does not make any outgoing API calls to any AI service.\nThe Pro version optionally connects to AI APIs (OpenAI, Anthropic, DeepSeek, OpenRouter)\nvia keys you provide (BYOK \u2014 Bring Your Own Key). Those connections are explicitly initiated\nby you, and only transmit the content of the specific page being processed.<\/p>\n\n<\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Removed: Terminology Standardization engine. This feature introduced semantic divergence between HTML and M2M payloads, contradicting our core principle of content faithfulness. LLM Override now guarantees strict 1:1 parity between what humans read and what machines receive.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Performance: Resolved critical AJAX timeout when regenerating llms.txt cache on sites with 1,000+ published pages. The admin stats engine now uses lightweight SQL COUNT queries (~2ms) instead of heavy WP_Query meta lookups that generated multiple LEFT JOINs on wp_postmeta.<\/li>\n<li>Performance: Optimized <code>\/llms.txt<\/code> and <code>\/llms-full.txt<\/code> endpoint queries by disabling <code>SQL_CALC_FOUND_ROWS<\/code> (<code>no_found_rows<\/code>) and taxonomy cache preloading (<code>update_post_term_cache<\/code>), reducing memory usage and query time on large sites.<\/li>\n<li>Performance: Fixed Dashboard KPI query that loaded all post IDs into memory unnecessarily. Now fetches only the count.<\/li>\n<li>Fix: Extended the safe shortcode stripping logic (introduced in 1.1.5 for the Content Pipeline) to all four remaining <code>strip_shortcodes()<\/code> call sites in the llms.txt and llms-full.txt generators. Divi and WPBakery content is now preserved consistently across all endpoints.<\/li>\n<li>Enhancement: llms.txt and llms-full.txt caches now auto-invalidate when any public post is published, updated, or trashed, eliminating up to 12 hours of stale content.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Fix: Prevented destructive Markdown conversion when processing pages built with shortcode-heavy visual builders (Divi, WPBakery). The core pipeline now uses an intelligent recursive loop instead of <code>strip_shortcodes()<\/code> to safely extract text payloads.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Fix: Migrated all inline <code>&lt;script&gt;<\/code> tags to use <code>wp_register_script<\/code>, <code>wp_enqueue_script<\/code>, and <code>wp_add_inline_script<\/code> APIs, fully compliant with WordPress enqueue standards.<\/li>\n<li>Fix: Resolved unescaped output variables in metabox template by wrapping all dynamic attributes in <code>esc_attr()<\/code>.<\/li>\n<li>Fix: Corrected JSON-LD script injection by removing unsafe <code>JSON_UNESCAPED_UNICODE<\/code> and <code>JSON_UNESCAPED_SLASHES<\/code> flags from <code>wp_json_encode()<\/code>, preventing potential <code>&lt;\/script&gt;<\/code> breakout.<\/li>\n<li>Fix: Restructured <code>printf<\/code> calls in the llms.txt admin partial to use <code>wp_kses()<\/code> with explicit allowlists instead of <code>esc_html__()<\/code> with raw HTML arguments.<\/li>\n<li>Fix: Removed non-permitted binary files from distribution (<code>vendor\/bin\/html-to-markdown<\/code>, <code>vendor\/league\/html-to-markdown\/bin\/<\/code>).<\/li>\n<li>Fix: Eliminated duplicate Metabox instantiation that caused hooks to register twice.<\/li>\n<li>Tweak: Extracted Terminology Standardization repeater JavaScript into a dedicated external file (<code>admin\/js\/llm-override-admin-terminology.js<\/code>), enqueued conditionally on the Content Rules page only.<\/li>\n<li>Tweak: Yoast SEO dismiss handler now passes nonce via <code>wp_localize_script()<\/code> instead of inline PHP.<\/li>\n<li>Tweak: Added <code>phpcs:ignore<\/code> annotations with technical justifications for text\/plain API endpoints where <code>esc_html()<\/code> would corrupt Markdown output.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fix: Removed residual AJAX callback registrations pointing to non-existent methods, preventing a fatal error in certain configurations.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Fix: Resolved a backend conflict by removing unused AJAX event listeners that could potentially trigger HTTP 500 errors in specific environments.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fix: Eliminated execution conflicts by removing non-functional code blocks.<\/li>\n<li>Performance: Restored ultra-lightweight architecture by ensuring all processes rely exclusively on the WordPress Options and Transients APIs.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li><strong>Feature<\/strong>: Terminology Standardization Engine. M2M Engine now globally replaces legacy forbidden terms logic with a structured <code>{from =&gt; to}<\/code> Terminology Dictionary to ensure Content Faithfulness and compliance.<\/li>\n<li><strong>Enhancement<\/strong>: Migrated global term filtering logic to comply with accurate Source Attribution guidelines.<\/li>\n<li><strong>Tweak<\/strong>: Version bump for plugin parity and architectural refactoring to optimize payload delivery.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li><strong>New<\/strong>: RAG JSON-LD Grounding Engine. Automatically injects semantic <code>TechArticle<\/code> schema markup into the HTML <code>&lt;head&gt;<\/code> containing the M2M translated content, allowing search engines and discovery bots to ingest the clean markdown payload directly from the DOM without needing to visit the <code>?view=raw<\/code> endpoint.<\/li>\n<li><strong>Enhancement<\/strong>: Complete architectural refactoring of the Content Pipeline. HTML-to-Markdown conversion is now centralized natively inside <code>LLM_Override_Content_Pipeline::convert_to_markdown()<\/code>, guaranteeing maximum stability and preventing theme builder conflicts or fatal errors during the M2M interception phase.<\/li>\n<li><strong>Fix<\/strong>: Developer Experience (DX) bypass for Stealth Bot Detection. Integrated IDE headless browsers and Localhost environments (127.0.0.1, .local) will no longer trigger false positive M2M interceptions due to stripped <code>Sec-Fetch-*<\/code> routing headers.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li><strong>Fix<\/strong>: Added deep exclusions for performance auditing tools (<code>Chrome-Lighthouse<\/code>, <code>GTmetrix<\/code>, <code>PingdomPTST<\/code>) to prevent them from receiving Markdown. Speed tests will now correctly analyze the HTML layout without triggering the Stealth Bot engine.<\/li>\n<li><strong>Fix<\/strong>: Added extended SEO bots exclusions (<code>AhrefsBot<\/code>, <code>SemrushBot<\/code>, <code>Applebot<\/code>, <code>DotBot<\/code>, <code>MJ12bot<\/code>) to the whitelist.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fix: <strong>Critical Indexing Hotfix.<\/strong> Excluded honest search engine crawlers (like Googlebot and Bingbot) from being falsely flagged by the Stealth Detection Engine. This ensures good bots receive standard HTML without the <code>noindex<\/code> header, allowing normal SERP indexing to continue seamlessly.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fix: Changed the Content-Type header from <code>text\/markdown<\/code> to <code>text\/plain<\/code> to ensure strict AI URL ingesters (like Google NotebookLM) accept the M2M endpoints as valid sources, while maintaining monospace readability in browsers.<\/li>\n<li>Tweak: Restored the <code>X-Robots-Tag: noindex<\/code> header to prevent search engine SERP pollution, confirming it was not the cause of the NotebookLM blockage.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>New: Passive Yoast SEO Compatibility Checker. Intercepts <code>llms.txt<\/code> overriding rules and Bot Blocker restrictions from Yoast Premium, alerting administrators with actionable fixes inside the WP dashboard.<\/li>\n<li>Fix: Added missing <code>Content-Type: text\/markdown<\/code> header to the M2M payload response. This prevents browsers from incorrectly attempting to parse the payload as HTML and collapsing whitespace\/formatting.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>New: Semantic <code>llms.txt<\/code> UI. Select a global context source via dropdown to automatically generate the file's blockquote manifesto.<\/li>\n<li>New: Link grouping in <code>llms.txt<\/code>. Links are now categorized by post type (<code>## Pages<\/code>, <code>## Optional<\/code>, etc.) following strict llmstxt.org specifications.<\/li>\n<li>Enhancement: M2M payload extraction engine now evaluates up to 400 characters of raw content (vs 120) when native excerpts are missing, providing richer factual context to AI crawlers.<\/li>\n<li>Fix: Addressed WordPress forcing trailing slashes (<code>\/<\/code>) on <code>.txt<\/code> API endpoints via <code>redirect_canonical<\/code>. Now serves pristine flat files.<\/li>\n<li>Fix: Replaced generic HTML entity decoding with native WordPress typographic decoders to properly clean apostrophes and quotes injected by Gutenberg.<\/li>\n<li>Tweak: Redesigned the \"Regenerate Cache\" UI to strictly adhere to B2B aesthetic guidelines.<\/li>\n<li>Active M2M Interceptor engine with structured HTML-to-Markdown conversion.<\/li>\n<li>Global Semantic Injection: Forbidden Terms and Corporate Manifest via YAML frontmatter.<\/li>\n<li>Dynamic <code>\/llms.txt<\/code> and <code>\/llms-full.txt<\/code> endpoint generation.<\/li>\n<li>Algorithmic Discoverability via <code>&lt;link rel=\"alternate\"&gt;<\/code> tag and <code>robots.txt<\/code> announcement.<\/li>\n<li>Native SEO integrations with Yoast SEO, Rank Math, SEOPress, and AIOSEO (zero-dependency SQL implementation).<\/li>\n<li>Native per-post exclusion and payload override via WordPress editor metabox.<\/li>\n<li>Admin Dashboard with Shadow Analytics Lite (M2M bot hit counters, GDPR-compliant IP hashing).<\/li>\n<li>\"View as AI\" Admin Bar button for empirical M2M payload verification.<\/li>\n<li>\"Before vs. After\" live HTML-to-Markdown simulation in the Dashboard.<\/li>\n<li>Passive bot detection for 58 known AI crawlers across 4 behavioral categories.<\/li>\n<li>HTTP Content Negotiation support (<code>Accept: text\/markdown<\/code> header).<\/li>\n<li>Enterprise Unicode sanitization (BOM, Zero-Width Spaces, Non-Breaking Spaces, Soft Hyphens).<\/li>\n<li>AJAX-driven Transient caching (12-hour TTL) for all M2M endpoints with manual flush.<\/li>\n<li>14 documented action\/filter hooks for developer extensibility.<\/li>\n<li>Full compliance with WordPress coding standards: 0 Plugin Check errors, 0 warnings.<\/li>\n<\/ul>","raw_excerpt":"Make your content accessible and accurate for AI systems. The compliance-first GEO optimization toolkit for WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/290537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=290537"}],"author":[{"embeddable":true,"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vanguardhive"}],"wp:attachment":[{"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=290537"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=290537"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=290537"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=290537"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=290537"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=290537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}