A blog prob­a­bly of inter­est only to nerds by John F Mor­ton.

Ink of the day: MIXING… 

SuperGeekery: A blog probably of interest only to nerds by John F Morton.

LLM Ready: The Craft CMS plugin I never imagined I’d make

The LLM Ready logo was designed to suggest connecting nodes and also a hashtag.

▷ Audio edition

The narration of this post was created with Bespoken plugin for Craft CMS.

I’ll be hon­est: when AI com­pa­nies start­ed scrap­ing the web to train their mod­els, my first reac­tion was frus­tra­tion. Years of care­ful­ly writ­ten con­tent, hoovered up with­out so much as a heads-up.

But over the past year, my POV has shift­ed. Con­ver­sa­tions with devel­op­er friends, arti­cles pop­ping up in my feed dai­ly, the emer­gence of the llms.txt spec­i­fi­ca­tion — it all point­ed in one direc­tion. This isn’t a pass­ing trend. Peo­ple are increas­ing­ly skip­ping search engines entire­ly and going straight to their chat­bots for answers. In con­ver­sa­tions with friends who work at agen­cies, tai­lor­ing your site for LLMs has become a major top­ic — clients are ask­ing about it, and it’s shap­ing how teams think about con­tent strat­e­gy along­side tra­di­tion­al SEO. The ques­tion isn’t whether AI will con­sume your con­tent. It’s whether you’ll have any say in how.

That real­iza­tion flipped my per­spec­tive. Instead of fight­ing the cur­rent, what if I could con­trol it? What if I could decide exact­ly what AI sees when it vis­its my site — clean, struc­tured, inten­tion­al con­tent instead of a man­gled soup of nav­i­ga­tion bars, foot­er scripts, and cook­ie ban­ners?

So I built LLM Ready, a Craft CMS plu­g­in.

The Problem With How AI Reads Your Site Today

When an AI crawler vis­its your Craft CMS site right now, it gets raw HTML. That means your care­ful­ly craft­ed blog post arrives wrapped in <nav> ele­ments, <footer> markup, <script> tags, SVGs, form ele­ments — all the stuff that makes a web­site work for humans but is pure noise for a machine try­ing to under­stand your con­tent.

There’s also a token effi­cien­cy prob­lem. LLMs process text in tokens, and HTML is a ver­bose for­mat — every open­ing tag, clos­ing tag, class attribute, and nest­ed ele­ment burns through tokens with­out con­tribut­ing mean­ing. Mark­down encodes the same struc­ture in a frac­tion of the space: ## My Heading instead of <h2 class="post-title">My Heading</h2>. Serv­ing clean Mark­down means more of the LLM’s token bud­get goes toward under­stand­ing your actu­al con­tent rather than pars­ing markup.

The result? When you serve raw HTML, AI mod­els get a dilut­ed, noisy, and token-inef­fi­cient ver­sion of what you actu­al­ly wrote. And as more peo­ple rely on chat­bots to sur­face infor­ma­tion, that ver­sion is what rep­re­sents you.

Introducing LLM Ready for Craft CMS

LLM Ready is a Craft CMS 5 plu­g­in that serves clean Mark­down ver­sions of your con­tent to AI crawlers and LLMs. Install it, and it just works — no con­fig­u­ra­tion required to get start­ed.

The plu­g­in detects AI requests three ways:

Every Mark­down response includes YAML front mat­ter with the title, date, author, and canon­i­cal URL back to the orig­i­nal page. The plu­g­in also gen­er­ates a /llms.txt file — a site index fol­low­ing the llms.txt spec­i­fi­ca­tion — giv­ing AI a struc­tured map of your entire site.

It han­dles the details you’d expect: response caching with auto­mat­ic inval­i­da­tion when con­tent changes, <link rel="alternate" type="text/markdown"> dis­cov­ery tags inject­ed into your HTML pages, per-sec­tion enable/​disable con­trols stored in Craft’s project con­fig for ver­sion con­trol and mul­ti-envi­ron­ment sync, and mul­ti-site sup­port.

Zero con­fig required

Out of the box, LLM Ready requires zero con­fig­u­ra­tion. You don’t need to mod­i­fy your tem­plates, add spe­cial tags to your markup, or set up queue jobs.

Install the plu­g­in and every entry on your site imme­di­ate­ly has a Mark­down ver­sion. The plu­g­in auto­mat­i­cal­ly con­verts your HTML tem­plates to Mark­down using smart con­tent extrac­tion — it finds your main con­tent area, strips out non-con­tent ele­ments, and pro­duces clean Mark­down. For most sites, this is all you need.

You can go fur­ther by cre­at­ing ded­i­cat­ed Twig tem­plates for each of your sec­tions. Instead of rely­ing on auto­mat­ic HTML con­ver­sion, you write a sim­ple Twig tem­plate that out­puts pur­pose-built Mark­down — you decide what’s includ­ed, what’s exclud­ed, and how it’s struc­tured.

This is where the take con­trol” nar­ra­tive comes full cir­cle. You’re not just mak­ing your con­tent avail­able to AI — you’re curat­ing it. Think of it like the dif­fer­ence between let­ting some­one pho­to­graph your house through the win­dows ver­sus giv­ing them a guid­ed tour of the rooms you want them to see.

Feature Overview

  • Auto­mat­ic HTML-to-Mark­down con­ver­sion with con­fig­urable CSS selec­tors for con­tent extrac­tion
  • /llms.txt site index fol­low­ing the llms.txt spec­i­fi­ca­tion — see https://​supergeek​ery​.com/​l​l​m​s.txt as an exam­ple
  • Sec­tion list­ing pages (e.g., /blog.md lists all entries in that sec­tion — see https://​supergeek​ery​.com/​b​l​og.md as an exam­ple)
  • <link rel="alternate" type="text/markdown"> dis­cov­ery tags for AI crawlers
  • Per-sec­tion, per-site con­fig­u­ra­tion with option­al ded­i­cat­ed LLM tem­plates
  • Response caching with auto­mat­ic cache inval­i­da­tion on con­tent save
  • AI bot user-agent detec­tion with sup­port for cus­tom user-agents
  • Mul­ti-site sup­port
  • Requires Craft CMS 5.5+ and PHP 8.2+

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

One more thing I want to men­tion. LLM Ready ships with an AI-INSTALL.md file — a struc­tured run­book that any AI cod­ing assis­tant can fol­low to install, ver­i­fy, and con­fig­ure the plu­g­in. It’s not doc­u­men­ta­tion for humans (that’s what README.md and DOCUMENTATION.md are for). It’s doc­u­men­ta­tion for machines.

I think every plu­g­in should have one. If you’re a plu­g­in devel­op­er, con­sid­er adding an AI-INSTALL.md to your own projects. Your users are increas­ing­ly work­ing along­side AI cod­ing assis­tants, and giv­ing those assis­tants a clear, step-by-step guide means few­er sup­port requests and faster adop­tion. It’s a small invest­ment that makes your plu­g­in dra­mat­i­cal­ly eas­i­er to set up.

Get Started

LLM Ready is avail­able now on the Craft Plu­g­in Store and via Com­pos­er. If you’re run­ning a Craft CMS 5.5+ site and want to get ahead of how AI inter­acts with your con­tent, I’d love for you to give it a try.

Found a bug or have a fea­ture request? Open an issue on GitHub.

We’ve spent years opti­miz­ing how search engines see our sites. It’s time to start think­ing about how AI sees them too.