VigIA — Full changelog

For each release, see the entries below. The latest version is always at the top.
The current release notes also live in readme.txt under "== Changelog ==".

= 2.0.0 =
* NEW: Markdown for Agents now serves taxonomy archive pages. Categories, tags, WooCommerce product categories and any custom public taxonomy can be exposed as `.md` endpoints with their own YAML frontmatter (title, description, url, type: term, taxonomy, parent, count, image, lang), term description rendered through the_content filter, list of direct child terms for hierarchical taxonomies and an excerpt of the latest posts/products assigned to the term. Disabled by default — opt in per taxonomy in VigIA > Extras > Markdown for Agents
* NEW: WooCommerce product `.md` endpoints now include schema-like fields in the YAML frontmatter (sku, product_type, price, regular_price, sale_price, currency, availability, stock_quantity, rating, rating_count, review_count). The product listing inside a `product_cat` term archive also gets an inline summary with formatted price, "was X" when on sale, star rating and an out-of-stock flag
* NEW: Term-specific URL like `/category/electronics.md` and `Accept: text/markdown` content negotiation on taxonomy archive pages. `<link rel="alternate" type="text/markdown">` HTML tag and Link HTTP header are added on enabled term archives so AI agents discover the markdown version
* NEW: Advanced filters on the recent activity table — multi-select crawler picker, content type filter (post, page, product, category archive, tag archive, date/author archive, feed, sitemap, REST API, file, other), HTTP status filter (200, 301, 304, 403, 404, 410, other), and a configurable date range (from/to inputs). The "Export filtered CSV" button downloads exactly what the filters return and an active-filter counter signals when any filter is in effect
* NEW: Two new visible columns on the recent activity table — Content type and HTTP status. HTTP cells are color-coded (2xx green, 3xx blue, 4xx/5xx red) for quick scanning
* NEW: Content type detection now distinguishes four extra buckets that used to fall under "Other": "Home" (the / path), "404 Not found" (any hit with http_status 404, regardless of path), "Admin / login attempt" (/wp-admin and /wp-login.php — useful to spot bots probing the admin) and "WordPress system" (admin-ajax.php, xmlrpc.php, wp-cron.php, wp-comments-post.php). DB version bumped to 1.2.0; the backfill cron revisits rows previously marked "other" so they end up in the right bucket without manual intervention
* NEW: Server-side pagination on the recent activity table. The page size stays at 20 but the count, navigation and CSV export now operate over the full database instead of the last 500 rows in memory — works the same on sites with millions of hits. Four-button pager (first, previous, next, last) mirrors the rest of the dashboard tables. A small client-side cache keeps the last 3 pages warm so revisiting them does not hit the server again
* NEW: Public `VigIA_Database::query_visits( $args )` for filtered/paginated queries and `VigIA_Database::detect_content_type( $path )` plus `get_content_type_options()` helpers. The `/vigia/v1/recent` and `/vigia/v1/export` endpoints accept new query params: `crawlers[]`, `category`, `content_type`, `http_status`, `date_from`, `date_to`, `page`, `per_page`. The legacy contract — no parameters returns the latest 500 visits as a flat array — is preserved
* NEW: Filter `vigia_markdown_term_eligible` (mirror of `vigia_markdown_post_eligible`) to programmatically allow or deny term markdown output. Filter `vigia_markdown_term_posts_limit` to tune the per-term post listing size (default 20)
* NEW: Every CSV export (activity, filtered activity, timeline summary) now opens with a metadata banner — site name, site URL, export type, date range, export timestamp, generator string and (when filters are active) a summary of the applied filters. The activity export uses the `vigia-filtered-YYYY-MM-DD.csv` filename when any filter is in effect, and `vigia-YYYY-MM-DD.csv` otherwise
* DB: New `content_type` column on `wp_vigia_visits` (DB version bumped to 1.1.0). Populated at insert time via `detect_content_type( $path, $http_status )` which combines structural patterns (feed/sitemap/REST/file/category/tag/archive/admin/wp-system) with a `url_to_postid()` lookup so post / page / product / CPT visits land in the right bucket. Pre-2.0.0 rows are backfilled hourly by the `vigia_backfill_content_type` cron in batches of 500 until the queue is empty; when the user filters by content_type the next 2000 unprocessed rows in the visible range are reclassified synchronously
* Changed: Admin menu order restored. Analytics is the default landing page again when clicking the VigIA top-level menu, with AI Visibility in second position. The plugin row description on the Plugins screen is unchanged
* Changed: Per-term noindex settings from Yoast SEO, Rank Math, All in One SEO and SEOPress are honored when "Respect LLMs.txt exclusion filters" is enabled. Single-post noindex detection also recognises Native SEO NoIndexer (AyudaWP) via `Noindexer_Frontend::is_noindex()`
* Changed: Activity-table filter row no longer includes the URL and IP text inputs (they were not part of the upgraded server-side workflow). Filters now applied: Crawlers, Category, Content type, HTTP status, Date range
* i18n: All new strings (filter labels, content-type options, badge texts, multiselect placeholders, server-side pager range, CSV banner labels) ship translation-ready. CSV export headers (Crawler, Category, Page, IP Address, HTTP Status, Content type, Date) all wrapped in `__()`
* Dev: Markdown response writer refactored into a shared `send_markdown_response()` private method so post and term responses share the blocker check, analytics tracking and header logic

