mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-04-26 10:45:23 -04:00
124 lines
3.6 KiB
TypeScript
124 lines
3.6 KiB
TypeScript
import config from ".";
|
||
import { meJpg, faviconPng, faviconIco, appleTouchIconPng } from "./favicons";
|
||
|
||
import type { DefaultSeoProps, SocialProfileJsonLdProps, ArticleJsonLdProps } from "next-seo";
|
||
|
||
const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || `https://${config.siteDomain}`;
|
||
|
||
// Most of this file simply takes the data already defined in ./config.js and translates it into objects that are
|
||
// compatible with next-seo's props:
|
||
// https://github.com/garmeeh/next-seo#default-seo-configuration
|
||
export const defaultSeo: DefaultSeoProps = {
|
||
defaultTitle: `${config.siteName} – ${config.shortDescription}`,
|
||
titleTemplate: `%s – ${config.siteName}`, // appends `– siteName` to title provided by each page (except home)
|
||
description: config.longDescription,
|
||
openGraph: {
|
||
siteName: config.siteName,
|
||
title: `${config.siteName} – ${config.shortDescription}`,
|
||
locale: config.siteLocale?.replace("-", "_"),
|
||
type: "website",
|
||
images: [
|
||
{
|
||
url: `${baseUrl}${meJpg.src}`,
|
||
alt: `${config.siteName} – ${config.shortDescription}`,
|
||
},
|
||
],
|
||
},
|
||
twitter: {
|
||
handle: `@${config.authorSocial?.twitter}`,
|
||
site: `@${config.authorSocial?.twitter}`,
|
||
cardType: "summary",
|
||
},
|
||
additionalMetaTags: [
|
||
{
|
||
name: "viewport",
|
||
content: "width=device-width, initial-scale=1",
|
||
},
|
||
{
|
||
name: "author",
|
||
content: config.authorName,
|
||
},
|
||
{
|
||
name: "google-site-verification",
|
||
content: config.verifyGoogle,
|
||
},
|
||
{
|
||
name: "msvalidate.01",
|
||
content: config.verifyBing,
|
||
},
|
||
],
|
||
additionalLinkTags: [
|
||
{
|
||
rel: "icon",
|
||
href: faviconIco.src,
|
||
sizes: "any", // https://twitter.com/subzey/status/1417099064949235712
|
||
},
|
||
{
|
||
rel: "icon",
|
||
href: faviconPng.src,
|
||
type: "image/png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
href: appleTouchIconPng.src,
|
||
sizes: `${appleTouchIconPng.width}x${appleTouchIconPng.height}`,
|
||
},
|
||
{
|
||
rel: "manifest",
|
||
href: "/site.webmanifest",
|
||
},
|
||
{
|
||
rel: "alternate",
|
||
href: "/feed.xml",
|
||
type: "application/rss+xml",
|
||
// @ts-ignore
|
||
title: `${config.siteName} (RSS)`,
|
||
},
|
||
{
|
||
rel: "alternate",
|
||
href: "/feed.atom",
|
||
type: "application/atom+xml",
|
||
// @ts-ignore
|
||
title: `${config.siteName} (Atom)`,
|
||
},
|
||
{
|
||
rel: "humans",
|
||
href: "/humans.txt",
|
||
},
|
||
{
|
||
rel: "pgpkey",
|
||
href: "/pubkey.asc",
|
||
type: "application/pgp-keys",
|
||
},
|
||
],
|
||
};
|
||
|
||
// https://github.com/garmeeh/next-seo#social-profile
|
||
export const socialProfileJsonLd: SocialProfileJsonLdProps = {
|
||
type: "Person",
|
||
name: config.authorName,
|
||
url: `${baseUrl}/`,
|
||
sameAs: [
|
||
`${baseUrl}/`,
|
||
`https://github.com/${config.authorSocial?.github}`,
|
||
`https://keybase.io/${config.authorSocial?.keybase}`,
|
||
`https://twitter.com/${config.authorSocial?.twitter}`,
|
||
`https://medium.com/@${config.authorSocial?.medium}`,
|
||
`https://www.linkedin.com/in/${config.authorSocial?.linkedin}/`,
|
||
`https://www.facebook.com/${config.authorSocial?.facebook}`,
|
||
`https://www.instagram.com/${config.authorSocial?.instagram}/`,
|
||
`https://${config.authorSocial?.mastodon}`,
|
||
],
|
||
};
|
||
|
||
// Just the basic items applicable to all notes, extended by pages/notes/[slug].tsx
|
||
// https://github.com/garmeeh/next-seo#article-1
|
||
export const articleJsonLd: Pick<ArticleJsonLdProps, "authorName" | "publisherName" | "publisherLogo"> = {
|
||
authorName: {
|
||
name: config.authorName,
|
||
url: `${baseUrl}/`,
|
||
},
|
||
publisherName: config.siteName,
|
||
publisherLogo: `${baseUrl}${meJpg.src}`,
|
||
};
|