2021-01-10 17:35:37 +08:00
|
|
|
|
import { NextSeo, ArticleJsonLd } from 'next-seo'
|
2021-01-09 17:50:45 +08:00
|
|
|
|
import siteMetadata from '@/data/siteMetadata'
|
|
|
|
|
|
2021-01-10 17:35:37 +08:00
|
|
|
|
export const SEO = {
|
2021-01-09 17:50:45 +08:00
|
|
|
|
title: siteMetadata.title,
|
|
|
|
|
description: siteMetadata.description,
|
|
|
|
|
openGraph: {
|
|
|
|
|
type: 'website',
|
|
|
|
|
locale: siteMetadata.language,
|
|
|
|
|
url: siteMetadata.siteUrl,
|
|
|
|
|
title: siteMetadata.title,
|
|
|
|
|
description: siteMetadata.description,
|
|
|
|
|
images: [
|
|
|
|
|
{
|
2021-01-10 17:50:44 +08:00
|
|
|
|
url: `${siteMetadata.siteUrl}${siteMetadata.socialBanner}`,
|
2021-01-09 17:50:45 +08:00
|
|
|
|
alt: siteMetadata.title,
|
2021-01-10 17:50:44 +08:00
|
|
|
|
width: 1200,
|
|
|
|
|
height: 600,
|
2021-01-09 17:50:45 +08:00
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
twitter: {
|
|
|
|
|
handle: siteMetadata.twitter,
|
|
|
|
|
site: siteMetadata.twitter,
|
|
|
|
|
cardType: 'summary_large_image',
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-10 17:35:37 +08:00
|
|
|
|
export const PageSeo = ({ title, description, url }) => {
|
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<NextSeo
|
|
|
|
|
title={`${title} – ${siteMetadata.title}`}
|
|
|
|
|
description
|
|
|
|
|
canonical={url}
|
|
|
|
|
openGraph={{
|
|
|
|
|
url,
|
|
|
|
|
title,
|
|
|
|
|
description,
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const BlogSeo = ({ title, summary, date, url, image = siteMetadata.socialBanner }) => {
|
|
|
|
|
const publishedAt = new Date(date).toISOString()
|
|
|
|
|
const featuredImage = {
|
|
|
|
|
url: `${siteMetadata.siteUrl}${image}`,
|
|
|
|
|
alt: title,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<NextSeo
|
|
|
|
|
title={`${title} – ${siteMetadata.title}`}
|
|
|
|
|
description={summary}
|
|
|
|
|
canonical={url}
|
|
|
|
|
openGraph={{
|
|
|
|
|
type: 'article',
|
|
|
|
|
article: {
|
|
|
|
|
publishedTime: publishedAt,
|
|
|
|
|
},
|
|
|
|
|
url,
|
|
|
|
|
title,
|
|
|
|
|
description: summary,
|
|
|
|
|
images: [featuredImage],
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
<ArticleJsonLd
|
|
|
|
|
authorName={siteMetadata.author}
|
|
|
|
|
dateModified={publishedAt}
|
|
|
|
|
datePublished={publishedAt}
|
|
|
|
|
description={summary}
|
|
|
|
|
images={[featuredImage]}
|
|
|
|
|
publisherLogo="/static/favicons/android-chrome-96x96.png"
|
|
|
|
|
publisherName={siteMetadata.author}
|
|
|
|
|
title={title}
|
|
|
|
|
url={url}
|
|
|
|
|
/>
|
|
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
}
|