From 111575aedad36eb9952744b0bf0d30b9d4a5b57b Mon Sep 17 00:00:00 2001 From: Timo Knuth Date: Mon, 12 Jan 2026 16:56:52 +0100 Subject: [PATCH] Final --- public/.well-known/security.txt | 4 ++++ public/humans.txt | 13 +++++++++++++ src/app/(marketing)/page.tsx | 4 +++- src/app/(marketing-de)/qr-code-erstellen/page.tsx | 3 ++- src/lib/schema-utils.ts | 15 +++++++++++++++ 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 public/.well-known/security.txt create mode 100644 public/humans.txt create mode 100644 src/lib/schema-utils.ts diff --git a/public/.well-known/security.txt b/public/.well-known/security.txt new file mode 100644 index 0000000..69ee741 --- /dev/null +++ b/public/.well-known/security.txt @@ -0,0 +1,4 @@ +Contact: mailto:security@qrmaster.net +Expires: 2027-01-01T00:00:00.000Z +Strategies: https://www.qrmaster.net/.well-known/security.txt +Preferred-Languages: en, de diff --git a/public/humans.txt b/public/humans.txt new file mode 100644 index 0000000..d20ee09 --- /dev/null +++ b/public/humans.txt @@ -0,0 +1,13 @@ +/* TEAM */ +Founder: Timo Knuth +Site: https://qrmaster.net +Twitter: @qrmaster + +/* THANKS */ +Thanks to: Next.js, Vercel, Tailwind CSS, Stripe, Supabase + +/* SITE */ +Last update: 2026/01/12 +Language: English, German +Doctype: HTML5 +IDE: VS Code diff --git a/src/app/(marketing)/page.tsx b/src/app/(marketing)/page.tsx index a99ee51..8c6106a 100644 --- a/src/app/(marketing)/page.tsx +++ b/src/app/(marketing)/page.tsx @@ -3,6 +3,8 @@ import type { Metadata } from 'next'; import SeoJsonLd from '@/components/SeoJsonLd'; import { organizationSchema, websiteSchema } from '@/lib/schema'; import HomePageClient from '@/components/marketing/HomePageClient'; +import { generateFaqSchema } from '@/lib/schema-utils'; +import en from '@/i18n/en.json'; // Import English translations for schema generation function truncateAtWord(text: string, maxLength: number): string { if (text.length <= maxLength) return text; @@ -45,7 +47,7 @@ export async function generateMetadata(): Promise { export default function HomePage() { return ( <> - + {/* Server-rendered SEO content for crawlers */}
diff --git a/src/app/(marketing-de)/qr-code-erstellen/page.tsx b/src/app/(marketing-de)/qr-code-erstellen/page.tsx index 09461e7..a50f1f0 100644 --- a/src/app/(marketing-de)/qr-code-erstellen/page.tsx +++ b/src/app/(marketing-de)/qr-code-erstellen/page.tsx @@ -2,6 +2,7 @@ import React from 'react'; import type { Metadata } from 'next'; import SeoJsonLd from '@/components/SeoJsonLd'; import { organizationSchema, websiteSchema } from '@/lib/schema'; +import { generateFaqSchema } from '@/lib/schema-utils'; import { Hero } from '@/components/marketing/Hero'; import { InstantGenerator } from '@/components/marketing/InstantGenerator'; import { StaticVsDynamic } from '@/components/marketing/StaticVsDynamic'; @@ -66,7 +67,7 @@ export default function QRCodeErstellenPage() { return ( <> - + {/* Server-rendered SEO content for crawlers - GERMAN */}
diff --git a/src/lib/schema-utils.ts b/src/lib/schema-utils.ts new file mode 100644 index 0000000..446636a --- /dev/null +++ b/src/lib/schema-utils.ts @@ -0,0 +1,15 @@ + +export function generateFaqSchema(questions: Record) { + return { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: Object.values(questions).map((item) => ({ + '@type': 'Question', + name: item.question, + acceptedAnswer: { + '@type': 'Answer', + text: item.answer, + }, + })), + }; +}