Buying Technology

    What a CMS needs so editors can publish without breaking SEO

    Roles, a review step, scheduled publishing, an audit log and generated sitemap and structured data. What we built into a publication's CMS, and what we still lack.

    GC
    GarunaCDX Editorial
    Editorial team
    Oct 26, 2026 6 min read
    Key takeaways
    • Roles and a review step stop one mistake from reaching every page.
    • Generate the sitemap, llms.txt and structured data from the content, not by hand.
    • An audit log lets you see who changed a page and fix it with confidence.
    • Show the last-verified date and reviewer to readers. We track them but don't show them yet.

    Quick answer

    A CMS that lets editors publish safely needs roles where only some people can publish, a review step, revision history, an audit log, scheduled publishing, per-page SEO fields with safe defaults, and a sitemap, llms.txt and structured data generated from the content. The technical basics should be something the system does, not something an editor remembers.

    The short answer

    Editors need speed. Search engines need consistency. A CMS reconciles the two by making the technical basics automatic and by limiting how far one mistake can spread.

    Our rule: if a rule matters for search, it goes in code, not in a style guide. Style guides get forgotten on a Friday afternoon. Code doesn’t.

    Why buyers ask this

    Marketing teams want to publish without waiting for a developer. Developers worry that a free-for-all publishes broken pages. Both worries are fair, and a good CMS answers both. The question to ask isn’t “is it easy to use?” but “what does it stop a tired editor from doing?”

    What we built into one

    We co-founded CrawlTheory, an SEO publication, and built its admin CMS. The parts that matter here:

    • A workflow with five states: draft, in review, scheduled, published, archived. Editors move posts between draft and in review. Only a super admin can publish or schedule. The check runs in the server action that saves the post, not just in the interface, so it can’t be bypassed by a crafted request from the browser.
    • Roles: super admin, editor and viewer. A viewer can look but not change.
    • Revision history. Every draft save writes a snapshot, so an editor can browse recent versions and restore one.
    • An audit log of admin actions, with the actor’s email stored on the row so entries outlive the user.
    • Scheduled publishing. A secured route publishes due posts, refreshes the pages and notifies search engines through IndexNow.
    • Per-page SEO overrides with a rule that an empty field falls through to the page’s own default, so a half-filled form can never break a page.
    • A generated sitemap, llms.txt and structured data built from the same rows the pages use.
    • A slot-conflict check. If an editor pins an article to a featured slot that is taken, the system asks before replacing it.

    The feature list to ask of any CMS

    NeedWhy it mattersA good answer
    Roles with a publish gateOne mistake shouldn’t reach every pageEditors submit, an approver publishes
    A review stepA second pair of eyesA visible “in review” state
    Revision historyEditors need to undo their own errorsRestore any recent version
    Audit logYou can see who changed what, and fix itActor, action and time on every change
    SchedulingPublishing on a plan, not by hand at midnightA scheduler you can see running, at a stated cadence
    Per-page SEO fieldsTitle, description and social card per pageSafe defaults when a field is empty
    Generated sitemapNew pages can’t be forgottenBuilt from published content on request
    Structured dataMatches the page by constructionGenerated from the same fields
    Redirect handlingA changed address shouldn’t lose its historyA redirect created when a slug changes
    Input clean-upPasted text carries odd charactersNormalised when content enters, not when it’s shown

    Three lessons from auditing our own CMS

    In June 2026 we ran a root-cause analysis on CrawlTheory. Three findings are worth borrowing.

    1. Fix content where it enters, not where it’s shown. Our typographic clean-up for quotation marks ran on article bodies only. Titles, excerpts and card headings showed whatever characters were pasted in, often curly quotes from a word processor. A rule applied in one place isn’t applied. Normalise on import and on save.

    2. An override that silently wins is a trap. The admin let someone upload a sitemap file. An uploaded file took priority over the generated one, so when someone had uploaded one, new posts never appeared. If you offer an override, show a visible warning while it is active, and make the generated version the default. We now send a no-store header from the sitemap route so it can’t be served stale.

    3. “In the HTML” is not “visible”. Our public pages were server-rendered, so the text was in the HTML. But each block started invisible and a script faded it in when it scrolled into view. Without the script, the page looks blank in some audit tools. As of 26 October 2026 that rule is still in our stylesheet. We know about it, and we are telling you so you can avoid it. See server-rendered pages and AI search.

    A note on scheduling

    Our scheduled-publish route is written to be called every fifteen minutes. The cron entry in our deployment config runs once a day. Both are fine for a publication that schedules a day ahead, and wrong for one that promises a post at 9:15. Ask any CMS vendor how often the scheduler runs, not only whether one exists.

    Build, buy or use WordPress?

    Our opinion, since you asked. If one person publishes a few articles a month, use a hosted platform and stop reading. If several people publish, you need review and an audit trail, and search and AI crawlers matter enough to engineer for, a custom CMS or a heavily configured one earns its cost. A middle path is a standard CMS plus a short, written list of rules enforced by plugins or checks. What you shouldn’t do is rely on training.

    What we still lack

    We track a last-verified date and a reviewer, but readers can’t see them yet. For a publication that wants to be cited, visible freshness is a trust signal, and it is on our list.

    What this doesn't prove, and when you don't need it

    We have recorded no traffic, ranking or AI-citation result for this CMS. It is our own product, so it is not independent proof. And a one-person site doesn’t need roles, review or an audit log. They pay off once two or more people publish.

    Choosing a CMS?
    Tell us who publishes, who approves and how often. We'll tell you which of these features you need.
    Book a free scoping call

    Next: can marketing publish without a developer and will the site get found. Case study: the CMS behind a publication.

    Features and rules come from the CrawlTheory repository (migrations, server actions, routes and configuration) on 26 October 2026, and the three lessons from our own root-cause analysis dated 17 June 2026, re-checked in the code on 26 October. All are tracked in our claim ledger. We co-founded CrawlTheory. Proof grade 4: our own build.

    Your verdict
    Was this article useful?
    GC
    Written by
    GarunaCDX Editorial
    Editorial team

    Engineers, product and growth folks at GarunaCDX writing about the systems we build for clients.

    View all articles
    Share
    Planning something similar?

    Let's talk about your build.

    Tell us what you are building. A founding engineer replies within one working day with how we would approach it.

    FAQ

    Frequently asked questions

    A one-person site doesn't. Once two or more people publish, roles and a log are cheap insurance against one person's mistake spreading across the site.

    The sitemap, structured data and a machine-readable content map such as llms.txt, from the same content the pages use, so they can't drift apart.

    No. It removes avoidable technical mistakes. We haven't measured a ranking effect on our own publication.

    A hidden button is a suggestion. The server-side check is the rule. Anyone who can send a request can bypass the interface, so the permission has to be checked where the data is saved.

    As often as your promise to readers requires. If you only schedule by the day, once a day is enough. If you promise a time, it should run every few minutes. Ask the vendor for the real cadence.

    The GarunaCDX build log

    Industry insights, once a month

    New case studies, healthcare, marketplace, B2B SaaS and industrial breakdowns, and the engineering notes behind what we ship. One short email a month, no fluff.

    We never share your data — see our Privacy Policy for details.