Add Blog and Project layouts with SEO metadata
This commit is contained in:
73
astro/src/layouts/BlogLayout.astro
Normal file
73
astro/src/layouts/BlogLayout.astro
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
import '@/styles/global.css';
|
||||||
|
import { getSettings } from "@/content/settings/settings";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
settings: BlogLayoutProps;
|
||||||
|
}
|
||||||
|
|
||||||
|
const pageSettings = Astro.props.settings.searchEngine;
|
||||||
|
const settings = await getSettings();
|
||||||
|
---
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<!-- High Priority Metadata -->
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="lanuage" content="en" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<meta name="theme-color" content={settings.website.colors.primary} />
|
||||||
|
|
||||||
|
<!-- High Priority Page Metadata -->
|
||||||
|
<title>{settings.website.titleTemplate.replaceAll("%T", pageSettings.title)}</title>
|
||||||
|
|
||||||
|
<!-- Medium Priority Metadata -->
|
||||||
|
<meta name="msapplication-TileColor" content={settings.website.colors.primary} />
|
||||||
|
<meta name="msapplication-TileImage" content="" />
|
||||||
|
<link rel="sitemap" href="/sitemap/index.xml" />
|
||||||
|
<link rel="alternate" type="application/rss+xml" href="/rss.xml" title="RSS" />
|
||||||
|
<link rel="canonical" href={`${settings.website.domainName}/`} />
|
||||||
|
<meta name="robots" content="index,follow" />
|
||||||
|
<meta name="keywords" content={[].join(',')} />
|
||||||
|
|
||||||
|
<!-- Low Priority Page Metadata -->
|
||||||
|
<meta name="description" content={pageSettings.description} />
|
||||||
|
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<meta property="og:locale" content="en-GB" />
|
||||||
|
<meta property="og:title" content={settings.website.titleTemplate.replaceAll("%T", pageSettings.title)} />
|
||||||
|
<meta property="og:description" content={pageSettings.description} />
|
||||||
|
<meta property="og:image:url" content={pageSettings.thumbnail.url} />
|
||||||
|
<meta property="og:url" content={`${settings.website.domainName}${Astro.url.pathname}`} />
|
||||||
|
<meta property="og:site_name" content={settings.website.applicationName} />
|
||||||
|
<meta property="article:author" content={settings.website.author.name} />
|
||||||
|
<meta property="article:tags" content={[].join(',')} />
|
||||||
|
|
||||||
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
|
<meta name="twitter:title" content={settings.website.titleTemplate.replaceAll("%T", pageSettings.title)} />
|
||||||
|
<meta name="twitter:description" content={pageSettings.description} />
|
||||||
|
<meta name="twitter:image" content={pageSettings.thumbnail.url} />
|
||||||
|
<meta name="twitter:url" content={`${settings.website.domainName}${Astro.url.pathname}`} />
|
||||||
|
<meta name="twitter:site" content={settings.website.twitter.handle} />
|
||||||
|
<meta name="twitter:creator" content={settings.website.twitter.handle} />
|
||||||
|
|
||||||
|
<meta name="pagename" content={pageSettings.title} />
|
||||||
|
<meta name="category" content="webpage" />
|
||||||
|
|
||||||
|
<!-- Low Priority Metadata -->
|
||||||
|
<meta name="copyright" content={settings.website.copyright} />
|
||||||
|
<meta name="author" content={`${settings.website.author.name}, ${settings.website.author.url}`} />
|
||||||
|
<meta name="designer" content={settings.website.designer} />
|
||||||
|
<meta name="owner" content={settings.website.owner} />
|
||||||
|
<meta name="developer" content={settings.website.developer} />
|
||||||
|
<meta name="application-name" content={settings.website.applicationName} />
|
||||||
|
|
||||||
|
<!-- Scripts and Style -->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<slot name="content" />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
73
astro/src/layouts/ProjectLayout.astro
Normal file
73
astro/src/layouts/ProjectLayout.astro
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
import '@/styles/global.css';
|
||||||
|
import { getSettings } from "@/content/settings/settings";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
settings: BlogLayoutProps;
|
||||||
|
}
|
||||||
|
|
||||||
|
const pageSettings = Astro.props.settings.searchEngine;
|
||||||
|
const settings = await getSettings();
|
||||||
|
---
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<!-- High Priority Metadata -->
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="lanuage" content="en" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<meta name="theme-color" content={settings.website.colors.primary} />
|
||||||
|
|
||||||
|
<!-- High Priority Page Metadata -->
|
||||||
|
<title>{settings.website.titleTemplate.replaceAll("%T", pageSettings.title)}</title>
|
||||||
|
|
||||||
|
<!-- Medium Priority Metadata -->
|
||||||
|
<meta name="msapplication-TileColor" content={settings.website.colors.primary} />
|
||||||
|
<meta name="msapplication-TileImage" content="" />
|
||||||
|
<link rel="sitemap" href="/sitemap/index.xml" />
|
||||||
|
<link rel="alternate" type="application/rss+xml" href="/rss.xml" title="RSS" />
|
||||||
|
<link rel="canonical" href={`${settings.website.domainName}/`} />
|
||||||
|
<meta name="robots" content="index,follow" />
|
||||||
|
<meta name="keywords" content={[].join(',')} />
|
||||||
|
|
||||||
|
<!-- Low Priority Page Metadata -->
|
||||||
|
<meta name="description" content={pageSettings.description} />
|
||||||
|
|
||||||
|
<meta property="og:type" content="article" />
|
||||||
|
<meta property="og:locale" content="en-GB" />
|
||||||
|
<meta property="og:title" content={settings.website.titleTemplate.replaceAll("%T", pageSettings.title)} />
|
||||||
|
<meta property="og:description" content={pageSettings.description} />
|
||||||
|
<meta property="og:image:url" content={pageSettings.thumbnail.url} />
|
||||||
|
<meta property="og:url" content={`${settings.website.domainName}${Astro.url.pathname}`} />
|
||||||
|
<meta property="og:site_name" content={settings.website.applicationName} />
|
||||||
|
<meta property="article:author" content={settings.website.author.name} />
|
||||||
|
<meta property="article:tags" content={[].join(',')} />
|
||||||
|
|
||||||
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
|
<meta name="twitter:title" content={settings.website.titleTemplate.replaceAll("%T", pageSettings.title)} />
|
||||||
|
<meta name="twitter:description" content={pageSettings.description} />
|
||||||
|
<meta name="twitter:image" content={pageSettings.thumbnail.url} />
|
||||||
|
<meta name="twitter:url" content={`${settings.website.domainName}${Astro.url.pathname}`} />
|
||||||
|
<meta name="twitter:site" content={settings.website.twitter.handle} />
|
||||||
|
<meta name="twitter:creator" content={settings.website.twitter.handle} />
|
||||||
|
|
||||||
|
<meta name="pagename" content={pageSettings.title} />
|
||||||
|
<meta name="category" content="webpage" />
|
||||||
|
|
||||||
|
<!-- Low Priority Metadata -->
|
||||||
|
<meta name="copyright" content={settings.website.copyright} />
|
||||||
|
<meta name="author" content={`${settings.website.author.name}, ${settings.website.author.url}`} />
|
||||||
|
<meta name="designer" content={settings.website.designer} />
|
||||||
|
<meta name="owner" content={settings.website.owner} />
|
||||||
|
<meta name="developer" content={settings.website.developer} />
|
||||||
|
<meta name="application-name" content={settings.website.applicationName} />
|
||||||
|
|
||||||
|
<!-- Scripts and Style -->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<slot name="content" />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
5
astro/src/types/layouts/webpageLayout.d.ts
vendored
5
astro/src/types/layouts/webpageLayout.d.ts
vendored
@@ -1,3 +1,8 @@
|
|||||||
type WebpageLayoutProps = {
|
type WebpageLayoutProps = {
|
||||||
searchEngine: SearchEngine;
|
searchEngine: SearchEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type BlogLayoutProps = {
|
||||||
|
searchEngine: SearchEngine;
|
||||||
|
tags: string[] | null;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user