{"id":295007,"date":"2026-05-04T08:58:09","date_gmt":"2026-05-04T08:58:09","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/llm-interceptor\/"},"modified":"2026-05-04T08:57:46","modified_gmt":"2026-05-04T08:57:46","slug":"llmaffiliate-ai-traffic-monetizer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/llmaffiliate-ai-traffic-monetizer\/","author":23472787,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"LLMAffiliate AI Traffic Monetizer","header_author":"LLM Affiliate Team","header_description":"Detects LLM user agents, enforces Google parity, and serves enhanced content from a remote service.","assets_banners_color":"","last_updated":"2026-05-04 08:57:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"llmaffiliate01","date":"2026-05-04 08:57:46"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,2364,13262,9837,226124],"plugin_category":[],"plugin_contributors":[261816],"plugin_business_model":[],"class_list":["post-295007","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chatbot","plugin_tags-content-delivery","plugin_tags-crawler","plugin_tags-llm","plugin_contributors-llmaffiliate01","plugin_committers-llmaffiliate01"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/llmaffiliate-ai-traffic-monetizer.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>LLMAffiliate AI Traffic Monetizer<\/strong> is a WordPress plugin that detects Large Language Model (LLM) traffic and dynamically serves enhanced content while ensuring compliance with search engine parity requirements.<\/p>\n\n<p>It mirrors the behavior of an interception layer (e.g., Cloudflare Worker) directly inside WordPress, enabling controlled content delivery for AI crawlers and agents.<\/p>\n\n<h4>CORE FEATURES<\/h4>\n\n<ul>\n<li>Detects major LLM user agents including ChatGPT, Claude, Gemini, Copilot, Perplexity, Pi, LLaMA, Grok, Cohere, Mistral, Anthropic, and OpenAI.<\/li>\n<li>Ensures Googlebot and search engine crawlers always receive original content (configurable parity enforcement).<\/li>\n<li>Serves enhanced HTML responses via a remote content service.<\/li>\n<li>Automatically falls back to native WordPress rendering if the external service fails.<\/li>\n<li>Adds cache-control, licensing, and optional Text and Data Mining headers.<\/li>\n<li>Supports secure QA overrides using HMAC-signed query parameters.<\/li>\n<\/ul>\n\n<h4>HOW IT WORKS<\/h4>\n\n<p>The plugin intercepts incoming HTTP requests and:<\/p>\n\n<ol>\n<li>Identifies whether the request originates from an LLM or standard browser.<\/li>\n<li>If LLM traffic is detected:\n\n<ul>\n<li>Fetches enhanced content from a configured external service.<\/li>\n<li>Applies headers and response transformations.<\/li>\n<\/ul><\/li>\n<li>If the service fails:\n\n<ul>\n<li>Falls back to WordPress rendering safely.<\/li>\n<\/ul><\/li>\n<li>Ensures search engines always receive unmodified content.<\/li>\n<\/ol>\n\n<h4>USE CASES<\/h4>\n\n<ul>\n<li>AI traffic handling and request analysis<\/li>\n<li>Controlled content delivery for LLM vs. human visitors<\/li>\n<li>Response parity handling (search engines receive origin content)<\/li>\n<li>Experimentation with LLM-specific rendering in compliant deployments<\/li>\n<\/ul>\n\n<h4>OPERATIONAL LOGGING &amp; PRIVACY<\/h4>\n\n<p>An in-plugin setting (<strong>Settings \u2192 LLMAffiliate AI Traffic \u2192 Advanced Detection Settings<\/strong>) allows you to disable request and suspicious-event logging. When disabled, no logs are stored. When enabled (default), the plugin may store operational or security logs. These may include:\n* IP address\n* User agent\n* Requested URL\n* Referer\n* Selected HTTP headers\n* Detection and decision metadata\n* Suspicious-event or request logs<\/p>\n\n<p>This logging is used for debugging, security analysis, and request classification. Data is stored within your WordPress database. Configure and retain logs in accordance with your privacy policy and applicable regulations.<\/p>\n\n<h4>AI TERMS PAGE<\/h4>\n\n<p>The plugin can serve a public <code>\/ai-terms<\/code> page (or equivalent) that displays your site's AI usage and content terms. It functions as a site-published policy page that visitors\u2014including AI systems and human readers\u2014can view. Site owners are responsible for the contents and legal suitability of the terms. The plugin includes a default template; you may customize it to match your needs.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the <strong>LLM Affiliate<\/strong> cloud service to detect visiting AI crawlers (ChatGPT, Perplexity, Claude, Gemini, Copilot, etc.) and return an LLM-optimized, monetizable version of the requested article. Without this external service the plugin still performs local LLM detection, search-engine parity, and renders the <code>\/ai-terms<\/code> page, but the enhanced-content feature is not available.<\/p>\n\n<p>This service is provided by <strong>LLM Affiliate<\/strong> (llmaffiliate.com).<\/p>\n\n<p>Service endpoints used:<\/p>\n\n<ol>\n<li><p><strong>Site Onboarding<\/strong> \u2014 <code>POST https:\/\/api.llmaffiliate.com\/api\/v1\/enhanced-content\/onboarding\/<\/code><\/p>\n\n<ul>\n<li><strong>Purpose:<\/strong> Registers your WordPress site with the LLM Affiliate backend so the site can receive enhanced content. Think of it as a one-time (idempotent) handshake.<\/li>\n<li><strong>When it is sent:<\/strong> Only when you click <strong>Generate Token<\/strong> in the plugin admin screen (Settings \u2192 LLMAffiliate AI Traffic). It is also re-sent if you regenerate\/rotate the token. It is <strong>not<\/strong> sent on every page load.<\/li>\n<li><strong>Data sent (JSON body):<\/strong>\n\n<ul>\n<li><code>token<\/code> \u2013 the authentication token generated by the plugin<\/li>\n<li><code>site_id<\/code> \u2013 an internal site identifier (e.g., <code>site_xxxxxxxx<\/code>) generated by the plugin<\/li>\n<li><code>host<\/code> \u2013 your site's public URL (WordPress <code>home_url()<\/code>)<\/li>\n<\/ul><\/li>\n<li><strong>No post content, no user data, no visitor IP, and no visitor PII is transmitted by this endpoint.<\/strong><\/li>\n<\/ul><\/li>\n<li><p><strong>Enhanced Content Render<\/strong> \u2014 <code>GET https:\/\/api.llmaffiliate.com\/api\/v1\/enhanced-content\/render<\/code><\/p>\n\n<ul>\n<li><strong>Purpose:<\/strong> Fetches the LLM-optimized HTML version of a single article URL to serve back to the detected AI crawler.<\/li>\n<li><strong>When it is sent:<\/strong> Only when the plugin's LLM detector classifies an incoming request as an AI\/LLM user-agent (ChatGPT, Perplexity, Claude, Gemini, Copilot, LLaMA, Grok, Cohere, Mistral, DeepSeek, Pi, and similar). It is <strong>not<\/strong> sent for human visitors, for search-engine crawlers (Googlebot, Bingbot), or for admin\/REST\/static-asset requests.<\/li>\n<li><strong>Data sent (query string + pass-through headers):<\/strong>\n\n<ul>\n<li><code>url<\/code> \u2013 the public URL of the article being requested (query string + path)<\/li>\n<li><code>llm_profile<\/code> \u2013 the detected LLM profile name (e.g., <code>chatgpt<\/code>, <code>claude<\/code>, <code>gemini<\/code>)<\/li>\n<li><code>User-Agent<\/code> header \u2013 forwarded from the visiting LLM client<\/li>\n<li><code>Accept-Language<\/code> header \u2013 forwarded from the visiting LLM client<\/li>\n<li><code>X-LLM-Profile<\/code> header \u2013 the plugin's detected profile<\/li>\n<li><code>X-LLM-Confidence<\/code> header \u2013 a numeric confidence score (0\u20131) from the local detector<\/li>\n<\/ul><\/li>\n<li><strong>No cookies, session IDs, logged-in-user identifiers, or page body content are sent.<\/strong> Only the public URL and the minimum context needed to produce and attribute enhanced content is transmitted.<\/li>\n<\/ul><\/li>\n<\/ol>\n\n<p>All requests are made over HTTPS. If the service is unavailable or returns a non-200 response, the plugin adds an <code>X-LLMAFFTM-Interceptor: fallback<\/code> header and allows WordPress to render the normal (origin) page \u2014 humans and LLMs always receive <em>something<\/em>.<\/p>\n\n<p>Use of the LLM Affiliate service is governed by the provider's terms. Please review them before generating a token:<\/p>\n\n<ul>\n<li><strong>Terms of Service:<\/strong> https:\/\/llmaffiliate.com\/terms<\/li>\n<li><strong>Privacy Policy:<\/strong> https:\/\/llmaffiliate.com\/privacy<\/li>\n<li><strong>Service provider homepage:<\/strong> https:\/\/llmaffiliate.com\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Automatic installation<\/h4>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong> in your WordPress dashboard.<\/li>\n<li>Search for <strong>LLMAffiliate AI Traffic Monetizer<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong> and then <strong>Activate<\/strong>.<\/li>\n<li>Go to <strong>Settings \u2192 LLMAffiliate AI Traffic<\/strong>, generate a token, and complete onboarding\/integration on LLM Affiliate.<\/li>\n<li>Optionally configure logging and detection threshold in Advanced Detection Settings.<\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code> using the folder name <strong><code>llmaffiliate-ai-traffic-monetizer<\/code><\/strong> (this must match the <strong>Text Domain<\/strong> header so automated checks and translations stay aligned).<\/li>\n<li>Activate the plugin via the WordPress Plugins screen.<\/li>\n<li>Go to <strong>Settings \u2192 LLMAffiliate AI Traffic<\/strong>.<\/li>\n<li>Generate a token (click <strong>Generate Token<\/strong>) and complete onboarding\/integration on LLM Affiliate.<\/li>\n<li>Optionally configure logging and detection threshold in Advanced Detection Settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20modify%20admin%20or%20api%20routes%3F\"><h3>Does the plugin modify admin or API routes?<\/h3><\/dt>\n<dd><p>No. WordPress admin, login, REST API, and static assets are always bypassed.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20content%20service%20fails%3F\"><h3>What happens if the content service fails?<\/h3><\/dt>\n<dd><p>The plugin logs the failure (if enabled), adds an <code>X-LLMAFFTM-Interceptor: fallback<\/code> header, and allows WordPress to render normally.<\/p><\/dd>\n<dt id=\"how%20do%20signed%20overrides%20work%3F\"><h3>How do signed overrides work?<\/h3><\/dt>\n<dd><p>Enable \u201cAllow Signed Override\u201d and configure an HMAC secret.<\/p>\n\n<p>Then append:\n    ?llm_profile=&amp;llm_sig=<\/p>\n\n<p>Signature format:\n    hash_hmac('sha256', \"|\", )<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20safe%20for%20seo%3F\"><h3>Is this plugin safe for SEO?<\/h3><\/dt>\n<dd><p>Yes. Googlebot and other search crawlers always receive original content, ensuring compliance with search engine guidelines.<\/p><\/dd>\n<dt id=\"why%20does%20plugin%20check%20report%20a%20text%20domain%20mismatch%3F\"><h3>Why does Plugin Check report a Text Domain mismatch?<\/h3><\/dt>\n<dd><p>If the plugin lives in a directory with a different name (for example <code>llm-interceptor<\/code>), some tools compare that folder to the <strong>Text Domain<\/strong> and show a warning. Use the directory name <strong><code>llmaffiliate-ai-traffic-monetizer<\/code><\/strong> (the plugin slug) under <code>wp-content\/plugins\/<\/code>\u2014the same layout as the WordPress.org distribution ZIP.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Prefixed plugin identifiers (options, hooks, scripts, classes) with <code>llmafftm_<\/code> \/ <code>LLMAFFTM_<\/code>. Legacy <code>llm_interceptor_*<\/code> options are migrated on upgrade. Response headers use <code>X-LLMAFFTM-*<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>readme: point legal\/privacy reference to the public https:\/\/llmaffiliate.com\/ URL (verified).<\/li>\n<li>Removed heredoc templates; AI Terms HTML and admin inline JS use output buffering so variables are escaped in normal PHP flow. JSON-LD built with <code>wp_json_encode()<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Text domain and settings screen slug aligned with the plugin repository slug: <code>llmaffiliate-ai-traffic-monetizer<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>AI Terms page stylesheet now uses the proper WordPress asset API (<code>wp_register_style()<\/code> + <code>wp_enqueue_style()<\/code> + <code>wp_print_styles()<\/code>) instead of a direct <code>&lt;link rel=\"stylesheet\"&gt;<\/code> tag, per the WordPress Plugin Review Team's guidance on correctly enqueuing CSS and JavaScript.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Added a dedicated <code>== External services ==<\/code> section to the readme that fully discloses the LLM Affiliate cloud service (onboarding and enhanced-content render endpoints), the data transmitted, the conditions under which each request is made, and links to the service's Terms of Service and Privacy Policy \u2014 per the WordPress Plugin Review Team's third-party-service disclosure requirement.<\/li>\n<li>Output escaping: every echoed variable in the plugin now flows through an appropriate WordPress escaping function. Proxied HTML documents (the enhanced-content response and the standalone <code>\/ai-terms<\/code> page) are passed through <code>wp_kses()<\/code> with a full-document allow-list, which is exposed via the new filter <code>llmafftm_allowed_full_html<\/code> so the list can be extended without modifying plugin files. The JSON-LD structured-data block uses <code>wp_json_encode()<\/code> inline with the <code>JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS|JSON_HEX_QUOT<\/code> flags so it is safe to inline inside a <code>&lt;script type=\"application\/ld+json\"&gt;<\/code> tag.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Replaced remaining raw <code>json_encode()<\/code> calls with <code>wp_json_encode()<\/code> (onboarding POST body and suspicious-event debug log) per the WordPress Coding Standards preference for the WP-safe JSON encoder.<\/li>\n<li>Replaced <code>urlencode()<\/code> in the enhanced-content URL builder with <code>rawurlencode()<\/code> so query-string values are encoded per RFC 3986, as recommended by the WordPress Plugin Review Team and <code>WordPress.PHP.DiscouragedPHPFunctions.urlencode_urlencode<\/code>.<\/li>\n<li>Verified publicly reachable Terms of Service (<code>https:\/\/llmaffiliate.com\/terms<\/code>) and Privacy Policy (<code>https:\/\/llmaffiliate.com\/privacy<\/code>) URLs referenced from the <code>== External services ==<\/code> section of this readme.<\/li>\n<\/ul>","raw_excerpt":"Detect LLM user agents, enforce Google parity, and serve enhanced content through a configurable content service.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/295007","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=295007"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/llmaffiliate01"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=295007"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=295007"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=295007"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=295007"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=295007"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=295007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}