68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
import type { MetadataRoute } from "next";
|
|
import { defineQuery } from "next-sanity";
|
|
import { sanity } from "@/lib/sanity";
|
|
|
|
const SITEMAP_ARTISTS_QUERY = defineQuery(
|
|
`*[_type == "artist" && defined(slug.current)]{ "slug": slug.current, _updatedAt }`,
|
|
);
|
|
|
|
const SITEMAP_RELEASES_QUERY = defineQuery(
|
|
`*[_type == "release" && defined(slug.current)]{ "slug": slug.current, _updatedAt }`,
|
|
);
|
|
|
|
const SITEMAP_COMPOSERS_QUERY = defineQuery(
|
|
`*[_type == "composer" && defined(slug.current)]{ "slug": slug.current, _updatedAt }`,
|
|
);
|
|
|
|
const SITEMAP_WORKS_QUERY = defineQuery(
|
|
`*[_type == "work" && defined(slug.current)]{ "slug": slug.current, _updatedAt }`,
|
|
);
|
|
|
|
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
|
const baseUrl = "https://trptk.com";
|
|
|
|
const [artists, releases, composers, works] = await Promise.all([
|
|
sanity.fetch<{ slug: string; _updatedAt: string }[]>(SITEMAP_ARTISTS_QUERY),
|
|
sanity.fetch<{ slug: string; _updatedAt: string }[]>(SITEMAP_RELEASES_QUERY),
|
|
sanity.fetch<{ slug: string; _updatedAt: string }[]>(SITEMAP_COMPOSERS_QUERY),
|
|
sanity.fetch<{ slug: string; _updatedAt: string }[]>(SITEMAP_WORKS_QUERY),
|
|
]);
|
|
|
|
const staticPages: MetadataRoute.Sitemap = [
|
|
{ url: baseUrl, changeFrequency: "weekly", priority: 1 },
|
|
{ url: `${baseUrl}/artists`, changeFrequency: "weekly", priority: 0.8 },
|
|
{ url: `${baseUrl}/releases`, changeFrequency: "weekly", priority: 0.8 },
|
|
{ url: `${baseUrl}/composers`, changeFrequency: "weekly", priority: 0.8 },
|
|
{ url: `${baseUrl}/concerts`, changeFrequency: "weekly", priority: 0.8 },
|
|
];
|
|
|
|
const artistPages: MetadataRoute.Sitemap = artists.map((a) => ({
|
|
url: `${baseUrl}/artist/${a.slug}`,
|
|
lastModified: a._updatedAt,
|
|
changeFrequency: "monthly",
|
|
priority: 0.7,
|
|
}));
|
|
|
|
const releasePages: MetadataRoute.Sitemap = releases.map((r) => ({
|
|
url: `${baseUrl}/release/${r.slug}`,
|
|
lastModified: r._updatedAt,
|
|
changeFrequency: "monthly",
|
|
priority: 0.7,
|
|
}));
|
|
|
|
const composerPages: MetadataRoute.Sitemap = composers.map((c) => ({
|
|
url: `${baseUrl}/composer/${c.slug}`,
|
|
lastModified: c._updatedAt,
|
|
changeFrequency: "monthly",
|
|
priority: 0.6,
|
|
}));
|
|
|
|
const workPages: MetadataRoute.Sitemap = works.map((w) => ({
|
|
url: `${baseUrl}/work/${w.slug}`,
|
|
lastModified: w._updatedAt,
|
|
changeFrequency: "monthly",
|
|
priority: 0.5,
|
|
}));
|
|
|
|
return [...staticPages, ...artistPages, ...releasePages, ...composerPages, ...workPages];
|
|
}
|