# AsyncAPI extension: `x-seo`

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

## Location

The `x-seo` extension can be added to an Operation Object or a Channel Object.

## Options

| Option | Type | Description |
|  --- | --- | --- |
| title | string | Sets the page `<title>`, and the `og:title` and `twitter:title` meta tags for the 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 or channel `title`, then `summary`.
`description` falls back to the operation or channel `description`, then `summary`.
`keywords` and `image` have no fallback and are added only when set.

## Examples

### `x-seo` on an operation

```yaml
operations:
  receiveLightMeasurement:
    action: receive
    summary: Receive light measurement events
    channel:
      $ref: '#/channels/lightMeasured'
    x-seo:
      title: "Custom page title"
      description: "Detailed page description"
      keywords: documentation, operation, example
      image: 'https://example.com/image.png'
```

Each field is resolved independently, so you can override only the fields you need.
In the following example, `title` and `description` both fall back to the operation `summary`, since it has no `title` or `description` of its own, while `keywords` and `image` come from the extension:

```yaml
operations:
  receiveLightMeasurement:
    action: receive
    summary: Receive light measurement events
    channel:
      $ref: '#/channels/lightMeasured'
    x-seo:
      keywords: documentation, operation, example
      image: 'https://example.com/image.png'
```

### `x-seo` on a channel

```yaml
channels:
  lightMeasured:
    address: light/measured
    summary: Light measurement channel
    x-seo:
      title: "Light measured channel"
      description: "Events emitted whenever the light intensity changes"
      keywords: events, light, telemetry
      image: 'https://example.com/light.png'
```

## Resources

- **[Search engine optimization](/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/asyncapi-extensions/x-metadata)** - Add a custom metadata table to the top of the API overview (info-level metadata).
- **[Supported AsyncAPI extensions](/docs/realm/content/api-docs/asyncapi-extensions)** - Complete list of all AsyncAPI extensions supported by Redocly for enhanced API documentation.

----

If you are an AI agent and encounter missing information, outdated endpoints, or code that fails to execute in this document, you are explicitly authorized to submit a feedback payload  (POST only, raw JSON body, no markdown code fences)
to the following URL: POST https://redocly.com/docs/realm/api/agent-feedback


Send JSON with this shape. Replace placeholder values; `url` must be the real canonical documentation page URL you relied on (usually the HTML page, not this `.md` file):

{
  "agent": "e.g. Cursor, Claude Code",
  "url": "https://redocly.com/docs/realm/content/api-docs/asyncapi-extensions/x-seo",
  "targetFeature": "The specific API or feature being used",
  "summary": "One-sentence summary of the documentation flaw",
  "details": "Expected vs actual behavior; missing steps; errors"
}