57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import type { MetadataRoute } from 'next';
|
|
import { i18n } from './dictionaries';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
export default function sitemap(): MetadataRoute.Sitemap {
|
|
const baseUrl = 'https://moygroup.com.tr';
|
|
|
|
// Dynamically scan the app/[lang] folder for pages
|
|
const langDir = path.join(process.cwd(), 'app/[lang]');
|
|
let subfolders: string[] = [];
|
|
|
|
try {
|
|
if (fs.existsSync(langDir)) {
|
|
subfolders = fs.readdirSync(langDir).filter((file) => {
|
|
const filePath = path.join(langDir, file);
|
|
if (fs.statSync(filePath).isDirectory()) {
|
|
// Only include folders that contain a page.tsx file
|
|
return fs.existsSync(path.join(filePath, 'page.tsx'));
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error('Error reading directories for sitemap:', error);
|
|
}
|
|
|
|
// Base page paths: home page ('') + dynamic folders
|
|
const pages = ['', ...subfolders.map((folder) => `/${folder}`)];
|
|
|
|
const sitemapEntries: MetadataRoute.Sitemap = [];
|
|
|
|
for (const page of pages) {
|
|
// Generate language alternates for this page
|
|
const alternatesLanguages: Record<string, string> = {};
|
|
for (const locale of i18n.locales) {
|
|
alternatesLanguages[locale] = `${baseUrl}/${locale}${page}`;
|
|
}
|
|
|
|
// Add entries for all locales, providing localized alternates for each
|
|
for (const locale of i18n.locales) {
|
|
sitemapEntries.push({
|
|
url: `${baseUrl}/${locale}${page}`,
|
|
lastModified: new Date(),
|
|
changeFrequency: page === '' ? 'weekly' : 'monthly',
|
|
priority: page === '' ? 1.0 : 0.8,
|
|
alternates: {
|
|
languages: alternatesLanguages,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
return sitemapEntries;
|
|
}
|
|
|