SEO : comble les régressions de la migration Astro → SvelteKit

- composant Seo.svelte partagé : canonical, Open Graph complet
  (type, url, title, description, image, locale fr_FR, site_name)
  et Twitter Cards sur toutes les pages
- branché sur l'accueil, /outils, /quiz, /contribuer et les fiches
  outils (les meta OG en dur des fiches sont remplacés par le
  composant, JSON-LD conservé)
- script prebuild gen-sitemap.mjs : régénère static/sitemap.xml
  (59 URLs, slugs relus depuis content/outils/) — remplace le
  sitemap qu'apportait @astrojs/sitemap
- robots.txt référence le sitemap en URL absolue
This commit is contained in:
sucupira
2026-07-21 13:50:03 -04:00
parent 3e60f48c5e
commit 848e33d198
11 changed files with 405 additions and 21 deletions
+47
View File
@@ -0,0 +1,47 @@
// Génère static/sitemap.xml au build (script `prebuild`) — remplace le
// sitemap qu'apportait @astrojs/sitemap à l'ère Astro. Zéro dépendance :
// les slugs sont relus depuis les frontmatters de content/outils/.
import { readdirSync, readFileSync, writeFileSync } from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
const SITE_URL = 'https://chatcontrol.o-k-i.net'
const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
const OUTILS = path.resolve(ROOT, '..', 'content', 'outils')
// les valeurs du frontmatter sont encodées en JSON (cf. tools.server.ts)
function slugOf(file) {
const raw = readFileSync(path.join(OUTILS, file), 'utf8')
const m = raw.match(/^slug:\s*("(?:[^"\\]|\\.)*")/m)
return m ? JSON.parse(m[1]) : file.replace(/\.md$/, '')
}
const slugs = readdirSync(OUTILS)
.filter((f) => f.endsWith('.md'))
.map(slugOf)
.sort((a, b) => a.localeCompare(b, 'fr'))
const lastmod = new Date().toISOString().slice(0, 10)
const entry = (loc, priority) => ` <url>
<loc>${SITE_URL}${loc}</loc>
<lastmod>${lastmod}</lastmod>
<priority>${priority}</priority>
</url>`
const urls = [
entry('/', '1.0'),
entry('/outils/', '0.8'),
...slugs.map((slug) => entry(`/outils/${slug}/`, '0.6')),
entry('/quiz/', '0.5'),
entry('/contribuer/', '0.5')
]
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${urls.join('\n')}
</urlset>
`
writeFileSync(path.join(ROOT, 'static', 'sitemap.xml'), xml)
console.log(`sitemap.xml : ${urls.length} URLs (lastmod ${lastmod})`)