{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs-realm.sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"redocly_category":"Realm","type":"markdown"},"seo":{"title":"OpenAPI extension: x-seo","description":"OpenAPI-generated documentation tool with 24k+ stars on Github - make APIs your company's superpower.","siteUrl":"https://redocly.com","image":"/assets/redocly-card.f670aae34a39545a5ea633a540cb3a4a333a1f23bb2ed3c4a1b17a5fbcf0ac85.db81178d.png","lang":"en-US"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"openapi-extension-x-seo","__idx":0},"children":["OpenAPI extension: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-seo"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-seo"]}," to control the SEO meta tags rendered in the HTML ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<head>"]}," of an individual operation page: the page title, description, keywords, and the image used when the page link is shared."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-seo"]}," replaces the legacy Redoc ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-meta"]}," extension (and its nested ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["seo"]}," object)."," ","The supported fields are identical: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["title"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["keywords"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["image"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"location","__idx":1},"children":["Location"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-seo"]}," extension in an Operation Object."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"options","__idx":2},"children":["Options"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Option"},"children":["Option"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":["Type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["title"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sets the page ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<title>"]},", and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["og:title"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["twitter:title"]}," meta tags for the operation page."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["description"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sets the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<meta name=\"description\">"]},", and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["og:description"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["twitter:description"]}," meta tags."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["keywords"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sets the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<meta name=\"keywords\">"]}," tag. Provide a comma-separated list of keywords."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["image"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sets the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["og:image"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["twitter:image"]}," meta tags — the rich preview image shown when the page link is shared."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a field is omitted, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["title"]}," falls back to the operation ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["summary"]},"."," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}," falls back to the operation ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]},", or to the operation ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["summary"]}," if the operation has no ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]},"."," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["keywords"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["image"]}," have no fallback and are added only when set."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"examples","__idx":3},"children":["Examples"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following example sets all four SEO fields on the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getMuseumHours"]}," operation:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"paths:\n  /museum-hours:\n    get:\n      summary: Get museum hours\n      description: Opening times for the museum, including holiday hours.\n      operationId: getMuseumHours\n      x-seo:\n        title: \"Custom page title\"\n        description: \"Detailed page description\"\n        keywords: documentation, operation, example\n        image: 'https://example.com/image.png'\n      responses: {}\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each field is resolved independently, so you can override only the fields you need."," ","In the following example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["title"]}," falls back to the operation ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["summary"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}," falls back to the operation ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]},", while ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["keywords"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["image"]}," come from the extension:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"paths:\n  /museum-hours:\n    get:\n      summary: Get museum hours\n      description: Opening times for the museum, including holiday hours.\n      operationId: getMuseumHours\n      x-seo:\n        keywords: museum, hours, opening times\n        image: 'https://example.com/museum.png'\n      responses: {}\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"resources","__idx":4},"children":["Resources"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/realm/content/realm-seo"},"children":["Search engine optimization"]}]}," - Configure site-wide SEO, meta tags, and social sharing for your Redocly project."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/realm/content/api-docs/openapi-extensions/x-metadata"},"children":["x-metadata"]}]}," - Add a custom metadata table to the top of the API overview (info-level metadata)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/realm/config/openapi/show-extensions"},"children":["Show extensions configuration"]}]}," - Control which extensions are included in your API reference documentation for optimal presentation."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/realm/content/api-docs/openapi-extensions"},"children":["Supported OpenAPI extensions"]}]}," - Complete list of all OpenAPI extensions supported by Redocly for enhanced API documentation."]}]}]},"headings":[{"value":"OpenAPI extension: x-seo","id":"openapi-extension-x-seo","depth":1},{"value":"Location","id":"location","depth":2},{"value":"Options","id":"options","depth":2},{"value":"Examples","id":"examples","depth":2},{"value":"Resources","id":"resources","depth":2}],"frontmatter":{"seo":{"title":"OpenAPI extension: x-seo"}},"lastModified":"2026-08-14T15:19:45.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/realm/content/api-docs/openapi-extensions/x-seo","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}