{"id":339586,"date":"2026-07-16T09:34:48","date_gmt":"2026-07-16T09:34:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/focusweb-ai-visibility-llms-txt-schema-mcp-nlweb-ai-agent-analytics\/"},"modified":"2026-07-16T10:48:58","modified_gmt":"2026-07-16T10:48:58","slug":"focusweb-ai-visibility","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/focusweb-ai-visibility\/","author":14225303,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.8.4","stable_tag":"0.8.4","tested":"7.0.1","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"FocusWeb AI Visibility","header_author":"FocusWeb","header_description":"Make your site visible to AI search and ready for AI agents: dynamic llms.txt, structured data, a read-only agent endpoint (MCP-compatible), and analytics showing which AI bots visit your site.","assets_banners_color":"486784","last_updated":"2026-07-16 10:48:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.focusweb.co.il\/ai-visibility\/","header_author_uri":"https:\/\/focusweb.co.il","rating":0,"author_block_rating":0,"active_installs":0,"downloads":39,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"0.8.3":{"tag":"0.8.3","author":"upi","date":"2026-07-16 09:34:25"},"0.8.4":{"tag":"0.8.4","author":"upi","date":"2026-07-16 10:48:58"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3609937,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3609937,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3609937,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3609937,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.8.3","0.8.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3609937,"resolution":"1","location":"assets","locale":"","width":1280,"height":1330},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3609937,"resolution":"2","location":"assets","locale":"","width":1280,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3609937,"resolution":"3","location":"assets","locale":"","width":1280,"height":1180}},"screenshots":{"1":"Dashboard \u2014 daily AI agent activity chart, llms.txt reads by agent, most-fetched URLs and the questions agents ask.","2":"Schema Browser \u2014 inspect the JSON-LD of every page and post, with per-page mode indicators.","3":"Settings &amp; Status \u2014 schema force mode, Google Analytics integration with server-side sample event, live valid\/invalid status indicators (Analytics, LLMS access, Schema enforcement), and analytics diagnostics with an error-code log."}},"plugin_section":[],"plugin_tags":[2353,2591,244604,242115,271843],"plugin_category":[49],"plugin_contributors":[270683],"plugin_business_model":[],"class_list":["post-339586","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-geo","plugin_tags-llms-txt","plugin_tags-mcp","plugin_tags-nlweb","plugin_category-maps-and-location","plugin_contributors-upi","plugin_committers-upi"],"banners":{"banner":"https:\/\/ps.w.org\/focusweb-ai-visibility\/assets\/banner-772x250.png?rev=3609937","banner_2x":"https:\/\/ps.w.org\/focusweb-ai-visibility\/assets\/banner-1544x500.png?rev=3609937","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/focusweb-ai-visibility\/assets\/icon-128x128.png?rev=3609937","icon_2x":"https:\/\/ps.w.org\/focusweb-ai-visibility\/assets\/icon-256x256.png?rev=3609937","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/focusweb-ai-visibility\/assets\/screenshot-1.png?rev=3609937","caption":"Dashboard \u2014 daily AI agent activity chart, llms.txt reads by agent, most-fetched URLs and the questions agents ask."},{"src":"https:\/\/ps.w.org\/focusweb-ai-visibility\/assets\/screenshot-2.png?rev=3609937","caption":"Schema Browser \u2014 inspect the JSON-LD of every page and post, with per-page mode indicators."},{"src":"https:\/\/ps.w.org\/focusweb-ai-visibility\/assets\/screenshot-3.png?rev=3609937","caption":"Settings &amp; Status \u2014 schema force mode, Google Analytics integration with server-side sample event, live valid\/invalid status indicators (Analytics, LLMS access, Schema enforcement), and analytics diagnostics with an error-code log."}],"raw_content":"<!--section=description-->\n<p>68% of Google searches now end without a click. Your future visitors are AI assistants and agents \u2014 and most WordPress sites are invisible to them.<\/p>\n\n<p><strong>AI Visibility<\/strong> makes your site readable, quotable and usable by AI systems:<\/p>\n\n<ul>\n<li><strong>Dynamic llms.txt<\/strong> \u2014 an always-up-to-date, machine-readable map of your key pages and content, following the llms.txt convention adopted by Anthropic, Vercel and Cloudflare.<\/li>\n<li><strong>Baseline structured data (JSON-LD)<\/strong> \u2014 WebSite and Article schema, automatically deferred when Yoast, Rank Math or AIOSEO is active.<\/li>\n<li><strong>Agent endpoint (read-only)<\/strong> \u2014 a clean JSON API (<code>\/wp-json\/focusweb-ai-visibility\/v1\/ask<\/code>) that lets AI agents search your published content, plus registration with the official WordPress Abilities API so MCP clients can discover it.<\/li>\n<li><strong>AI agent analytics<\/strong> \u2014 see which AI bots (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and more) visit your site, which pages they fetch, how often llms.txt is read, and what questions agents ask \u2014 with a daily color-coded chart.<\/li>\n<li><strong>Per-page schema control<\/strong> \u2014 every post\/page shows its generated JSON-LD with an editable custom override, plus a site-wide force mode.<\/li>\n<li><strong>Google Analytics integration (optional, off by default)<\/strong> \u2014 fire an ai_referral event (source \/ medium \/ campaign) when visitors arrive from ChatGPT, Gemini, Perplexity, Claude and other AI chats. Uses your existing GA tag, or loads gtag.js with a Measurement ID you provide.<\/li>\n<\/ul>\n\n<p>Full RTL and Hebrew support.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to Google services only when the site administrator explicitly enables the Google Analytics integration (disabled by default):<\/p>\n\n<ul>\n<li><strong>gtag.js from googletagmanager.com<\/strong> \u2014 loaded on the front end only in \"manual\" mode, using the Measurement ID the administrator provides, to send ai_referral events to the site's own Google Analytics property.<\/li>\n<li><strong>GA4 Measurement Protocol (google-analytics.com\/mp\/collect)<\/strong> \u2014 used server-side only when the administrator clicks \"Fire sample event\", sending a single test event to the site's own GA4 datastream using the Measurement ID and API Secret the administrator provides.<\/li>\n<\/ul>\n\n<p>Data sent consists of the event name and its parameters (source, medium, campaign, page URL). No data is ever sent to the plugin author or any other third party. See Google's <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a> and <a href=\"https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/us\/\">Google Analytics Terms of Service<\/a>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20my%20seo%20plugin%3F\"><h3>Does this replace my SEO plugin?<\/h3><\/dt>\n<dd><p>No. It complements it. AI Visibility skips schema output automatically when a major SEO plugin is active, and adds the AI-specific layers no SEO plugin covers.<\/p><\/dd>\n<dt id=\"does%20the%20agent%20endpoint%20expose%20private%20content%3F\"><h3>Does the agent endpoint expose private content?<\/h3><\/dt>\n<dd><p>No. Only published, public content is ever returned. All endpoints are read-only in the free version.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20configure%20anything%3F\"><h3>Do I need to configure anything?<\/h3><\/dt>\n<dd><p>No. Activate the plugin and llms.txt, schema, the agent endpoint and bot logging work immediately.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.8.4<\/h4>\n\n<ul>\n<li><strong>Important upgrade fix<\/strong>: sites that upgraded from a pre-0.8.0 build lost their settings, per-post schema overrides, and bot-visit history, because the WordPress.org-required rename of every option\/meta-key\/table name from the <code>aiv<\/code> prefix to <code>focuaivi<\/code> had no migration path. This release adds a one-time automatic migration that recovers settings, custom schema overrides, and analytics history from the old names on upgrade. If you already lost data on 0.8.0\u20130.8.3, updating to this version will restore it as long as the old data hasn't been deleted from your database.<\/li>\n<\/ul>\n\n<h4>0.8.3<\/h4>\n\n<ul>\n<li>Plugin Check: prefixed the one remaining non-prefixed global variable (<code>$table<\/code> in uninstall.php) as <code>$focuaivi_table<\/code>.<\/li>\n<\/ul>\n\n<h4>0.8.2<\/h4>\n\n<ul>\n<li>Renamed every function, class, define, filter\/action, option, transient, meta key, nonce, REST namespace and script handle from the 3-character <code>aiv<\/code>\/<code>AIV<\/code> prefix to <code>focuaivi<\/code>\/<code>FOCUAIVI<\/code> (WordPress.org requires 4+ characters to avoid collisions across the ~100,000 hosted plugins). The REST namespace changed from <code>aiv\/v1<\/code> to <code>focusweb-ai-visibility\/v1<\/code>.<\/li>\n<li>Fixed the Plugin URI (<code>https:\/\/focusweb.co.il\/ai-visibility<\/code>), which went through a broken multi-hop redirect (https\u2192http\u2192https) that some crawlers refuse to follow; now points directly at the canonical <code>https:\/\/www.focusweb.co.il\/ai-visibility\/<\/code>.<\/li>\n<\/ul>\n\n<h4>0.8.1<\/h4>\n\n<ul>\n<li>Plugin Check: fixed two MissingTranslatorsComment errors in the Settings status checks \u2014 the <code>translators:<\/code> comment must sit immediately above the line with the <code>__()<\/code>\/<code>sprintf()<\/code> call, not just earlier in the same statement.<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Security hardening from WordPress.org plugin review: escaped <code>&lt;\/script&gt;<\/code> breakout risk in JSON-LD output, validated\/canonicalized custom schema JSON before it's ever stored (rather than saving the raw POST string), moved the AI-referral\/gtag front-end script from an inline <code>&lt;script&gt;<\/code> tag to a properly enqueued file (<code>wp_enqueue_script<\/code> + <code>wp_localize_script<\/code>), and added a nonce check to the public referral-logging REST route so it can't be trivially forged cross-origin.<\/li>\n<\/ul>\n\n<h4>0.7.3<\/h4>\n\n<ul>\n<li>Dashboard charts: added light gridlines and a max-value reference in the corner for scale, bolded the daily total label (previously blurred to near-illegible at small size), rounded the bars, switched to the system font stack, and added a subtle baseline tick for zero-activity days so the axis isn't just blank space.<\/li>\n<\/ul>\n\n<h4>0.7.2<\/h4>\n\n<ul>\n<li>llms.txt: page entries now include a body-content synopsis alongside the SEO meta description, not just a single clipped sentence \u2014 much more substance for brochure-style sites with no blog. Also fixed HTML entities (e.g. <code>&amp;hellip;<\/code>) leaking into the output unescaped.<\/li>\n<\/ul>\n\n<h4>0.7.1<\/h4>\n\n<ul>\n<li>llms.txt: pages now get a one-line description too (previously only blog posts did), so brochure-style sites without a blog no longer generate a bare list of titles and links. Prefers the page's own Yoast\/Rank Math\/AIOSEO meta description when set, falling back to its excerpt.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Schema Browser: added a Validate button per row linking to validator.schema.org with the live page URL pre-filled, and inline Edit\/Save (mode + custom JSON) directly on the page, sharing validation with the per-post metabox.<\/li>\n<li>Settings page renamed to \"Settings &amp; Status\", with a new Status section showing live valid\/invalid indicators for Analytics, LLMS access, and Schema enforcement (including a live llms.txt availability + well-formedness check).<\/li>\n<li>Diagnostics: self-test failures\/warnings now include a machine-readable error code and technical detail (DB error, HTTP status, cache header), plus a rolling log of the last 20 tests instead of just the most recent one.<\/li>\n<\/ul>\n\n<h4>0.6.3<\/h4>\n\n<ul>\n<li>Renamed to \"FocusWeb AI Visibility\" for a clean directory slug; text domain updated to focusweb-ai-visibility.<\/li>\n<\/ul>\n\n<h4>0.6.2<\/h4>\n\n<ul>\n<li>Plugin Check: removed load_plugin_textdomain (wordpress.org language packs load automatically); documented direct queries to the plugin's own analytics table.<\/li>\n<\/ul>\n\n<h4>0.6.1<\/h4>\n\n<ul>\n<li>Plugin Check compliance: escaped gtag output, guarded Abilities API call for WP &lt; 6.9, esc_sql on table names, prepared IN clauses, Tested up to 7.0.<\/li>\n<li>readme: External Services disclosure and Screenshots sections.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Server-side sample event: fires ai_referral directly to the GA4 datastream via the Measurement Protocol (Measurement ID + API Secret setting).<\/li>\n<li>Last sample-event result and timestamp snapshot in Settings.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>GA integration: last 10 fired ai_referral events and 7-day total shown in Settings (server-side mirror beacon).<\/li>\n<li>Diagnostics: persistent snapshot of the last self-test result and time.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Schema author\/publisher is now always the site brand (Organization) \u2014 WordPress usernames are never exposed. New focuaivi_schema_brand filter.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Admin split into Dashboard \/ Schema Browser \/ Settings submenus.<\/li>\n<li>llms.txt reads chart by agent per day; explanatory dashboard text.<\/li>\n<li>Schema Browser: inspect the JSON-LD of every page, with mode indicators.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Daily analytics chart (color per agent), llms.txt read counter, agent questions log.<\/li>\n<li>Optional Google Analytics ai_referral events with source\/medium\/UTM tagging.<\/li>\n<li>Per-page schema editor with custom override; site-wide force mode.<\/li>\n<li>Analytics self-test; self-healing DB upgrades.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: dynamic llms.txt, baseline JSON-LD, read-only agent endpoint with Abilities API registration, AI bot analytics (7-day window), admin dashboard.<\/li>\n<\/ul>","raw_excerpt":"Make your site visible to AI search (ChatGPT, Gemini, Perplexity) and ready for AI agents. llms.txt, schema, agent endpoint &amp; AI bot analytics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/339586","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=339586"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/upi"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=339586"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=339586"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=339586"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=339586"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=339586"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=339586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}