[{"data":1,"prerenderedAt":71},["ShallowReactive",2],{"help-article-registering-a-custom-content-type":3},{"data":4},{"title":5,"excerpt":6,"content":7,"help_category":8,"seo":11},"Registering a Custom Content Type","Register a brand-specific content type like case-study or recipe in m18t, set its SEO defaults, and learn what's brand-scoped versus shared when you add one.","\u003Cp>\u003Cstrong>What you&#39;ll learn\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>How to register a content type specific to your brand (e.g. \u003Ccode>case-study\u003C\u002Fcode>, \u003Ccode>recipe\u003C\u002Fcode>, \u003Ccode>release-note\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>Where a type&#39;s SEO defaults live and how they flow into new content.\u003C\u002Fli>\n\u003Cli>What&#39;s brand-scoped vs. shared when you add a type.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr>\n\u003Ch2>The concept: a type is a kind of thing your brand publishes\u003C\u002Fh2>\n\u003Cp>m18t ships sensible default content types — blog post, news post, web page, help article, social post, video post. For many brands that&#39;s enough. But if you run a food brand you might want a \u003Ccode>recipe\u003C\u002Fcode> type; a dev shop might want an \u003Ccode>architecture-decision-record\u003C\u002Fcode>; an agency might want \u003Ccode>case-study\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>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 \u003Cstrong>SEO defaults\u003C\u002Fstrong> for every piece of that type — the URL path prefix, the schema.org \u003Ccode>@type\u003C\u002Fcode>, 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 \u003Ca href=\"\u002Fhelp\u002Fconfiguring-seo-defaults\">SEO\u003C\u002Fa> fields automatically, which keeps a brand&#39;s URLs and structured data consistent.\u003C\u002Fp>\n\u003Cp>Types are configured \u003Cstrong>per brand\u003C\u002Fstrong>. 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.\u003C\u002Fp>\n\u003Ch2>How to register a custom type\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Go to \u003Cstrong>Content Types\u003C\u002Fstrong> in the Studio sidebar (\u003Ccode>\u002Fstudio\u002Fconfig\u002Fcontent-types\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>Click \u003Cstrong>Add Content Type\u003C\u002Fstrong>. (If you want to start from a sensible preset instead, the \u003Cstrong>Quick-start templates\u003C\u002Fstrong> gallery offers presets like Blog Post and Help Article; or pick &quot;build one from scratch&quot;.)\u003C\u002Fli>\n\u003Cli>Pick the \u003Cstrong>Brand\u003C\u002Fstrong> the type belongs to.\u003C\u002Fli>\n\u003Cli>Set the \u003Cstrong>Content Type ID\u003C\u002Fstrong> — lowercase with dashes, e.g. \u003Ccode>case-study\u003C\u002Fcode>. This is the identifier used in code and when \u003Ca href=\"\u002Fhelp\u002Fpushing-to-your-cms\">pushing to a CMS\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>Set the \u003Cstrong>Display Label\u003C\u002Fstrong> — e.g. \u003Ccode>Case Study\u003C\u002Fcode>. This is what shows in the publisher&#39;s type picker.\u003C\u002Fli>\n\u003Cli>Set the SEO defaults that apply to this type: \u003Cstrong>Path Prefix\u003C\u002Fstrong> (e.g. \u003Ccode>\u002Fcase-studies\u002F\u003C\u002Fcode>), \u003Cstrong>Schema.org @type\u003C\u002Fstrong> (e.g. \u003Ccode>Article\u003C\u002Fcode>), \u003Cstrong>Meta Title Template\u003C\u002Fstrong>, \u003Cstrong>Default Keywords\u003C\u002Fstrong>, \u003Cstrong>Default Robots\u003C\u002Fstrong>, \u003Cstrong>Supported Locales\u003C\u002Fstrong>, and a \u003Cstrong>Fallback OG Image\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>Save.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>The new type is then available in the type picker when you create content. For more on what each SEO field does, see \u003Ca href=\"\u002Fhelp\u002Fconfiguring-seo-defaults\">Configuring SEO Defaults\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2>Common variations\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Editing an existing type.\u003C\u002Fstrong> 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.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>The &quot;How this works&quot; guide.\u003C\u002Fstrong> The Content Types page has an in-page \u003Cstrong>How this works\u003C\u002Fstrong> explainer (&quot;What is a Content Type?&quot;, &quot;Quick-start templates&quot;) if you want the concept inline while you configure.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>You can&#39;t delete a type that&#39;s in use.\u003C\u002Fstrong> 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.\u003C\u002Fp>\n\u003Ch2>FAQ\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Does registering a type run a database migration?\u003C\u002Fstrong>\nNo. A content type is a per-(brand × type) configuration record holding the type&#39;s label and SEO defaults. It doesn&#39;t alter the shape of the content table — all content lives in \u003Ca href=\"\u002Fhelp\u002Fthe-unified-content-table\">one unified table\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Are custom types shared across all my brands?\u003C\u002Fstrong>\nNo — 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.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Where do the SEO defaults for a type go?\u003C\u002Fstrong>\nInto new content of that type, as starting values you can override per piece. See \u003Ca href=\"\u002Fhelp\u002Fconfiguring-seo-defaults\">Configuring SEO Defaults\u003C\u002Fa> and \u003Ca href=\"\u002Fhelp\u002Fthe-seo-philosophy\">The SEO Philosophy\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Why can&#39;t I delete this type?\u003C\u002Fstrong>\nContent rows are still using it. m18t blocks the delete until no entries reference the type. Archive or change the type on those rows first.\u003C\u002Fp>\n\u003Ch2>What&#39;s next\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fconfiguring-seo-defaults\">Configuring SEO Defaults\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fthe-unified-content-table\">The Unified Content Table\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fpushing-to-your-cms\">Pushing to Your CMS\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n",{"slug":9,"title":10},"content-and-publishing","Content & Publishing",{"meta_title":12,"meta_description":6,"keywords":13,"canonical_url":14,"og_title":5,"og_description":15,"og_image":16,"robots":17,"json_ld":18},"Registering a Custom Content Type | m18t Help","custom content type, content type registration, SEO defaults, brand-scoped types, schema.org type, path prefix","https:\u002F\u002Fm18t.com\u002Fhelp\u002Fregistering-a-custom-content-type","A content type is a kind of thing your brand publishes — register one per brand and it carries the SEO defaults for every piece of that type.","https:\u002F\u002Fm18t.com\u002Fog-default.png","index, follow",{"@context":19,"@graph":20},"https:\u002F\u002Fschema.org",[21,34,55],{"@type":22,"headline":5,"description":6,"articleSection":10,"inLanguage":23,"datePublished":24,"dateModified":24,"image":16,"author":25,"publisher":29,"mainEntityOfPage":32},"Article","en","2026-06-25",{"@type":26,"name":27,"url":28},"Organization","m18t","https:\u002F\u002Fm18t.com",{"@type":26,"name":27,"url":28,"logo":30},{"@type":31,"url":16},"ImageObject",{"@type":33,"@id":14},"WebPage",{"@type":35,"mainEntity":36},"FAQPage",[37,43,47,51],{"@type":38,"name":39,"acceptedAnswer":40},"Question","Does registering a type run a database migration?",{"@type":41,"text":42},"Answer","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.",{"@type":38,"name":44,"acceptedAnswer":45},"Are custom types shared across all my brands?",{"@type":41,"text":46},"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.",{"@type":38,"name":48,"acceptedAnswer":49},"Where do the SEO defaults for a type go?",{"@type":41,"text":50},"Into new content of that type, as starting values you can override per piece.",{"@type":38,"name":52,"acceptedAnswer":53},"Why can't I delete this type?",{"@type":41,"text":54},"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.",{"@type":56,"itemListElement":57},"BreadcrumbList",[58,62,66,69],{"@type":59,"position":60,"name":61,"item":28},"ListItem",1,"Home",{"@type":59,"position":63,"name":64,"item":65},2,"Help","https:\u002F\u002Fm18t.com\u002Fhelp",{"@type":59,"position":67,"name":10,"item":68},3,"https:\u002F\u002Fm18t.com\u002Fhelp\u002Fcategories\u002Fcontent-and-publishing",{"@type":59,"position":70,"name":5,"item":14},4,1786312169572]