Expanding a page type on Settings → Page Types opens its settings panel. This page is the field-by-field reference for that panel.
The panel is different for each kind. A posts type has roughly twenty controls; a documentation type has eight plus a configuration block; an API type has four plus a configuration block and a delete control. Every section below marks which kinds a field exists on, and the matrix at the end of this page collects that in one table. Edits autosave — there is no Save button — and each field’s row in the matrix also says whether the change needs a deploy to reach your site.
Fields by kind
| Field | Posts | Documentation | API | Publish-tracked? |
|---|---|---|---|---|
| Name | ✓ | ✓ | ✓ | Yes |
| Slug | ✓ | ✓ | ✓ | Yes |
| Layout | ✓ | fixed | fixed | Yes |
| Labels | ✓ | — | — | Yes |
| Redirect Index | ✓ | — | — | Yes |
| Section aliases | API only | API only | API only | Yes |
| Description | API only | API only | API only | Yes |
| Feature Image Required | ✓ | ✓ | — | No |
| Summary Required | ✓ | ✓ | — | No |
| Keywords Required | ✓ | ✓ | — | No |
| Form Attachment | ✓ | ✓ | — | No |
| Editor Formatting Options | ✓ | — | — | No |
| Enable Recommendations | ✓ | — | — | Yes |
| Enable Autolinking | ✓ | ✓ | — | Yes |
| Show In Feeds | ✓ | — | — | Yes |
| Autopost New Pages | ✓ | — | — | Yes |
| Do Not Render | ✓ | — | — | Yes |
| Page Minimum / Page Size | ✓ | — | — | No |
| Sitemap Priority | ✓ | — | — | Yes |
| Label Sitemap Priority | ✓ | — | — | Yes |
| Social Title / Social Description | ✓ | — | — | Yes |
| Reading Speed | ✓ | — | — | No |
| Date Format | ✓ | — | — | Yes |
| AI Image Theme Guide | ✓ | — | — | No |
| Documentation configuration block | — | ✓ | ✓ | Yes |
| Content Locked | ✓ | ✓ | forced on | No |
| Navigation Menu Locked | ✓ | ✓ | ✓ | No |
API only means the field exists in the data model and reaches your published site, but has no control on this screen — you set it through the API or an MCP client. Publish-tracked means a change queues a Page Types entry on the Deploy screen; the rest take effect in the CMS the moment you save and never queue anything.
Identity
Name
The display name in the CMS, and the name your templates see in pageTypeList.json. Renaming is safe — it changes no URL — but it does mark the type as needing a publish, because the name is site-facing data.
Slug and the slug lock
The slug is the URL prefix for the entire section. A page type whose slug is blog puts every one of its pages under /blog/.
It is validated against ^([a-z0-9]+([-.][a-z0-9]+)*)(\/[a-z0-9]+([-.][a-z0-9]+)*)*$ with a 150-character cap, or may be empty for a section that sits at your site root. Segments are lowercase alphanumeric with dashes or dots inside them, and / is allowed between segments — which is how a versioned API set gets a nested root like docs/api/1.2.0.
Redirect Index
What a visitor should get when they hit the section root — /blog/ with nothing after it. Four forms are accepted:
| Value | Result |
|---|---|
first | Redirects to the first page of the section |
last | Redirects to the most recent page of the section |
A path starting with / | Redirects there; a trailing slash is added if you omit one |
| A full URL with a scheme | Redirects off-site |
Whatever you set becomes two rules in your site’s _redirects file — one for /{slug}/ and one for /{slug}/index.html — both issued as 302 (temporary), not 301. Leave it empty and the section root is served by whatever index template your repository has for it.
Layout
The Handlebars layout file that renders pages of this type, relative to your repository’s _layouts directory. Posts types only.
Documentation and API types have no Layout field: they are pinned to leed-documentation.hbs, and Leed deliberately does not create that file in your repository. It is a system layout resolved inside the site builder. Pointing a documentation set at a file of your own does not work, because the name it stores becomes a Handlebars partial path rather than a path to a file you author. Layouts and Page Types covers what a posts layout has to contain.
Labels
Labels attached to the page type itself rather than to a page. They reach your templates and feeds for the whole section, which is useful for a section-level topic or a routing tag. Posts types only.
Required fields
Four controls decide what an author must supply before a page of this type can go out:
- Feature Image Required
- Summary Required
- Keywords Required
- Form Attachment — a listbox with Not Allowed, Optional and Required
They are enforced at publish and at schedule, not while editing. A page missing something comes back as a 400 naming exactly what is missing:
{ "error": "Missing required fields", "missingFields": ["summary"] }The stored shape is small, and this is what the API sees:
{
"featureImage": false,
"form": "NotAllowed",
"summary": true,
"keywords": false
}Documentation types default to summary-only, which is why a documentation page publishes without a feature image but refuses to publish without a summary.
Editor formatting options
Posts types carry a pill row of nine toggle buttons under the heading Editor Formatting Options, described in the panel as “Toggle which toolbar buttons are available for this page type.” Turning one off removes that block’s button from the editor toolbar for every page of the type.
The consequence that matters more than the toggles themselves: content written through the API or by an AI agent that uses a disabled feature is rejected, not silently stripped. The request comes back as a 400 reading “This page type does not allow: Table, Alert. Allowed formatting features: Code Block.” So the toggles are a real content contract, not a UI convenience — if you disable tables on your blog, nothing can put a table on a blog page.
All nine toggles, their schema keys and defaults
| Toggle label | Schema key | Default | Block it removes from the toolbar |
|---|---|---|---|
| Code Block | codeBlock | On | Fenced code blocks with syntax highlighting |
| Diagrams (Mermaid) | diagrams | Off | Mermaid diagram blocks |
| Math Block | mathBlock | Off | Block and inline math |
| Alert | alert | Off | The five alert containers — note, tip, info, warning, danger |
| Icons | icons | Off | Inline and block icons |
| Tab Group | tabGroup | Off | Tab containers |
| iFrame | iframe | Off | Embedded iframes |
| Collapsible Block | collapsibleBlock | Off | Collapsible details/summary blocks |
| Table | table | Off | Tables |
Code Block is the only one on by default. Everything else starts off, so a brand-new posts type gives its authors a deliberately plain toolbar until you widen it.
This setting applies to posts types only
The pill row renders only on the posts panel, and that matches enforcement exactly: the server-side check returns early for any page type that is not posts. A documentation or API page can use every block regardless of what is stored on its type. If your documentation pages need alerts, tables, tab groups and diagrams — and they will — there is nothing to switch on.
Which toolbar buttons an author actually sees, and what happens when they reach for a disabled one, is the reader-facing half of the same setting: What Each Page Type Lets You Format.
Section behavior
Five checkboxes on posts types (one of which documentation types share):
| Checkbox | What it does |
|---|---|
| Enable Recommendations | Makes pages of this type eligible to appear as recommendations on other pages. It does not add a recommendations panel to these pages — the direction catches people out. |
| Enable Autolinking | Whether autolink terms are inserted into pages of this type. Also present on documentation types. |
| Show In Feeds | Include pages of this type in your site’s feeds. |
| Autopost New Pages | Announce newly published pages of this type to your connected notification destinations. Whether the announcement is actually sent depends on your plan; the checkbox itself is not gated. |
| Do Not Render | The site builder skips rendering pages of this type as standalone URLs. Your templates can still pull their content in. Useful for fragments that only ever appear embedded. |
Company-default overrides
The Configuration Overrides block on a posts type lets the section depart from your workspace defaults. Leave a field empty and it inherits; the placeholder shows the inherited value followed by (default).
| Setting | Controls | Inherited from |
|---|---|---|
| Page Minimum / Page Size | Pagination on the section’s list pages | Settings → General |
| Sitemap Priority | The priority hint for pages of this type in your sitemap | Settings → General |
| Label Sitemap Priority | The priority hint for this type’s label index pages | Settings → General |
| Social Title / Social Description | Defaults for social sharing cards | Settings → General |
| Reading Speed | Words per minute behind read-time estimates | Settings → General |
| Date Format | How dates render on pages of this type | Settings → General |
| AI Image Theme Guide | Style guidance handed to the AI feature-image generator | Settings → General |
The values a blank field falls back to are set once, workspace-wide, in Default Content Configuration.
Aliases on a page type
A page type can carry alias roots. Each one becomes a wildcard redirect for the whole section in your site’s _redirects file:
/{alias}/* /{slug}/:splat 301So an alias of articles on a page type whose slug is blog sends /articles/how-we-ship/ to /blog/how-we-ship/, permanently, without you listing a single page. That is the tool for renaming a section — quite different from a per-page redirect, which follows one page as its slug changes. Compare Aliases and Redirects.
There is no control for section aliases on the Page Types screen today; they are set through the API or an MCP client. Per-page aliases do have a control, in the editor’s Page settings tab.
Documentation configuration
Documentation and API types replace the posts overrides with a Documentation Configuration Overrides block: theme, code theme, font, layout, logos, the header button, the starting page, the search index and the three menu slots. Every field, its type and its default is listed in Documentation Configuration Reference — that page owns them. Three things belong here instead, because they are facts about the page type rather than about documentation.
The page type is the only durable home for this block. A copy written at company level is read by the CMS editor, but the site build never reads it from there: the company record’s site-builder projection does not carry documentationConfiguration at all, and every writer of the site-wide data file re-serializes the whole file from that projection — so a hand-added block is deleted from your repository by the next settings save, batch publish or billing change. The page-type copy round-trips into src/{slug}/{slug}.11tydata.json on publish and survives.
Set the complete block on the page type, not a delta. That means layoutName, colorTheme, codeTheme, font, menus.left and menus.top and menus.bottom, header.button, logo.light and logo.dark, startingPage and tabGroups. The panel shows an inherited company value grayed as (company default), which reads as “this is set” and is not — it displays, it does not publish.
Two asymmetries are worth knowing before you fill the block in:
menus.topandmenus.bottominherit your company defaults in the panel;menus.leftnever does. A documentation set’s left menu is always its own, which is why Leed creates one for you when the type is created.tabGroupshas to exist in both places. The editor’s Tab Group menu reads the company copy, while the build reads whatever lands in the page’s merged data. A group defined only on the page type is invisible in the editor; a group defined only at company level is not carried into the docs data file. Define it in both.
Custom theme, code-theme and font names
Two facts belong next to that badge, because they produce a different error:
- The stored value is the full prefixed class —
color-theme-leed,code-theme-leed,font-noto-sans— while the bare name after the prefix is validated against^[a-z0-9]{1,32}$. Lowercase letters and digits only, no dashes. Socolor-theme-leed-aiis rejected with a 400 on every plan, not a 402: “Invalid colorTheme: a custom name must be lowercase letters and numbers only, at most 32 characters.” One dash too many looks like a billing problem and is not. layoutNameaccepts no custom value at all, by design, because the builder turns it into a Handlebars partial path.
The catalogs — and what happens when you type a name that is not in them — are in Themes, Fonts and Code Themes. A custom name only means anything once matching CSS exists in your repository, which is Custom Documentation Themes.
The two locks
Two independent checkboxes, each saving immediately with no publish, each restricted to Administrators and Content Publishers.
| Lock | Blocks | Still allowed | Who can set it | Needs a publish? |
|---|---|---|---|---|
| Content Locked | Creating new pages of the type, and editing existing ones — they become read-only | Reading, publishing state as it stands, deleting the type | Administrator, Content Publisher | No |
| Navigation Menu Locked | Reordering, moving or removing this set’s pages in its documentation menu, and renaming its folders — anything that would change a URL. Returns 403 | Icon, tooltip, expanded and disabled edits on menu items | Administrator, Content Publisher | No |
The panel spells both out. Content Locked reads “No new pages can be added to this page type, and existing pages become read-only.” Navigation Menu Locked reads “Pages in this set can’t be reordered, moved, or removed from its navigation, and folders can’t be renamed. Presentation settings (tooltip, icon, expanded) stay editable.”
Content Locked is forced on and disabled for API types. The panel explains why: “API content is generated from its spec and is always read-only — this cannot be turned off for API documentation sets.”
Navigation Menu Locked is the setting that makes a published documentation set’s URLs immovable, which is the right state for a set other people link to. Left Navigation Menu shows what an editor sees while it is on.
Per-type access overrides
Below the settings, each page type carries a row of role-override pickers — Content Manager, Approver and Contributor — that elevate a chosen team member on this page type alone. Someone who is Read Only everywhere else can be a Contributor on your blog. The grant is live in the CMS immediately and never needs a deploy.
How overrides combine with a person’s base role — the stronger of the two always wins — is on Resource-Level Access Overrides.