Skip to content

Commit 304427e

Browse files
committed
feat: landing page SEO improve
1 parent db919e9 commit 304427e

File tree

10 files changed

+442
-10
lines changed

10 files changed

+442
-10
lines changed

docs/messages/en.json

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"name": "English"
44
},
55
"metadata": {
6-
"description": "Open-source tool focused on AI image generation. Transform your creative ideas into stunning visuals through natural conversation with advanced AI models."
6+
"description": "Open-source AI image generation tool featuring Nano Banana, Flux Kontext, and GPT-4o models. Transform your creative ideas into stunning visuals through natural conversation with advanced AI models.",
7+
"keywords": "AI image generation, Nano Banana, Flux Kontext, GPT-4o, AI art, image creation, artificial intelligence, creative AI, text to image, AI models"
78
},
89
"nav": {
910
"features": "Features",
@@ -14,7 +15,7 @@
1415
},
1516
"hero": {
1617
"title": "Chat Your Way to Amazing Images",
17-
"subtitle": "Simply describe what you want to see, and watch as Typix transforms your words into stunning AI-generated images through natural conversation.",
18+
"subtitle": "Powered by Nano Banana, Flux Kontext, and GPT-4o models. Simply describe what you want to see, and watch as Typix transforms your words into stunning AI-generated images.",
1819
"primaryBtn": "TRY NOW",
1920
"stats": {
2021
"images": "Images Created",
@@ -74,6 +75,10 @@
7475
"formats": {
7576
"title": "Multiple Formats",
7677
"description": "Export in various formats including PNG, JPG, SVG, and more."
78+
},
79+
"nanoBanana": {
80+
"title": "Nano Banana Model",
81+
"description": "Powered by the innovative Nano Banana AI model for creative and efficient image generation."
7782
}
7883
}
7984
},
@@ -87,7 +92,8 @@
8792
"artistic": "Artistic",
8893
"abstract": "Abstract",
8994
"anime": "Anime",
90-
"digital": "Digital Art"
95+
"digital": "Digital Art",
96+
"nanoBanana": "Nano Banana"
9197
}
9298
},
9399
"preview": {
@@ -98,6 +104,39 @@
98104
"title": "Why Choose Typix?",
99105
"subtitle": "Built with privacy, performance, and cost-efficiency in mind"
100106
},
107+
"models": {
108+
"title": "Featured AI Models",
109+
"subtitle": "Experience the power of cutting-edge AI models for superior image generation",
110+
"items": {
111+
"nanoBanana": {
112+
"name": "Nano Banana",
113+
"description": "Lightweight yet powerful model for quick, high-quality image generation with exceptional creativity.",
114+
"features": [
115+
"Fast Generation",
116+
"Creative Output",
117+
"Versatile Styles"
118+
]
119+
},
120+
"fluxKontext": {
121+
"name": "Flux Kontext",
122+
"description": "Advanced contextual understanding model that creates images with superior narrative coherence.",
123+
"features": [
124+
"Context Aware",
125+
"Narrative Flow",
126+
"Scene Composition"
127+
]
128+
},
129+
"gpt4o": {
130+
"name": "GPT-4o",
131+
"description": "Multi-modal powerhouse combining text understanding with visual generation capabilities.",
132+
"features": [
133+
"Multi-modal",
134+
"High Quality",
135+
"Intelligent Design"
136+
]
137+
}
138+
}
139+
},
101140
"providers": {
102141
"title": "Powered by Leading AI Models",
103142
"subtitle": "Integrated with the most advanced AI models and services for the best image generation experience",

docs/messages/zh.json

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"name": "中文"
44
},
55
"metadata": {
6-
"description": "专注AI图像生成的开源工具,通过自然对话与先进AI模型交互,轻松将创意想法转化为精美视觉作品。"
6+
"description": "专注AI图像生成的开源工具,集成Nano Banana、Flux Kontext、GPT-4o等先进模型。通过自然对话与AI交互,轻松将创意想法转化为精美视觉作品。",
7+
"keywords": "AI图像生成, Nano Banana, Flux Kontext, GPT-4o, AI艺术, 图像创作, 人工智能, 创意AI, 文本转图像, AI模型"
78
},
89
"nav": {
910
"features": "功能特色",
@@ -14,7 +15,7 @@
1415
},
1516
"hero": {
1617
"title": "通过聊天创造精美图像",
17-
"subtitle": "只需描述您想要看到的内容,观看 Typix 如何通过自然对话将您的文字转化为令人惊叹的 AI 生成图像",
18+
"subtitle": "基于Nano Banana、Flux Kontext、GPT-4o等模型驱动。只需描述您想要看到的内容,观看Typix如何将您的文字转化为令人惊叹的AI生成图像",
1819
"primaryBtn": "开始使用",
1920
"stats": {
2021
"images": "创建图像",
@@ -74,6 +75,10 @@
7475
"formats": {
7576
"title": "多种格式",
7677
"description": "支持导出 PNG、JPG、SVG 等多种格式。"
78+
},
79+
"nanoBanana": {
80+
"title": "Nano Banana 模型",
81+
"description": "由创新的 Nano Banana AI 模型驱动,实现创意高效的图像生成。"
7782
}
7883
}
7984
},
@@ -87,7 +92,8 @@
8792
"artistic": "艺术风格",
8893
"abstract": "抽象风格",
8994
"anime": "动漫风格",
90-
"digital": "数字艺术"
95+
"digital": "数字艺术",
96+
"nanoBanana": "Nano Banana"
9197
}
9298
},
9399
"preview": {
@@ -98,6 +104,39 @@
98104
"title": "为什么选择 Typix?",
99105
"subtitle": "专注隐私保护、性能优化和成本效益"
100106
},
107+
"models": {
108+
"title": "精选AI模型",
109+
"subtitle": "体验前沿AI模型的强大能力,获得卓越的图像生成效果",
110+
"items": {
111+
"nanoBanana": {
112+
"name": "Nano Banana",
113+
"description": "轻量级高性能模型,快速生成高质量图像,创意表现卓越。",
114+
"features": [
115+
"快速生成",
116+
"创意输出",
117+
"多样风格"
118+
]
119+
},
120+
"fluxKontext": {
121+
"name": "Flux Kontext",
122+
"description": "先进的上下文理解模型,创造具有卓越叙事连贯性的图像。",
123+
"features": [
124+
"上下文感知",
125+
"叙事流畅",
126+
"场景构图"
127+
]
128+
},
129+
"gpt4o": {
130+
"name": "GPT-4o",
131+
"description": "多模态强力模型,结合文本理解与视觉生成的综合能力。",
132+
"features": [
133+
"多模态",
134+
"高质量",
135+
"智能设计"
136+
]
137+
}
138+
}
139+
},
101140
"providers": {
102141
"title": "领先AI模型驱动",
103142
"subtitle": "集成最先进的AI模型和服务,为您提供最佳的图像生成体验",

docs/public/manifest.json

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"name": "Typix AI - AI Image Generation",
3+
"short_name": "Typix AI",
4+
"description": "AI image generation tool featuring Nano Banana, Flux Kontext, and GPT-4o models",
5+
"start_url": "/",
6+
"display": "standalone",
7+
"background_color": "#000000",
8+
"theme_color": "#000000",
9+
"orientation": "portrait-primary",
10+
"icons": [
11+
{
12+
"src": "/logo.png",
13+
"sizes": "512x512",
14+
"type": "image/png",
15+
"purpose": "any maskable"
16+
},
17+
{
18+
"src": "/logo.svg",
19+
"sizes": "any",
20+
"type": "image/svg+xml"
21+
}
22+
],
23+
"categories": [
24+
"productivity",
25+
"graphics",
26+
"photo"
27+
],
28+
"lang": "en",
29+
"dir": "ltr",
30+
"screenshots": [
31+
{
32+
"src": "/screenshots/desktop.jpg",
33+
"sizes": "1280x720",
34+
"type": "image/jpeg",
35+
"form_factor": "wide"
36+
},
37+
{
38+
"src": "/screenshots/mobile.jpg",
39+
"sizes": "640x1136",
40+
"type": "image/jpeg",
41+
"form_factor": "narrow"
42+
}
43+
]
44+
}

