Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions apps/website/src/layouts/BaseLayout.astro
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,21 @@ import { fetchGitHubStars, formatStarCount } from '../utils/github'
interface Props {
title: string
description?: string
keywords?: string[]
ogImage?: string
noindex?: boolean
}

const {
title,
description = 'Comfy is the AI creation engine for visual professionals who demand control.',
keywords,
ogImage = 'https://media.comfy.org/website/comfy.webp',
noindex = false,
} = Astro.props

const keywordsContent = keywords && keywords.length > 0 ? keywords.join(', ') : undefined

const siteBase = Astro.site ?? 'https://comfy.org'
const canonicalURL = new URL(Astro.url.pathname, siteBase)
const ogImageURL = new URL(ogImage, siteBase)
Expand Down Expand Up @@ -62,6 +66,7 @@ const websiteJsonLd = {
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content={description} />
{keywordsContent && <meta name="keywords" content={keywordsContent} />}
{noindex && <meta name="robots" content="noindex, nofollow" />}
<title>{title}</title>

Expand Down
7 changes: 6 additions & 1 deletion apps/website/src/pages/cloud/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,14 @@ import AudienceSection from '../../components/product/cloud/AudienceSection.vue'
import PricingSection from '../../components/product/cloud/PricingSection.vue'
import ProductCardsSection from '../../components/product/cloud/ProductCardsSection.vue'
import FAQSection from '../../components/product/cloud/FAQSection.vue'
import { t } from '../../i18n/translations'
---

<BaseLayout title="Comfy Cloud — AI in the Cloud">
<BaseLayout
title="Comfy Cloud — AI in the Cloud"
description={t('cloud.hero.subtitle', 'en')}
keywords={['comfyui web app', 'comfyui app', 'comfyui online', 'comfyui cloud', 'comfy cloud', 'comfy ui application', 'comfyui browser', 'cloud comfyui', 'managed comfyui']}
Comment on lines +14 to +16
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should be re-using the existing copy used in the site not inventing new things here.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call — fixed in cb6857c. Each product page now sources its <meta name="description"> from the same i18n key that powers its visible hero subtitle:

Page i18n key Description (en)
/ hero.subtitle "Comfy is the AI creation engine for visual professionals who demand control over every model, every parameter, and every output."
/download download.hero.subtitle "The full ComfyUI engine — open source, fast, extensible, and yours to run however you want."
/cloud cloud.hero.subtitle "The easiest way to start with ComfyUI. Pre-loaded models. Pre-installed custom nodes. Concurrent jobs. The full power of ComfyUI on Blackwell RTX 6000 Pros. Open a tab and start creating."

zh-CN mirrors use the matching zh-CN translations from the same keys. Meta descriptions and on-page hero copy will now stay in sync automatically — if marketing edits the hero, the meta updates with it.

The keywords array is the only piece of new copy in the PR. It's invisible to users (just a hidden hint to search engines), so it doesn't have a natural existing source on the page — happy to drop it entirely or trim it if you'd rather keep this PR strictly to "reuse existing copy".

>
<HeroSection />
<ReasonSection />
<AIModelsSection />
Expand Down
7 changes: 6 additions & 1 deletion apps/website/src/pages/download.astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,14 @@ import ReasonSection from '../components/product/local/ReasonSection.vue'
import EcoSystemSection from '../components/product/local/EcoSystemSection.vue'
import ProductCardsSection from '../components/product/local/ProductCardsSection.vue'
import FAQSection from '../components/product/local/FAQSection.vue'
import { t } from '../i18n/translations'
---

<BaseLayout title="Download Comfy — Run AI Locally">
<BaseLayout
title="Download Comfy — Run AI Locally"
description={t('download.hero.subtitle', 'en')}
keywords={['comfyui app', 'comfyui desktop app', 'comfy ui application', 'comfyui download', 'download comfyui', 'comfyui windows', 'comfyui mac', 'comfyui linux', 'comfyui local']}
>
<CloudBannerSection />
<HeroSection client:load />
<ReasonSection />
Expand Down
7 changes: 6 additions & 1 deletion apps/website/src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,14 @@ import UseCaseSection from '../components/home/UseCaseSection.vue'
import CaseStudySpotlightSection from '../components/home/CaseStudySpotlightSection.vue'
import GetStartedSection from '../components/home/GetStartedSection.vue'
import BuildWhatSection from '../components/home/BuildWhatSection.vue'
import { t } from '../i18n/translations'
---

<BaseLayout title="Comfy — Professional Control of Visual AI">
<BaseLayout
title="Comfy — Professional Control of Visual AI"
description={t('hero.subtitle', 'en')}
keywords={['comfyui app', 'comfyui web app', 'comfy ui application', 'comfyui application', 'comfy app', 'comfyui', 'visual ai app', 'node-based ai', 'generative ai workflows']}
>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
<HeroSection client:load />
<SocialProofBarSection />
<ProductShowcaseSection client:load />
Expand Down
7 changes: 6 additions & 1 deletion apps/website/src/pages/zh-CN/cloud/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,14 @@ import AudienceSection from '../../../components/product/cloud/AudienceSection.v
import PricingSection from '../../../components/product/cloud/PricingSection.vue'
import ProductCardsSection from '../../../components/product/cloud/ProductCardsSection.vue'
import FAQSection from '../../../components/product/cloud/FAQSection.vue'
import { t } from '../../../i18n/translations'
---

<BaseLayout title="Comfy Cloud — 云端 AI">
<BaseLayout
title="Comfy Cloud — 云端 AI"
description={t('cloud.hero.subtitle', 'zh-CN')}
keywords={['comfyui web app', 'comfyui app', 'comfyui online', 'comfyui cloud', 'ComfyUI 网页版', 'ComfyUI 云端', 'ComfyUI 应用', 'Comfy Cloud', '云端 ComfyUI']}
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot May 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Make zh-CN cloud keywords locale-consistent.

Line 16 mixes English query terms into the zh-CN page metadata. Consider switching to a Chinese-focused keyword set for cleaner locale targeting.

🌐 Proposed keyword adjustment
-  keywords={['comfyui web app', 'comfyui app', 'comfyui online', 'comfyui cloud', 'ComfyUI 网页版', 'ComfyUI 云端', 'ComfyUI 应用', 'Comfy Cloud', '云端 ComfyUI']}
+  keywords={['ComfyUI 网页版', 'ComfyUI 云端', 'ComfyUI 应用', '云端 ComfyUI', '在线 ComfyUI', 'ComfyUI 云应用', '浏览器版 ComfyUI', 'Comfy Cloud 云端']}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
keywords={['comfyui web app', 'comfyui app', 'comfyui online', 'comfyui cloud', 'ComfyUI 网页版', 'ComfyUI 云端', 'ComfyUI 应用', 'Comfy Cloud', '云端 ComfyUI']}
keywords={['ComfyUI 网页版', 'ComfyUI 云端', 'ComfyUI 应用', '云端 ComfyUI', '在线 ComfyUI', 'ComfyUI 云应用', '浏览器版 ComfyUI', 'Comfy Cloud 云端']}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/website/src/pages/zh-CN/cloud/index.astro` at line 16, The keywords
array assigned to the keywords prop in the zh-CN cloud page (keywords={...} in
index.astro) mixes English queries with Chinese metadata; replace the English
entries ('comfyui web app', 'comfyui app', 'comfyui online', 'comfyui cloud',
'Comfy Cloud', 'cloud ComfyUI') with Chinese equivalents so the zh-CN page uses
locale-consistent terms (e.g., "ComfyUI 网页版", "ComfyUI 应用", "ComfyUI 在线",
"ComfyUI 云端", "云端 ComfyUI", "ComfyUI 服务" or other preferred Chinese keywords)
and keep or deduplicate existing Chinese entries to produce a clean,
Chinese-only keyword list.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same call as on the zh-CN home keyword comment: keeping bilingual.

The whole PR exists to recover an English query ("comfyui app"). <meta name="keywords"> is invisible — it's a relevance hint to crawlers, not user-facing copy — so there's no UX cost to listing both languages. Stripping comfyui web app / comfyui app from the zh-CN cloud keyword set would actively work against the PR's goal for international users who land on the localized URL.

The visible description is monolingual zh-CN (sourced from the existing cloud.hero.subtitle zh-CN translation, per Christian's earlier comment). The hidden keywords array is intentionally bilingual.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skipped: comment is from another GitHub bot.

>
<HeroSection locale="zh-CN" />
<ReasonSection locale="zh-CN" />
<AIModelsSection locale="zh-CN" />
Expand Down
7 changes: 6 additions & 1 deletion apps/website/src/pages/zh-CN/download.astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,14 @@ import ReasonSection from '../../components/product/local/ReasonSection.vue'
import EcoSystemSection from '../../components/product/local/EcoSystemSection.vue'
import ProductCardsSection from '../../components/product/local/ProductCardsSection.vue'
import FAQSection from '../../components/product/local/FAQSection.vue'
import { t } from '../../i18n/translations'
---

<BaseLayout title="下载 — Comfy">
<BaseLayout
title="下载 — Comfy"
description={t('download.hero.subtitle', 'zh-CN')}
keywords={['comfyui app', 'comfyui desktop app', 'comfyui download', 'ComfyUI 下载', 'ComfyUI 桌面应用', 'ComfyUI 应用', 'ComfyUI Windows', 'ComfyUI macOS', 'ComfyUI Linux']}
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot May 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Align zh-CN keywords with the locale strategy.

Line 16 still includes several English keyword phrases. If the goal is zh-CN-targeted metadata, keep this list Chinese-focused to avoid mixed-locale signaling.

🌐 Proposed keyword adjustment
-  keywords={['comfyui app', 'comfyui desktop app', 'comfyui download', 'ComfyUI 下载', 'ComfyUI 桌面应用', 'ComfyUI 应用', 'ComfyUI Windows', 'ComfyUI macOS', 'ComfyUI Linux']}
+  keywords={['ComfyUI 下载', 'ComfyUI 桌面应用', 'ComfyUI 应用', 'ComfyUI Windows 版', 'ComfyUI macOS 版', 'ComfyUI Linux 版', '本地运行 ComfyUI', '下载 ComfyUI']}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
keywords={['comfyui app', 'comfyui desktop app', 'comfyui download', 'ComfyUI 下载', 'ComfyUI 桌面应用', 'ComfyUI 应用', 'ComfyUI Windows', 'ComfyUI macOS', 'ComfyUI Linux']}
keywords={['ComfyUI 下载', 'ComfyUI 桌面应用', 'ComfyUI 应用', 'ComfyUI Windows 版', 'ComfyUI macOS 版', 'ComfyUI Linux 版', '本地运行 ComfyUI', '下载 ComfyUI']}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/website/src/pages/zh-CN/download.astro` at line 16, Update the
locale-specific metadata by removing the English keyword phrases from the
keywords prop on the zh-CN download page and replace them with Chinese-only
equivalents; locate the keywords={[...] } attribute in the zh-CN download page
(the keywords prop) and ensure all entries are Chinese translations like
"ComfyUI 下载", "ComfyUI 桌面应用", "ComfyUI Windows 下载", "ComfyUI macOS 下载", "ComfyUI
Linux 下载" (or other appropriate Chinese terms) so the metadata is consistently
zh-CN.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same call as on the other zh-CN keyword comments: keeping bilingual.

This PR exists specifically to recover an English query ("comfyui app"). <meta name="keywords"> is invisible — it's a relevance hint to crawlers, not user-facing copy — so there's no UX cost to listing both languages. Stripping comfyui app / comfyui desktop app / comfyui download from the zh-CN download keyword set would directly defeat the PR's goal for international users who land on the localized URL.

The visible description is monolingual zh-CN (sourced from the existing download.hero.subtitle zh-CN translation). The hidden keywords array is intentionally bilingual.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skipped: comment is from another GitHub bot.

>
<CloudBannerSection locale="zh-CN" />
<HeroSection locale="zh-CN" client:load />
<ReasonSection locale="zh-CN" />
Expand Down
7 changes: 6 additions & 1 deletion apps/website/src/pages/zh-CN/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,14 @@ import UseCaseSection from '../../components/home/UseCaseSection.vue'
import CaseStudySpotlightSection from '../../components/home/CaseStudySpotlightSection.vue'
import GetStartedSection from '../../components/home/GetStartedSection.vue'
import BuildWhatSection from '../../components/home/BuildWhatSection.vue'
import { t } from '../../i18n/translations'
---

<BaseLayout title="Comfy — 视觉 AI 的最强可控性">
<BaseLayout
title="Comfy — 视觉 AI 的最强可控性"
description={t('hero.subtitle', 'zh-CN')}
keywords={['comfyui app', 'comfyui web app', 'comfyui application', 'ComfyUI 应用', 'ComfyUI 网页版', 'ComfyUI 桌面应用', 'ComfyUI 下载', '可视化 AI', '节点式 AI', '生成式 AI 工作流']}
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot May 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Align zh-CN keywords with the localization intent.

The keywords list still contains multiple English phrases, which conflicts with the stated zh-CN strategy to avoid repeating English keyword terms.

Suggested adjustment
-  keywords={['comfyui app', 'comfyui web app', 'comfyui application', 'ComfyUI 应用', 'ComfyUI 网页版', 'ComfyUI 桌面应用', 'ComfyUI 下载', '可视化 AI', '节点式 AI', '生成式 AI 工作流']}
+  keywords={['ComfyUI 应用', 'ComfyUI 网页版', 'ComfyUI 桌面应用', 'ComfyUI 下载', '可视化 AI', '节点式 AI', '生成式 AI 工作流']}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
keywords={['comfyui app', 'comfyui web app', 'comfyui application', 'ComfyUI 应用', 'ComfyUI 网页版', 'ComfyUI 桌面应用', 'ComfyUI 下载', '可视化 AI', '节点式 AI', '生成式 AI 工作流']}
keywords={['ComfyUI 应用', 'ComfyUI 网页版', 'ComfyUI 桌面应用', 'ComfyUI 下载', '可视化 AI', '节点式 AI', '生成式 AI 工作流']}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/website/src/pages/zh-CN/index.astro` at line 16, The zh‑CN page's
metadata uses the keywords prop and currently includes multiple English phrases;
update the keywords array in the zh-CN index.astro page to remove or translate
all English entries into Chinese (keep existing Chinese items like "ComfyUI 应用",
"ComfyUI 网页版", etc.), replacing items such as "comfyui app", "comfyui web app",
"comfyui application", "ComfyUI 下载", "可视化 AI", "节点式 AI", "生成式 AI 工作流" with
appropriate Chinese-only equivalents so the keywords list aligns with the zh-CN
localization strategy.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pushing back on this one — keeping as-is.

The original rationale ("zh-CN gets Chinese, no English") was specifically about the visible description (which becomes the SERP snippet — mixing English into a Chinese-language snippet hurts CTR for the local audience). That logic doesn't extend to <meta name="keywords">, which is:

  1. Invisible — it's a relevance hint to the crawler, not a user-facing string. There's no CTR or readability cost to listing both languages.
  2. The actual recovery target. This whole PR exists because of dropped rankings on the English query "comfyui app". Stripping comfyui app / comfyui web app / comfyui application from the zh-CN keyword set would actively work against the PR's stated goal — those English terms are the ones we're trying to recover, including for international/diaspora users who happen to land on the localized URL.

Concretely, the current zh-CN keyword list intentionally pairs:

  • English query targets (comfyui app, comfyui web app, comfyui application) — for the original recovery use case
  • Chinese equivalents (ComfyUI 应用, ComfyUI 网页版, etc.) — for native zh-CN search

That's the SEO-correct shape for a localized page that should rank in both language markets. The description is monolingual (per the earlier rationale); the keywords list is intentionally bilingual.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skipped: comment is from another GitHub bot.

>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
<HeroSection locale="zh-CN" client:load />
<SocialProofBarSection />
<ProductShowcaseSection locale="zh-CN" client:load />
Expand Down
Loading