From f62ce6585807c9c5d4f13a5c839ce05dc366f0e8 Mon Sep 17 00:00:00 2001 From: jessy-david-dev Date: Sat, 11 Apr 2026 13:30:45 +0200 Subject: [PATCH] feat: add robots.txt, sitemap, and JSON-LD structured data --- app/layout.tsx | 195 ++++++++++++++++++++++++++++++++++++++++++++++--- app/robots.ts | 12 +++ app/sitemap.ts | 32 ++++++++ 3 files changed, 227 insertions(+), 12 deletions(-) create mode 100644 app/robots.ts create mode 100644 app/sitemap.ts diff --git a/app/layout.tsx b/app/layout.tsx index ca7c82a..597f0cc 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -13,20 +13,184 @@ const geistMono = Geist_Mono({ subsets: ["latin"], }); +const siteUrl = "https://wikirush.xyz"; +const siteName = "WikiRush"; +const defaultTitle = "WikiRush - Jeu Wikipédia en ligne rapide et multijoueur"; +const description = + "Joue à WikiRush, le jeu Wikipédia en ligne où tu dois naviguer d'article en article pour atteindre la page cible le plus vite possible. Solo, duel, score et fun immédiat."; + export const metadata: Metadata = { - title: "WikiRush - Jeu de navigation Wikipedia", - description: - "Navigue entre les articles Wikipedia pour atteindre la cible en premier !", - metadataBase: new URL("https://wikirush.xyz"), - openGraph: { - title: "WikiRush", - description: - "Navigue entre les articles Wikipedia pour atteindre la cible en premier !", - url: "https://wikirush.xyz", - siteName: "WikiRush", - locale: "fr_FR", - type: "website", + metadataBase: new URL(siteUrl), + + title: { + default: defaultTitle, + template: "%s | WikiRush", }, + + description, + + applicationName: siteName, + authors: [{ name: siteName, url: siteUrl }], + creator: siteName, + publisher: siteName, + category: "games", + referrer: "origin-when-cross-origin", + + keywords: [ + "WikiRush", + "jeu Wikipédia", + "jeu Wikipedia", + "wikipedia game", + "wiki game", + "jeu de navigation Wikipédia", + "course Wikipédia", + "jeu navigateur", + "jeu en ligne", + "jeu multijoueur", + "culture générale", + "jeu gratuit", + "navigation Wikipedia", + ], + + alternates: { + canonical: "/", + languages: { + "fr-FR": "/", + }, + }, + + robots: { + index: true, + follow: true, + nocache: false, + googleBot: { + index: true, + follow: true, + noimageindex: false, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, + + openGraph: { + type: "website", + locale: "fr_FR", + url: siteUrl, + siteName, + title: defaultTitle, + description, + images: [ + { + url: "/og-image.png", + width: 1200, + height: 630, + alt: "WikiRush - Jeu Wikipédia en ligne rapide et multijoueur", + }, + ], + }, + + twitter: { + card: "summary_large_image", + title: defaultTitle, + description, + images: ["/og-image.png"], + creator: "@wikirush", + site: "@wikirush", + }, + + icons: { + icon: [ + { url: "/favicon.ico" }, + { url: "/icon-16x16.png", sizes: "16x16", type: "image/png" }, + { url: "/icon-32x32.png", sizes: "32x32", type: "image/png" }, + ], + apple: [{ url: "/apple-touch-icon.png", sizes: "180x180" }], + shortcut: ["/favicon.ico"], + }, + + manifest: "/site.webmanifest", + + appleWebApp: { + capable: true, + title: siteName, + statusBarStyle: "default", + }, + + formatDetection: { + telephone: false, + address: false, + email: false, + }, + + other: { + "theme-color": "#0f0f0f", + "color-scheme": "dark", + }, +}; + +const jsonLd = { + "@context": "https://schema.org", + "@graph": [ + { + "@type": "WebSite", + "@id": `${siteUrl}/#website`, + url: siteUrl, + name: siteName, + description, + inLanguage: "fr-FR", + publisher: { "@id": `${siteUrl}/#organization` }, + }, + { + "@type": "Organization", + "@id": `${siteUrl}/#organization`, + name: siteName, + url: siteUrl, + logo: { + "@type": "ImageObject", + url: `${siteUrl}/wikirush.png`, + }, + contactPoint: { + "@type": "ContactPoint", + email: "contact@jessy-david.dev", + contactType: "customer support", + availableLanguage: "French", + }, + }, + { + "@type": "VideoGame", + "@id": `${siteUrl}/#game`, + name: siteName, + description, + url: siteUrl, + image: `${siteUrl}/og-image.png`, + inLanguage: "fr-FR", + applicationCategory: "Game", + operatingSystem: "Web", + offers: { + "@type": "Offer", + price: "0", + priceCurrency: "EUR", + availability: "https://schema.org/InStock", + }, + gamePlatform: "Web Browser", + genre: ["Trivia", "Educational", "Multiplayer"], + author: { + "@type": "Person", + name: "DAVID Jessy", + url: "https://jessy-david.dev", + }, + }, + { + "@type": "WebPage", + "@id": `${siteUrl}/#webpage`, + url: siteUrl, + name: defaultTitle, + isPartOf: { "@id": `${siteUrl}/#website` }, + about: { "@id": `${siteUrl}/#game` }, + inLanguage: "fr-FR", + }, + ], }; export default function RootLayout({ @@ -39,12 +203,19 @@ export default function RootLayout({ lang="fr" className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`} > + +