Page Type Reference

A page type is the record that decides what a page of that kind has, where it lives and how it renders. This page is the field list. Page Types is the concept, and Configuring a Page Type is the walkthrough in screen order.

The reference is separate for three reasons that the walkthrough cannot carry: several of these fields have no UI at all on some kinds, several are read only by the site build and change nothing until you publish, and a handful are derived by the server and cannot be set at any price.

How to read the tables

Applies to names which of the three kinds — Posts, Documentation, API — show the field.

Default is what a newly created page type gets. For several fields that differs per kind, and the row says so.

Read by names the actual consumer: the CMS, the site build through the page type’s own {slug}.11tydata.json, or the site build through the shared _data/pageTypeList.json. A field that only the build reads will not change anything until you publish; a field only the CMS reads will never appear in your repository no matter how many times you publish.

A blank value usually means inherit. The grayed text in an empty box is the company default rendered as placeholder text, not a stored value.

Three fields are not settable at all. They are listed rather than omitted, because a developer reading the API or an MCP response will see them and wonder.

Identity and URL

FieldTypeDefaultApplies toRead byNotes / where it is explained
namestring— (required)AllCMS · build via pageTypeList.jsonDisplay name in the CMS and available to templates
slugstring, max 150— (required)AllCMS · build via pageTypeList.jsonLowercase segments, dashes and dots, and / for nested API roots such as docs/api/1.2.0
isSlugLockedbooleanfalseAllCMSServer-managed. Set once a page of the type has been scheduled or published, which disables the Slug field
descriptionstring—AllCMS · build via pageTypeList.jsonFree text describing the section
aliasesstring array—AllCMS · build via pageTypeList.jsonAdditional paths that resolve to this set — Aliases and Redirects
redirectIndexstring—AllCMS · build via pageTypeList.jsonAccepts first, last, a relative path starting with /, or a remote URL
labelsstring array—AllCMS · build via pageTypeList.jsonLabels applied at the type level — Labels and Series

Two facts a reader otherwise learns the hard way. The slug is the URL root for every page of the type, so changing it moves the whole section — and once any of its pages has been scheduled or published, the CMS locks the field to protect those URLs. And how the rest of a page’s path is composed below that root is URL Paths and Slugs, which for a menu-bound documentation set is decided by the folder tree rather than by the page.

Kind and layout

FieldTypeDefaultApplies toRead byNotes / where it is explained
typedocumentationapipostspostsAll
layoutstring{slug}.hbs for Posts; leed-documentation.hbs for Documentation and APIAllCMS · build via pageTypeList.jsonThe CMS creates the layout file for a Posts type and deliberately does not for the documentation layout, which is a system file — Layouts and Page Types
noRenderbooleanfalseAllCMS · build via pageTypeList.jsonLabeled Do Not Render. The site build skips these pages; a developer can still render them from a template

Content rules

FieldTypeDefaultApplies toRead byNotes / where it is explained
requiredFields.featureImagebooleantrue on Posts, false on Documentation and APIAllCMSEnforced at publish and at scheduling
requiredFields.formNotAllowedOptionalRequiredNotAllowed on all three kindsAll
requiredFields.summarybooleantrue on Posts and Documentation, false on APIAllCMSThe one most readers meet, because documentation pages require it by default
requiredFields.keywordsbooleantrue on Posts, false on Documentation and APIAllCMSEnforced at publish and at scheduling
editorFormattingOptionsobject of nine booleansSee the table belowPosts onlyCMS · the content APIPointer row — Formatting by Page Type

A missing required field is a 400 with a list, not a warning you can dismiss: publishing or scheduling returns {"error":"Missing required fields","missingFields":["summary"]} naming every field that is empty. The exact shape is on Common Error Messages.

Required fields by kind

FieldPostsDocumentationAPI
Feature Image✓——
Form AttachmentNotAllowedNotAllowedNotAllowed
Summary✓✓—
Keywords✓——

Editor formatting options

Nine flags, and codeBlock is the only one that defaults on — which is why a brand-new Posts page type has a short toolbar. Every one of them applies to Posts page types only.

{
  "codeBlock": true,
  "diagrams": false,
  "mathBlock": false,
  "alert": false,
  "icons": false,
  "tabGroup": false,
  "iframe": false,
  "collapsibleBlock": false,
  "table": false
}
KeyDefaultApplies toDocumented in
codeBlocktruePosts onlyFormatting by Page Type
diagramsfalsePosts onlyFormatting by Page Type
mathBlockfalsePosts onlyFormatting by Page Type
alertfalsePosts onlyFormatting by Page Type
iconsfalsePosts onlyFormatting by Page Type
tabGroupfalsePosts onlyFormatting by Page Type
iframefalsePosts onlyFormatting by Page Type
collapsibleBlockfalsePosts onlyFormatting by Page Type
tablefalsePosts onlyFormatting by Page Type

