# Share cards, Markdown negotiation and one site identity

Docs pages share with their own card, single-visitor pages are noindex and previews send X-Robots-Tag, agents get Markdown through Accept, the root OAuth discovery documents answer, and the brand lives in one leaf that setup fills.

Developer docs pages now share with their own title, description and a default-template card, and carry a `TechArticle` with a breadcrumb trail; posts and profiles add `BlogPosting` and `ProfilePage`, and every page declares the `Organization` next to the `WebSite`. The `og:locale:alternate` tags are rendered by the root document, one per other locale: TanStack's head keeps one meta per property and had dropped all but the first. `seo()` gained `noindex`, `monolingual` and `markdown` ([SEO and discovery](/docs/features/seo)).

Sign-in, sign-up, password, two-factor, verify-email, consent and invitation pages are `noindex`, and every response from an origin other than `VITE_SITE_URL` carries `X-Robots-Tag: noindex`, so PR preview Workers and `workers.dev` hosts stay out of search indexes. `/robots.txt` allows `/api/og/` so social crawlers can fetch share images, the sitemap dates entries where a real date exists (posts, the legal pages, docs from frontmatter or the git commit date) and no longer lists the Markdown copies, which every page links as a `text/markdown` alternate instead.

Agents that send `Accept: text/markdown` receive the existing Markdown representation of the landing, the legal pages and every docs page, with `Content-Location` and `Vary: Accept` ([Agent-readable pages](/docs/features/agent-pages)). The root `/.well-known/oauth-protected-resource` answers again (the plugin matches the root and `/api/mcp` path forms, not the issuer-relative rewrite the route used to do) and `/.well-known/openid-configuration` has a root alias like the authorization-server document.

The placeholder brand left `seo.ts`, the OG config, the static manifest and `llms.txt` for one leaf, `apps/web/src/platform/seo/site-identity.ts`; the manifest is a route built from it. `pnpm run setup --brand-name … --brand-short-name … --twitter …` fills the leaf and replaces the template brand in the locales and docs ([Local setup](/docs/development/setup)). Rendered share images are kept in Cloudflare's edge cache per validated parameters and `OG_VERSION` ([Open Graph images](/docs/features/og-images)).

