info-canicule/astro.config.mjs
Florian 0723ee10e3
All checks were successful
Deploy info-canicule / deploy (push) Successful in 1m28s
feat(content): refonte conseils (kits par phénomène), à-propos, mentions, sitemap
- /conseils : cards par phénomène (couleur d'impact + glyphe), bloc registre canicule mis en avant, numéros d'urgence
- /conseils/[slug] : nouvelle route SSR par phénomène — kit imprimable, share natif, cross-link, advice.ts réutilisé
- /conseils/registre-canicule : reskin nouveau design, contenu existant conservé + TL;DR coloré
- /a-propos : reskin + sections "engagement accessibilité" et "à venir"
- /mentions-legales : reskin en cards (contenu inchangé)
- Sitemap : custom serialize avec priority/changefreq par type d'URL, customPages pour les 102 départements + 7 kits (117 URLs au total). Suppression du custom sitemap-departements.xml redondant

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:02:38 +02:00

73 lines
2.8 KiB
JavaScript

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'],
},
},
});