import { defineConfig } from 'astro/config'; import node from '@astrojs/node'; import tailwind from '@astrojs/tailwind'; import sitemap from '@astrojs/sitemap'; import sentry from '@sentry/astro'; import { DEPARTEMENTS } from './src/lib/departements.ts'; import { PHENOMENA } from './src/lib/phenomena.ts'; const sentryDsn = process.env.SENTRY_DSN; const release = process.env.GIT_COMMIT_SHA || 'dev'; const SITE = 'https://info-canicule.nocleus.com'; // URLs dynamiques (SSR) listées explicitement pour le sitemap — sinon @astrojs/sitemap // ne les voit pas (il n'énumère que les routes statiques au build). const deptUrls = DEPARTEMENTS.map((d) => `${SITE}/departement/${d.code}`); const kitUrls = Object.values(PHENOMENA).map((p) => `${SITE}/conseils/${p.slug}`); export default defineConfig({ output: 'server', adapter: node({ mode: 'standalone' }), integrations: [ tailwind({ applyBaseStyles: false }), sitemap({ filter: (page) => !page.includes('/api/'), customPages: [...deptUrls, ...kitUrls], // Priorités SEO selon le type d'URL. // Home > carte dept > conseils par phénomène > conseils index > pages info. serialize(item) { const url = item.url; // Home — priorité max, change toutes les ~15 min côté contenu mais l'URL ne bouge pas. if (url === `${SITE}/` || url === SITE) { return { ...item, priority: 1.0, changefreq: 'hourly' }; } // Pages département (96) — coeur du SEO long-tail, contenu live. if (url.includes('/departement/')) { return { ...item, priority: 0.9, changefreq: 'hourly' }; } // Kits par phénomène — contenu durable, fort potentiel SEO. if (url.includes('/conseils/') && url !== `${SITE}/conseils/` && !url.includes('registre-canicule')) { return { ...item, priority: 0.8, changefreq: 'monthly' }; } // Index conseils + registre canicule — repères durables. if (url.includes('/conseils')) { return { ...item, priority: 0.8, changefreq: 'monthly' }; } // Embed — utile pour intégrations tierces. if (url.includes('/embed')) { return { ...item, priority: 0.5, changefreq: 'monthly' }; } // Pages info (à-propos, mentions, etc.) return { ...item, priority: 0.4, changefreq: 'yearly' }; }, }), ...(sentryDsn ? [ sentry({ dsn: sentryDsn, environment: process.env.NODE_ENV ?? 'production', release, tracesSampleRate: 0.1, sourceMapsUploadOptions: { enabled: false }, }), ] : []), ], server: { host: '0.0.0.0', port: 4321 }, site: SITE, vite: { ssr: { noExternal: ['ioredis'], }, }, });