Registering a Custom Content Type
What you'll learn
- How to register a content type specific to your brand (e.g.
case-study,recipe,release-note). - Where a type's SEO defaults live and how they flow into new content.
- What's brand-scoped vs. shared when you add a type.
The concept: a type is a kind of thing your brand publishes
m18t ships sensible default content types — blog post, news post, web page, help article, social post, video post. For many brands that's enough. But if you run a food brand you might want a recipe type; a dev shop might want an architecture-decision-record; an agency might want case-study.
Instead of forcing a recipe into a blog-post shape, you register the type. A content type in m18t is more than a label: it carries the SEO defaults for every piece of that type — the URL path prefix, the schema.org @type, default robots directives, the meta-title template, supported locales, and a fallback social-share image. When you create a new piece of that type, those defaults flow into its SEO fields automatically, which keeps a brand's URLs and structured data consistent.
Types are configured per brand. A blog post for Brand A can use different defaults than a blog post for Brand B. Switch brands and the type list re-shards with everything else.
How to register a custom type
- Go to Content Types in the Studio sidebar (
/studio/config/content-types). - Click Add Content Type. (If you want to start from a sensible preset instead, the Quick-start templates gallery offers presets like Blog Post and Help Article; or pick "build one from scratch".)
- Pick the Brand the type belongs to.
- Set the Content Type ID — lowercase with dashes, e.g.
case-study. This is the identifier used in code and when pushing to a CMS. - Set the Display Label — e.g.
Case Study. This is what shows in the publisher's type picker. - Set the SEO defaults that apply to this type: Path Prefix (e.g.
/case-studies/), Schema.org @type (e.g.Article), Meta Title Template, Default Keywords, Default Robots, Supported Locales, and a Fallback OG Image. - Save.
The new type is then available in the type picker when you create content. For more on what each SEO field does, see Configuring SEO Defaults.
Common variations
Editing an existing type. Open a type from the list to adjust its SEO defaults. The Content Type ID is fixed once created, but the label and defaults are editable.
The "How this works" guide. The Content Types page has an in-page How this works explainer ("What is a Content Type?", "Quick-start templates") if you want the concept inline while you configure.
You can't delete a type that's in use. If content rows already use a type, m18t blocks the delete and tells you how many entries reference it — archive or migrate those first. This is deliberate: deleting a type out from under live content leaves broken URLs and orphaned CMS links.
FAQ
Does registering a type run a database migration? No. A content type is a per-(brand × type) configuration record holding the type's label and SEO defaults. It doesn't alter the shape of the content table — all content lives in one unified table.
Are custom types shared across all my brands? No — types are configured per brand. If you want the same type for two brands, register it for each. The Content Types page groups types by brand so you can see what each one has.
Where do the SEO defaults for a type go? Into new content of that type, as starting values you can override per piece. See Configuring SEO Defaults and The SEO Philosophy.
Why can't I delete this type? Content rows are still using it. m18t blocks the delete until no entries reference the type. Archive or change the type on those rows first.