# OpenAPI extension: `x-seo`

Use `x-seo` to control the SEO meta tags rendered in the HTML `<head>` of an individual operation page.
The tags include the page title, description, keywords, and the image used when the page link is shared.

`x-seo` replaces the legacy Redoc `x-meta` extension (and its nested `seo` object).
The supported fields are identical: `title`, `description`, `keywords`, and `image`.

## Location

Use the `x-seo` extension in an Operation Object.

## Options

| Option | Type | Description |
| --- | --- | --- |
| title | string | Sets the page `<title>`, and the `og:title` and `twitter:title` meta tags for the operation page. |
| description | string | Sets the `<meta name="description">`, and the `og:description` and `twitter:description` meta tags. |
| keywords | string | Sets the `<meta name="keywords">` tag. Provide a comma-separated list of keywords. |
| image | string | Sets the `og:image` and `twitter:image` meta tags — the rich preview image shown when the page link is shared. |

When a field is omitted, `title` falls back to the operation `summary`.
`description` falls back to the operation `description`, or to the operation `summary` if the operation has no `description`.
`keywords` and `image` have no fallback and are added only when set.

## Examples

The following example sets all four SEO fields on the `getMuseumHours` operation:

```yaml
paths:
  /museum-hours:
    get:
      summary: Get museum hours
      description: Opening times for the museum, including holiday hours.
      operationId: getMuseumHours
      x-seo:
        title: "Custom page title"
        description: "Detailed page description"
        keywords: documentation, operation, example
        image: 'https://example.com/image.png'
      responses: {}
```

Each field is resolved independently, so you can override only the fields you need.
In the following example, `title` falls back to the operation `summary` and `description` falls back to the operation `description`.
The `keywords` and `image` values come from the extension:

```yaml
paths:
  /museum-hours:
    get:
      summary: Get museum hours
      description: Opening times for the museum, including holiday hours.
      operationId: getMuseumHours
      x-seo:
        keywords: museum, hours, opening times
        image: 'https://example.com/museum.png'
      responses: {}
```

## Resources

- **[SEO in your project](/docs/realm/content/realm-seo)** - Configure site-wide SEO, meta tags, and social sharing for your Redocly project
- **[x-metadata](/docs/realm/content/api-docs/openapi-extensions/x-metadata)** - Add a custom metadata table to the top of the API overview (info-level metadata)
- **[Show extensions configuration](/docs/realm/config/openapi/show-extensions)** - Control which extensions are included in your API reference documentation for optimal presentation
- **[Supported OpenAPI extensions](/docs/realm/content/api-docs/openapi-extensions)** - Complete list of all OpenAPI extensions supported by Redocly for enhanced API documentation