The second fact, which no other page states and this reference must: the flags are inert on documentation and api page types on all three surfaces, and there is no UI to set them there. The content API returns early unless the type is posts, the toolbar’s resolver returns nothing for a non-Posts type so every control shows, and Settings renders the toggle block for Posts types only. A documentation author looking for the switch that hid their tab button will not find one, because it does not exist for their page type.

Site behavior

FieldTypeDefaultApplies toRead byNotes / where it is explained
autolinkbooleantrueAllBuild via pageTypeList.jsonLabeled Enable Autolinking. Consumed by the autolink build plugin — Autolinks
includeInFeedsbooleantrueAllBuild via pageTypeList.jsonLabeled Show In Feeds. Consumed by the feed templates — Feeds, Sitemaps and Robots
autopostNewPagesbooleantrueAllBuild via pageTypeList.jsonLabeled Autopost New Pages. Arms the connected distribution channels — Release Notes and Auto-Posting
allowRecommendationsbooleantrueAllBuild via pageTypeList.jsonLabeled Enable Recommendations. Feeds the recommendation index — Recommendations
sitemapPrioritynumberinherits the company valueAllBuild via pageTypeList.jsonConsumed by the sitemap template
labelSiteMapPrioritynumberinherits the company valueAllBuild via pageTypeList.jsonConsumed by the sitemap template for label index pages

Autopost New Pages defaults to on, which surprises people because the behavior behind it is a Growth feature. The setting is configurable on every plan and activates on your published site once your plan includes automatic social posting — it is not “off by default”, it is armed and waiting.

Shared settings

The same nine values that live at the bottom of Settings → General appear on every page type as Configuration Overrides. Leave one blank and the page type inherits the company value; fill it in and the page type wins for its own pages.

FieldTypeDefaultApplies toRead byNotes / where it is explained
paging.minimumnumbercompany value, seeded at 6AllCMSLabeled Page Minimum — Default Content Configuration
paging.sizenumbercompany value, seeded at 9AllCMSLabeled Page Size
sitemapPrioritynumbercompany value, seeded at 1AllBuild via pageTypeList.jsonAlso listed under Site behavior above
labelSiteMapPrioritynumbercompany value, seeded at 0.8AllBuild via pageTypeList.jsonAlso listed under Site behavior above
ogCard.titlestring, max 70company valueAllBuild via {slug}.11tydata.jsonLabeled Social Title — Social Cards and Structured Data
ogCard.descriptionstring, max 240company valueAllBuild via {slug}.11tydata.jsonLabeled Social Description
readingWpmnumbercompany value, seeded at 250AllCMSLabeled Reading Speed
dateFormatstringcompany valueAllBuild via {slug}.11tydata.jsonLabeled Date Format
aiThemestringcompany valueAllCMSLabeled AI Image Theme Guide — AI Image Generation

Which of these actually reach the site when you override them on a page type is the question the Read by column answers per row, and Default Content Configuration works through it end to end. It is worth reading before you override Page Size and wonder why the built listing did not change.

Locks

FieldTypeDefaultApplies toRead byNotes / where it is explained
lockedbooleanfalseAllCMSContent Locked: no new pages, and existing pages are read-only
navMenuLockedbooleanfalseAllCMSNavigation Menu Locked: this type’s pages cannot change URL through its docs menu. Icon, tooltip and expanded state stay editable

Either lock may be set or cleared only by an Administrator or a Content Publisher, and the guard is shared by the create and the update route so they cannot drift. Each refusal has an exact message, cataloged on Common Error Messages — This page type is Content Locked; existing pages are read-only. on a write, This page type is locked; no new pages can be added. on a create, and Only an Administrator or Content Publisher can lock or unlock a page type. when you lack the role.

Note the reach of Content Locked: it makes existing pages read-only, not merely the section closed to new ones. If you want a section frozen against new pages but still editable, that is not what this flag does.

Documentation and API fields

documentationConfiguration is one object on the page type, and every key in it is defined in full on Documentation Configuration Reference. It appears here as a pointer table with the four cells that no other page will state.

