> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://contentful.com/developers/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://contentful.com/_mcp/server.
# Compose content model and SEO
> Learn about the fundamentals of the content model that powers Compose. Compose specific content types | Compose SEO content type and entry
> **Info**
>
> Compose is being deprecated. It is in maintenance mode and won’t be updated with any new features. Current installations will work until the end of 2026.
> **Info**
>
> This document describes Compose that is driven by a legacy content model. If you set up Compose after April 21st 2022, please refer to the updated [Compose documentation](/compose/what-is-compose).
## Structure of Compose content model
The image and explanations below describe the elements of the Compose content model and connections between them.

Compose content model consists of the following content types:
Compose: Page - represents a web page in Compose. This entry acts as a container for content and other page-related settings (such as the page title, slug and SEO metadata).
Compose: SEO - contains page SEO metadata and is linked to "Compose: Page" through SEO Metadata reference field.
**Page type(s)** - one or more custom content types – each with a custom set of fields – that define the content structure for different kinds of pages
## Compose specific content types
Compose requires two specific content types that define the structure of a web page and SEO metadata:
|
**Content type name**
|
**ID**
|
|
Compose: Page
|
`page`
|
|
Compose: SEO
|
`seo`
|
These content types are generated programmatically when setting up Compose in a space environment.
### Compose: Page
This content type represents a web page in Compose. It serves as an abstract entity containing common page-related information such as title, slug, SEO metadata and the actual content. Compose only lists the entries of the "Compose: Page" content type which can be edited in the page editor.
When building the frontend for a website the "Compose: Page" entries are the main entry point for fetching all the information that is required to render a page and its content.
The image below displays "Compose: Page" content type and the fields that it contains. Please see the table below the image for further explanations.

|
**Field ID**
|
**Field name**
|
**Description**
|
|
`name`
|
Internal name
|
Name of the page. Used to identify the page in the page list and the Contentful web app.
|
|
`title`
|
Page title
|
Will be displayed at the top of the page when published.
|
|
`slug`
|
Slug
|
The last part of the URL for the page. Generated from "Page title" field.
|
|
`seo`
|
SEO Metadata
|
Links an entry with SEO related configuration to the page.
|
|
`content`
|
Content
|
Links a specific page type entry, e.g. "Landing page" or "Article page" to the page.
|
The "Content" field links to a specific [page type](/compose/legacy/page-types) entry. Its validation must be configured to *accept specific content types* representing custom page types, e.g. "Landing page" or "Help Center Article". Compose uses this validation setting to determine the available page types when creating new pages.
### Compose: SEO
SEO-related page metadata are managed in an entry of the "Compose: SEO" content type. For each Compose page a "Compose: SEO" entry is automatically created and linked to the "SEO Metadata" reference field of the relevant "Compose: Page" entity.
To ensure that search engines can consume the SEO metadata, the frontend application needs to render the values in the corresponding HTML meta-tags. Check our [tutorial](/compose/legacy/building-a-website-with-compose-in-next-js) for an example on how to [render the SEO meta-tags](/compose/legacy/building-a-website-with-compose-in-next-js#rendering-metadata) for a website.
The image below displays "Compose: SEO" content type and the fields that it contains. Please see the table below the image for further explanations.

|
**Field ID**
|
**Field name**
|
**Description**
|
|
`name`
|
Internal name
|
Autogenerated display name.
|
|
`title`
|
SEO Title
|
SEO optimized page title. Should be rendered in the
[\ tag](https://moz.com/learn/seo/title-tag)
.
|
|
`description`
|
Description
|
[Meta description](https://moz.com/learn/seo/meta-description)
of the page: A brief summary of the web page that often is displayed in search engine results.
|
|
`keywords`
|
Keywords
|
Page related SEO keywords.
|
|
`no_index`
|
Hide page from search engines (noindex)
|
Values are
`true`
,
`false`
or empty. Should be used for
[Robots meta directives](https://moz.com/learn/seo/robots-meta-directives)
.
|
|
`no_follow`
|
Exclude links from search rankings (nofollow)
|
Values are
`true`
,
`false`
or empty. Should be used for
[Robots meta directives](https://moz.com/learn/seo/robots-meta-directives)
.
|
The "name" field is used by Compose to programmatically assign the internal name of the containing page to the entry by using following convention:
`{Internal name of page} - Compose: SEO`
Example:
|
**Internal name of page**
|
**Applied name**
|
|
Introduction to Contentful
|
Introduction to Contentful - "Compose: SEO"
|
This makes it easy to see to which page the "Compose: SEO" entry belongs to in the Contentful web app or in the Launch app.
> **Info**
>
> Since the "name" field is programmatically managed it does not appear in the Compose UI. If the containing "Compose: Page" entry is renamed using the web app or the API the changes won’t be reflected until the page is reloaded into the page editor in Compose.
> Learn about the fundamentals of the content model that powers Compose. Compose specific content types | Compose SEO content type and entry