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