= 1.12.1 =
* Fix: Fatal error "Cannot redeclare WP\MCP\constants()" when both VigIA and the standalone `mcp-adapter` plugin are active. VigIA now skips its bundled adapter bootstrap if the standalone copy has already been loaded

= 1.12.0 =
* NEW: One-click MCP setup. The MCP Adapter and php-mcp-schema dependencies now ship bundled inside the plugin, so the server is active right after install — no `composer install` and no terminal required
* NEW: "Quick connect" panel in VigIA > Extras > MCP that generates a dedicated `VigIA MCP` Application Password and renders ready-to-paste connection commands for Claude Code, Cursor, Claude Desktop and a generic block (URL + Authorization header) that fits any other MCP client (Codex CLI, Continue, Cline, Antigravity, Zed, etc.)
* NEW: Safe JSON merger for Cursor and Claude Desktop. Paste your current config file, the plugin parses it, splices VigIA into `mcpServers` preserving everything else (preferences, other servers) and returns a valid file ready to save back, with no manual comma juggling
* NEW: Detection and revocation flow for an existing `VigIA MCP` Application Password directly from the MCP tab
* NEW: "What can I ask my AI now?" section in the MCP tab with example prompts so users immediately see what the connection unlocks
* NEW: Read-only mode is now a one-click toggle in the MCP tab (option `vigia_mcp_read_only`). The `vigia_can_write_via_abilities` filter still works for developers who prefer to force it from code and takes precedence over the toggle
* Changed: Claude Desktop snippet now launches `mcp-remote` via `npx` as a stdio-to-HTTP bridge (the only way Claude Desktop can currently talk to a remote HTTP MCP server). Requires Node.js installed on the machine. Claude Code and Cursor speak HTTP MCP natively and need no bridge
* Changed: Manual setup snippets moved into a collapsed "Manual setup (advanced)" block to avoid competing with Quick connect; inactive-server message now references a missing `vendor/` directory instead of a missing Composer install
* Fix: `vigia/get-blocked-items`, `vigia/get-top-pages` and `vigia/block-crawler` abilities were calling non-existent methods and returned a 500 when invoked. They now resolve correctly and the output surfaces fields that were being discarded (`name` for blocked items, `crawler_count` for top pages)

= 1.11.0 =
* NEW: Native MCP server that exposes VigIA abilities at /wp-json/vigia/v1/mcp through the official WordPress MCP Adapter, ready to plug into Claude Code, Cursor or Claude Desktop
* NEW: MCP tab in VigIA > Extras with adapter status, endpoint URL, Application Password setup, connection snippets for Claude Code, Cursor and Claude Desktop, list of exposed abilities and the read-only mode snippet
* NEW: Filter `vigia_can_write_via_abilities` to disable mutating abilities (block, unblock, robots changes) while keeping read-only abilities working - useful when granting MCP access with Application Passwords
* Fix: `vigia/block-crawler` now validates IP addresses with FILTER_VALIDATE_IP, matching the behavior of the AJAX blocking handler
* Performance: results of `vigia/get-crawler-stats`, `vigia/get-top-crawlers` and `vigia/get-top-pages` are now cached for 5 minutes via transients to keep MCP clients from hammering the database
* Changed: Version history moved to a dedicated changelog.txt file served from the plugin's public SVN, keeping readme.txt focused on the current release
* Dev: introduced composer.json declaring the optional `wordpress/mcp-adapter` dependency

