feat(landing-page): retitle HA page for brand-defense SEO across 18 locales (#2618)
Some checks failed
visual-baseline / Capture visual baselines (push) Waiting to run
ci / Detect CI change scopes (push) Successful in 1s
landing-page-ci / Validate landing page (push) Failing after 3s
landing-page-deploy / Deploy landing page (push) Has been skipped
nix-check / build (push) Failing after 2s
ci / Validate Nix flake (push) Failing after 1s
ci / Preflight (push) Failing after 1s
ci / Core package tests (push) Failing after 1s
ci / Tools workspace tests (push) Failing after 1s
ci / Daemon workspace tests (1/2) (push) Failing after 1s
ci / Daemon workspace tests (2/2) (push) Failing after 1s
ci / Web workspace tests (push) Failing after 1s
ci / E2E vitest (push) Failing after 1s
ci / Playwright critical (starters) (push) Failing after 2s
ci / Playwright critical (core) (push) Failing after 1s
ci / Build workspaces (push) Failing after 1s
ci / App workspace tests (push) Failing after 1s
ci / Validate workspace (push) Failing after 1s
ci / Runtime trace (push) Has been skipped

Replaces the HA page `<title>` from the previous descriptive form
("HTML Anything — your local AI agent writes the HTML, you ship
it | Open Design") with a noun-stack that captures three high-value
brand-defense queries:

  - "open source html anything"        — researching alternatives
  - "html anything official"           — verifying the canonical source
  - "open source html anything official" — precise long tail

Why
- The descriptive title before this change told the story but didn't
  match what users actually type when they land on this page from
  search. The brand has been growing fast (4.1K+ stars on the repo);
  visitors increasingly arrive with intent to verify ("is this the
  real one?"), to compare alternatives, or to find the canonical
  install path. The new title format leads with the tokens those
  queries hit.
- Joey called the change explicitly. The brand has reached a stage
  where SEO defense beats descriptive copy on a one-line surface.

What
- New `OPEN_SOURCE_OFFICIAL_TITLE` constant maps every landing-page
  locale to its translated title. Pattern: `{open-source} HTML Anything
  {official}` with no separator. Word order follows what's natural in
  each locale (German: Offiziell at end; French/Romance: adjectives
  after the noun; CJK: adjectives before).
- The three explicit copy blocks (`HTML_ANYTHING_COPY_EN`,
  `_ZH`, `_ZH_TW`) all reference the constant rather than holding
  their own literal title strings, so future title changes update
  in one place.
- `derivedHtmlAnythingCopy()` (which builds copy for the 15
  non-explicit locales by spreading EN over locale UI strings) now
  pulls the title from the same constant via `[locale]` lookup with
  EN as a defensive fallback.
- Adds three new `SoftwareApplication.alternateName` entries for the
  same query stack. Schema-level signal complements the title-level
  signal: the structured-data entity now matches whichever shape the
  user typed regardless of UI locale, since these are proper-noun
  query variants that don't translate.

Surface area
- Marketing site only. Single file: `app/pages/html-anything/index.astro`.
- No `apps/web`, no `apps/daemon`, no contracts, no CLI.
- No new dependencies.

Validation
- `pnpm --filter @open-design/landing-page typecheck` — 0 errors.
- Local dev: every locale's HA page renders the new title.
  - en   → `<title>Open Source HTML Anything Official</title>`
  - zh   → `<title>开源 HTML Anything 官方</title>`
  - ja   → `<title>オープンソース HTML Anything 公式</title>`
  - de   → `<title>Open Source HTML Anything Offiziell</title>`
  - ar   → `<title>HTML Anything مفتوح المصدر الرسمي</title>`
  - …same shape across all 18 landing locales.

Co-authored-by: Joey-nexu <joeylee12629@gmail.com>
This commit is contained in:
Jane 2026-05-22 08:36:47 +08:00 committed by GitHub
parent 3db1e27b81
commit 4cb5778669
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -27,6 +27,43 @@ const HA_REPO = 'nexu-io/html-anything';
const HA_URL = `https://github.com/${HA_REPO}`;
const HA_REPO_API = `https://api.github.com/repos/${HA_REPO}`;
/*
* SEO-targeted page titles per locale. Pattern: noun-stack with no
* separators — `{open-source} HTML Anything {official}`. The English
* tokens "Open Source" and "Official" capture brand-defense queries:
* - "open source html anything" (researching alternatives)
* - "html anything official" (verifying the canonical source)
* - "open source html anything official" (precise long tail)
*
* Each non-English locale translates the surrounding tokens so a
* user searching in their own language still lands on a title that
* matches their query, while "HTML Anything" stays untranslated as
* a brand. Word order follows whatever feels natural in each locale
* (German: Offiziell at end; French: adjectives after noun; CJK:
* adjectives before noun) rather than a slavish copy of the English
* stack — Google tokenizes regardless of order.
*/
const OPEN_SOURCE_OFFICIAL_TITLE: Record<LandingLocaleCode, string> = {
en: 'Open Source HTML Anything Official',
zh: '开源 HTML Anything 官方',
'zh-tw': '開源 HTML Anything 官方',
ja: 'オープンソース HTML Anything 公式',
ko: '오픈 소스 HTML Anything 공식',
de: 'Open Source HTML Anything Offiziell',
fr: 'HTML Anything Open Source Officiel',
ru: 'HTML Anything Open Source Официальный',
es: 'HTML Anything Open Source Oficial',
'pt-br': 'HTML Anything Open Source Oficial',
it: 'HTML Anything Open Source Ufficiale',
vi: 'HTML Anything Open Source Chính thức',
pl: 'HTML Anything Open Source Oficjalny',
id: 'HTML Anything Open Source Resmi',
nl: 'HTML Anything Open Source Officieel',
ar: 'HTML Anything مفتوح المصدر الرسمي',
tr: 'HTML Anything Açık Kaynak Resmi',
uk: 'HTML Anything Open Source Офіційний',
};
/*
* Imagery sourced directly from the HA repo via raw.githubusercontent.com.
* This is a temporary CDN — for production polish a follow-up should mirror
@ -153,7 +190,7 @@ type HtmlAnythingCopy = {
};
const HTML_ANYTHING_COPY_EN: HtmlAnythingCopy = {
title: 'HTML Anything — your local AI agent writes the HTML, you ship it | Open Design',
title: OPEN_SOURCE_OFFICIAL_TITLE.en,
description:
'HTML Anything is the agentic HTML editor from the Open Design family. Reuse the coding-agent CLI you already authenticated — Claude Code, Codex, Cursor, Gemini, Copilot, OpenCode, Qwen, Aider — to turn Markdown, CSV, or JSON into ship-ready HTML for WeChat, X, Zhihu, and Xiaohongshu. Open-source, Apache-2.0.',
label: 'Sister project',
@ -294,7 +331,7 @@ const HTML_ANYTHING_COPY_EN: HtmlAnythingCopy = {
const HTML_ANYTHING_COPY_ZH: HtmlAnythingCopy = {
...HTML_ANYTHING_COPY_EN,
title: 'HTML Anything — 本地 AI Agent 写 HTML你负责发布 | Open Design',
title: OPEN_SOURCE_OFFICIAL_TITLE.zh,
description:
'HTML Anything 是 Open Design 家族里的 Agent 原生 HTML 编辑器。复用你已经登录的 Claude Code、Codex、Cursor、Gemini、Copilot、OpenCode、Qwen、Aider把 Markdown、CSV 或 JSON 变成可交付 HTML。',
label: '姊妹项目',
@ -395,7 +432,7 @@ const HTML_ANYTHING_COPY_ZH: HtmlAnythingCopy = {
const HTML_ANYTHING_COPY_ZH_TW: HtmlAnythingCopy = {
...HTML_ANYTHING_COPY_ZH,
title: 'HTML Anything — 本地 AI Agent 寫 HTML你負責發布 | Open Design',
title: OPEN_SOURCE_OFFICIAL_TITLE['zh-tw'],
description:
'HTML Anything 是 Open Design 家族裡的 Agent 原生 HTML 編輯器。複用你已經登入的 Claude Code、Codex、Cursor、Gemini、Copilot、OpenCode、Qwen、Aider把 Markdown、CSV 或 JSON 變成可交付 HTML。',
label: '姊妹專案',
@ -509,7 +546,7 @@ function derivedHtmlAnythingCopy(locale: LandingLocaleCode): HtmlAnythingCopy {
return {
...HTML_ANYTHING_COPY_EN,
title: `${product.htmlAnythingName} — ${product.htmlAnythingBlurb} | Open Design`,
title: OPEN_SOURCE_OFFICIAL_TITLE[locale] ?? OPEN_SOURCE_OFFICIAL_TITLE.en,
description: `${product.htmlAnythingBlurb} ${summary}`,
label: product.product,
heading: product.htmlAnythingBlurb,
@ -699,6 +736,12 @@ const jsonLd: Array<Record<string, unknown>> = [
'htmlanything',
'HTML Anything Editor',
'The agentic HTML editor',
// Brand-defense + canonical-source queries: keep these stacked
// alongside the descriptive variants above so the structured
// entity matches whichever shape the user typed.
'open source html anything',
'html anything official',
'open source html anything official',
],
applicationCategory: 'DeveloperApplication',
operatingSystem: 'macOS, Linux, Windows',