KeyWhat it controlsDocumented in
layoutNameWhich documentation layout renders the set. Not customizable — alpha, bravo or charlie only, because the builder turns the value into a Handlebars partial path. It is also the one key whose absence from the merged config renders documentationConfiguration is missing! on every page of the setDocumentation Layouts
colorThemeThe color theme class nameThemes, Fonts and Code Themes
codeThemeThe syntax-highlighting theme class nameThemes, Fonts and Code Themes
fontThe documentation font class nameThemes, Fonts and Code Themes
logo.lightNav logo for light backgroundsDocumentation Header, Footer and Logos
logo.darkNav logo for dark backgroundsDocumentation Header, Footer and Logos
header.button.textLabel on the docs header buttonDocumentation Configuration Reference
header.button.hrefDestination of that buttonDocumentation Configuration Reference
menus.top · menus.left · menus.bottomEach holds a menu id, not a menu name. Only the left slot classifies a menu as a docs menu, which is why an existing site header or footer menu can be reused in top or bottom without triggering folder-path derivation or href-strippingLeft Navigation Menu
searchIndexIdWhich search index powers the set’s search boxSearch for Your Documentation
startingPageThe entry page used for breadcrumbs and navigationDocumentation Configuration Reference
tabGroupsThe only key that must be set in two places for two different reasons: the page-type copy is what the site build reads, the company copy is what the editor’s Tab Group dropdown reads. Applies to both — set bothTab Groups for Consistent Examples
openAPI.snippetLanguagesThe languages generated API pages emit snippets for. This is the same object as the reserved api-languages tab group, auto-created and self-repaired at company level and filtered out of the editor’s Tab Group menu — do not rename, trim or restyle it, the code will fight the editAPI Reference Pages
highlighter.extraLanguagesRead by nothing. The build reads the top-level company key extended.highlighter.extraLanguages, not this one. The row exists because the key is in the schema and a developer reading the API will see itKnown Limitations

Three of those keys carry a plan condition rather than a plan gate: colorTheme, codeTheme and font accept any of the built-in names on every plan, and need Starter only when you introduce a name of your own. The gate fires on change, so re-saving a stored custom value, clearing it, or swapping one built-in for another passes on any plan — Themes, Fonts and Code Themes has the built-in list.

FieldTypeDefaultApplies toRead byNotes / where it is explained
documentationConfigurationobject—Documentation and APICMS · build via {slug}.11tydata.jsonThe table above
navMenuIdstringderivedDocumentation and APICMS · build via pageTypeList.jsonSee the note below

Fields you cannot set

System and read-only fields

These exist on the record, appear in API and MCP responses, and are not yours to write.

FieldTypeWhat it is for
pageTypeIdstringThe record’s id, minted server-side at creation
companyIdstringThe workspace the record belongs to
appVersionstringThe Leed version that last wrote the record
navMenuIdstringDerived from documentationConfiguration.menus.left
isSlugLockedbooleanSet once a page of the type has been scheduled or published
isDirtybooleanWhether this page type has unpublished changes. It is what draws the amber dot
createdAt · createdBytimestamp · user idWhen the type was created, and by whom
modifiedAt · modifiedBytimestamp · user idWhen it last changed, and by whom
deletedAt · disabledAttimestampSoft-delete and disable markers

What reaches your repository

Three destinations, and knowing which one a field takes is the answer to “I changed it and my template still can’t see it”.

src/{slug}/{lastSegment}.11tydata.json — the page type’s own Eleventy directory data file, written on publish. It carries exactly three things: dateFormat, ogCard and documentationConfiguration. The file is named after the last segment of the slug, because an Eleventy directory data file must be named for the directory it sits in — so a page type at docs/api/1.2.0 writes src/docs/api/1.2.0/1.2.0.11tydata.json.

{
  "dateFormat": "MMM D, YYYY h:mma z",
  "ogCard": {
    "title": "Leed Documentation",
    "description": "Everything you can do with Leed."
  },
  "documentationConfiguration": {
    "layoutName": "charlie",
    "colorTheme": "color-theme-leed",
    "codeTheme": "code-theme-leed",
    "menus": { "left": "leeddocs" },
    "startingPage": "/docs/start-here/what-is-leed/"
  }
}

src/_data/pageTypeList.json — one shared file, keyed by page type id, holding the list-level fields: slug, name, layout, description, labels, aliases, redirectIndex, noRender, includeInFeeds, autolink, autopostNewPages, allowRecommendations, sitemapPriority, labelSiteMapPriority and navMenuId. This is what a template reads when it needs to know something about a different section than the one it is rendering — Global Site Data.

Everything else stays in the CMS. type, requiredFields, editorFormattingOptions, both locks, paging, readingWpm and aiTheme are never written to your repository, so no template and no build plugin can read them. If you overrode Page Size on a page type and the built listing did not change, this paragraph is why.

What lands in a page’s front matter — as opposed to its page type’s — is a separate contract, enumerated at Front Matter Reference.

ESC