chore: heygermany customer project
This commit is contained in:
94
apps/website/lib/sitemap.ts
Normal file
94
apps/website/lib/sitemap.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
import { DEFAULT_LOCALE, LOCALES } from '../config'
|
||||
|
||||
const PUBLIC_LOCALIZED_PATHS = ['/', '/about', '/jobs/apply'] as const
|
||||
const LEGAL_PATHS = [
|
||||
'/legal/imprint',
|
||||
'/legal/privacy',
|
||||
'/legal/terms-and-conditions',
|
||||
] as const
|
||||
|
||||
type SitemapPage = {
|
||||
path: string
|
||||
sitemap: {
|
||||
lastmod: string
|
||||
changefreq: 'weekly' | 'monthly' | 'yearly'
|
||||
priority: number
|
||||
alternateRefs?: Array<{
|
||||
href: string
|
||||
hreflang: string
|
||||
}>
|
||||
}
|
||||
}
|
||||
|
||||
function normalizePath(pathname: string): string {
|
||||
if (!pathname || pathname === '/') {
|
||||
return '/'
|
||||
}
|
||||
|
||||
return pathname.startsWith('/') ? pathname : `/${pathname}`
|
||||
}
|
||||
|
||||
function getLocalizedPath(locale: string, pathname = '/'): string {
|
||||
const normalizedPath = normalizePath(pathname)
|
||||
|
||||
return normalizedPath === '/'
|
||||
? `/${locale}`
|
||||
: `/${locale}${normalizedPath}`
|
||||
}
|
||||
|
||||
const getLocalizedChangeFrequency = (
|
||||
pathname: (typeof PUBLIC_LOCALIZED_PATHS)[number]
|
||||
): SitemapPage['sitemap']['changefreq'] => {
|
||||
return pathname === '/' ? 'weekly' : 'monthly'
|
||||
}
|
||||
|
||||
function getAlternateRefs(pathname: (typeof PUBLIC_LOCALIZED_PATHS)[number]) {
|
||||
return [
|
||||
...LOCALES.map((locale) => ({
|
||||
href: getLocalizedPath(locale, pathname),
|
||||
hreflang: locale,
|
||||
})),
|
||||
{
|
||||
href: getLocalizedPath(DEFAULT_LOCALE, pathname),
|
||||
hreflang: 'x-default',
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
export function getSitemapPages(lastModified = new Date()): SitemapPage[] {
|
||||
const lastmod = lastModified.toISOString().split('T')[0]!
|
||||
|
||||
const localizedPages: SitemapPage[] = LOCALES.flatMap((locale) =>
|
||||
PUBLIC_LOCALIZED_PATHS.map((pathname) => ({
|
||||
path: getLocalizedPath(locale, pathname),
|
||||
sitemap: {
|
||||
lastmod,
|
||||
changefreq: getLocalizedChangeFrequency(pathname),
|
||||
priority: pathname === '/' ? 1 : 0.8,
|
||||
alternateRefs: getAlternateRefs(pathname),
|
||||
},
|
||||
}))
|
||||
)
|
||||
|
||||
const legalPages: SitemapPage[] = LEGAL_PATHS.map((pathname) => ({
|
||||
path: getLocalizedPath(DEFAULT_LOCALE, pathname),
|
||||
sitemap: {
|
||||
lastmod,
|
||||
changefreq: 'yearly',
|
||||
priority: 0.3,
|
||||
},
|
||||
}))
|
||||
|
||||
return [
|
||||
...localizedPages,
|
||||
...legalPages,
|
||||
{
|
||||
path: '/pilot',
|
||||
sitemap: {
|
||||
lastmod,
|
||||
changefreq: 'weekly',
|
||||
priority: 0.8,
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user