aboutsummaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2025-06-12 02:20:36 +0300
committerValentin Popov <valentin@popov.link>2025-06-12 02:20:36 +0300
commit67f245a48faf6e89989aca2ea571b657fd4c8888 (patch)
tree110c7f4f842d30ef1c79d916d40e143d30adec5a /src/utils
parent16fa8a3b5de7dd7c4fa763fecbba0063f6b4369b (diff)
downloadpopov.link-67f245a48faf6e89989aca2ea571b657fd4c8888.tar.xz
popov.link-67f245a48faf6e89989aca2ea571b657fd4c8888.zip
feat: integrate schema.org support and enhance component structure
- Added schema.org support by introducing `schema-dts` for structured data in components. - Updated `Head`, `BaseLayout`, and various page components to accept and utilize schema props for better SEO. - Created new utility schemas for blog posts and website to standardize structured data implementation. - Enhanced the `SocialLinks` section by utilizing dedicated icon components for improved maintainability. - Refactored the `Header` component to improve accessibility and structure. - Introduced new icons for social links and integrated them into the layout.
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/schemas/blogPostSchema.ts21
-rw-r--r--src/utils/schemas/blogSchema.ts13
-rw-r--r--src/utils/schemas/websiteSchema.ts13
3 files changed, 47 insertions, 0 deletions
diff --git a/src/utils/schemas/blogPostSchema.ts b/src/utils/schemas/blogPostSchema.ts
new file mode 100644
index 0000000..b20f248
--- /dev/null
+++ b/src/utils/schemas/blogPostSchema.ts
@@ -0,0 +1,21 @@
+import type { WithContext, BlogPosting } from "schema-dts";
+
+export type BlogPostSchemaParams = {
+ readonly siteUrl: string;
+ readonly title: string;
+ readonly slug: string;
+ readonly datePublished: string;
+ readonly author: string;
+};
+
+export default ({ siteUrl, title, slug, datePublished, author }: BlogPostSchemaParams): WithContext<BlogPosting> => ({
+ "@context": "https://schema.org",
+ "@type": "BlogPosting",
+ "url": new URL(`/blog/${slug}`, siteUrl).toString(),
+ "headline": title,
+ "datePublished": datePublished,
+ "author": {
+ "@type": "Person",
+ "name": author,
+ },
+});
diff --git a/src/utils/schemas/blogSchema.ts b/src/utils/schemas/blogSchema.ts
new file mode 100644
index 0000000..7ff84d8
--- /dev/null
+++ b/src/utils/schemas/blogSchema.ts
@@ -0,0 +1,13 @@
+import type { WithContext, Blog } from "schema-dts";
+
+export type BlogSchemaParams = {
+ readonly siteUrl: string;
+ readonly title: string;
+};
+
+export default ({ siteUrl, title }: BlogSchemaParams): WithContext<Blog> => ({
+ "@context": "https://schema.org",
+ "@type": "Blog",
+ "url": new URL("/blog/", siteUrl).toString(),
+ "name": title,
+});
diff --git a/src/utils/schemas/websiteSchema.ts b/src/utils/schemas/websiteSchema.ts
new file mode 100644
index 0000000..bebb963
--- /dev/null
+++ b/src/utils/schemas/websiteSchema.ts
@@ -0,0 +1,13 @@
+import type { WithContext, WebSite } from "schema-dts";
+
+export type WebsiteSchemaParams = {
+ readonly siteUrl: string;
+ readonly title: string;
+};
+
+export default ({ siteUrl, title }: WebsiteSchemaParams): WithContext<WebSite> => ({
+ "@context": "https://schema.org",
+ "@type": "WebSite",
+ "url": new URL("/", siteUrl).toString(),
+ "name": title,
+});