= 1.10.2 =
* Fix: Removed stray whitespace before PHP opening tag in class-visibility-analyzer.php that caused "headers already sent" warnings and could break other plugins functionality

= 1.10.1 =
* Fixed: AI Visibility Analyzer now detects sitemaps.xml (plural) in addition to sitemap.xml, sitemap_index.xml and wp-sitemap.xml

= 1.10.0 =
* Added: NoIndexer plugin integration for llms.txt generator, Markdown endpoints, and AI Visibility Analyzer
* Added: Posts marked as noindex by NoIndexer are now automatically excluded from llms.txt and .md endpoints
* Added: NoIndexer detection displayed in LLMs.txt Generator settings alongside SEO plugin detection
* Added: NoIndexer detection and recommendation in AI Visibility Analyzer
* Added: NoIndexer to promotional banner catalog
* Updated: Periscope plugin renamed from Periscopio in promotional banner catalog

= 1.9.5 =
* Tested up to WordPress 7.0
* Updated: Promotional banner catalog with latest plugins and services

= 1.9.4 =
* Added: Google-Agent, PetalBot, and Applebot crawlers to built-in detection list
* Improved: Table headers now display "URL" instead of "Page" for clarity
* Improved: Better contextual links in Extras page (FAQ reference for blocking, updated Markdown for Agents documentation)

= 1.9.3 =
* Improved: AI Visibility Analyzer now distinguishes between perfect (Excellent, green) and good (Good, blue) scores for clearer visual feedback at a glance (Props to @fpuenteonline)

= 1.9.2 =
* Fix - Robots.txt: fixed VigIA rules merging with existing content from other plugins (e.g., Sitemap lines) due to missing line breaks

= 1.9.1 =
* Improved: Bottom pagination controls added to recent activity table for easier navigation on long lists
* Fixed: Blocking a crawler from recent activity no longer resets pagination to page 1

= 1.9.0 =
* NEW: Client-side paginated navigation replaces "Load more" buttons across all tables
* NEW: Reusable VigiaPaginator component with first/prev/next/last arrows and range indicator (e.g., 1–10 of 85)
* NEW: Analytics page tables: Top crawlers (10/page), Most crawled pages (10/page), Recent activity (20/page), Custom crawlers (5/page)
* NEW: Extras page tables: Disallow rules, Compliance check, Blocked User-Agents, Blocked IPs (5/page each)
* NEW: Arrows only shown when multiple pages exist, range always visible
* Improved: Remove/Unblock actions in Extras page now update inline without page reload (smooth fade animation)
* Improved: Add Disallow rule in Extras page now inserts row and updates robots.txt preview without reload
* Improved: Block via PHP from compliance panel updates button state without reload
* Improved: Pagination automatically recalculates when rows are added or removed
* Improved: Top crawlers and top pages now load all results in a single request (client-side pagination)

= 1.8.1 =
* NEW: Clickable URLs in the Recent Activity table (opens in new tab, matching Top Pages behavior)
* NEW: Neutral "info" status icon for checks that are not applicable (e.g., no images on page, share buttons on homepage)
* NEW: Periscopio plugin added to the promotional banner catalog
* Improved: Visibility Score banner redesigned with outlined style - subtle tinted backgrounds and colored text instead of solid color blocks
* Improved: WordPress 7.0 compatibility for all button styles (dashicons alignment in Generate, Export CSV, Clear, Home, and Re-analyze buttons)
* Improved: WordPress 7.0 compatibility for promotional banner buttons (min-height override)
* Improved: AI Share & Summarize recommendation now appears on homepage analysis when plugin is not installed or active
* Improved: Image alt text check shows neutral "info" status when no images are found instead of a misleading green pass
* Improved: AI share buttons check shows neutral "info" status on homepage instead of a misleading green pass
* Fixed: Comparison chart not updating when changing period with comparison enabled
* Fixed: Image alt text parser incorrectly matched `data-wp-bind--alt` (WordPress Interactivity API) as real alt attributes
* Fixed: Image alt text parser now correctly counts `alt=""` (empty alt for decorative images) as valid
* Fixed: Removed dead CSS rule for export button icon (vertical-align inside flex container)

