Fix: Resolved negative relative timestamps (“-10602s ago”) in Dashboard Last Visit and Recent Visits — root cause was WordPress local time stored in DB being misinterpreted as UTC when building JS timestamps. All log and boundary timestamps now use get_gmt_from_date() for correct UTC conversion.
Fix: Recent Visits table now shows a maximum of 8 entries per period with a “Show N more” button to reveal the rest, preventing the card from growing excessively long.
Fix: AI Index column in post/page list now distinguishes between user-excluded content (Hidden) and system-excluded content (Auto-hidden) caused by slug blacklist rules or SEO noindex settings. Users can now see why a page is excluded without confusion.
Fix: Clear Bot Logs action button now shows a confirmation dialog before deleting all log records, preventing accidental data loss.
6.0
Dashboard: Added Period Analytics filter strip — quickly switch between Today, Yesterday, Last 7 Days, and Last 30 Days views directly on the dashboard.
Dashboard: Added Daily Visits bar chart showing bot request counts per day for the selected time period.
Dashboard: Bot Visit Distribution pie chart now updates dynamically based on the selected period.
Dashboard: Recent Visits table now filters to the selected time period and shows up to 30 entries.
Dashboard: Period visit counts shown prominently as quick-access metrics on the filter strip.
Dashboard: Added Site-Wide Tracking status banner — shows a warning CTA when tracking is disabled and a green status indicator when active. One-click “Enable Tracking” button navigates directly to Settings.
Settings: Site-Wide AI Bot Tracking promoted to a dedicated featured card at the top of the Settings panel with full feature description, bullet points, and a live ACTIVE/OFF status badge.
Settings: Removed the buried toggle from the Security & Performance section to eliminate confusion.
Performance: All period analytics queries use the indexed time column — no full-table scans.
Settings: Redesigned settings header with a prominent Save & Apply Changes button (with “Applied instantly” badge) and a second save button anchored at the bottom of the form so it’s always accessible.
Settings: Added Essential / All Settings view toggle — Essential mode shows only the most important settings (Tracking, Content Sources, Bio/Intro), hiding advanced options to reduce cognitive overload for new users.
Fix: Resolved FAQ accordion CSS mismatch — chevron rotation animation and answer body styles now apply correctly.
Exclusions: Completely redesigned Exclusions tab — replaced manual ID entry with live title search. Type any post or page title to find and exclude it instantly, no URL hunting required.
Exclusions: Unified excluded content list now shows both meta-box and ID-list exclusions in a single table with “Post Editor” / “ID List” source pills and one-click Restore.
Exclusions: Added two new AJAX endpoints — post title search and ID-list restore — enabling fully client-side exclusion management without page reloads.
Dashboard: Metric cards (Total Hits, Top Bot, Last Visit) are now period-aware — they update when switching between Today / Yesterday / Last 7 Days / Last 30 Days.
Dashboard: Today and Yesterday bar chart now shows last 7 days context with the focused day highlighted, instead of a single isolated bar.
Dashboard: Removed redundant LIMIT 10 database query — last visit time now derived from the existing 30-day log dataset.
Dashboard: Fixed timezone mismatch in Recent Visits filtering — boundary timestamps now passed from PHP server time instead of parsed in browser timezone.
Dashboard: Fixed hardcoded en-US locale in day labels — now uses the user’s browser locale.
5.9
Feature: Added Site-Wide AI Bot Tracking to monitor AI crawlers across all pages and posts, not just /llms.txt.
Dashboard: Added Top Targeted URLs analytics panel to visualize where bots are crawling most frequently.
Bot Chart: Updated bot analytics to include visual progressive updates.
Refinement: Eliminated dependency on external style dependencies and removed external WordPress nags on settings page.
5.8
Critical Fix: Bot visit logging now runs BEFORE rate limit and allowed_bots checks — previously blocked visits were silently dropped and never recorded.
Fix: Log table auto-recovery — if the log table is missing, the plugin detects and recreates it automatically (lightweight, no flush_rewrite_rules on frontend).
Fix: Table existence check uses a static flag to avoid redundant SHOW TABLES queries on repeated requests.
Fix: Replaced esc_html()/esc_html__() with plain __() in llms.txt output — text/plain content no longer contains HTML entities like & in site names or taxonomy labels.
Fix: Replaced esc_url() with esc_url_raw() for permalink output — URLs with query parameters no longer get & encoding in text/plain output.
Fix: Blacklist matching in skip() now uses slug segment matching instead of substring — “cookie-recipes” or “about-ai” posts are no longer falsely excluded.
Fix: “Other Bots” entry removed from Allowed Bots settings UI — previously selecting it would match any UA containing the word “Other”.
Performance: item() no longer calls get_option() per post — options are passed from the build() loop, eliminating redundant calls.
Fix: Broadened crawler detection filter to also match UA strings containing “spider”, “crawl”, “slurp”, “fetch”, and “archiv” keywords, not just “bot”.