src/components/BaseHead.astro 2.4 K raw
1
---
2
import type { SiteMeta } from "@/data/siteMeta";
3
import siteConfig from "@/site-config";
4
import "../styles/global.css";
5
import { ViewTransitions } from 'astro:transitions';
6
7
type Props = SiteMeta;
8
9
const { title, description, ogImage, articleDate } = Astro.props;
10
11
const titleSeparator = "•";
12
const siteTitle = `${title} ${titleSeparator} ${siteConfig.title}`;
13
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
14
const socialImageURL = new URL(ogImage ? ogImage : "/social-card.png", Astro.url).href;
15
---
16
17
<meta charset="utf-8" />
18
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no" />
19
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
20
<ViewTransitions />
21
22
<!-- Icons / Favicon -->
23
<link rel="icon" href="/favicon.ico" sizes="any" />
24
<link rel="icon" href="/icon.svg" type="image/svg+xml" />
25
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
26
<link rel="manifest" href="/manifest.webmanifest" />
27
<link rel="canonical" href={canonicalURL} />
28
29
<!-- Primary Meta Tags -->
30
<title>{siteTitle}</title>
31
<meta name="title" content={siteTitle} />
32
<meta name="description" content={description} />
33
<meta name="author" content={siteConfig.author} />
34
35
<!-- Theme Colour -->
36
<meta name="theme-color" content={siteConfig.themeColorLight} />
37
38
<!-- Open Graph / Facebook -->
39
<meta property="og:type" content={articleDate ? "article" : "website"} />
40
<meta property="og:title" content={title} />
41
<meta property="og:description" content={description} />
42
<meta property="og:url" content={canonicalURL} />
43
<meta property="og:site_name" content={siteConfig.title} />
44
<meta property="og:locale" content={siteConfig.ogLocale} />
45
<meta property="og:image" content={socialImageURL} />
46
<meta property="og:image:width" content="1200" />
47
<meta property="og:image:height" content="630" />
48
{
49
	articleDate && (
50
		<>
51
			<meta property="article:author" content={siteConfig.author} />
52
			<meta property="article:published_time" content={articleDate} />
53
		</>
54
	)
55
}
56
57
<!-- Twitter -->
58
<meta property="twitter:card" content="summary_large_image" />
59
<meta property="twitter:url" content={canonicalURL} />
60
<meta property="twitter:title" content={title} />
61
<meta property="twitter:description" content={description} />
62
<meta property="twitter:image" content={socialImageURL} />
63
64
<!-- RSS auto-discovery -->
65
<link rel="alternate" type="application/rss+xml" title={siteConfig.title} href="/rss.xml" />