Symptom

docs/lessons/*.md files are rendered on krillswarm.com via docs/_layouts/lesson.html and are indexed by search engines. The layout already supported page.title and page.description front matter, but only 1 of 323 lesson files declared a title and none declared a description or tags. Every other page fell back to the filename for its <title> and to the raw page content (headings concatenated straight into body text, then truncated to 160 characters) for its meta description — a search result snippet that reads like “SymptomAn INPUT Server.Pin whose hardware GPIO line was HIGH rendered…”.

Root cause

docs/lessons/README.md’s required-sections schema never included SEO fields, so every dev-agent PR since the lessons directory was introduced wrote issue/pr/date/module/category and stopped there. The layout’s fallback behavior masked the gap — pages still rendered a plausible-looking <title> and <meta description>, so nothing looked broken during manual review.

Fix

Prevention

The new DocsSeoTest case fails any future docs/lessons/*.md PR that omits title, description, or tags — the same mechanism that already guards docs/_posts/*.md. docs/lessons/README.md’s schema block now lists the three fields alongside the existing required ones, so a dev agent copying the template gets them for free.