Checklist SEO/GEO

Toutes les optimisations implémentées sur ce site, documentées et vérifiables. Chaque point est un lien vers la source officielle.

SEO Technique 18 items

Meta title & description dynamiques source

Composant SEO.astro avec props typées, title suffixé automatiquement.

Canonical URL absolue source

Chaque page a un <link rel="canonical"> avec URL complète.

Open Graph + Twitter Cards source

og:title, og:description, og:image, og:locale, twitter:card sur toutes les pages.

Sitemap XML automatique source

@astrojs/sitemap génère sitemap-index.xml au build.

Robots.txt complet source

Allow global + crawlers IA explicitement autorisés + URL sitemap.

JSON-LD @graph unifié source

Un seul bloc JSON-LD par page avec WebSite, WebPage, Organization, BreadcrumbList, Article, FAQPage liés par @id.

JSON-LD Article enrichi source

headline, datePublished, dateModified, author, publisher, wordCount, articleSection, keywords, isPartOf, speakable.

JSON-LD BreadcrumbList dans @graph source

Fil d'Ariane structuré fusionné dans le @graph principal (pas de script séparé).

JSON-LD FAQPage source

FAQ structurées injectées automatiquement depuis le frontmatter YAML.

JSON-LD SpeakableSpecification source

Indique aux assistants vocaux et LLMs les zones clés : TLDR, FAQ, titre, description.

Breadcrumbs visuels source

Navigation hiérarchique visible sur toutes les pages sauf l'accueil.

Compression gzip source

Nginx gzip level 6 sur HTML, CSS, JS, JSON, XML, SVG, markdown.

Security headers HSTS source

Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options via Traefik.

Trailing slash redirect 301 source

Middleware Traefik regex — redirige /blog vers /blog/ (sans matcher les fichiers).

Cache immutable pour assets source

Cache-Control: public, immutable, max-age=1y sur /_astro/ (fichiers hashés).

HTML minifié source

compressHTML: true dans astro.config.mjs.

CollectionPage pour le listing blog source

La page /blog/ utilise le type CollectionPage au lieu de WebSite.

WebPage pour les pages internes source

Les pages internes utilisent WebPage avec isPartOf lié au WebSite.

SEO Contenu 8 items

Content Collections typées Zod source

Schema avec title, description, date, modified, author, tags, faq, tldr, canonical, related.

Headers en format question (H2) source

Chaque H2 est une question que les utilisateurs poseraient — optimise featured snippets.

TLDR en tête d'article source

Résumé direct de 1-2 phrases — correspond aux 200 premiers mots recommandés pour le GEO.

FAQ structurées source

Questions/réponses dans le frontmatter, rendues en HTML <details> + schema FAQPage.

Données chiffrées source

Statistiques, benchmarks et pourcentages dans chaque section — renforce la crédibilité.

Timestamps de mise à jour source

Champ modified visible en haut d'article + dateModified en JSON-LD.

Flux RSS avec catégories source

@astrojs/rss avec tags comme catégories + balise <language>fr</language>.

Liens internes (maillage) source

Chaque article lie vers 2-3 articles connexes via le champ related du frontmatter.

GEO (Generative Engine Optimization) 6 items

llms.txt (spec officielle) source

Fichier structuré en markdown à la racine, avec descriptions enrichies et liens vers le contenu.

llms-full.txt source

Contenu intégral du site en markdown pur, généré automatiquement au build.

Versions .md des pages source

Chaque article est disponible en markdown brut via /blog/[slug].md avec X-Robots-Tag: noindex.

Robots.txt autorisant les crawlers IA source

GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot explicitement autorisés.

Structure extractible source

Headers questions, TLDR, FAQ — le format le plus facilement parsable par les LLMs.

Réponse directe en tête source

Le TLDR fournit une réponse complète dans les 200 premiers mots de l'article.

Performance 4 items

Zéro JS par défaut (Islands) source

Astro n'envoie aucun JavaScript sauf pour les composants avec directive client:.

HTML statique (SSG) source

Toutes les pages sont pré-générées au build — temps de réponse < 50ms.

OG images générées au build source

Script prebuild génère og-default.png + une image par article via sharp.

System font stack source

Pas de Google Fonts — utilise system-ui pour un rendu instantané sans requête réseau.

Accessibilité 4 items

HTML sémantique source

<header>, <nav>, <main>, <article>, <footer>, <aside> — structure lisible par les lecteurs d'écran.

Attribut lang="fr" source

Langue de la page déclarée sur <html> — aide les lecteurs d'écran et les moteurs.

Contraste suffisant source

Texte clair sur fond sombre — ratio de contraste > 4.5:1 sur tout le contenu.

Navigation clavier source

Tous les liens et éléments interactifs sont accessibles au clavier.

40
optimisations implémentées

Questions fréquentes

Ce template est-il utilisable pour un vrai projet ?+
Oui, il est conçu comme un point de départ. Forkez le repo, remplacez le contenu, mettez à jour le domaine dans .env, et déployez avec docker compose up -d.
Comment valider les données structurées JSON-LD ?+
Utilisez le Google Rich Results Test (search.google.com/test/rich-results) et le Schema Markup Validator (validator.schema.org). Les deux sont gratuits.
Le llms.txt est-il reconnu par tous les moteurs IA ?+
C'est un standard émergent (llmstxt.org). Il est de plus en plus adopté mais pas encore universel. Son implémentation ne coûte rien et prépare l'avenir.