From 8876bce1b0d7eab978768b3aa8db921e6686cfad Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 18 May 2026 06:21:36 -0500 Subject: [PATCH 1/4] SEO fix: Add alt text to images Affects 1 pages. Auto-fix by GusClaw SEO pipeline. --- components/PostCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/PostCard.tsx b/components/PostCard.tsx index 5615d0f..3461234 100644 --- a/components/PostCard.tsx +++ b/components/PostCard.tsx @@ -35,7 +35,7 @@ export default function PostCard({ slug }: PostCardProps) {
Date: Mon, 18 May 2026 06:22:05 -0500 Subject: [PATCH 2/4] SEO fix: Add width/height attributes to images Affects 1 pages. Auto-fix by GusClaw SEO pipeline. --- .../posts/revenant-hollow-never-stopped-being-alive.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/blog/posts/revenant-hollow-never-stopped-being-alive.tsx b/app/blog/posts/revenant-hollow-never-stopped-being-alive.tsx index 92e3325..f297609 100644 --- a/app/blog/posts/revenant-hollow-never-stopped-being-alive.tsx +++ b/app/blog/posts/revenant-hollow-never-stopped-being-alive.tsx @@ -94,7 +94,9 @@ export default function Post() { A node prototype on a workbench: Arduino, breadboard, jumper wires, glowing blue LED
A node prototype from years back. Still on the workbench. @@ -215,7 +217,9 @@ export default function Post() { Night-time haunt environment: a dimly lit structure with heavy fog drifting under a single warm overhead light
The work doesn't live online. It lives outside, after dark, in the fog. From 9ad07483f3cad94dbed6c5ce74f2eb97a7f5efaa Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 18 May 2026 06:23:39 -0500 Subject: [PATCH 3/4] SEO fix: Add structured data markup Affects 37 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..9f91e9e 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.`; + // Schema image must be an absolute URL — relative paths 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. */}