docs/src/app/[locale]/layout.tsx

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { SEOSchema } from "@/components/seo-schema";
12
import { ThemeProvider } from "@/components/theme-provider";
23
import { locales } from "@/i18n";
34
import type { Metadata } from "next";
@@ -18,9 +19,76 @@ export async function generateMetadata({
1819
const metadata = await getTranslations({ locale, namespace: "metadata" });
1920
const nav = await getTranslations({ locale, namespace: "nav" });
2021

22+
const title = `Typix - ${nav("slogan")}`;
23+
const description = metadata("description");
24+
const keywords = metadata("keywords");
25+
const siteUrl = "https://typix.art";
26+
2127
return {
22-
title: `Typix - ${nav("slogan")}`,
23-
description: metadata("description"),
28+
title,
29+
description,
30+
keywords,
31+
authors: [{ name: "Typix AI" }],
32+
creator: "Typix AI",
33+
publisher: "Typix AI",
34+
formatDetection: {
35+
email: false,
36+
address: false,
37+
telephone: false,
38+
},
39+
metadataBase: new URL(siteUrl),
40+
alternates: {
41+
canonical: "/",
42+
languages: {
43+
"en-US": "/en",
44+
"zh-CN": "/zh",
45+
},
46+
},
47+
openGraph: {
48+
type: "website",
49+
locale,
50+
title,
51+
description,
52+
siteName: "Typix AI",
53+
url: siteUrl,
54+
images: [
55+
{
56+
url: "/og-image.jpg",
57+
width: 1200,
58+
height: 630,
59+
alt: title,
60+
},
61+
],
62+
},
63+
twitter: {
64+
card: "summary_large_image",
65+
title,
66+
description,
67+
creator: "@TypixAI",
68+
images: ["/og-image.jpg"],
69+
},
70+
robots: {
71+
index: true,
72+
follow: true,
73+
googleBot: {
74+
index: true,
75+
follow: true,
76+
"max-video-preview": -1,
77+
"max-image-preview": "large",
78+
"max-snippet": -1,
79+
},
80+
},
81+
verification: {
82+
google: "your-google-verification-code",
83+
},
84+
other: {
85+
"msapplication-TileColor": "#000000",
86+
"theme-color": "#000000",
87+
"apple-mobile-web-app-capable": "yes",
88+
"apple-mobile-web-app-status-bar-style": "default",
89+
"apple-mobile-web-app-title": title,
90+
},
91+
manifest: "/manifest.json",
2492
};
2593
}
2694

@@ -42,6 +110,7 @@ export default async function LocaleLayout({
42110
return (
43111
<NextIntlClientProvider messages={messages}>
44112
<ThemeProvider defaultTheme="system" storageKey="theme">
113+
<SEOSchema />
45114
{children}
46115
</ThemeProvider>
47116
</NextIntlClientProvider>

docs/src/app/robots.txt/route.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// 静态导出配置
2+
export const dynamic = "force-static";
3+
export const revalidate = 86400; // 24小时重新验证
4+
5+
export async function GET() {
6+
const baseUrl = "https://typix.art";
7+
8+
const robotsTxt = `User-agent: *
9+
Allow: /
10+
11+
# Sitemaps
12+
Sitemap: ${baseUrl}/sitemap.xml
13+
14+
# Crawl-delay
15+
Crawl-delay: 1
16+
17+
# Disallow specific paths
18+
Disallow: /api/
19+
Disallow: /_next/
20+
Disallow: /admin/`;
21+
22+
return new Response(robotsTxt, {
23+
headers: {
24+
"Content-Type": "text/plain",
25+
"Cache-Control": "public, max-age=86400, s-maxage=86400",
26+
},
27+
});
28+
}

docs/src/app/sitemap.xml/route.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { locales } from "@/i18n";
2+
3+
// 静态导出配置
4+
export const dynamic = "force-static";
5+
export const revalidate = 3600; // 1小时重新验证
6+
7+
export async function GET() {
8+
const baseUrl = "https://typix.art";
9+
10+
const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
11+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
12+
${locales
13+
.map((locale) => {
14+
const localeUrl = locale === "en" ? baseUrl : `${baseUrl}/${locale}`;
15+
const alternates = locales
16+
.map((l) => {
17+
const altUrl = l === "en" ? baseUrl : `${baseUrl}/${l}`;
18+
return `<xhtml:link rel="alternate" hreflang="${l}" href="${altUrl}" />`;
19+
})
20+
.join("\n ");
21+
22+
return `<url>
23+
<loc>${localeUrl}</loc>
24+
<lastmod>${new Date().toISOString()}</lastmod>
25+
<changefreq>weekly</changefreq>
26+
<priority>1.0</priority>
27+
${alternates}
28+
</url>`;
29+
})
30+
.join("\n ")}
31+
</urlset>`;
32+
33+
return new Response(sitemap, {
34+
headers: {
35+
"Content-Type": "application/xml",
36+
"Cache-Control": "public, max-age=3600, s-maxage=3600",
37+
},
38+
});
39+
}

0 commit comments

Comments
 (0)