summaryrefslogtreecommitdiff
path: root/src/components/common/Metadata.astro
blob: a4c573ebf66a30c95565e674c4505c9b7619272a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
---
import merge from 'lodash.merge';
import { AstroSeo } from '@astrolib/seo';

import type { Props as AstroSeoProps } from '@astrolib/seo';

import { SITE, METADATA, I18N } from 'astrowind:config';
import type { MetaData } from '~/types';
import { getCanonical } from '~/utils/permalinks';

import { adaptOpenGraphImages } from '~/utils/images';

export interface Props extends MetaData {
  dontUseTitleTemplate?: boolean;
}

const {
  title,
  ignoreTitleTemplate = false,
  canonical = String(getCanonical(String(Astro.url.pathname))),
  robots = {},
  description,
  openGraph = {},
  twitter = {},
} = Astro.props;

const seoProps: AstroSeoProps = merge(
  {
    title: '',
    titleTemplate: '%s',
    canonical: canonical,
    noindex: true,
    nofollow: true,
    description: undefined,
    openGraph: {
      url: canonical,
      site_name: SITE?.name,
      images: [],
      locale: I18N?.language || 'en',
      type: 'website',
    },
    twitter: {
      cardType: openGraph?.images?.length ? 'summary_large_image' : 'summary',
    },
  },
  {
    title: METADATA?.title?.default,
    titleTemplate: METADATA?.title?.template,
    noindex: typeof METADATA?.robots?.index !== 'undefined' ? !METADATA.robots.index : undefined,
    nofollow: typeof METADATA?.robots?.follow !== 'undefined' ? !METADATA.robots.follow : undefined,
    description: METADATA?.description,
    openGraph: METADATA?.openGraph,
    twitter: METADATA?.twitter,
  },
  {
    title: title,
    titleTemplate: ignoreTitleTemplate ? '%s' : undefined,
    canonical: canonical,
    noindex: typeof robots?.index !== 'undefined' ? !robots.index : undefined,
    nofollow: typeof robots?.follow !== 'undefined' ? !robots.follow : undefined,
    description: description,
    openGraph: { url: canonical, ...openGraph },
    twitter: twitter,
  }
);
---

<AstroSeo {...{ ...seoProps, openGraph: await adaptOpenGraphImages(seoProps?.openGraph, Astro.site) }} />