Configuration
Configure @onruntime/next-sitemap for your needs
2 min read
•372 wordsBasic Configuration
The simplest configuration only requires your base URL:
// app/sitemap.ts
import { generateSitemap } from "@onruntime/next-sitemap/app";
export default async function sitemap() {
return generateSitemap({
baseUrl: "https://example.com",
});
}
Advanced Configuration
Custom Routes
Add custom routes or dynamic content:
import { generateSitemap } from "@onruntime/next-sitemap/app";
export default async function sitemap() {
// Fetch dynamic content
const posts = await fetchBlogPosts();
return generateSitemap({
baseUrl: "https://example.com",
additionalPaths: posts.map((post) => ({
url: `/blog/${post.slug}`,
lastModified: post.updatedAt,
changeFrequency: "weekly",
priority: 0.7,
})),
});
}
Excluding Routes
Exclude specific routes from the sitemap:
import { generateSitemap } from "@onruntime/next-sitemap/app";
export default async function sitemap() {
return generateSitemap({
baseUrl: "https://example.com",
exclude: [
"/admin/*",
"/api/*",
"/private/*",
],
});
}
Priority and Change Frequency
Set default values for all pages:
import { generateSitemap } from "@onruntime/next-sitemap/app";
export default async function sitemap() {
return generateSitemap({
baseUrl: "https://example.com",
defaults: {
changeFrequency: "weekly",
priority: 0.7,
},
});
}
robots.txt Configuration
Basic robots.txt
// app/robots.ts
import { generateRobots } from "@onruntime/next-sitemap/app";
export default function robots() {
return generateRobots({
baseUrl: "https://example.com",
});
}
Custom Rules
import { generateRobots } from "@onruntime/next-sitemap/app";
export default function robots() {
return generateRobots({
baseUrl: "https://example.com",
rules: [
{
userAgent: "*",
allow: "/",
disallow: ["/admin/", "/private/"],
},
{
userAgent: "Googlebot",
allow: "/",
},
],
});
}
Internationalization
Multi-language Sitemaps
Support multiple languages with alternates:
import { generateSitemap } from "@onruntime/next-sitemap/app";
const locales = ["en", "fr", "de"];
export default async function sitemap() {
return generateSitemap({
baseUrl: "https://example.com",
locales,
defaultLocale: "en",
});
}
This generates URLs with hreflang alternates:
<url>
<loc>https://example.com/en/about</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/about"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/about"/>
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/about"/>
</url>
Split Sitemaps
For large sites, split your sitemap into multiple files:
// app/sitemap/[id]/route.ts
import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
export async function GET(
request: Request,
{ params }: { params: { id: string } }
) {
const sitemaps = await generateSitemapIndex({
baseUrl: "https://example.com",
sitemapsPerFile: 5000,
});
return new Response(sitemaps[parseInt(params.id)], {
headers: { "Content-Type": "application/xml" },
});
}
Large Sites
Google recommends keeping sitemaps under 50MB and 50,000 URLs. Use split sitemaps for larger sites.
Last updated on 09/12/2026