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,
});
}