diff options
author | Valentin Popov <valentin@popov.link> | 2025-06-14 14:47:17 +0300 |
---|---|---|
committer | Valentin Popov <valentin@popov.link> | 2025-06-14 14:47:17 +0300 |
commit | a65e9c845543abcda641f51f4dd8cd77ab50b60d (patch) | |
tree | 44b3abbcd198aade2dccfeefde650118de3d8b4c /src/utils/schemas | |
parent | 17f9a467d7c0f427ae9d1cd579988a26615311c7 (diff) | |
download | popov.link-a65e9c845543abcda641f51f4dd8cd77ab50b60d.tar.xz popov.link-a65e9c845543abcda641f51f4dd8cd77ab50b60d.zip |
feat: enhance blog post and page schema with new properties
- Added optional `basedOn` field to blog post schema for better content attribution.
- Updated blog post markdown to include `basedOn` reference for improved context.
- Refactored page schema to replace deprecated website schema, enhancing structured data representation.
- Adjusted 404 and index pages to utilize the new page schema for consistency and SEO improvements.
Diffstat (limited to 'src/utils/schemas')
-rw-r--r-- | src/utils/schemas/blogPostSchema.ts | 4 | ||||
-rw-r--r-- | src/utils/schemas/blogSchema.ts | 2 | ||||
-rw-r--r-- | src/utils/schemas/pageSchema.ts | 23 | ||||
-rw-r--r-- | src/utils/schemas/websiteSchema.ts | 15 |
4 files changed, 28 insertions, 16 deletions
diff --git a/src/utils/schemas/blogPostSchema.ts b/src/utils/schemas/blogPostSchema.ts index 00395dd..9445448 100644 --- a/src/utils/schemas/blogPostSchema.ts +++ b/src/utils/schemas/blogPostSchema.ts @@ -5,13 +5,14 @@ export type BlogPostSchemaParams = { readonly dateModified: string; readonly datePublished: string; readonly description: string; + readonly isBasedOn?: string; readonly lang: string; readonly siteUrl: string; readonly slug: string; readonly title: string; }; -export default ({ siteUrl, slug, title, description, datePublished, dateModified, author, lang }: BlogPostSchemaParams): WithContext<BlogPosting> => ({ +export default ({ siteUrl, slug, title, description, datePublished, dateModified, author, lang, isBasedOn }: BlogPostSchemaParams): WithContext<BlogPosting> => ({ "@context": "https://schema.org", "@type": "BlogPosting", "url": new URL(`/blog/${slug}`, siteUrl).toString(), @@ -28,4 +29,5 @@ export default ({ siteUrl, slug, title, description, datePublished, dateModified "@type": "WebPage", "@id": new URL(`/blog/${slug}`, siteUrl).toString(), }, + ...(isBasedOn && { isBasedOn: isBasedOn }), }); diff --git a/src/utils/schemas/blogSchema.ts b/src/utils/schemas/blogSchema.ts index 66a9bae..77f4632 100644 --- a/src/utils/schemas/blogSchema.ts +++ b/src/utils/schemas/blogSchema.ts @@ -14,6 +14,8 @@ export default ({ siteUrl, title, posts }: BlogSchemaParams): WithContext<Collec "name": title, "mainEntity": { "@type": "ItemList", + "itemListOrder": "https://schema.org/ItemListOrderDescending", + "numberOfItems": posts.length, "itemListElement": posts.map((post, index) => ({ "@type": "ListItem", "position": index + 1, diff --git a/src/utils/schemas/pageSchema.ts b/src/utils/schemas/pageSchema.ts new file mode 100644 index 0000000..606488b --- /dev/null +++ b/src/utils/schemas/pageSchema.ts @@ -0,0 +1,23 @@ +import type { WithContext, WebPage } from "schema-dts"; + +export type WebsiteSchemaParams = { + readonly description: string; + readonly page: string; + readonly siteUrl: string; + readonly title: string; + readonly lang: string; +}; + +export default ({ siteUrl, page, title, description, lang }: WebsiteSchemaParams): WithContext<WebPage> => ({ + "@context": "https://schema.org", + "@type": "WebPage", + "@id": new URL(page, siteUrl).toString(), + "url": new URL(page, siteUrl).toString(), + "name": title, + "description": description, + "inLanguage": lang, + "mainEntity": { + "@type": "WebSite", + "@id": new URL("/", siteUrl).toString(), + }, +}); diff --git a/src/utils/schemas/websiteSchema.ts b/src/utils/schemas/websiteSchema.ts deleted file mode 100644 index b971e5e..0000000 --- a/src/utils/schemas/websiteSchema.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { WithContext, WebSite } from "schema-dts"; - -export type WebsiteSchemaParams = { - readonly description: string; - readonly siteUrl: string; - readonly title: string; -}; - -export default ({ siteUrl, title, description }: WebsiteSchemaParams): WithContext<WebSite> => ({ - "@context": "https://schema.org", - "@type": "WebSite", - "url": new URL("/", siteUrl).toString(), - "name": title, - "description": description, -}); |