SEO
Docs are how people find your API. Every page carries the metadata search engines and link previews read, and you control it per project.
Settings
Open Docs settings in API Studio and choose SEO. Changes apply as soon as you save, without a publish. Each setting names its key under seo in octri.json, and the key octri docs seo set takes.
Search and social metadataon or offThe master switch. Off removes link previews, canonical links, the sitemap and llms.txt, and asks search engines not to index any page. What each switch does has the detail.
enabled · CLI enabled
Title strategychoice| Value | Studio label | Meaning |
|---|---|---|
dynamic | Dynamic per endpoint | Each page gets its own title, written with the Title template |
static | Same title on every page | Every page uses the Site title |
titleMode · CLI titleMode
Site titletextThe site's name in titles and previews, up to 120 characters.
title · CLI metaTitle
Title templatetextHow a page's title is written in dynamic mode. %s is the page's own title, so %s | Acme API gives List customers | Acme API.
titleTemplate · CLI titleTemplate
DescriptiontextWhat search results and link previews show for the home page, and for any page without a description of its own. Up to 300 characters.
description · CLI metaDescription
Open Graph image URLimageThe picture link previews show on social sites and in chat apps. Upload one, or paste a URL. A 1200 by 630 image suits every network.
ogImage · CLI ogImageUrl
KeywordstextKeywords, separated by commas. Most search engines ignore them, but some site search tools still read them.
keywords · CLI keywords
Allow search engines to index this siteon or offOff asks search engines not to index or crawl the docs. Link previews keep working, so you can share links to a site you're not ready to have found.
indexable · CLI indexable
X / Twitter handletextYour handle for link previews on X, without the @. An @ you type is removed.
twitter · CLI twitterHandle
The favicon is under Appearance.
Titles
Two modes:
%s is replaced with the page title:
%s | Acme API -> List users | Acme APIBetter for search: each page gets a distinct, descriptive title.
Indexable
indexable: false emits noindex, nofollow on every page. It's what you want on a staging site, and catastrophic if it survives to production: your docs quietly vanish from search and nothing looks broken.
Canonical URLs
Each page emits a canonical URL built from your docs base URL, so the same content served on both your Octri subdomain and your custom domain isn't treated as duplicate content. The canonical follows the domain the reader is on.
Open Graph
The OG image is what appears when someone drops a link in Slack. Without one, the preview is a bare title and URL.
A single branded image applied site-wide covers every share. Per-page images are a nice-to-have that mostly go unshipped.
What you get without configuring anything
Sensible defaults: the project name as the site name, the page title as the title, and a description derived from the page. Configure the settings to improve on that, not to make it work.
What each switch does
There are two separate switches. Search and social metadata turns off everything. Allow search engines to index this site only controls crawling, so an internal site can stay out of search and keep its link previews.
| Both on | Not indexable | Metadata off | |
|---|---|---|---|
robots.txt | Allows, and lists the sitemap | Disallows everything | Disallows everything |
sitemap.xml | Every page | Empty | Empty |
llms.txt | Served | Served | Not served |
| Page robots tag | index,follow | noindex,nofollow | noindex,nofollow |
| Social cards | Yes | Yes | No |
| Canonical links | Yes | Yes | No |
| Keywords | Yes | Yes | No |
| Title and description | Yes | Yes | Yes |
Structured data
Pages include TechArticle and BreadcrumbList structured data, so search engines understand what they are and where they sit.
New pages reach search engines
When you publish, Octri tells search engines that support IndexNow which pages changed, so updates can be picked up sooner.
Examples
A title for every page, and a site that's not indexed yet:
"seo": {
"titleMode": "dynamic",
"title": "Acme API",
"titleTemplate": "%s | Acme API",
"description": "Take payments with the Acme API: guides, reference and SDKs.",
"indexable": false
}octri docs seo set metaTitle="Acme API" titleTemplate="%s | Acme API" indexable=falseFor one page's title and description, see search title and description.