= 1.8.0 =
* NEW: AI Visibility Analyzer - 100-point scoring system with letter grades (A+ to F)
* NEW: 20 individual checks across 5 weighted categories
* NEW: Access & AI Discovery checks (37 pts): robots.txt, AI bot directives, Content Signals, llms.txt, llms-full.txt, sitemap, RSS feed, noai meta
* NEW: Structured Data & Semantic Context checks (25 pts): JSON-LD types, Open Graph, Twitter Cards, meta description, canonical URL, language
* NEW: Content Structure & Readability checks (20 pts): H1, heading hierarchy, semantic HTML5, image alt text, content/HTML ratio, JS independence
* NEW: AI Interaction & Distribution checks (8 pts): markdown delivery, AI share buttons
* NEW: Access Performance checks (10 pts): TTFB measurement with tiered scoring
* NEW: Smart recommendations with 4 tiers: VigIA features, AyudaWP plugins, inactive plugins, third-party SEO
* NEW: URL autocomplete selector to analyze any page on your site (posts, pages, custom post types)
* NEW: Results cached for 24 hours with manual re-analyze option
* NEW: AI Score link in plugin action links (plugins page)
* NEW: Dedicated VigIA > AI Score admin page

= 1.7.0 =
* NEW: JSON-LD structured data generator with Site Identity and AI Discovery sections
* NEW: Site Identity - WebSite and Organization/Person schema with sameAs social profiles
* NEW: AI Discovery - ReadAction pointers to llms.txt, llms-full.txt, and Markdown for Agents endpoints
* NEW: SearchAction support for Google sitelinks search box
* NEW: Media library integration for JSON-LD logo selection
* NEW: JSON-LD conflict detection warns when SEO plugins already generate WebSite/Organization schema
* NEW: JSON-LD output page selector (front page or any published page)
* NEW: Live JSON-LD preview with real-time updates
* NEW: JSON-LD automatically detects available LLMs.txt and Markdown for Agents features
* NEW: JSON-LD tab in Extras page

= 1.6.1 =
* Improved: New plugin suggestion added.

= 1.6.0 =
* NEW: AI Share & Summarize integration - see share button clicks per page in the Most Crawled Pages table
* NEW: Clickable URLs in the Most Crawled Pages table (opens in new tab)
* NEW: Cross-plugin promotion tip for AI Share & Summarize (dismissible)
* Improved: Most Crawled Pages table dynamically shows Clicks column when AI Share & Summarize is active
* Fixed: Action button icons and dropdown arrow now properly centered vertically

= 1.5.0 =
* NEW: Markdown for Agents - serve individual posts as optimized markdown for AI agents
* NEW: Dedicated .md URL endpoints for each post and page
* NEW: Accept: text/markdown content negotiation support
* NEW: Discoverability via link rel="alternate" HTML tags and Link HTTP headers
* NEW: YAML frontmatter with full post metadata (title, date, author, categories, tags, image, language)
* NEW: X-Markdown-Tokens response header
* NEW: Respects LLMs.txt exclusion filters (noindex, URL patterns, manual excludes)
* NEW: Blocked crawlers receive 403 on markdown endpoints too
* NEW: Analytics integration tracks markdown requests from known crawlers
* NEW: Configurable post type selection for markdown endpoints
* NEW: New "Markdown for Agents" tab in Extras page
* Follows the Cloudflare Markdown for Agents standard

= 1.4.1 =
* Fixed: Abilities API category registration error on WordPress 6.9+
* Improved: Abilities API initialization method for better compatibility
* Improved: Dynamic promotional banners with random plugin and service rotation

= 1.4.0 =
* NEW: WordPress Abilities API integration (requires WordPress 6.9+)
* NEW: 9 abilities for AI agents and automation tools
* NEW: Analytics abilities: get-crawler-stats, get-top-crawlers, get-top-pages
* NEW: Blocking abilities: get-blocked-items, block-crawler, unblock-crawler
* NEW: Robots.txt abilities: get-robots-rules, add-robots-disallow, remove-robots-rule
* NEW: Custom ability category "AI Crawler Analytics" for better discoverability
* Improved: Graceful degradation for WordPress versions below 6.9

