One-liner
Not one page on the site emits <link rel="canonical">, and the root layout sets no metadataBase. Every URL variant of a page — query strings, tracking parameters, the /en/ prefixed form — is a separate document to a search engine, with nothing declaring which one is real.
Measured
$ grep -rn "metadataBase\|canonical\|alternates" apps/docs --include=*.ts --include=*.tsx | grep -v node_modules
(no matches)
$ curl -s http://localhost:3999/docs/data-modeling/objects | grep -c 'rel="canonical"'
0
Without metadataBase, any relative URL handed to openGraph/alternates resolves against a build-time guess rather than the real origin — which is why it must land before, or with, the Open Graph card.
Expected
apps/docs/app/layout.tsx: metadataBase: new URL('https://objectstack.ai'), from the same shared origin constant the sitemap uses.apps/docs/app/[lang]/docs/[[...slug]]/page.tsxgenerateMetadata: alternates: { canonical: page.url }.- Same for the homepage, the blog index and blog posts.
Acceptance
Source
Found in an SEO review of the docs site (apps/docs) run on 2026-08-25, measured against the local dev server and against production. The canonical origin is https://objectstack.ai — maintainer ruling recorded in #10659:
这个仓的文档站规范 URL 是 https://objectstack.ai
One-liner
Not one page on the site emits
<link rel="canonical">, and the root layout sets nometadataBase. Every URL variant of a page — query strings, tracking parameters, the/en/prefixed form — is a separate document to a search engine, with nothing declaring which one is real.Measured
Without
metadataBase, any relative URL handed toopenGraph/alternatesresolves against a build-time guess rather than the real origin — which is why it must land before, or with, the Open Graph card.Expected
apps/docs/app/layout.tsx:metadataBase: new URL('https://objectstack.ai'), from the same shared origin constant the sitemap uses.apps/docs/app/[lang]/docs/[[...slug]]/page.tsxgenerateMetadata:alternates: { canonical: page.url }.Acceptance
<link rel="canonical">, absolute, onhttps://objectstack.ai/docs/x?utm_source=yand/docs/xboth canonicalise to/docs/xmetadataBaseSource
Found in an SEO review of the docs site (
apps/docs) run on 2026-08-25, measured against the local dev server and against production. The canonical origin ishttps://objectstack.ai— maintainer ruling recorded in #10659: