Comprehensive guide to XML sitemaps: Sitemaps.org schemas, sitemap index splitting, lastmod timestamps, crawl budget optimization, and Search Console validation.
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.outlivo.tech/sitemaps/tools-sitemap.xml</loc>
<lastmod>2026-08-20T12:00:00+00:00</lastmod>
</sitemap>
<sitemap>
<loc>https://www.outlivo.tech/sitemaps/guides-sitemap.xml</loc>
<lastmod>2026-08-20T12:00:00+00:00</lastmod>
</sitemap>
<sitemap>
<loc>https://www.outlivo.tech/sitemaps/categories-sitemap.xml</loc>
<lastmod>2026-08-20T12:00:00+00:00</lastmod>
</sitemap>
</sitemapindex><?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://www.outlivo.tech/tools/qr-generator</loc>
<!-- Multilingual localized language alternates with x-default fallback -->
<xhtml:link rel="alternate" hreflang="en" href="https://www.outlivo.tech/tools/qr-generator"/>
<xhtml:link rel="alternate" hreflang="es" href="https://www.outlivo.tech/es/tools/qr-generator"/>
<xhtml:link rel="alternate" hreflang="de" href="https://www.outlivo.tech/de/tools/qr-generator"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.outlivo.tech/tools/qr-generator"/>
<!-- Image discovery metadata -->
<image:image>
<image:loc>https://www.outlivo.tech/opengraph-image</image:loc>
<image:title>Free Client-Side QR Code Generator</image:title>
<image:caption>Interactive high-density 2D matrix barcode generator</image:caption>
</image:image>
</url>
</urlset>// Automated Dynamic Sitemap Generator in Next.js App Router (src/app/sitemap.ts)
import { MetadataRoute } from 'next';
import { toolsData } from '@/lib/constants/toolsData';
import { guidesData } from '@/lib/constants/guidesData';
import { categoriesList } from '@/lib/constants/categoryData';
const BASE_URL = 'https://www.outlivo.tech';
export default function sitemap(): MetadataRoute.Sitemap {
const now = new Date().toISOString();
// 1. Static Root Routes
const staticRoutes: MetadataRoute.Sitemap = [
{ url: BASE_URL, lastModified: now, changeFrequency: 'daily', priority: 1.0 },
{ url: `${BASE_URL}/guides`, lastModified: now, changeFrequency: 'daily', priority: 0.9 },
{ url: `${BASE_URL}/about`, lastModified: now, changeFrequency: 'monthly', priority: 0.5 },
{ url: `${BASE_URL}/privacy`, lastModified: now, changeFrequency: 'monthly', priority: 0.3 },
];
// 2. Dynamic Tool Pages (all 63 active tools)
const toolRoutes: MetadataRoute.Sitemap = toolsData.map((t) => ({
url: `${BASE_URL}/tools/${t.slug}`,
lastModified: now,
changeFrequency: 'weekly',
priority: 0.8,
}));
// 3. Dynamic Technical Guide Articles
const guideRoutes: MetadataRoute.Sitemap = guidesData.map((g) => ({
url: `${BASE_URL}/guides/${g.slug}`,
lastModified: g.publishedAt,
changeFrequency: 'monthly',
priority: 0.7,
}));
// 4. Dynamic Category Hub Pages
const categoryRoutes: MetadataRoute.Sitemap = categoriesList.map((c) => ({
url: `${BASE_URL}/tools/category/${c.slug}`,
lastModified: now,
changeFrequency: 'weekly',
priority: 0.6,
}));
return [...staticRoutes, ...toolRoutes, ...guideRoutes, ...categoryRoutes];
}Founder and engineer at Outlivo. Building privacy-first, client-side web tools, developer utilities, and technical guides. Published on 2026-08-20.