import { MetadataRoute } from 'next'; import { blogPosts } from '../lib/blog-data'; import { pillarMeta } from '../lib/pillar-data'; import { authors } from '../lib/author-data'; import { industryPages } from '../lib/industry-pages'; import { publishedComparisonPages, publishedGuidePages, } from '../lib/pseo-published-pages'; import { publishedUseCases } from '../lib/growth-pages'; import { useCasePagesDe } from '../lib/growth-pages-de'; export default function sitemap(): MetadataRoute.Sitemap { const baseUrl = 'https://www.qrmaster.net'; // All free tool slugs const freeTools = [ 'url-qr-code', 'vcard-qr-code', 'text-qr-code', 'email-qr-code', 'sms-qr-code', 'wifi-qr-code', 'crypto-qr-code', 'event-qr-code', 'facebook-qr-code', 'instagram-qr-code', 'twitter-qr-code', 'youtube-qr-code', 'whatsapp-qr-code', 'tiktok-qr-code', 'geolocation-qr-code', 'call-qr-code-generator', 'paypal-qr-code', 'zoom-qr-code', 'teams-qr-code', 'google-review-qr-code', 'barcode-generator', ]; // All blog posts // Filter out future posts so Google doesn't see them const blogPages = blogPosts .filter((post) => { const publishDate = post.datePublished ? new Date(post.datePublished) : new Date(post.date); return publishDate <= new Date(); }) .map((post) => ({ url: `${baseUrl}/blog/${post.slug}`, // Use updatedAt if available, otherwise dateModified or datePublished lastModified: post.updatedAt ? new Date(post.updatedAt) : post.dateModified ? new Date(post.dateModified) : new Date(), changeFrequency: 'monthly' as const, priority: 0.8, })); const highPriorityTools: Record = { 'barcode-generator': 0.95, 'google-review-qr-code': 0.9, }; const toolLastModified: Record = { 'barcode-generator': new Date('2026-05-10'), 'vcard-qr-code': new Date('2026-04-27'), 'instagram-qr-code': new Date('2026-04-27'), 'wifi-qr-code': new Date('2026-04-27'), }; const toolPages = freeTools.map((slug) => ({ url: `${baseUrl}/tools/${slug}`, lastModified: toolLastModified[slug] ?? new Date('2026-01-01'), changeFrequency: slug === 'barcode-generator' ? ('weekly' as const) : ('monthly' as const), priority: highPriorityTools[slug] ?? 0.8, })); // Learn hub and pillar pages const learnPages = [ { url: `${baseUrl}/learn`, lastModified: new Date(), changeFrequency: 'weekly' as const, priority: 0.9, }, ...pillarMeta.map((pillar) => ({ url: `${baseUrl}/learn/${pillar.key}`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.8, })), ]; const industryUrls = industryPages.map((industry) => ({ url: `${baseUrl}/qr-code-for/${industry.slug}`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.85, })); const growthUseCasePages = [ { url: `${baseUrl}/use-cases`, lastModified: new Date(), changeFrequency: 'weekly' as const, priority: 0.9, }, { url: `${baseUrl}/qr-code-for`, lastModified: new Date(), changeFrequency: 'weekly' as const, priority: 0.9, }, ...publishedUseCases.map((useCase) => ({ url: `${baseUrl}${useCase.href}`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.8, })), // German pages under /de { url: `${baseUrl}/de/preise`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.8, }, ...Object.values(useCasePagesDe).map((useCase) => ({ url: `${baseUrl}${useCase.href}`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.8, })), { url: `${baseUrl}/qr-code-for-marketing-campaigns`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.85, }, ]; const publishedPseoPages = [ ...publishedComparisonPages.map((page) => ({ url: `${baseUrl}${page.canonicalPath}`, lastModified: new Date('2026-06-22'), changeFrequency: 'monthly' as const, priority: page.intentStage === 'bottom' ? 0.88 : 0.84, })), ...publishedGuidePages.map((page) => ({ url: `${baseUrl}${page.canonicalPath}`, lastModified: new Date('2026-06-22'), changeFrequency: 'monthly' as const, priority: 0.82, })), ]; // Author pages const authorPages = authors.map((author) => ({ url: `${baseUrl}/authors/${author.slug}`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.7, })); return [ { url: baseUrl, lastModified: new Date(), changeFrequency: 'weekly', priority: 1.0, }, { url: `${baseUrl}/newsletter`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.7, }, { url: `${baseUrl}/restaurants`, lastModified: new Date('2026-04-30'), changeFrequency: 'weekly', priority: 0.9, }, { url: `${baseUrl}/qr-code-erstellen`, lastModified: new Date(), changeFrequency: 'weekly', priority: 1.0, }, { url: `${baseUrl}/qr-code-tracking`, lastModified: new Date('2026-05-10'), changeFrequency: 'monthly', priority: 0.9, }, { url: `${baseUrl}/qr-code-analytics`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.9, }, { url: `${baseUrl}/reprint-calculator`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.9, }, { url: `${baseUrl}/dynamic-qr-code-generator`, lastModified: new Date('2026-05-10'), changeFrequency: 'weekly', priority: 0.95, }, { url: `${baseUrl}/dynamic-barcode-generator`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.9, }, { url: `${baseUrl}/bulk-qr-code-generator`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.9, }, { url: `${baseUrl}/custom-qr-code-generator`, lastModified: new Date(), changeFrequency: 'weekly', priority: 0.9, }, { url: `${baseUrl}/pricing`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.8, }, { url: `${baseUrl}/tools`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.9, }, { url: `${baseUrl}/features`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.8, }, { url: `${baseUrl}/faq`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.7, }, { url: `${baseUrl}/blog`, lastModified: new Date(), changeFrequency: 'weekly', priority: 0.8, }, { url: `${baseUrl}/privacy`, lastModified: new Date(), changeFrequency: 'yearly', priority: 0.4, }, { url: `${baseUrl}/contact`, lastModified: new Date(), changeFrequency: 'yearly', priority: 0.5, }, { url: `${baseUrl}/about`, lastModified: new Date(), changeFrequency: 'yearly', priority: 0.6, }, { url: `${baseUrl}/press`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.7, }, { url: `${baseUrl}/testimonials`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.7, }, ...toolPages, ...blogPages, ...learnPages, ...growthUseCasePages, ...publishedPseoPages, ...industryUrls, ...authorPages, ]; }