@@ -8,6 +8,11 @@ import { NavigationProgress } from "@/components/NavigationProgress";
88import { i18n , type Locale , locales } from "@/lib/i18n" ;
99import { localeNames } from "@/lib/i18n/config" ;
1010import { getTranslation } from "@/lib/i18n/translations" ;
11+ import {
12+ jsonLdScriptContent ,
13+ organizationJsonLd ,
14+ webSiteJsonLd ,
15+ } from "@/lib/jsonld" ;
1116import { LocaleProvider } from "@/lib/locale-context" ;
1217import { BASE_URL , pageAlternates } from "@/lib/seo" ;
1318
@@ -29,6 +34,7 @@ export async function generateMetadata({
2934 default : t ( "site.title" ) ,
3035 } ,
3136 description : t ( "site.description" ) ,
37+ keywords : t ( "seo.keywords.en" ) ,
3238 icons : {
3339 icon : "/images/logo.png" ,
3440 } ,
@@ -39,9 +45,36 @@ export async function generateMetadata({
3945 title : t ( "site.title" ) ,
4046 description : t ( "site.description" ) ,
4147 url : BASE_URL ,
48+ images : [
49+ {
50+ url : `${ BASE_URL } /images/screenshot.png` ,
51+ width : 1200 ,
52+ height : 900 ,
53+ alt : "Gopeed Download Manager" ,
54+ } ,
55+ ] ,
56+ locale :
57+ locale === "zh" ? "zh_CN" : locale === "zh-TW" ? "zh_TW" : "en_US" ,
4258 } ,
4359 twitter : {
4460 card : "summary_large_image" ,
61+ title : t ( "site.title" ) ,
62+ description : t ( "site.description" ) ,
63+ images : [ `${ BASE_URL } /images/screenshot.png` ] ,
64+ } ,
65+ robots : {
66+ index : true ,
67+ follow : true ,
68+ googleBot : {
69+ index : true ,
70+ follow : true ,
71+ "max-video-preview" : - 1 ,
72+ "max-image-preview" : "large" ,
73+ "max-snippet" : - 1 ,
74+ } ,
75+ } ,
76+ other : {
77+ "google-site-verification" : "" ,
4578 } ,
4679 } ;
4780}
@@ -66,6 +99,19 @@ export default async function RootLayout({
6699
67100 return (
68101 < html lang = { locale } suppressHydrationWarning >
102+ < head >
103+ { /* JSON-LD Structured Data: Organization + WebSite */ }
104+ { /* biome-ignore lint/security/noDangerouslySetInnerHtml: JSON-LD structured data is server-generated and safe */ }
105+ < script
106+ type = "application/ld+json"
107+ dangerouslySetInnerHTML = { {
108+ __html : jsonLdScriptContent (
109+ organizationJsonLd ( ) ,
110+ webSiteJsonLd ( locale ) ,
111+ ) ,
112+ } }
113+ />
114+ </ head >
69115 < body className = "font-sans antialiased" >
70116 < NavigationProgress />
71117 < FirebaseAnalytics />
0 commit comments