Browse Source

Fix profile page JSONLD

Chocobozzz 5 months ago
parent
commit
2fde12d7e1

+ 4 - 0
server/core/lib/html/shared/actor-html.ts

@@ -80,6 +80,10 @@ export class ActorHtml {
       ogType,
       twitterCard,
       schemaType,
+      jsonldProfile: {
+        createdAt: entity.createdAt,
+        updatedAt: entity.updatedAt
+      },
 
       indexationPolicy: entity.Actor.isOwned()
         ? 'always'

+ 29 - 1
server/core/lib/html/shared/tags-html.ts

@@ -11,10 +11,16 @@ type Tags = {
 
   url?: string
 
-  schemaType?: string
   ogType?: string
   twitterCard?: 'player' | 'summary' | 'summary_large_image'
 
+  schemaType?: string
+
+  jsonldProfile?: {
+    createdAt: Date
+    updatedAt: Date
+  }
+
   list?: {
     numberOfItems: number
   }
@@ -195,6 +201,28 @@ export class TagsHtml {
   static generateSchemaTagsOptions (tags: Tags, context: HookContext) {
     if (!tags.schemaType) return
 
+    if (tags.schemaType === 'ProfilePage') {
+      if (!tags.jsonldProfile) throw new Error('Missing `jsonldProfile` with ProfilePage schema type')
+
+      const profilePageSchema = {
+        '@context': 'http://schema.org',
+        '@type': tags.schemaType,
+
+        'dateCreated': tags.jsonldProfile.createdAt.toISOString(),
+        'dateModified': tags.jsonldProfile.updatedAt.toISOString(),
+
+        'mainEntity': {
+          '@id': '#main-author',
+          '@type': 'Person',
+          'name': tags.escapedTitle,
+          'description': tags.escapedTruncatedDescription,
+          'image': tags.image.url
+        }
+      }
+
+      return Hooks.wrapObject(profilePageSchema, 'filter:html.client.json-ld.result', context)
+    }
+
     const schema = {
       '@context': 'http://schema.org',
       '@type': tags.schemaType,