feat: add SEO improvements — robots.txt, sitemap, Open Graph, JSON-LD schema

- Add app/robots.ts: block admin/kunden/auth/api, reference sitemap
- Add app/sitemap.ts: list public pages (/, /pakete)
- layout.tsx: add metadataBase, Open Graph, Twitter Card, LocalBusiness JSON-LD, improve title/description with location (Crailsheim, Region Schwäbisch Hall)
- pakete/page.tsx: add Open Graph and canonical URL
- datenschutz/page.tsx: fix title/description encoding (Umlaute)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
MBO-Tech-IT 2026-05-06 14:20:21 +02:00
parent a2ea70426d
commit 9cf15d7deb
5 changed files with 146 additions and 9 deletions

View File

@ -2,8 +2,8 @@ import type { Metadata } from "next";
import LegalLayout from "@/components/LegalLayout"; import LegalLayout from "@/components/LegalLayout";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Datenschutzerklaerung | MBO-Tech-IT", title: "Datenschutzerklärung | MBO-Tech-IT",
description: "Datenschutzerklaerung gemaess DSGVO / DS-GVO", description: "Datenschutzerklärung gemäß DSGVO für mbo-tech-it.de",
robots: "noindex, nofollow", robots: "noindex, nofollow",
}; };

View File

@ -3,21 +3,109 @@ import "./globals.css";
import Providers from "@/components/Providers"; import Providers from "@/components/Providers";
import { PageTracker } from "@/components/analytics/PageTracker"; import { PageTracker } from "@/components/analytics/PageTracker";
const baseUrl = "https://mbo-tech-it.de";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "MBO-Tech-IT | Docker, Kubernetes & Cloud-Infrastruktur", metadataBase: new URL(baseUrl),
title: {
default: "MBO-Tech-IT | IT-Service Crailsheim Docker, Kubernetes & Cloud",
template: "%s | MBO-Tech-IT",
},
description: description:
"Ihr Experte für Docker-Installationen, Kubernetes-Orchestrierung, Proxmox-Virtualisierung und Hetzner Cloud-Infrastruktur. IT-Lösungen für Hard- und Software.", "IT-Experte in Crailsheim: Docker, Kubernetes, Proxmox, Hetzner Cloud, Netzwerk & WLAN. Professioneller IT-Service für Privat- und Gewerbekunden in der Region Schwäbisch Hall.",
keywords: [ keywords: [
"IT-Service Crailsheim",
"Docker", "Docker",
"Kubernetes", "Kubernetes",
"Proxmox", "Proxmox",
"Hetzner", "Hetzner Cloud",
"Cloud", "WLAN Crailsheim",
"IT", "Netzwerk",
"Virtualisierung", "Virtualisierung",
"Container", "Container",
"DevOps", "DevOps",
"IT-Support",
"IT-Dienstleister",
"Schwäbisch Hall",
"Cloud Infrastruktur",
], ],
authors: [{ name: "MBO-Tech-IT" }],
creator: "MBO-Tech-IT",
openGraph: {
type: "website",
locale: "de_DE",
url: baseUrl,
siteName: "MBO-Tech-IT",
title: "MBO-Tech-IT | IT-Service Crailsheim Docker, Kubernetes & Cloud",
description:
"IT-Experte in Crailsheim: Docker, Kubernetes, Proxmox, Hetzner Cloud, Netzwerk & WLAN. Professioneller IT-Service für Privat- und Gewerbekunden.",
},
twitter: {
card: "summary_large_image",
title: "MBO-Tech-IT | IT-Service Crailsheim",
description:
"IT-Experte in Crailsheim: Docker, Kubernetes, Proxmox, Hetzner Cloud, Netzwerk & WLAN.",
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
},
},
alternates: {
canonical: baseUrl,
},
};
const structuredData = {
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": baseUrl,
name: "MBO-Tech-IT",
description:
"Professionelle IT-Dienstleistungen in Crailsheim: Docker, Kubernetes, Proxmox, Cloud-Infrastruktur, Netzwerk und WLAN für Privat- und Gewerbekunden.",
url: baseUrl,
telephone: "+4917193451093",
email: "kontakt@mbo-tech-it.de",
address: {
"@type": "PostalAddress",
streetAddress: "Mörikestr. 2",
addressLocality: "Crailsheim",
postalCode: "74564",
addressCountry: "DE",
},
geo: {
"@type": "GeoCoordinates",
latitude: 49.1374,
longitude: 10.0695,
},
areaServed: {
"@type": "GeoCircle",
geoMidpoint: {
"@type": "GeoCoordinates",
latitude: 49.1374,
longitude: 10.0695,
},
geoRadius: "100000",
},
knowsAbout: [
"Docker",
"Kubernetes",
"Proxmox",
"Hetzner Cloud",
"Netzwerk",
"WLAN",
"IT-Security",
"Virtualisierung",
"Linux",
],
priceRange: "$$",
serviceArea: {
"@type": "AdministrativeArea",
name: "Region Schwäbisch Hall",
},
}; };
export default function RootLayout({ export default function RootLayout({
@ -27,6 +115,12 @@ export default function RootLayout({
}) { }) {
return ( return (
<html lang="de" className="scroll-smooth" suppressHydrationWarning> <html lang="de" className="scroll-smooth" suppressHydrationWarning>
<head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}
/>
</head>
<body> <body>
<PageTracker /> <PageTracker />
<Providers>{children}</Providers> <Providers>{children}</Providers>

View File

@ -3,9 +3,18 @@ import Link from "next/link";
import Logo from "@/components/Logo"; import Logo from "@/components/Logo";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Pakete & Preise | MBO-Tech-IT", title: "Pakete & Preise",
description: description:
"Konkrete IT-Pakete: Nextcloud + Paperless-ngx auf Docker/Kubernetes/Proxmox Installation, Hosting und Wartung. Preise auf Anfrage.", "Nextcloud + Paperless-ngx auf Docker, Kubernetes oder Proxmox: Installation, Hosting und Wartung in Crailsheim. Individuelle Angebote auf Anfrage.",
openGraph: {
title: "Pakete & Preise | MBO-Tech-IT",
description:
"Nextcloud + Paperless-ngx auf Docker, Kubernetes oder Proxmox: Installation, Hosting und Wartung in Crailsheim.",
url: "https://mbo-tech-it.de/pakete",
},
alternates: {
canonical: "https://mbo-tech-it.de/pakete",
},
}; };
const packages = [ const packages = [

14
app/robots.ts Normal file
View File

@ -0,0 +1,14 @@
import { MetadataRoute } from "next";
export default function robots(): MetadataRoute.Robots {
return {
rules: [
{
userAgent: "*",
allow: "/",
disallow: ["/admin/", "/kunden/", "/auth/", "/api/"],
},
],
sitemap: "https://mbo-tech-it.de/sitemap.xml",
};
}

20
app/sitemap.ts Normal file
View File

@ -0,0 +1,20 @@
import { MetadataRoute } from "next";
const baseUrl = "https://mbo-tech-it.de";
export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: baseUrl,
lastModified: new Date(),
changeFrequency: "monthly",
priority: 1,
},
{
url: `${baseUrl}/pakete`,
lastModified: new Date(),
changeFrequency: "monthly",
priority: 0.8,
},
];
}