---
title: "LLM Ready: The Craft CMS plugin I never imagined I'd make"
date: 2026-03-23T13:29:00-04:00
author: John Morton
canonical_url: "https://supergeekery.com/blog/llm-ready-the-craft-cms-plugin-i-never-imagined-id-make"
section: Blog
---
# LLM Ready: The Craft CMS plugin I never imagined I&#039;d make

*March 23, 2026* by John Morton

![LLM Ready](https://static.supergeekery.com/site-assets/llm-ready-open-graph-github.png)
*The LLM Ready logo was design to suggest connecting nodes and also a hashtag.*

*Audio narration available for this post.*

I'll be honest: when AI companies started scraping the web to train their models, my first reaction was [frustration](https://supergeekery.com/blog/ai-and-your-content-how-to-opt-to-opt-out). Years of carefully written content, hoovered up without so much as a heads-up.

But over the past year, my POV has shifted. Conversations with developer friends, articles popping up in my feed daily, the emergence of the [llms.txt specification](https://llmstxt.org/) — it all pointed in one direction. This isn't a passing trend. People are increasingly skipping search engines entirely and going straight to their chatbots for answers. In conversations with friends who work at agencies, tailoring your site for LLMs has become a major topic — clients are asking about it, and it's shaping how teams think about content strategy alongside traditional SEO. The question isn't whether AI will consume your content. It's whether you'll have any say in how.

That realization flipped my perspective. Instead of fighting the current, what if I could control it? What if I could decide exactly what AI sees when it visits my site — clean, structured, intentional content instead of a mangled soup of navigation bars, footer scripts, and cookie banners?

So I built *LLM Ready*, a Craft CMS plugin.

## The Problem With How AI Reads Your Site Today

When an AI crawler visits your Craft CMS site right now, it gets raw HTML. That means your carefully crafted blog post arrives wrapped in `<nav>` elements, `<footer>` markup, `<script>` tags, SVGs, form elements — all the stuff that makes a website work for humans but is pure noise for a machine trying to understand your content.

There's also a token efficiency problem. LLMs process text in tokens, and HTML is a verbose format — every opening tag, closing tag, class attribute, and nested element burns through tokens without contributing meaning. Markdown encodes the same structure in a fraction of the space: `## My Heading` instead of `<h2 class="post-title">My Heading</h2>`. Serving clean Markdown means more of the LLM's token budget goes toward understanding your actual content rather than parsing markup.

The result? When you serve raw HTML, AI models get a diluted, noisy, and token-inefficient version of what you actually wrote. And as more people rely on chatbots to surface information, that version is what represents you.

## Introducing *LLM Ready* for Craft CMS

*LLM Ready* is a Craft CMS 5 plugin that serves clean Markdown versions of your content to AI crawlers and LLMs. Install it, and it just works — no configuration required to get started.

The plugin detects AI requests three ways:

- `<strong>.md</strong>` **URL suffix** — Append `.md` to any entry URL (e.g., `/blog/my-post.md`) to get a Markdown version. (See <https://supergeekery.com/blog/llm-ready-the-craft-cms-plugin-i-never-imagined-id-make.md> as an example)
- **Content negotiation** — Requests with an `Accept: text/markdown` header automatically receive Markdown
- **AI bot detection** — Known AI crawlers like GPTBot, ClaudeBot, PerplexityBot, and others are automatically served Markdown instead of HTML

Every Markdown response includes YAML front matter with the title, date, author, and canonical URL back to the original page. The plugin also generates a `/llms.txt` file — a site index following the [llms.txt specification](https://llmstxt.org/) — giving AI a structured map of your entire site.

It handles the details you'd expect: response caching with automatic invalidation when content changes, `<link rel="alternate" type="text/markdown">` discovery tags injected into your HTML pages, per-section enable/disable controls stored in Craft's project config for version control and multi-environment sync, and multi-site support.

**Zero config required**

Out of the box, *LLM Ready* requires **zero configuration**. You don't need to modify your templates, add special tags to your markup, or set up queue jobs.

Install the plugin and every entry on your site immediately has a Markdown version. The plugin automatically converts your HTML templates to Markdown using smart content extraction — it finds your main content area, strips out non-content elements, and produces clean Markdown. For most sites, this is all you need.

You can go further by creating dedicated Twig templates for each of your sections. Instead of relying on automatic HTML conversion, you write a simple Twig template that outputs purpose-built Markdown — you decide what's included, what's excluded, and how it's structured.

This is where the "take control" narrative comes full circle. You're not just making your content available to AI — you're curating it. Think of it like the difference between letting someone photograph your house through the windows versus giving them a guided tour of the rooms you want them to see.

## Feature Overview

- Automatic HTML-to-Markdown conversion with configurable CSS selectors for content extraction
- `/llms.txt` site index following the llms.txt specification - see <https://supergeekery.com/llms.txt> as an example
- Section listing pages (e.g., `/blog.md` lists all entries in that section - see <https://supergeekery.com/blog.md> as an example)
- `<link rel="alternate" type="text/markdown">` discovery tags for AI crawlers
- Per-section, per-site configuration with optional dedicated LLM templates
- Response caching with automatic cache invalidation on content save
- AI bot user-agent detection with support for custom user-agents
- Multi-site support
- Requires Craft CMS 5.5+ and PHP 8.2+

## A Pattern Worth Stealing: AI-INSTALL.md

One more thing I want to mention. *LLM Ready* ships with an [`AI-INSTALL.md`](https://github.com/johnfmorton/craft-llm-ready/blob/main/AI-INSTALL.md) file — a structured runbook that any AI coding assistant can follow to install, verify, and configure the plugin. It's not documentation for humans (that's what [`README.md`](https://github.com/johnfmorton/craft-llm-ready/blob/main/README.md) and [`DOCUMENTATION.md`](https://github.com/johnfmorton/craft-llm-ready/blob/main/DOCUMENTATION.md) are for). It's documentation for machines.

I think every plugin should have one. If you're a plugin developer, consider adding an [`AI-INSTALL.md`](https://github.com/johnfmorton/craft-llm-ready/blob/main/AI-INSTALL.md) to your own projects. Your users are increasingly working alongside AI coding assistants, and giving those assistants a clear, step-by-step guide means fewer support requests and faster adoption. It's a small investment that makes your plugin dramatically easier to set up.

## Get Started

*LLM Ready* is available now on the [Craft Plugin Store](https://plugins.craftcms.com/llm-ready) and via Composer. If you're running a Craft CMS 5.5+ site and want to get ahead of how AI interacts with your content, I'd love for you to give it a try.

Found a bug or have a feature request? Open an issue on [GitHub](https://github.com/johnfmorton/craft-llm-ready/issues).

We've spent years optimizing how search engines see our sites. It's time to start thinking about how AI sees them too.

---

**Tags:** craftcms, ai, web

## Related Posts

- [AI and your content. How to opt to opt-out.](https://supergeekery.com/blog/ai-and-your-content-how-to-opt-to-opt-out)
- [Bespoken 5.3.0: Long-Form Audio, Credit Tracking, and Multisite Support](https://supergeekery.com/blog/bespoken-530-long-form-audio-credit-tracking-and-multisite-support)
- [Login Lockdown: an AI-created Craft CMS plugin](https://supergeekery.com/blog/login-lockdown-an-ai-created-craft-cms-plugin)
