Skip to content

Commit 041d288

Browse files
Fix blog engine and SEO metadata:
- Robust date sorting and error handling in blog.ts - Corrected all canonical and structured data URLs to the new root domain
1 parent 7dd72db commit 041d288

3 files changed

Lines changed: 30 additions & 21 deletions

File tree

app/blog/[slug]/page.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
2525
keywords: post.keywords.join(', '),
2626
authors: [{ name: post.author }],
2727
alternates: {
28-
canonical: `https://webtoolkit-pro.netlify.app/blog/${post.slug}/`,
28+
canonical: `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
2929
},
3030
openGraph: {
3131
title: post.title,
3232
description: post.description,
33-
url: `https://webtoolkit-pro.netlify.app/blog/${post.slug}/`,
33+
url: `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
3434
siteName: 'WebToolkit Pro',
3535
type: 'article',
3636
publishedTime: post.date,
@@ -244,21 +244,21 @@ export default async function BlogPostPage({ params }: Props) {
244244
'author': {
245245
'@type': 'Organization',
246246
'name': post.author,
247-
'url': 'https://webtoolkit-pro.netlify.app',
247+
'url': 'https://abusufyan-netizen.github.io',
248248
},
249249
'publisher': {
250250
'@type': 'Organization',
251251
'name': 'WebToolkit Pro',
252-
'url': 'https://webtoolkit-pro.netlify.app',
252+
'url': 'https://abusufyan-netizen.github.io',
253253
},
254254
'mainEntityOfPage': {
255255
'@type': 'WebPage',
256-
'@id': `https://webtoolkit-pro.netlify.app/blog/${post.slug}/`,
256+
'@id': `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
257257
},
258258
'keywords': post.keywords.join(', '),
259259
'articleSection': post.category,
260260
'inLanguage': 'en-US',
261-
'url': `https://webtoolkit-pro.netlify.app/blog/${post.slug}/`,
261+
'url': `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
262262
}),
263263
}}
264264
/>
@@ -275,19 +275,19 @@ export default async function BlogPostPage({ params }: Props) {
275275
'@type': 'ListItem',
276276
'position': 1,
277277
'name': 'Home',
278-
'item': 'https://webtoolkit-pro.netlify.app',
278+
'item': 'https://abusufyan-netizen.github.io',
279279
},
280280
{
281281
'@type': 'ListItem',
282282
'position': 2,
283283
'name': 'Blog',
284-
'item': 'https://webtoolkit-pro.netlify.app/blog/',
284+
'item': 'https://abusufyan-netizen.github.io/blog/',
285285
},
286286
{
287287
'@type': 'ListItem',
288288
'position': 3,
289289
'name': post.title,
290-
'item': `https://webtoolkit-pro.netlify.app/blog/${post.slug}/`,
290+
'item': `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
291291
},
292292
],
293293
}),

app/blog/page.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ export const metadata = {
77
description: 'Expert web development tips, tutorials, and guides. Learn about developer tools, JSON formatting, password security, SEO optimization, CSS best practices, and more.',
88
keywords: 'web development blog, developer tutorials, coding tips, programming guides, web development best practices',
99
alternates: {
10-
canonical: 'https://webtoolkit-pro.netlify.app/blog/',
10+
canonical: 'https://abusufyan-netizen.github.io/blog/',
1111
},
1212
openGraph: {
1313
title: 'Developer Blog - WebToolkit Pro',
1414
description: 'Expert web development tips, tutorials, and guides for modern developers.',
15-
url: 'https://webtoolkit-pro.netlify.app/blog/',
15+
url: 'https://abusufyan-netizen.github.io/blog/',
1616
siteName: 'WebToolkit Pro',
1717
type: 'website',
1818
locale: 'en_US',
@@ -130,11 +130,11 @@ export default function BlogPage() {
130130
'@type': 'Blog',
131131
'name': 'WebToolkit Pro Developer Blog',
132132
'description': 'Expert web development tips, tutorials, and guides.',
133-
'url': 'https://webtoolkit-pro.netlify.app/blog/',
133+
'url': 'https://abusufyan-netizen.github.io/blog/',
134134
'publisher': {
135135
'@type': 'Organization',
136136
'name': 'WebToolkit Pro',
137-
'url': 'https://webtoolkit-pro.netlify.app',
137+
'url': 'https://abusufyan-netizen.github.io',
138138
},
139139
'blogPost': posts.map((post) => ({
140140
'@type': 'BlogPosting',
@@ -145,7 +145,7 @@ export default function BlogPage() {
145145
'@type': 'Organization',
146146
'name': post.author,
147147
},
148-
'url': `https://webtoolkit-pro.netlify.app/blog/${post.slug}/`,
148+
'url': `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
149149
})),
150150
}),
151151
}}

lib/blog.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ export function getAllPosts(): BlogPost[] {
3737
slug,
3838
title: data.title || '',
3939
description: data.description || '',
40-
date: data.date || '',
41-
category: data.category || '',
40+
date: data.date || new Date().toISOString(),
41+
category: data.category || 'General',
4242
tags: data.tags || [],
4343
keywords: data.keywords || [],
4444
readTime: data.readTime || '5 min read',
@@ -49,7 +49,12 @@ export function getAllPosts(): BlogPost[] {
4949
} as BlogPost
5050
})
5151

52-
return posts.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
52+
// Safe sort with date validation
53+
return posts.sort((a, b) => {
54+
const dateA = new Date(a.date).getTime()
55+
const dateB = new Date(b.date).getTime()
56+
return (isNaN(dateB) ? 0 : dateB) - (isNaN(dateA) ? 0 : dateA)
57+
})
5358
}
5459

5560
export async function getPostBySlug(slug: string): Promise<BlogPost | null> {
@@ -59,22 +64,26 @@ export async function getPostBySlug(slug: string): Promise<BlogPost | null> {
5964
const fileContent = fs.readFileSync(filePath, 'utf-8')
6065
const { data, content } = matter(fileContent)
6166

62-
const result = await remark().use(html, { sanitize: false }).process(content)
67+
// Use remark to convert markdown to HTML string
68+
const processedContent = await remark()
69+
.use(html)
70+
.process(content)
71+
const htmlContent = processedContent.toString()
6372

6473
return {
6574
slug,
6675
title: data.title || '',
6776
description: data.description || '',
68-
date: data.date || '',
69-
category: data.category || '',
77+
date: data.date || new Date().toISOString(),
78+
category: data.category || 'General',
7079
tags: data.tags || [],
7180
keywords: data.keywords || [],
7281
readTime: data.readTime || '5 min read',
7382
author: data.author || 'WebToolkit Pro Team',
7483
image: data.image || '',
7584
imageAlt: data.imageAlt || data.title || '',
7685
content,
77-
htmlContent: result.toString(),
86+
htmlContent,
7887
}
7988
}
8089

0 commit comments

Comments
 (0)