Add SEO comparison landing pages and footer compare links.

Introduces dynamic marketing comparison routes, competitor data, and Compare sections on the homepage and marketing footer.
This commit is contained in:
yusufipk
2026-06-14 16:36:26 +02:00
parent d301f3d808
commit 51257e004f
14 changed files with 2248 additions and 25 deletions
+58
View File
@@ -0,0 +1,58 @@
import type { Metadata } from 'next';
import { notFound } from 'next/navigation';
import { ComparisonPage } from '@/components/marketing/comparison-page';
import { auth } from '@/lib/auth';
import { comparisonPages, getComparisonPage } from '@/lib/marketing/comparison-pages';
import { buildComparisonJsonLd, buildComparisonMetadata } from '@/lib/marketing/metadata';
interface MarketingSlugPageProps {
params: Promise<{ slug: string }>;
}
export function generateStaticParams() {
return comparisonPages.map((page) => ({ slug: page.slug }));
}
export async function generateMetadata({ params }: MarketingSlugPageProps): Promise<Metadata> {
const { slug } = await params;
const page = getComparisonPage(slug);
if (!page) {
return {};
}
return buildComparisonMetadata({
title: page.title,
description: page.metaDescription,
path: `/${page.slug}`,
keywords: page.keywords,
});
}
export default async function MarketingSlugPage({ params }: MarketingSlugPageProps) {
const { slug } = await params;
const page = getComparisonPage(slug);
if (!page) {
notFound();
}
const session = await auth();
const structuredData = buildComparisonJsonLd({
title: page.title,
description: page.metaDescription,
path: `/${page.slug}`,
faq: page.faq,
});
const safeStructuredData = JSON.stringify(structuredData).replace(/</g, '\\u003c');
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: safeStructuredData }}
/>
<ComparisonPage page={page} isLoggedIn={Boolean(session?.user)} />
</>
);
}
+25
View File
@@ -1,4 +1,5 @@
import type { MetadataRoute } from 'next';
import { comparisonPages } from '@/lib/marketing/comparison-pages';
import { seoConfig } from '@/lib/seo';
export default function sitemap(): MetadataRoute.Sitemap {
@@ -11,6 +12,12 @@ export default function sitemap(): MetadataRoute.Sitemap {
changeFrequency: 'daily',
priority: 1,
},
...comparisonPages.map((page) => ({
url: `${seoConfig.url}/${page.slug}`,
lastModified,
changeFrequency: 'monthly' as const,
priority: 0.8,
})),
{
url: `${seoConfig.url}/login`,
lastModified,
@@ -23,5 +30,23 @@ export default function sitemap(): MetadataRoute.Sitemap {
changeFrequency: 'monthly',
priority: 0.7,
},
{
url: `${seoConfig.url}/terms`,
lastModified,
changeFrequency: 'yearly',
priority: 0.3,
},
{
url: `${seoConfig.url}/privacy`,
lastModified,
changeFrequency: 'yearly',
priority: 0.3,
},
{
url: `${seoConfig.url}/refund`,
lastModified,
changeFrequency: 'yearly',
priority: 0.3,
},
];
}