@@ -88,7 +88,8 @@ import PostNotAvailable from "@client/components/PostNotAvailable.vue";
88
88
import { faClock } from " @fortawesome/free-regular-svg-icons" ;
89
89
import { faArrowLeft , faEdit , faTrash } from " @fortawesome/free-solid-svg-icons" ;
90
90
import type { ConfirmDialogData , Post , UserRolePermissionsType } from " @fumix/fu-blog-common" ;
91
- import { useSeoMeta } from " @unhead/vue" ;
91
+ import { DateUtil } from " @fumix/fu-blog-common" ;
92
+ import { useHead , useSeoMeta } from " @unhead/vue" ;
92
93
import { onMounted , type PropType , ref } from " vue" ;
93
94
import { useI18n } from " vue-i18n" ;
94
95
import { useRoute , useRouter } from " vue-router" ;
@@ -122,7 +123,32 @@ onMounted(async () => {
122
123
});
123
124
const res = await fetch (` /api/posts/${id } ` );
124
125
const response = await res .json ();
125
- post .value = response .data ;
126
+ const responseData: Post | null = response .data ;
127
+ if (responseData ) {
128
+ useHead ({
129
+ title: responseData .title + " – " + t (" posts.blogTitle" ),
130
+ script: [
131
+ {
132
+ type: " application/json+ld" ,
133
+ textContent: JSON .stringify ({
134
+ " @context" : " https://schema.org" ,
135
+ " @type" : " BlogPosting" ,
136
+ name: responseData .title ,
137
+ datePublished: responseData .createdAt ? DateUtil .formatDateOnlyUtcIso (new Date (responseData .createdAt )) : undefined ,
138
+ dateModified: responseData .updatedAt ? DateUtil .formatDateOnlyUtcIso (new Date (responseData .updatedAt )) : undefined ,
139
+ description: responseData .description ,
140
+ author: responseData .createdBy
141
+ ? {
142
+ " @type" : " Person" ,
143
+ name: responseData .createdBy .fullName ,
144
+ }
145
+ : undefined ,
146
+ }),
147
+ },
148
+ ],
149
+ });
150
+ }
151
+ post .value = responseData ;
126
152
loading .value = false ;
127
153
} catch (e ) {
128
154
console .log (" ERROR: " , e );
0 commit comments