Sanity kit

Utils

Utility functions for metadata resolution, redirects, and sitemap generation

Utils

Metadata Resolution

Generate comprehensive Next.js metadata from Sanity content, including SEO tags, Open Graph images, and internationalization support.

// In your page or layout
import {resolveSanityMetadata} from "./lib/sanity";
import {loadPage} from "./lib/sanity/queries";

export async function generateMetadata(
  {params}: {params: Promise<{slug: string; locale: string}>},
  parentPromise: Promise<ResolvedMetadata>,
) {
  const parent = await parentPromise;
  const {slug, locale} = await params;

  const data = await loadPage({slug, locale});

  if (!data) return {};

  return resolveSanityMetadata({
    parent,
    title: data.title,
    seo: data.seo,
    pathname: data.pathname,
    locale,
    translations: data.translations,
  });
}

ResolveSanityMetadata Props

PropTypeDescription
parentResolvedMetadataParent metadata from Next.js
titlestring (optional)Page title
seoobject (optional)SEO configuration object
pathnamestring|object (optional)Page pathname or slug object
localestring (optional)Current locale
translationsarray (optional)Array of translation objects for hreflang

Redirects

Handle dynamic redirects managed through Sanity CMS. The redirectIfNeeded utility from initSanity provides a streamlined approach:

// middleware.ts
import {NextRequest} from "next/server";
import {redirectIfNeeded} from "./lib/sanity";

export async function middleware(request: NextRequest) {
  // This handles the redirect logic automatically
  await redirectIfNeeded(request);
}

Sitemap Generation

Generate XML sitemaps from your Sanity content. The sitemap utilities automatically find all documents that have a pathname.current field and are marked as indexable.

Single Language

// app/sitemap.ts
import {generateSanitySitemap} from "./lib/sanity";

export default function Sitemap() {
  return generateSanitySitemap();
}

Multi-language

// app/sitemap.ts
import {generateSanityI18nSitemap} from "./lib/sanity";

export default function Sitemap() {
  return generateSanityI18nSitemap();
}

On this page