From 895b696f6766e54423ef7c82b1c3883bdd7579e8 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 28 Apr 2026 00:01:48 -0500 Subject: [PATCH 1/2] SEO fix: Add structured data markup Affects 38 pages. Auto-fix by GusClaw SEO pipeline. --- app/blog/[slug]/page.tsx | 15 ++++++++++++++- app/blog/page.tsx | 28 +++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index 413c225..7f16d20 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -78,6 +78,14 @@ export default async function BlogPost({ params }: BlogPostProps) { const title = metadata.title; const description = metadata.description || `${title} — an engineer's take on building real software. From CyberWorld Builders.`; + // Ensure schema image URL is absolute — relative URLs fail structured-data validation. + const toAbsoluteUrl = (path?: string) => + !path ? null : path.startsWith('http') ? path : `https://cyberworldbuilders.com${path}`; + const schemaImageUrl = + toAbsoluteUrl(metadata.socialImage) || + toAbsoluteUrl(metadata.headerImage) || + 'https://cyberworldbuilders.com/images/logo.png'; + // Build allPosts list for related posts and navigation const allPostEntries = getAllPosts(); const allPosts = allPostEntries.map(p => ({ @@ -174,7 +182,12 @@ export default async function BlogPost({ params }: BlogPostProps) { "@type": "BlogPosting", headline: title, description, - image: metadata.socialImage || "https://cyberworldbuilders.com/images/logo.png", + image: { + "@type": "ImageObject", + url: schemaImageUrl, + width: 1200, + height: 630, + }, author: { "@type": "Person", name: "Jay Long", diff --git a/app/blog/page.tsx b/app/blog/page.tsx index f9c15d4..4835ff3 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -176,13 +176,14 @@ export default async function BlogIndex({ searchParams }: BlogIndexProps) { )} - {/* CollectionPage Schema with freshness signals */} + {/* Blog schema with embedded BlogPosting entries — gives crawlers explicit + BlogPosting markup on the listing page in addition to per-post pages. */}