| | import { siteConfig } from '@/lib/config' |
| | import { useGlobal } from '@/lib/global' |
| | import Head from 'next/head' |
| | import { useRouter } from 'next/router' |
| |
|
| | |
| | |
| | |
| | |
| | |
| | const GlobalHead = (props) => { |
| | const { children } = props |
| | let url = siteConfig('PATH')?.length ? `${siteConfig('LINK')}/${siteConfig('SUB_PATH', '')}` : siteConfig('LINK') |
| | let image |
| | const meta = getSEOMeta(props, useRouter(), useGlobal()) |
| | if (meta) { |
| | url = `${url}/${meta.slug}` |
| | image = meta.image || '/bg_image.jpg' |
| | } |
| | const title = meta?.title || siteConfig('TITLE') |
| | const description = meta?.description || siteConfig('DESCRIPTION') |
| | const type = meta?.type || 'website' |
| | const keywords = meta?.tags || siteConfig('KEYWORDS') |
| | const lang = siteConfig('LANG').replace('-', '_') |
| | const category = meta?.category || siteConfig('KEYWORDS') |
| |
|
| | return ( |
| | <Head> |
| | <title>{title}</title> |
| | <meta name="theme-color" content={siteConfig('BACKGROUND_DARK')} /> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, minimum-scale=1.0" /> |
| | <meta name="robots" content="follow, index" /> |
| | <meta charSet="UTF-8" /> |
| | {siteConfig('SEO_GOOGLE_SITE_VERIFICATION') && ( |
| | <meta |
| | name="google-site-verification" |
| | content={siteConfig('SEO_GOOGLE_SITE_VERIFICATION')} |
| | /> |
| | )} |
| | {siteConfig('SEO_BAIDU_SITE_VERIFICATION') && (<meta name="baidu-site-verification" content={siteConfig('SEO_BAIDU_SITE_VERIFICATION')} />)} |
| | <meta name="keywords" content={keywords} /> |
| | <meta name="description" content={description} /> |
| | <meta property="og:locale" content={lang} /> |
| | <meta property="og:title" content={title} /> |
| | <meta property="og:description" content={description} /> |
| | <meta property="og:url" content={url} /> |
| | <meta property="og:image" content={image} /> |
| | <meta property="og:site_name" content={siteConfig('TITLE')} /> |
| | <meta property="og:type" content={type} /> |
| | <meta name="twitter:card" content="summary_large_image" /> |
| | <meta name="twitter:description" content={description} /> |
| | <meta name="twitter:title" content={title} /> |
| | |
| | {siteConfig('COMMENT_WEBMENTION_ENABLE') && ( |
| | <> |
| | <link rel="webmention" href={`https://webmention.io/${siteConfig('COMMENT_WEBMENTION_HOSTNAME')}/webmention`} /> |
| | <link rel="pingback" href={`https://webmention.io/${siteConfig('COMMENT_WEBMENTION_HOSTNAME')}/xmlrpc`} /> |
| | </> |
| | )} |
| |
|
| | {siteConfig('COMMENT_WEBMENTION_ENABLE') && siteConfig('COMMENT_WEBMENTION_AUTH') !== '' && ( |
| | <link href={siteConfig('COMMENT_WEBMENTION_AUTH')} rel="me" /> |
| | )} |
| |
|
| | {JSON.parse(siteConfig('ANALYTICS_BUSUANZI_ENABLE')) && <meta name="referrer" content="no-referrer-when-downgrade" />} |
| | {meta?.type === 'Post' && ( |
| | <> |
| | <meta |
| | property="article:published_time" |
| | content={meta.publishDay} |
| | /> |
| | <meta property="article:author" content={siteConfig('AUTHOR')} /> |
| | <meta property="article:section" content={category} /> |
| | <meta property="article:publisher" content={siteConfig('FACEBOOK_PAGE')} /> |
| | </> |
| | )} |
| | {children} |
| | </Head> |
| | ) |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | const getSEOMeta = (props, router, global) => { |
| | const { locale } = global |
| | const { post, tag, category, page } = props |
| | const keyword = router?.query?.s |
| |
|
| | switch (router.route) { |
| | case '/': |
| | return { |
| | title: `${siteConfig('TITLE')} | ${siteConfig('DESCRIPTION')}`, |
| | description: siteConfig('DESCRIPTION'), |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | slug: '', |
| | type: 'website' |
| | } |
| | case '/archive': |
| | return { |
| | title: `${locale.NAV.ARCHIVE} | ${siteConfig('TITLE')}`, |
| | description: siteConfig('DESCRIPTION'), |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | slug: 'archive', |
| | type: 'website' |
| | } |
| | case '/page/[page]': |
| | return { |
| | title: `${page} | Page | ${siteConfig('TITLE')}`, |
| | description: siteConfig('DESCRIPTION'), |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | slug: 'page/' + page, |
| | type: 'website' |
| | } |
| | case '/category/[category]': |
| | return { |
| | title: `${category} | ${locale.COMMON.CATEGORY} | ${ |
| | siteConfig('TITLE') || '' |
| | }`, |
| | description: siteConfig('DESCRIPTION'), |
| | slug: 'category/' + category, |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | type: 'website' |
| | } |
| | case '/category/[category]/page/[page]': |
| | return { |
| | title: `${category} | ${locale.COMMON.CATEGORY} | ${ |
| | siteConfig('TITLE') || '' |
| | }`, |
| | description: siteConfig('DESCRIPTION'), |
| | slug: 'category/' + category, |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | type: 'website' |
| | } |
| | case '/tag/[tag]': |
| | case '/tag/[tag]/page/[page]': |
| | return { |
| | title: `${tag} | ${locale.COMMON.TAGS} | ${siteConfig('TITLE')}`, |
| | description: siteConfig('DESCRIPTION'), |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | slug: 'tag/' + tag, |
| | type: 'website' |
| | } |
| | case '/search': |
| | return { |
| | title: `${keyword || ''}${keyword ? ' | ' : ''}${locale.NAV.SEARCH} | ${siteConfig('TITLE')}`, |
| | description: siteConfig('DESCRIPTION'), |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | slug: 'search', |
| | type: 'website' |
| | } |
| | case '/search/[keyword]': |
| | case '/search/[keyword]/page/[page]': |
| | return { |
| | title: `${keyword || ''}${keyword ? ' | ' : ''}${locale.NAV.SEARCH} | ${siteConfig('TITLE')}`, |
| | description: siteConfig('TITLE'), |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | slug: 'search/' + (keyword || ''), |
| | type: 'website' |
| | } |
| | case '/404': |
| | return { title: `${siteConfig('TITLE')} | 页面找不到啦`, image: siteConfig('HOME_BANNER_IMAGE') } |
| | case '/tag': |
| | return { |
| | title: `${locale.COMMON.TAGS} | ${siteConfig('TITLE')}`, |
| | description: siteConfig('DESCRIPTION'), |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | slug: 'tag', |
| | type: 'website' |
| | } |
| | case '/category': |
| | return { |
| | title: `${locale.COMMON.CATEGORY} | ${siteConfig('TITLE')}`, |
| | description: siteConfig('DESCRIPTION'), |
| | image: siteConfig('HOME_BANNER_IMAGE'), |
| | slug: 'category', |
| | type: 'website' |
| | } |
| | default: |
| | return { |
| | title: post ? `${post?.title} | ${siteConfig('TITLE')}` : `${siteConfig('TITLE')} | loading`, |
| | description: post?.summary, |
| | type: post?.type, |
| | slug: post?.slug, |
| | image: post?.pageCoverThumbnail || siteConfig('HOME_BANNER_IMAGE'), |
| | category: post?.category?.[0], |
| | tags: post?.tags |
| | } |
| | } |
| | } |
| |
|
| | export default GlobalHead |
| |
|