trptk/app/sitemap.ts
2026-02-24 17:14:07 +01:00

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];
}