diff --git a/src/app/projects/[slug]/page.tsx b/src/app/projects/[slug]/page.tsx index 1f0dcfd..ccc2e00 100755 --- a/src/app/projects/[slug]/page.tsx +++ b/src/app/projects/[slug]/page.tsx @@ -20,12 +20,42 @@ export async function generateMetadata({ if (!project) return { title: "Project Not Found" }; return { - title: `${project.client} | Zachary Gaetano`, + title: `${project.client} | Zachary Gaetano — Broadcast Systems Integration`, description: project.summary, + keywords: [ + ...project.technologies, + project.category, + project.client, + "broadcast systems integration", + "Zachary Gaetano", + "Wild Dragon", + "Washington DC", + "broadcast facility design", + ], + alternates: { + canonical: `https://www.wilddragon.net/projects/${slug}`, + }, openGraph: { title: `${project.client} | Zachary Gaetano`, description: project.summary, - images: [{ url: project.thumbnail }], + url: `https://www.wilddragon.net/projects/${slug}`, + siteName: "Wild Dragon", + type: "website", + locale: "en_US", + images: [ + { + url: project.thumbnail, + width: 1200, + height: 630, + alt: `${project.client} — ${project.category}`, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: `${project.client} | Zachary Gaetano`, + description: project.summary, + images: [project.thumbnail], }, }; } @@ -42,6 +72,18 @@ export default async function ProjectPage({ notFound(); } + const structuredData = { + "@context": "https://schema.org", + "@type": "Service", + name: project.title, + description: project.summary, + serviceType: project.category, + provider: { + "@id": "https://www.wilddragon.net/#organization", + }, + areaServed: "United States", + }; + // Find previous and next projects for navigation const currentIndex = projects.findIndex((p) => p.slug === project.slug); const prevProject = currentIndex > 0 ? projects[currentIndex - 1] : null; @@ -50,6 +92,11 @@ export default async function ProjectPage({ return (
+