Files
basiclean-webapp/app/layout.tsx
T
2026-05-02 12:02:53 +02:00

105 lines
2.2 KiB
TypeScript

import CookieConsentBanner from "@/components/CookieConsent";
import type { Metadata, Viewport } from "next";
import { Manrope, Nunito_Sans } from "next/font/google";
import "./globals.css";
import Footer from "@/components/Footer";
import Header from "@/components/Header";
const nunitoSans = Nunito_Sans({
subsets: ["latin"],
weight: ["400", "600", "700"],
variable: "--font-body",
display: "swap",
});
const manrope = Manrope({
subsets: ["latin"],
weight: ["400", "500", "600", "700"],
variable: "--font-heading",
display: "swap",
});
export const viewport: Viewport = {
width: "device-width",
initialScale: 1,
};
const siteName = "Basiclean";
const title = "Basiclean";
const description = "Wir bieten Ihnen maßgeschneiderte Lösungen.";
const siteUrl = "https://basiclean.de";
const ogImage = {
url: "/images/baiclean.png",
alt: "Basiclean",
width: 1200,
height: 628,
};
export const metadata: Metadata = {
metadataBase: new URL(siteUrl),
title: {
default: title,
template: `%s | ${siteName}`,
},
description,
keywords: "Basiclean, Hannover",
authors: [{ name: siteName }],
robots: "index, follow",
alternates: {
canonical: siteUrl,
},
appleWebApp: {
title: siteName,
},
openGraph: {
type: "website",
siteName,
locale: "de_DE",
title,
description,
images: [ogImage],
url: siteUrl,
},
twitter: {
card: "summary_large_image",
site: "@basiclean",
title,
description,
images: [{ url: ogImage.url, alt: ogImage.alt }],
},
};
const jsonLd = {
"@context": "https://schema.org",
"@type": "LocalBusiness",
name: siteName,
url: siteUrl,
description,
address: {
"@type": "PostalAddress",
addressLocality: "Hannover",
addressCountry: "DE",
},
};
export default function RootLayout({
children,
}: Readonly<{ children: React.ReactNode }>) {
return (
<html lang="de" className={`${nunitoSans.variable} ${manrope.variable}`}>
<body>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<Header />
{children}
<Footer />
<CookieConsentBanner />
</body>
</html>
);
}