sitemap
This commit is contained in:
@@ -2,12 +2,30 @@ import type { Metadata } from "next";
|
|||||||
import Script from "next/script";
|
import Script from "next/script";
|
||||||
import { Locale, getDictionary } from "@/lib/i18n";
|
import { Locale, getDictionary } from "@/lib/i18n";
|
||||||
|
|
||||||
|
const BASE_URL = "https://soccer-2026.info";
|
||||||
|
|
||||||
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
|
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
|
||||||
const { locale } = await params;
|
const { locale } = await params;
|
||||||
const dict = getDictionary(locale as Locale);
|
const dict = getDictionary(locale as Locale);
|
||||||
return {
|
return {
|
||||||
|
metadataBase: new URL(BASE_URL),
|
||||||
title: dict.meta.title,
|
title: dict.meta.title,
|
||||||
description: dict.meta.description,
|
description: dict.meta.description,
|
||||||
|
alternates: {
|
||||||
|
canonical: `${BASE_URL}/${locale}`,
|
||||||
|
languages: {
|
||||||
|
en: `${BASE_URL}/en`,
|
||||||
|
de: `${BASE_URL}/de`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
openGraph: {
|
||||||
|
title: dict.meta.title,
|
||||||
|
description: dict.meta.description,
|
||||||
|
url: `${BASE_URL}/${locale}`,
|
||||||
|
locale: locale === "en" ? "en_US" : "de_DE",
|
||||||
|
siteName: "WM 2026 Dashboard",
|
||||||
|
type: "website",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
12
app/robots.ts
Normal file
12
app/robots.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import type { MetadataRoute } from "next";
|
||||||
|
|
||||||
|
export default function robots(): MetadataRoute.Robots {
|
||||||
|
return {
|
||||||
|
rules: {
|
||||||
|
userAgent: "*",
|
||||||
|
allow: "/",
|
||||||
|
disallow: ["/api/"],
|
||||||
|
},
|
||||||
|
sitemap: "https://soccer-2026.info/sitemap.xml",
|
||||||
|
};
|
||||||
|
}
|
||||||
33
app/sitemap.ts
Normal file
33
app/sitemap.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import type { MetadataRoute } from "next";
|
||||||
|
|
||||||
|
const BASE = "https://soccer-2026.info";
|
||||||
|
|
||||||
|
export default function sitemap(): MetadataRoute.Sitemap {
|
||||||
|
const now = new Date();
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
url: `${BASE}/en`,
|
||||||
|
lastModified: now,
|
||||||
|
changeFrequency: "hourly",
|
||||||
|
priority: 1.0,
|
||||||
|
alternates: {
|
||||||
|
languages: {
|
||||||
|
en: `${BASE}/en`,
|
||||||
|
de: `${BASE}/de`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: `${BASE}/de`,
|
||||||
|
lastModified: now,
|
||||||
|
changeFrequency: "hourly",
|
||||||
|
priority: 1.0,
|
||||||
|
alternates: {
|
||||||
|
languages: {
|
||||||
|
en: `${BASE}/en`,
|
||||||
|
de: `${BASE}/de`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user