{"id":345300,"date":"2026-07-30T05:53:18","date_gmt":"2026-07-30T05:53:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sanityai-visibility-toolkit\/"},"modified":"2026-07-30T05:53:09","modified_gmt":"2026-07-30T05:53:09","slug":"sanityai-visibility-toolkit","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sanityai-visibility-toolkit\/","author":23538142,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"SanityAI Visibility Toolkit","header_author":"SanityAI","header_description":"See your AI traffic, control AI crawlers, get cited by AI. Generates llms.txt, manages AI bot access via robots.txt, and tracks ChatGPT, Perplexity, Gemini and Claude referrals in GA4.","assets_banners_color":"","last_updated":"2026-07-30 05:53:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/sanity.ai\/lab.html","header_author_uri":"https:\/\/sanity.ai","rating":0,"author_block_rating":0,"active_installs":0,"downloads":25,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"wasimuc","date":"2026-07-30 05:53:09"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":3628001,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[262246],"plugin_tags":[2353,232,226124,6499,186],"plugin_category":[36,55],"plugin_contributors":[273755],"plugin_business_model":[],"class_list":["post-345300","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-ai","plugin_tags-analytics","plugin_tags-llm","plugin_tags-robots","plugin_tags-seo","plugin_category-analytics","plugin_category-seo-and-marketing","plugin_contributors-wasimuc","plugin_committers-wasimuc"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/sanityai-visibility-toolkit\/assets\/icon.svg?rev=3628001","icon":"https:\/\/ps.w.org\/sanityai-visibility-toolkit\/assets\/icon.svg?rev=3628001","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>AI assistants like ChatGPT, Perplexity, Gemini and Claude are becoming a real traffic source, and a real audience for your content. Unlike single-purpose llms.txt generators, SanityAI Visibility Toolkit covers the full AI channel in one lightweight plugin: measurement (referral attribution across six analytics stacks and a real crawler activity log), control (per-bot robots.txt management, including physical files), and visibility (multilingual llms.txt):<\/p>\n\n<p><strong>1. llms.txt generation<\/strong><\/p>\n\n<p>Automatically serves a machine-readable guide to your site at <code>\/llms.txt<\/code>, following the llms.txt convention. AI assistants can use it to understand your site structure and cite your best content. Choose which content types to include, how many items, whether to append descriptions, and which posts to exclude. Multilingual sites are fully supported: with WPML or Polylang active, every language gets its own sections. Cached and regenerated when content changes.<\/p>\n\n<p><strong>2. AI crawler control<\/strong><\/p>\n\n<p>Decide, bot by bot, which AI crawlers may access your site, with a plain-language explanation of what each block actually costs you. The plugin distinguishes:<\/p>\n\n<ul>\n<li><strong>Training crawlers<\/strong> (GPTBot, ClaudeBot, Google-Extended, CCBot, Bytespider, Meta-ExternalAgent, Applebot-Extended): blocking opts your content out of model training.<\/li>\n<li><strong>Search crawlers<\/strong> (OAI-SearchBot, PerplexityBot): blocking removes your site from that engine's AI answers and citations. Know the trade-off before you block.<\/li>\n<li><strong>On-demand fetchers<\/strong> (ChatGPT-User): fetch pages when a user shares your link with an AI.<\/li>\n<\/ul>\n\n<p>Rules are added to WordPress's robots.txt. Nothing is blocked by default.<\/p>\n\n<p><strong>3. AI referral attribution<\/strong><\/p>\n\n<p>Detects visitors arriving from ChatGPT, Perplexity, Gemini, Claude, Copilot, Grok, DeepSeek, Meta AI, Mistral and more, using both the referrer and utm_source\/ref parameters (AI platforms increasingly strip referrers, so UTM detection matters). Fires an <code>ai_referral<\/code> event with an <code>ai_source<\/code> parameter into your existing GA4 (gtag) or Google Tag Manager (dataLayer) setup, once per session.<\/p>\n\n<p>Register <code>ai_source<\/code> as a GA4 custom dimension and you can segment any report by AI platform, build AI-traffic audiences, and see whether AI-referred visitors convert differently.<\/p>\n\n<p><strong>4. AI crawler activity log<\/strong><\/p>\n\n<p>See which AI crawlers actually visit your site: a 30-day count of real GPTBot, ClaudeBot, PerplexityBot (and more) visits, shown on your dashboard and settings screen. Identification is by user agent, so treat numbers as directional.<\/p>\n\n<p><strong>Plays well with your stack<\/strong><\/p>\n\n<p>The plugin detects your environment and tells you the truth about it instead of showing settings that silently do nothing:<\/p>\n\n<ul>\n<li><strong>Physical robots.txt<\/strong> (created by hosts or SEO plugin file editors): one click writes your rules into the file as a clearly-marked managed block, kept in sync on every save and removed on uninstall.<\/li>\n<li><strong>SEO plugins<\/strong> (Yoast, Rank Math, AIOSEO, SEOPress): posts marked noindex are excluded from llms.txt automatically, SEO meta descriptions are used for entries, and llms.txt\/robots.txt feature overlaps are flagged.<\/li>\n<li><strong>Analytics<\/strong>: works with gtag, Google Tag Manager, MonsterInsights, Matomo, Plausible and Fathom automatically, with a retry window for delayed-loading analytics.<\/li>\n<li><strong>WooCommerce<\/strong>: cart\/checkout\/account pages are excluded from llms.txt, and product entries include prices.<\/li>\n<li><strong>Page builders<\/strong>: builder-generated shortcode content never produces garbage descriptions.<\/li>\n<li><strong>Caches<\/strong>: WP Rocket, LiteSpeed, W3 Total Cache, WP Super Cache and SiteGround Optimizer are purged when settings change.<\/li>\n<li><strong>Site Health<\/strong>: two checks confirm llms.txt is reachable and crawler rules actually apply.<\/li>\n<li>Per-post \"Exclude from llms.txt\" checkbox in the editor, WP-CLI commands (<code>wp avt status<\/code>, <code>wp avt regenerate<\/code>), and a REST endpoint (<code>\/wp-json\/sanivt\/v1\/sources<\/code>) for headless front ends.<\/li>\n<\/ul>\n\n<p><strong>Privacy<\/strong><\/p>\n\n<p>This plugin sends no data to SanityAI or any third party. Attribution events go only to the analytics tools already installed on your site. No external requests are made.<\/p>\n\n<p>Built by <a href=\"https:\/\/sanity.ai\">SanityAI<\/a>. The attribution logic is kept in sync with our free \"AI Traffic Source\" template in the Google Tag Manager Community Template Gallery, so WordPress-side and GTM-side classification always agree.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to Settings \u2192 AI Visibility.<\/li>\n<li>llms.txt and attribution are enabled by default; review the crawler list and block any bots you want to opt out of.<\/li>\n<li>Recommended: in GA4, go to Admin \u2192 Custom definitions and create an event-scoped custom dimension named \"AI Source\" with parameter <code>ai_source<\/code>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20blocking%20gptbot%20remove%20my%20site%20from%20chatgpt%3F\"><h3>Does blocking GPTBot remove my site from ChatGPT?<\/h3><\/dt>\n<dd><p>No. GPTBot collects training data. ChatGPT search visibility is governed by OAI-SearchBot, listed separately. The settings screen explains the trade-off for every bot.<\/p><\/dd>\n<dt id=\"my%20robots.txt%20settings%20have%20no%20effect\"><h3>My robots.txt settings have no effect<\/h3><\/dt>\n<dd><p>If a physical robots.txt file exists in your site root, WordPress (and this plugin) cannot modify it. The settings screen warns you when this is the case. Remove the file or add the rules to it manually.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20slow%20my%20site%20down%3F\"><h3>Does this plugin slow my site down?<\/h3><\/dt>\n<dd><p>No. llms.txt output is cached, robots.txt rules are a tiny filter, and the attribution script is a small deferred file with no dependencies.<\/p><\/dd>\n<dt id=\"where%20does%20the%20tracking%20data%20go%3F\"><h3>Where does the tracking data go?<\/h3><\/dt>\n<dd><p>Only into your own GA4 property or GTM dataLayer. The plugin makes no external requests and sends nothing to us.<\/p><\/dd>\n<dt id=\"does%20llms.txt%20include%20all%20my%20languages%3F\"><h3>Does llms.txt include all my languages?<\/h3><\/dt>\n<dd><p>Yes, any languages. With WPML or Polylang active, the plugin loops every active language and lists each language's content under its own headings, e.g. \"Posts (English)\" and \"Posts (\u0627\u0644\u0639\u0631\u0628\u064a\u0629)\". qTranslate language markers are resolved automatically. TranslatePress and Weglot translate at render time, so those sites list default-language content (a notice explains this). Very large multilingual sites are protected by a size cap (filterable via <code>sanivt_llms_txt_max_bytes<\/code>) so the file stays useful to AI assistants.<\/p><\/dd>\n<dt id=\"i%20use%20yoast%20%2F%20rank%20math%20%2F%20another%20seo%20plugin.%20will%20they%20conflict%3F\"><h3>I use Yoast \/ Rank Math \/ another SEO plugin. Will they conflict?<\/h3><\/dt>\n<dd><p>They coexist. The plugin respects noindex flags from Yoast, Rank Math and SEOPress (noindexed posts never appear in llms.txt), reuses their meta descriptions for entries, and appends robots.txt rules late enough that SEO plugins which rebuild robots.txt output don't discard them. If Yoast's own llms.txt feature is enabled, a warning tells you to keep exactly one generator active.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20gtm%20instead%20of%20gtag%3F\"><h3>Does it work with GTM instead of gtag?<\/h3><\/dt>\n<dd><p>Yes. Adapters are tried in order: gtag, MonsterInsights, GTM dataLayer, Matomo, Plausible, Fathom, with a 10-second retry window for analytics that load late. You can also use our \"AI Traffic Source\" GTM community template for a pure-GTM setup.<\/p><\/dd>\n<dt id=\"my%20robots.txt%20is%20a%20physical%20file%20%28yoast%20file%20editor%2C%20host%20default%29.%20now%20what%3F\"><h3>My robots.txt is a physical file (Yoast file editor, host default). Now what?<\/h3><\/dt>\n<dd><p>Use the \"Write rules to robots.txt file\" button on the settings screen. Your rules are written as a clearly-marked block, kept in sync automatically on every settings save, and removed cleanly when you uninstall the plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: llms.txt generation (WPML\/Polylang multilingual support, noindex respect, SEO-description excerpts, WooCommerce awareness, per-post exclusion), AI crawler control for 10 bots (virtual and physical robots.txt), AI referral attribution for 12 platforms across 6 analytics stacks, AI crawler activity log, Site Health checks, WP-CLI commands, headless REST endpoint.<\/li>\n<\/ul>","raw_excerpt":"See your AI traffic, control AI crawlers, get cited by AI. llms.txt generation, AI bot control, and ChatGPT\/Perplexity\/Claude referral tracking.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/345300","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=345300"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wasimuc"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=345300"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=345300"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=345300"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=345300"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=345300"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=345300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}