feat: improve SEO with locale-specific metadata, structured data, and keywords
- Add locale-specific title/description for DE and EN homepage - Expand keywords with local SEO terms (Webentwicklung Osnabrück, Informatik, etc.) - Add WebSite schema and enhance Person schema with knowsAbout, alternateName - Add hreflang alternates for DE/EN - Update projects page with locale-specific metadata - Keep visible titles short, move SEO terms to description/structured data
This commit is contained in:
@@ -31,20 +31,41 @@ export default async function HomePageServer({ locale }: HomePageServerProps) {
|
||||
return (
|
||||
<div className="min-h-screen">
|
||||
<Script
|
||||
id={"structured-data"}
|
||||
id={"structured-data-person"}
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Person",
|
||||
name: "Dennis Konkol",
|
||||
alternateName: ["dk0", "denshooter"],
|
||||
url: "https://dk0.dev",
|
||||
jobTitle: "Software Engineer",
|
||||
description:
|
||||
locale === "de"
|
||||
? "Software Engineer & Webentwickler in Osnabrück. Webentwicklung, Fullstack-Apps, Docker, Next.js, Flutter."
|
||||
: "Software Engineer & Web Developer in Osnabrück, Germany. Web development, fullstack apps, Docker, Next.js, Flutter.",
|
||||
address: {
|
||||
"@type": "PostalAddress",
|
||||
addressLocality: "Osnabrück",
|
||||
addressCountry: "Germany",
|
||||
addressRegion: "Niedersachsen",
|
||||
addressCountry: "DE",
|
||||
},
|
||||
knowsAbout: [
|
||||
"Webentwicklung",
|
||||
"Web Development",
|
||||
"Next.js",
|
||||
"React",
|
||||
"TypeScript",
|
||||
"Flutter",
|
||||
"Docker",
|
||||
"DevOps",
|
||||
"Self-Hosting",
|
||||
"CI/CD",
|
||||
"Fullstack Development",
|
||||
"Softwareentwicklung",
|
||||
"Informatik",
|
||||
],
|
||||
sameAs: [
|
||||
"https://github.com/Denshooter",
|
||||
"https://linkedin.com/in/dkonkol",
|
||||
@@ -52,6 +73,20 @@ export default async function HomePageServer({ locale }: HomePageServerProps) {
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
<Script
|
||||
id={"structured-data-website"}
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
name: "Dennis Konkol",
|
||||
alternateName: "dk0.dev",
|
||||
url: "https://dk0.dev",
|
||||
inLanguage: ["de", "en"],
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
<Header locale={locale} />
|
||||
{/* Spacer to prevent navbar overlap */}
|
||||
<div className="h-24 md:h-32" aria-hidden="true"></div>
|
||||
|
||||
Reference in New Issue
Block a user