Skip to content

[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

Description

@hotlong

Every other card in this keyword pass (#166 #167 #168 #169 #170) is mechanical. This one is not: it asks what this domain is supposed to rank for, and the answer changes how #167 is written.

The four readings behind it

1. The strongest URL on the domain has no content. apps/docs/app/page.tsx is a bare redirect('/docs'), and app/[lang]/page.tsx does the same per locale. Meanwhile app/sitemap.ts:13 submits that redirecting root at priority: 1 — the highest priority entry in the sitemap points at a URL that serves nothing.

2. The page it redirects to titles itself with the brand twice. content/docs/index.mdx has title: ObjectOS, and app/layout.tsx:7-10 appends the template %s | ObjectOS. The landing page of the documentation site emits <title>ObjectOS | ObjectOS</title>.

3. The brand is spelled three different ways in the shipped output. ObjectOS in the title template and the nav (lib/layout.shared.tsx:21-31); ObjectStack Protocol in the Open Graph card (app/og/docs/[...slug]/route.tsx:19); ObjectStack Documentation in the i18n docblock (lib/i18n.ts:4). Brand queries are normally the highest-converting class of query a docs site gets, and the entity signal here is split across three names.

4. The index page pitches what README says is the other product. content/docs/index.mdx opens with "ObjectOS is a self-hosted runtime for building internal tools … All running in your network, on your database", then npm i -g @objectstack/cli and os start. But README.md draws the line the other way: ObjectOS is the commercial Cloud / Enterprise product, and ObjectStack is "the open-source framework … everything you need to build, run, and self-host your own applications". So the highest-authority page on docs.objectos.ai is currently competing for the self-host keyword cluster that README assigns to ObjectStack — and lib/layout.shared.tsx:11 shows there is already a separate marketing site at www.objectos.ai that may be the intended owner of those terms.

Whichever way this resolves, it resolves in one place and the rest follows.

Options

A — Docs stays documentation. Marketing owns head terms.
Leave / redirecting; drop the empty path from the sitemap so it stops advertising a redirect; give content/docs/index.mdx a real title instead of the brand; unify the brand string to ObjectOS everywhere; rewrite the index opening so it describes ObjectOS as README defines it and links to ObjectStack for the self-host story. Head terms are www.objectos.ai's job and this repo does not chase them.
Cheapest, and it keeps one product story in one place.

B — Docs also carries a real landing page at /.
Everything in A, plus replace the root redirect with an actual page targeting the head cluster, with Organization and SoftwareApplication JSON-LD to anchor the entity.
Developer docs domains often outrank their own marketing domain on product queries, so this can win. It also means two pages in two repos now compete for the same terms, and both have to be kept in sync forever.

C — Fix the signals, defer the positioning.
Do the mechanical half of A only — sitemap, brand string, index title — and leave the ObjectOS / ObjectStack keyword split alone for now.
Unblocks #167 on everything except the pages where the two products overlap, and defers the part that needs a real product answer.

四维分析

实际业务需求。 有实测支撑的只有一件事:README 与 index.mdx 对同一个产品给出两套说法,这不是 SEO 口味问题,是文档首页在替兄弟产品打广告。真实来访者读到 os start 会以为买的是自托管运行时,而 README 说那是 ObjectStack。这条轴支持 A/B 里"重写首页定位"那一半,且与排名无关也该做。至于 docs 域名要不要抢 head term——目前没有任何读数(无 Search Console 数据、无当前排名基线),谁在搜什么是假设不是事实。这条轴因此不支持 B:为一个没有测量过的流量假设去开第二个落地页,是投机性能力面。

项目长远合理性。 一个词一个所有者、一个产品一套说法,是可持续的信息架构;B 制造的是两个仓、两个页面、同一组关键词的长期同步义务,正是 contract-first 要避免的那种双写。A 把"ObjectOS 是什么"收敛到单一来源,下游(#170 的 llms.txt 摘要、#166 的 entity JSON-LD、www 站文案)都从那里取值。C 是 A 的真子集,不制造新债,但把最贵的那半留在原地。

防 AI 写代码犯错。 这条轴在这里的落点是:定位漂移是怎么进来的?是散文写在 79 个 MDX 页面里、没有任何机制说"这句话和 README 矛盾"。选 A/B 时如果只是手改一遍首页文案,半年后同样的漂移会以同样的方式回来(三个品牌串就是这么攒出来的)。真正的修法是把品牌名与一句话定位变成代码里的单一常量 + 一条门禁,让下一个写文档的人(或 agent)改不动、或者改了会红。这条轴要求:无论选哪个选项,都把品牌串收敛成一个常量,否则三种拼写还会变成第四种。

创业阶段不扩散需求。 明确指向 A 或 C,反对 B。B 是新增一个需要长期维护的落地页与一套 entity 标记,去博一个未经测量的渠道;创业阶段该做的是先把已经付了成本却在漏的东西补上(#166 的 OG 生成器已构建但无人引用、#170 的 llms.txt 已生成却被 robots 挡住),而不是开新面。A 相对 C 只多了"重写首页定位"这一件事,而那件事第一条轴已经独立支持了。

倾向 A,并把"品牌串收敛为单一常量"作为 A 的必含项。B 留到有真实排名基线之后再谈;C 只在你希望把产品定位这一半再放一放时选。


Not blocking #166 #168 #169 #170 — those four are independent of this and can land in any order. #167 is partly blocked: the pages where ObjectOS and ObjectStack overlap cannot get final titles until this resolves.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions