add structured data scheme
This commit is contained in:
parent
757e0e8628
commit
739fee2c6d
43
src/lib/components/ArticleBreadcrumbStructuredData.svelte
Normal file
43
src/lib/components/ArticleBreadcrumbStructuredData.svelte
Normal file
@ -0,0 +1,43 @@
|
||||
<script lang="ts">
|
||||
export let title: string;
|
||||
export let datePublished: string;
|
||||
export let dateModified: string;
|
||||
export let image: string | undefined;
|
||||
export let url: string;
|
||||
</script>
|
||||
|
||||
{@html `<script type="application/ld+json">
|
||||
[{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
"headline": "${title}",
|
||||
${
|
||||
image &&
|
||||
`"image": [
|
||||
"${image}"
|
||||
],`
|
||||
}
|
||||
"datePublished": "${datePublished}",
|
||||
"dateModified": "${dateModified}",
|
||||
"author": [{
|
||||
"@type": "Person",
|
||||
"name": "Jack Landon",
|
||||
"url": "https://stocknear.com/about"
|
||||
}]
|
||||
},
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
"itemListElement": [{
|
||||
"@type": "ListItem",
|
||||
"position": 1,
|
||||
"name": "Blog",
|
||||
"item": "https://stocknear.com/${url}
|
||||
},{
|
||||
"@type": "ListItem",
|
||||
"position": 2,
|
||||
"name": "${title}"
|
||||
}]
|
||||
}
|
||||
]
|
||||
</script>`}
|
||||
25
src/lib/components/FAQStructuredDataTag.svelte
Normal file
25
src/lib/components/FAQStructuredDataTag.svelte
Normal file
@ -0,0 +1,25 @@
|
||||
<script lang="ts">
|
||||
export let faqs: {
|
||||
question: string;
|
||||
answer: string;
|
||||
}[];
|
||||
|
||||
let mappedFaqs = faqs.map((faq, index) => {
|
||||
return `{
|
||||
"@type": "Question",
|
||||
"name": "${faq.question}",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "${faq.answer}"
|
||||
}
|
||||
}`;
|
||||
});
|
||||
</script>
|
||||
|
||||
{@html `<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [${mappedFaqs}]
|
||||
}
|
||||
</script>`}
|
||||
@ -236,14 +236,12 @@
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col">
|
||||
<div class="border-b border-gray-700 w-full pb-2">Made in EU 🇪🇺</div>
|
||||
<div class="border-b border-gray-700 w-full"></div>
|
||||
<div
|
||||
class="flex flex-col sm:flex-row sm:justify-between items-start sm:items-center mt-6 text-md text-gray-300 mb-5"
|
||||
>
|
||||
<span class="mb-2 sm:mb-0">Stocknear is 100% Open Source⚡ </span>
|
||||
<span class="hidden sm:inline-block">
|
||||
© 2025 Stocknear. All Rights Reserved.
|
||||
</span>
|
||||
<span class="mb-2 sm:mb-0 inline-block"> Made in EU 🇪🇺</span>
|
||||
<span class="">Stocknear is 100% Open Source⚡ </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
<script>
|
||||
import { getImageURL } from "$lib/utils";
|
||||
import SEO from "$lib/components/SEO.svelte";
|
||||
import ArticleBreadcrumbStructuredData from "$lib/components/ArticleBreadcrumbStructuredData.svelte";
|
||||
export let data;
|
||||
|
||||
let article = data?.getArticle;
|
||||
@ -20,6 +21,16 @@
|
||||
: ""}
|
||||
/>
|
||||
|
||||
<ArticleBreadcrumbStructuredData
|
||||
title={article?.title}
|
||||
datePublished={article.created}
|
||||
dateModified={article?.updated}
|
||||
url={`blog/article/${data?.getParams}`}
|
||||
image={article?.cover
|
||||
? getImageURL(article?.collectionId, article?.id, article?.cover)
|
||||
: ""}
|
||||
/>
|
||||
|
||||
<section
|
||||
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden min-h-screen pb-20 pt-3 px-4 lg:px-3"
|
||||
>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user