= 1.3.0 =
* NEW: Period indicator in dynamic section titles (timeline, categories, crawlers, pages)
* NEW: "Load more" pagination in Top crawlers and Top pages tables (10 items per load, up to 100)
* NEW: Showing counter display (e.g. "Showing 10 of 47")
* Improved: Plugin recommendation boxes now available on Extras page
* Fixed: Shortcodes from page builders and common plugins now display as clean text in llms.txt files

= 1.2.9 =
* Fixed: robots.txt Disallow rules now work correctly with physical robots.txt files (Yoast SEO and other plugins that create physical files)
* Improved: AI crawler rules are now synced to physical robots.txt automatically when adding or removing rules

= 1.2.8 =
* Fixed: UTF-8 encoding issues in llms.txt and llms-full.txt files (special characters like accents now display correctly in all browsers)

= 1.2.7 =
* Fixed: "Learn more" link is now translatable

= 1.2.6 =
* Fixed: LLMs.txt Generator now correctly adds robots.txt references when saving and generating
* Improved: Simplified LLMs.txt Generator to single "Save and generate" button for clearer workflow
* Updated: "Learn more" link now points to AyudaWP documentation

= 1.2.5 =
* Fixed: Responsive layout issues with charts and content boxes overflowing on smaller screens
* Improved: Better breakpoint handling for stats grid and charts adaptation

= 1.2.4 =
* Fixed: Renamed duplicate "VigIA" submenu to "Analytics" for better navigation clarity

= 1.2.3 =
* Fixed: Activation notice now properly dismisses when closed on the plugins page

= 1.2.2 =
* Improved: Added PHPCS ignore comments for intentional direct database queries (cache bypass)
* Improved: Added translator comments for all placeholder strings in LLMs generator

= 1.2.1 =
* Fix: LLMs.txt generator now correctly handles taxonomy filters for each post type
* Fix: Taxonomy filters (categories, tags) no longer incorrectly exclude pages or other post types
* Fix: Resolved object cache conflicts on hosts with Memcached/Redis (SiteGround, etc.)
* Fix: Settings now persist correctly after saving and regenerating
* Fix: Robots.txt references only added when llms files actually exist
* Fix: Robots.txt integration reads fresh data bypassing object cache
* Improved: Added "Save settings" button to save options without generating files
* Improved: Direct database queries for settings to avoid cache inconsistencies
* Improved: Better boolean normalization for checkbox values

= 1.2.0 =
* NEW: Redesigned LLMs.txt generator with improved content selection
* NEW: Select content by post type (posts, pages, custom post types)
* NEW: Filter content by taxonomies (categories, tags, custom taxonomies)
* NEW: Manual include with AJAX-powered search
* NEW: Manual exclude with AJAX-powered search
* NEW: Exclude content by URL patterns with wildcard support
* NEW: SEO plugin integration - auto-exclude noindex content
* NEW: Supported SEO plugins: Yoast, Rank Math, AIOSEO, SEOPress, The SEO Framework
* NEW: Auto-regeneration options (daily, weekly, monthly)
* NEW: Add llms.txt and llms-full.txt references to robots.txt
* Improved: Scalable architecture for sites with thousands of posts
* Improved: Better UI/UX for content selection

= 1.1.1 =
* Fix: Version dump to improve texts.

= 1.1.0 =
* NEW: PHP-based crawler blocking (403 Forbidden response)
* NEW: Robots.txt management for AI crawlers
* NEW: Compliance monitoring (detect crawlers ignoring robots.txt)
* NEW: Email alerts system (daily/weekly/monthly reports)
* NEW: LLMs.txt and llms-full.txt file generator
* NEW: Extras page with all new management tools
* NEW: Quick block dropdown in crawlers table
* Improved: Block actions directly from analytics dashboard

= 1.0.0 =
* Initial release
* AI crawler detection and tracking
* Analytics dashboard with charts
* CSV data export
* Custom crawler support
* Dashboard widget
