Version 1.2.2
March 24, 2026
Fixed
- "Last Seen" dates in the analytics bot breakdown now correctly display in the Craft system timezone instead of UTC
Version 1.2.1
March 24, 2026
Added
- 301 redirect from
/.well-known/llms.txtto/llms.txtso LLMs checking the RFC 8615 well-known path are directed to the canonical location - Documentation for the analytics dashboard, including explanations of the four request types (entry, listing, llmstxt, negotiated) and data retention
Version 1.2.0
March 24, 2026
Added
- Opt-in analytics dashboard tracking AI bot visits to
.mdpages,/llms.txt, and content negotiation responses - Bot breakdown table showing request counts and last-seen timestamps per crawler (GPTBot, ClaudeBot, PerplexityBot, etc.)
- Requests over time bar chart powered by Chart.js with date range filtering (7d / 30d / 90d / all time)
- Most accessed pages table with links to the served Markdown page and entry edit page
- Request type breakdown (entry, llmstxt, listing, negotiated)
- Multi-site support for analytics with site selector
- Configurable data retention period (default 90 days) with manual purge from dashboard
- Console command
llm-ready/analytics/purgefor cron-based data cleanup - CP section for the analytics dashboard
Changed
- Analytics dashboard edit links are only shown to users with permission to view the entry
- Use Yii's
registerLinkTag()for discovery tag injection instead of manual HTML string replacement - Use Yii's
getAcceptableContentTypes()for content negotiation instead of manual Accept header parsing - Use Yii's
Html::decode()for HTML entity decoding instead of rawhtml_entity_decode()
Fixed
- Logged-in users without section edit permissions no longer get a 403 error on public
.mdpages
Version 1.1.1
March 23, 2026
Fixed
- Homepage singles no longer appear in the plugin settings page, since they can't serve
.mdURLs
Version 1.1.0
March 21, 2026
Added
- Entry descriptions in
/llms.txtand listing pages — each link now includes a brief description following the llms.txt spec format - New "Description Field" setting to specify a field handle for entry descriptions (e.g.,
summary,excerpt) - Auto-extract fallback that pulls a description from the first text field when no description field is configured
- Config file support — copy
src/config.phptoconfig/llm-ready.phpto manage settings in code instead of the control panel
Version 1.0.1
March 21, 2026
Fixed
- Homepage singles no longer appear in
/llms.txtand listing pages with broken/.mdURLs - Sections with no listable entries (e.g. homepage singles) no longer show empty headings in
/llms.txt
Version 1.0.0
March 21, 2026
Added
- Markdown endpoint via
.mdURL suffix — append.mdto any entry URL to get a Markdown version - Content negotiation support — serve Markdown for requests with
Accept: text/markdownheader - AI bot user-agent detection — automatically serve Markdown to known AI crawlers (GPTBot, ClaudeBot, Amazonbot, PerplexityBot, and others)
- Smart HTML-to-Markdown conversion using league/html-to-markdown with configurable CSS selectors for content extraction
- Dedicated LLM template support — assign a Twig template per section/site that outputs raw Markdown directly
- Auto-generated
/llms.txtsite index following the llms.txt specification - YAML front matter with entry metadata (title, date, author, canonical URL, section)
- Auto-injection of
<link rel="alternate" type="text/markdown">discovery tags into HTML pages - Listing page support — append
.mdto a section's base URL for a Markdown list of entries - Per-section enable/disable control with optional LLM template configuration stored in project config for version control and multi-environment sync
- Markdown response caching via Craft's cache component with automatic invalidation on entry save/delete
X-Robots-Tag: noindexheader on Markdown responses to prevent search engine indexing (configurable)Content-Type: text/markdown; charset=utf-8header with explicit charset to prevent encoding issuesLinkcanonical header pointing to the HTML version of the page- Graceful fallback to field-level content extraction when template rendering fails
- Multi-site support with independent settings per section/site combination
- Permission checks on all Markdown endpoints — logged-in users without view permission receive a 403
- Template path traversal protection and XPath injection prevention