diff --git a/packages/core/src/kit/theme-header.tsx b/packages/core/src/kit/theme-header.tsx index 1b5eb81..6026604 100644 --- a/packages/core/src/kit/theme-header.tsx +++ b/packages/core/src/kit/theme-header.tsx @@ -105,7 +105,10 @@ export function ThemeHeader({ )} - + {/* 语言切换器:小屏隐藏(避免 375-420px 视口撑破 header) */} +
+ +
diff --git a/packages/core/src/pages/[locale]/(marketing)/tools/[slug]/page.tsx b/packages/core/src/pages/[locale]/(marketing)/tools/[slug]/page.tsx index 8b638a2..62b2e89 100644 --- a/packages/core/src/pages/[locale]/(marketing)/tools/[slug]/page.tsx +++ b/packages/core/src/pages/[locale]/(marketing)/tools/[slug]/page.tsx @@ -130,11 +130,20 @@ export async function generateMetadata({ params }: ToolDetailPageProps) { const description = locale === "zh" && tool.descriptionZh ? tool.descriptionZh : tool.descriptionEn; + // meta description:tagline + 描述组合并截断到 ~155ch(SEO 最佳实践) + const metaDescBase = + [tool.taglineEn, description, tool.descriptionEn] + .filter(Boolean) + .join(". ") + .replace(/\.\s*\./g, ".") || `${t("subtitle")} - ${name}`; + const metaDescription = + metaDescBase.length > 155 ? `${metaDescBase.slice(0, 152)}...` : metaDescBase; + return generatePageMetadata({ locale, path: `/tools/${slug}`, title: `${name} - ${t("title")}`, - description: tool.taglineEn || description || `${t("subtitle")} - ${name}`, + description: metaDescription, ogImage: tool.coverImageUrl || tool.logoUrl || undefined, }); }