From ffb7b0703c1d43bd145df2723588aaee44bff62d Mon Sep 17 00:00:00 2001 From: sardorml Date: Mon, 31 Aug 2026 13:36:33 +0500 Subject: [PATCH] fix(seo): put the brand first in the landing title, scope the docs title MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Searching the brand term now returns the docs homepage above the landing page. Nothing is broken — the landing is still index,follow with a valid canonical — the two pages simply compete, and docs wins on the query: docs What is CaptureFlow? | CaptureFlow h1: What is CaptureFlow? landing Open-source screen recorder ... — CaptureFlow h1: no brand at all Docs names the brand twice in its title and its h1 is the query as a question. The landing trails the brand at the end of a feature-led title. For a bare brand query docs is the better on-page match, so it took the slot — and it is the page that cannot convert anyone. The landing title now leads with the brand. The docs site title becomes "CaptureFlow Docs", so its pages read "What is CaptureFlow? | CaptureFlow Docs" and stop competing for the bare term; that also matches the og:title the docs already published. themeConfig.siteTitle is untouched, so the nav wordmark still reads CaptureFlow. Neither change is visible to a reader — both only alter the tab and the SERP. The h1 is left alone: adding the brand there is hero copy, not a metadata fix. --- apps/docs/.vitepress/config.ts | 2 +- apps/web/lib/marketing/constants.ts | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/docs/.vitepress/config.ts b/apps/docs/.vitepress/config.ts index 047f9d52..abd0d663 100644 --- a/apps/docs/.vitepress/config.ts +++ b/apps/docs/.vitepress/config.ts @@ -5,7 +5,7 @@ const SITE = "https://captureflow.dev"; const DOCS_SITE = "https://docs.captureflow.dev"; export default defineConfig({ - title: "CaptureFlow", + title: "CaptureFlow Docs", description: "Open-source, self-hostable screen recording with instant shareable links.", cleanUrls: true, diff --git a/apps/web/lib/marketing/constants.ts b/apps/web/lib/marketing/constants.ts index 5d2624b5..6de0f6ce 100644 --- a/apps/web/lib/marketing/constants.ts +++ b/apps/web/lib/marketing/constants.ts @@ -2,8 +2,13 @@ import { MESSAGES } from "./messages"; export const SITE_URL = "https://captureflow.dev"; export const SITE_NAME = "CaptureFlow"; +/* + * Brand first. "captureflow" is a contested term — three unrelated products + * hold it — and for that query the docs homepage was outranking this one on + * the strength of naming the brand up front while this title trailed it. + */ export const SITE_TITLE = - "Open-source screen recorder with shareable links — CaptureFlow"; + "CaptureFlow — Open-source screen recorder with shareable links"; export const SITE_DESCRIPTION = "Record your screen and share it with your team, clients, or customers. An open-source screen recorder with annotated screenshots, self-hostable on Cloudflare."; export const SUPPORT_EMAIL = "contact@sardor.codes";