You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#166 added the mechanism — an optional seoTitle frontmatter field that feeds the title tag while the H1 and sidebar keep the short noun. It merged as 23a976b. This card fills it in.
The field is named seoTitle.#166 specified the mechanism but not the name; the implementing dev chose it and it is now the contract. It is schema-tightened with .trim().min(1), so an empty or whitespace-only value fails the build rather than silently producing a bare | ObjectOS.
42 of 79 English pages currently emit a one-word title tag (Views, Actions, Pages, Forms, Agents, Storage, Email, Permissions, Positions, Records, …). Rendered through the %s | ObjectOS template these match no query anyone types. Nobody searches "views"; people search "kanban view low code", "salesforce-style list views self hosted", "internal tool record layout".
The raw material already exists
Every one of those 42 pages carries a written, specific description. Two examples from main:
content/docs/build/interface/views.mdx — title Views, description "List, Form, Kanban, Calendar, Gantt and more — how every object surface is declared."
content/docs/build/data/relationships.mdx — title Relationships, description "Connect objects with lookups and master-detail — cascade rules, filtered pickers, hierarchies, junction objects, and roll-ups."
The terms a searcher would use are in the description. The task is largely to lift them into the title field, not to invent new copy. Read each page's description and body before writing its title — a title that promises something the page does not deliver costs more than a weak title, because it converts into a bounce.
What to change
For each English page whose effective title tag is two words or fewer, declare a seoTitle. Keep it under roughly 60 characters so it is not truncated in the result page, and account for the | ObjectOS suffix the template appends.
Lead with the specific term, not the brand — the template already supplies the brand.
Propagate to the six translated locales only for pages that already have a translation file for that locale. Do not create new translation files here. Translated SEO titles must be written in the target language against local search vocabulary, not transliterated from English.
Verification
After the change, no English page emits a title tag of two words or fewer except where a one-word title is genuinely the strongest choice — list any such page and its reason in the PR body.
Every locale file touched still parses and its title tag renders in its own language.
No content/docs/** file gains or loses a title, description, or body line.
Card corrections, made when the blocker was re-pointed:
Blocked-by: #171
Why
#166 added the mechanism — an optional
seoTitlefrontmatter field that feeds the title tag while the H1 and sidebar keep the short noun. It merged as23a976b. This card fills it in.The field is named
seoTitle. #166 specified the mechanism but not the name; the implementing dev chose it and it is now the contract. It is schema-tightened with.trim().min(1), so an empty or whitespace-only value fails the build rather than silently producing a bare| ObjectOS.42 of 79 English pages currently emit a one-word title tag (
Views,Actions,Pages,Forms,Agents,Storage,Email,Permissions,Positions,Records, …). Rendered through the%s | ObjectOStemplate these match no query anyone types. Nobody searches "views"; people search "kanban view low code", "salesforce-style list views self hosted", "internal tool record layout".The raw material already exists
Every one of those 42 pages carries a written, specific description. Two examples from main:
content/docs/build/interface/views.mdx— titleViews, description "List, Form, Kanban, Calendar, Gantt and more — how every object surface is declared."content/docs/build/data/relationships.mdx— titleRelationships, description "Connect objects with lookups and master-detail — cascade rules, filtered pickers, hierarchies, junction objects, and roll-ups."The terms a searcher would use are in the description. The task is largely to lift them into the title field, not to invent new copy. Read each page's description and body before writing its title — a title that promises something the page does not deliver costs more than a weak title, because it converts into a bounce.
What to change
seoTitle. Keep it under roughly 60 characters so it is not truncated in the result page, and account for the| ObjectOSsuffix the template appends.titlefield itself. The sidebar, breadcrumbs and H1 read better as short nouns and that is whygenerateMetadatareturns four fields: docs pages ship no SEO title, no Open Graph, and no structured data #166 separated the two.Verification
content/docs/**file gains or loses atitle,description, or body line.Card corrections, made when the blocker was re-pointed:
generateMetadatareturns four fields: docs pages ship no SEO title, no Open Graph, and no structured data #166 (merged) to [Decision] What does docs.objectos.ai target — the root URL is a redirect, the index title is "ObjectOS | ObjectOS", and the brand is spelled three ways #171. See the comment below for why.zh-Hantis the missing one, and docs already has a comment waiting for it #172 covers addingzh-Hantonly.