Guide SEO pour Eleventy
Eleventy (11ty) livre par défaut du HTML brut sans JavaScript côté client. Voici comment configurer les titres, descriptions, URL canoniques, sitemaps et données structurées grâce à la cascade de données.
Langues
1 indice probant sur cette page
- Outil en ligne associéHTTP Status & Redirect Checker
Eleventy produit par défaut du HTML brut sans JavaScript côté client, un excellent point de départ pour l’indexabilité : le contenu figure dans le premier octet et ne nécessite aucun rendu. En contrepartie, Eleventy ne génère aucun balisage SEO. Titres, méta-descriptions, URL canoniques, sitemap et données structurées doivent être implémentés. La cascade de données (_data/site.js → données de répertoire → front matter → eleventyComputed) rend cette architecture évolutive : les valeurs par défaut sont déclarées une fois et les URL canoniques dérivées automatiquement. Les extensions comme eleventy-plugin-seo et @11ty/eleventy-img facilitent le travail sans ajouter de capacité fondamentale. Le langage de gabarit n’a aucune incidence sur le SEO.
En bref — Eleventy transforme à l’avance votre site en fichiers HTML bruts et, contrairement à la plupart des outils JavaScript, n’envoie par défaut aucun JavaScript au navigateur. C’est une configuration particulièrement favorable à Google. En revanche, Eleventy ne crée ni vos balises de titre, ni vos méta-descriptions, ni votre sitemap : vous devez les ajouter vous-même.
Qu’est-ce qu’Eleventy ?
Eleventy — également écrit 11ty — est un générateur de site statique. Vous rédigez le contenu en Markdown et les gabarits dans un langage comme Nunjucks ou Liquid ; Eleventy transforme le tout en fichiers HTML finalisés avant la moindre visite. Une fois ces fichiers hébergés, Google comme les lecteurs reçoivent immédiatement un document HTML complet. Evidence for this claim Eleventy transforms templates and data into static output files during a build. Scope: Eleventy static site generation. Confidence: high · Verified: Eleventy documentation
Eleventy se distingue de la plupart des outils fondés sur JavaScript parce qu’il livre zéro JavaScript au navigateur par défaut. Evidence for this claim Eleventy does not require a client-side JavaScript runtime and ships only the browser JavaScript a developer adds. Scope: Eleventy core output; site code can add JavaScript. Confidence: high · Verified: Eleventy documentation La page reçue par le visiteur est du HTML brut : aucun script n’a besoin de s’exécuter dans le navigateur pour la construire. C’est idéal pour le SEO, car Google n’attend aucune étape de rendu et les pages chargent rapidement.
Pourquoi cela favorise le SEO
- Votre contenu figure dans le HTML brut. Google voit le texte et les liens dès la première récupération, sans dépendre de l’exécution correcte de JavaScript.
- C’est rapide. Du HTML brut sans charge utile de scripts favorise les Core Web Vitals.
- Il y a moins de risques de panne. Moins de pièces mobiles signifie moins de possibilités de voir le contenu disparaître de la recherche.
Le principal piège : Eleventy ne fait pas le SEO à votre place
C’est le point le plus souvent mal compris. Eleventy fournit un HTML propre, mais n’ajoute automatiquement aucun balisage SEO :
- Pas de balise
<title> - Pas de méta-description
- Pas de lien canonique
- Pas de sitemap
- Pas de données structurées
Vous devez tout ajouter, généralement dans un fichier de mise en page partagé qui enveloppe chaque
page : vous l’écrivez une fois et toutes les pages en héritent. Des extensions peuvent faciliter le
travail — eleventy-plugin-seo est la plus connue — mais elles apportent du confort, pas de magie.
L’implémentation reste nécessaire.
Le modèle mental : la cascade de données
La cascade de données permet de réaliser cela sans modifier chaque page à la main. Définissez une seule fois les valeurs par défaut du site dans un fichier global — nom du site, URL de base, image sociale par défaut — et Eleventy les applique partout. Remplacez-les seulement pour les sections ou pages qui l’exigent. Vous pouvez même calculer des valeurs, par exemple construire automatiquement l’URL canonique de chaque page à partir du domaine et de son chemin.
Pour la version technique — cascade complète, code des balises méta et canoniques, comparaison des extensions, sitemaps, optimisation des images et SEO de la pagination — passez à l’onglet Avancé.
En bref — Eleventy produit du HTML brut au moment de la compilation, avec zéro JavaScript côté client par défaut : le contenu est donc présent avant la première requête du robot, ce qui minimise les risques d’indexabilité. Mais Eleventy ne fournit aucun balisage SEO : titre, description, canonique, robots, Open Graph, sitemap et JSON-LD sont à votre charge. La cascade de données (
_data/site.js→ fichiers de données de répertoire → front matter →eleventyComputed) permet de passer à l’échelle : déclarez les valeurs par défaut une fois, puis dérivez les canoniques danseleventyComputed. Les extensions (eleventy-plugin-seo,@11ty/eleventy-img,@quasibit/eleventy-plugin-sitemap) apportent du confort, pas de nouvelles capacités.robots.txtest copié tel quel. Le langage de gabarit n’a aucun effet SEO. La v3 privilégie ESM et fait d’Image Transform la voie recommandée pour des images favorables aux CWV. Surveillez trois cas limites : l’ordre des dépendanceseleventyComputedpeut échouer sans bruit, l’appartenance à une collection ne garantit pas la production d’une URL, et une compilation locale ne prouve pas ce que sert la production — vérifiez directement l’artefact déployé.
Pourquoi Eleventy constitue une excellente base SEO
Eleventy transforme chaque route en HTML statique lors de la compilation et, contrairement à Next.js, Nuxt, Gatsby ou Astro, n’envoie aucun JavaScript au navigateur sauf si vous en ajoutez. Evidence for this claim Eleventy compiles templates to static output and adds no client-side framework runtime by default. Scope: Eleventy core behavior. Confidence: high · Verified: Eleventy documentation Le robot n’attend aucun rendu côté client, aucun budget de rendu n’est consommé et aucun bundle d’hydratation ne pénalise les Core Web Vitals. Des sites Eleventy en production obtiennent régulièrement des scores Lighthouse de 99 à 100 et des pages d’accueil livrant 0 Ko de JavaScript.
La compilation est également rapide, ce qui compte davantage pour le SEO qu’il n’y paraît : des
cycles de déploiement plus courts transmettent plus vite les corrections aux moteurs. Sur un test de
4 000 fichiers Markdown, Eleventy compile en environ 1,93 s, contre 22,9 s pour Astro, 29 s pour
Gatsby et 70,6 s pour Next.js, avec une empreinte node_modules bien moindre — 34 Mo contre 583 Mo
pour Gatsby.
Mais — c’est tout l’objet de cette page — aucun de ces avantages ne fournit le balisage SEO.
Eleventy génère un HTML propre et s’arrête là. Chaque <title>, méta-description, canonique, entrée
de sitemap et bloc JSON-LD doit être implémenté. Son modèle de données permet heureusement de le
faire une fois pour toutes les pages.
La cascade de données : fondation de l’architecture SEO
Le concept essentiel pour faire évoluer le SEO d’Eleventy est la cascade de données, c’est-à-dire l’ordre dans lequel Eleventy résout une valeur, de la priorité la plus faible à la plus élevée : Evidence for this claim Eleventy's data cascade resolves data from multiple sources according to a documented priority order. Scope: Eleventy data cascade. Confidence: high · Verified: Eleventy: Data cascade
- Données globales fournies par Eleventy
- Fichiers de données globaux dans
_data/— par exemple_data/site.jsavectitle,description,urletauthor - Fichiers de données de répertoire — par exemple
blog/blog.11tydata.js, qui attribueog:type: articleà tous les articles - Front matter du gabarit — remplacements propres à une page
eleventyComputed— priorité maximale, pour dériver des valeurs d’autres données
En pratique :
- Déclarez une seule fois les valeurs SEO par défaut dans
_data/site.js. - Remplacez-les au niveau du répertoire pour un type de contenu — tous les articles reçoivent le
type OG article, une section
noindexreçoitnoindex, etc. - Remplacez-les par page dans le front matter lorsqu’une page est particulière.
- Utilisez
eleventyComputedpour les valeurs dérivées, dont l’URL canonique est l’exemple type :
// _data/eleventyComputed.js (or eleventyComputed in a layout data file)
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};Chaque page possède alors une canonique autoréférente correcte sans travail individuel. Voilà le levier offert par la cascade.
Un cas limite mérite un vrai test : les valeurs eleventyComputed peuvent dépendre d’autres valeurs
calculées — par exemple un titre alimentant une description calculée — et Eleventy doit résoudre ce
graphe avant le rendu. Les chaînes simples fonctionnent, mais une valeur qui dépend d’elle-même,
directement ou par l’intermédiaire d’un autre champ, crée une référence circulaire. Les problèmes
d’ordre se manifestent alors silencieusement par une valeur absente ou incorrecte plutôt que par une
erreur explicite. Si plusieurs champs eleventyComputed sont superposés, contrôlez leurs valeurs
exactes dans la sortie rendue ; ne vous contentez pas d’une compilation réussie. Evidence for this claim Computed Data values can derive from other computed values, so dependency ordering and circular references need testing against the rendered output. Scope: Eleventy eleventyComputed resolution. Confidence: high · Verified: Eleventy: Computed Data
Balises méta dans la mise en page de base
L’architecture classique utilise une mise en page de base propriétaire du <head>, que les mises en
page de contenu étendent :
_includes/
layouts/
base.njk ← <head> with all SEO meta tags
post.njk ← extends base, adds BlogPosting schema
_data/
site.js ← sitewide SEO defaultsVous devez au minimum implémenter vous-même :
<title>— unique pour chaque page<meta name="description">— unique pour chaque page<link rel="canonical">— Eleventy ne possède aucune canonique native ; ajoutez-la explicitement<meta name="robots">—noindexpour les brouillons et aperçus, ainsi que les éventuelles pages paginées trop pauvres- Open Graph —
og:title,og:description,og:image,og:url,og:type - Cartes Twitter/X —
twitter:card,twitter:title,twitter:description,twitter:image
Exemple de <head> Nunjucks minimal alimenté par la cascade :
<title>{{ title }} | {{ site.title }}</title>
<meta name="description" content="{{ description or site.description }}">
<link rel="canonical" href="{{ canonical }}">
<meta property="og:title" content="{{ title }}">
<meta property="og:image" content="{{ ogImage or site.defaultImage }}">
<meta name="twitter:card" content="summary_large_image">Comparaison des extensions SEO
Une extension n’est pas indispensable : une mise en page de base manuelle associée à la cascade offre un contrôle complet sans dépendance, solution que beaucoup préfèrent. Deux extensions méritent toutefois d’être connues :
eleventy-plugin-seo(artstorm) — l’extension la plus mûre et la plus utilisée. Un seul shortcode{% seo %}(Liquid) ou{% seo "" %}(Nunjucks) produit titre, description, canonique, robots, Open Graph, carte Twitter et auteur à partir d’un bloc de configuration — titre, description, URL, auteur, compte Twitter et image par défaut. Elle gère aussi les directives robots des pages paginées, le séparateur de titre et un mode minimaliste. Installation :npm install eleventy-plugin-seo.eleventy-plugin-metagen(tannerdolby) — plus granulaire, avec des paramètres de shortcode nommés ; génère charset, viewport, titre, auteur, description, générateur, Open Graph, carte Twitter, canonique et balises CSS/JS.
Règle générale : les extensions apportent du confort, pas des capacités. Tout ce qu’elles font peut être réalisé dans la mise en page de base. Utilisez-en une si vous ne souhaitez pas maintenir le code répétitif.
robots.txt
Eleventy ne génère pas automatiquement robots.txt. Deux approches sont possibles :
1 — Copie statique — la plus simple. Placez un robots.txt dans la source et copiez-le tel quel :
eleventyConfig.addPassthroughCopy("src/robots.txt");2 — Génération par gabarit — pour adapter la sortie à l’environnement : tout bloquer en préproduction et tout autoriser en production.
---
permalink: /robots.txt
eleventyExcludeFromCollections: true
---
User-agent: *
{% if environment == "production" %}
Allow: /
Sitemap: {{ site.url }}/sitemap.xml
{% else %}
Disallow: /
{% endif %}Rappelez-vous la règle universelle : Disallow bloque le crawl, pas l’indexation, et une balise
noindex placée sur une URL interdite au crawl ne sera jamais lue.
Génération du sitemap
Cette fonction n’est pas native non plus. Pour un contrôle maximal, créez manuellement
sitemap.xml.njk avec permalink: /sitemap.xml et eleventyExcludeFromCollections: true, parcourez
collections.all, ignorez les pages exclues et produisez les éléments <loc> et <lastmod> :
---
permalink: /sitemap.xml
eleventyExcludeFromCollections: true
---
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for page in collections.all %}
{% if not page.data.excludeFromSitemap %}
<url>
<loc>{{ site.url }}{{ page.url }}</loc>
<lastmod>{{ page.date | dateToISO }}</lastmod>
</url>
{% endif %}
{% endfor %}
</urlset>Vous pouvez aussi utiliser @quasibit/eleventy-plugin-sitemap — à configurer avec hostname ;
l’extension prend également en charge les liens alternatifs multilingues. Dans tous les cas,
marquez les pages utilitaires avec eleventyExcludeFromCollections: true afin de les exclure.
Soyons précis : parcourir collections.all examine l’appartenance aux collections, pas la sortie
garantie. Un gabarit peut appartenir à une collection sans produire d’URL, le plus souvent parce que
son permalink vaut false ou qu’un fichier de données n’a jamais été destiné à rendre une page.
La présence dans collections.all ne prouve donc pas qu’un élément appartient au sitemap. Comparez
les <loc> rendus aux pages que vous attendez réellement dans le crawl. Evidence for this claim Collection membership does not by itself guarantee that an item emits a URL or belongs in the sitemap. Scope: Eleventy collections and permalink interaction. Confidence: high · Verified: Eleventy: Collections
Optimisation des images pour les Core Web Vitals
Le HTML d’un site statique est rapide, mais des images non optimisées dégraderont tout de même LCP
et CLS. La solution est @11ty/eleventy-img ; en v3, la voie recommandée est l’extension
Image Transform, qui post-traite automatiquement chaque balise <img> du HTML compilé, sans
shortcode individuel :
const { eleventyImageTransformPlugin } = require("@11ty/eleventy-img");
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
formats: ["avif", "webp", "jpeg"],
defaultAttributes: {
loading: "lazy",
decoding: "async",
},
});Avantages SEO :
- Ajout automatique de
widthetheight→ prévention des décalages de mise en page (CLS) srcsetavec plusieurs largeurs → images adaptatives<picture>avec AVIF, WebP et solution de repli JPEG- Aucun agrandissement
Pour les images principales visibles sans défilement, remplacez le chargement différé afin qu’elles soient chargées immédiatement :
<img src="hero.jpg" loading="eager" fetchpriority="high" eleventy:widths="800,1200">Permaliens et URL propres
Par défaut, Eleventy produit des URL propres avec barre oblique finale : about.njk →
_site/about/index.html → /about/. Remplacez ce comportement dans le front matter :
permalink: "/blog/{{ title | slugify }}/"Options utiles : permalink: false traite un gabarit pour les collections sans l’écrire sur disque,
ce qui convient aux gabarits de données ; dynamicPermalink: false interprète littéralement la
chaîne du permalien. En SEO, restez rigoureux sur la cohérence des barres obliques finales :
mélanger /page et /page/ crée inutilement du contenu dupliqué.
Précision importante : permalink: false supprime entièrement la sortie. Le fichier source est
compilé et peut encore alimenter les collections et données, mais aucune page HTML n’est écrite et
aucune URL ne peut être explorée. La présence d’un fichier dans le répertoire de contenu ne prouve
pas que la page correspondante a été livrée. Si une page manque dans la recherche, vérifiez d’abord
sa présence dans _site avant de conclure à un problème d’indexation plutôt que de permalien. Evidence for this claim A permalink value of false suppresses page output entirely, so a source file's existence is not proof of a crawlable page. Scope: Eleventy permalink output control. Confidence: high · Verified: Eleventy: Permalinks
SEO de la pagination
La pagination d’Eleventy répartit une collection entre plusieurs fichiers de sortie. La première
page est /blog/, puis viennent /blog/1/, /blog/2/, etc., selon le permalien choisi. Chaque page
doit posséder une URL unique et pagination.alias pour exposer ses données. Décisions SEO :
- Canoniques. Deux écoles : faire pointer toutes les pages vers la première — ce qui consolide les signaux mais masque le contenu profond légitime — ou utiliser des canoniques autoréférentes, chaque page désignant sa propre URL. C’est l’approche privilégiée par la documentation actuelle de Google. Je choisis l’autoréférence sauf si les pages profondes n’ont réellement rien à indexer.
rel="prev"/rel="next". Google a confirmé en 2019 ne plus utiliser ces liens comme signaux de classement. Certains les conservent pour aider les robots à comprendre la série ; dans ce cas, alimentez-les avecpagination.href.previousetpagination.href.next.noindexsur les pages pauvres. Si les dernières pages manquent de contenu, ajouteznoindex, via le champnoindexdeeleventy-plugin-seoou manuellement dans le head.
Données structurées et JSON-LD
L’implémentation manuelle est la plus souple : définissez un objet de schéma dans
eleventyComputed ou un fichier de données de répertoire, puis sérialisez-le dans la mise en page.
Pour un site de contenu, utilisez Organization / WebSite à l’échelle du site,
BlogPosting / Article par publication, BreadcrumbList avec un fil d’Ariane et FAQPage dans
les sections FAQ. @quasibit/eleventy-plugin-schema propose un shortcode pour BlogPosting et
WebPage ; il attend des dates ISO 8601, donc enregistrez un filtre de date.
Eleventy v2 contre v3 : changements ayant un effet SEO
La v3, version stable actuelle, privilégie ESM : un fichier de configuration utilisant
require() doit désormais porter l’extension .cjs, ou vous devez définir "type": "module" dans
package.json et employer import. CommonJS reste entièrement pris en charge. Deux gains comptent
pour le SEO :
- Compilations à froid environ 38 % plus rapides sur les sites de plus de 500 pages → déploiements plus rapides et index plus frais.
- Image Transform devient la voie par défaut : le post-traitement déclaratif de chaque
<img>simplifie la livraison d’images adaptatives sans risque pour le CLS.
Vérifier l’artefact de production, pas seulement la compilation locale
Tout ce qui précède vise à corriger la source — cascade, mise en page, extensions — sans prouver
ce qui est réellement livré. Une compilation locale _site ou eleventy --serve ne révèle ni
l’hôte et le chemin de production, ni les redirections et en-têtes injectés, ni les réécritures du
CDN ou du proxy. Confirmez que la version installée d’Eleventy correspond à celle testée, puis
contrôlez directement le site déployé :
- HTML brut — affichez la source de l’URL en ligne, pas seulement
_site/index.html, puis confirmez le titre, la méta-description et la canonique. - Hôte canonique absolu — une canonique construite avec
localhostou avec unsite.urlde préproduction restera silencieusement fausse si la valeur n’est pas remplacée selon l’environnement. - Sitemap XML — récupérez
/sitemap.xml, vérifiez sa résolution, l’hôte de production et les URL attendues ; l’appartenance à une collection ne garantit pas une entrée. - Pages supprimées ou utilitaires — vérifiez que les pages
permalink: falseeteleventyExcludeFromCollections: truesont absentes du site en ligne, pas seulement du build local. - Actifs — assurez-vous que les CSS, JS et images référencés dans le HTML se résolvent sur l’hôte de production ; une confusion entre chemin relatif et absolu passe facilement inaperçue localement.
- Codes d’état et redirections — interrogez directement les URL et confirmez les réponses 200s ; les règles de la plateforme peuvent transformer une page canonique en chaîne de 301 invisible localement.
L’installation d’une extension tierce ne prouve pas davantage la bonne sortie : elle modifie ce qui est généré, pas le traitement propre à l’environnement de déploiement. Faites-en un contrôle à chaque mise en production, pas une configuration ponctuelle. Evidence for this claim Local build output does not by itself prove production hostnames, redirects, headers, or canonical behavior; the deployed artifact needs its own verification pass. Scope: Eleventy production deployment verification. Confidence: medium · Verified: Patrick Stox: Eleventy SEO
Erreurs SEO courantes avec Eleventy
- Supposer qu’Eleventy « gère le SEO » : il gère le HTML, le balisage SEO vous appartient.
- Oublier complètement la canonique, puisqu’il n’en existe aucune par défaut.
- Ne livrer aucun sitemap en le croyant automatique.
- Croire que l’absence de JavaScript compense des images laissées sans optimisation.
- Mélanger les règles de barre oblique finale et créer des URL dupliquées.
- Utiliser
Disallowdansrobots.txtpour désindexer une page — employeznoindex. - Laisser indexables les brouillons et aperçus faute de
noindexsur la section.
Pour situer Eleventy parmi les autres générateurs, consultez le hub des générateurs de sites statiques ; pour comprendre pourquoi la sortie statique réduit les risques de rendu, consultez le hub parent SEO JavaScript.
Résumé par l’IA
Synthèse de la version avancée :
- Eleventy produit du HTML brut sans JavaScript côté client par défaut : le contenu se trouve dans le premier octet, sans rendu. C’est l’architecture d’indexabilité la moins risquée ; les scores Lighthouse de 99–100 et les pages d’accueil à 0 Ko de JS sont courants.
- Eleventy ne génère AUCUN balisage SEO. Titre, description, canonique, robots, Open Graph, sitemap et JSON-LD doivent tous être implémentés.
- La cascade de données permet le passage à l’échelle :
_data/site.jsglobal → fichiers de répertoire → front matter →eleventyComputed. Déclarez les valeurs par défaut une fois et dérivez la canonique aveceleventyComputed(${site.url}${page.url}). - Les balises méta vivent dans une mise en page de base partagée, écrite à la main ou produite
avec
eleventy-plugin-seo— un shortcode{% seo %}pour titre, description, canonique, robots, Open Graph et Twitter. robots.txtest copié tel quel avecaddPassthroughCopy, ou généré par un gabarit selon l’environnement ; il n’est pas automatique.- Sitemap : gabarit Nunjucks parcourant
collections.all, ou@quasibit/eleventy-plugin-sitemap. Excluez les pages utilitaires aveceleventyExcludeFromCollections: true. - Images :
@11ty/eleventy-img; Image Transform en v3 post-traite chaque<img>— ajoute automatiquementwidth/heightcontre le CLS, construitsrcsetet produit AVIF/WebP. Pour les images principales, utilisezloading="eager"etfetchpriority="high". - Pagination : URL unique et
pagination.aliaspour chaque page ; canoniques autoréférentes par défaut ;rel=prev/nextn’est plus un signal de classement. - Le langage de gabarit n’affecte pas le SEO. Choisissez celui que l’équipe maîtrise. La v3
privilégie ESM —
require()exige.cjsou"type":"module"— et Image Transform devient la voie par défaut. - Les extensions ajoutent du confort, pas des capacités : la mise en page manuelle peut tout faire.
- Trois cas limites doivent être testés : des valeurs
eleventyComputedsuperposées peuvent échouer silencieusement si leur ordre casse ;collections.allne garantit pas qu’une URL soit produite — vérifiezpermalink: false; et un build_sitelocal ne prouve rien sur la production. Contrôlez sur le site déployé l’hôte canonique, le sitemap, les pages supprimées, les actifs et les codes d’état.
Documentation officielle
Documentation de première main provenant d’Eleventy, des extensions SEO et des moteurs.
Eleventy
- Documentation Eleventy — point de départ.
- Extension Image (
@11ty/eleventy-img) — Image Transform, images adaptatives,width/height. - Permaliens — URL propres,
slugify,permalink: false, barres obliques finales. - Pagination — découpage des collections,
pagination.alias, URL par page. - Performances — tests de vitesse et de sortie sans JavaScript.
- Copie directe — livraison d’un
robots.txtstatique. - Extensions communautaires — index SEO, sitemap et schéma.
- Annonce d’Eleventy v3 — priorité à ESM, compilations plus rapides, Image Transform.
Extensions SEO, sitemap et schéma
- eleventy-plugin-seo (artstorm) — titre, description, canonique, robots, Open Graph, carte Twitter.
- eleventy-plugin-metagen (tannerdolby) — génération granulaire des balises méta.
- @quasibit/eleventy-plugin-sitemap — sitemap avec variantes multilingues.
- @quasibit/eleventy-plugin-schema — JSON-LD (BlogPosting, WebPage).
- Regrouper les URL en double — canoniques et pagination — recommandations qui fondent les décisions ci-dessus.
Citations des sources
Il n’existe aucune déclaration publique d’un représentant de Google ou Bing portant précisément sur Eleventy : les moteurs ne commentent pas chaque générateur statique. Le principe applicable reste que le HTML prérendu est la sortie la moins risquée, exactement ce qu’Eleventy produit.
Google — le HTML prérendu est le plus simple
- John Mueller a souvent rappelé que Google peut rendre JavaScript, mais que servir directement le HTML est plus simple et plus rapide. La formulation varie selon les permanences et discussions de Search Central, et aucune déclaration mentionnant précisément Eleventy n’a été trouvée : je ne reproduis donc aucune citation littérale. La conclusion demeure : la sortie par défaut d’Eleventy correspond au cas « servir simplement le HTML ».
Liste de contrôle SEO pour Eleventy
Vérifications permettant de confirmer que le site Eleventy est réellement configuré pour la recherche, puisque le générateur ne l’a pas fait à votre place :
- Valeurs SEO par défaut déclarées une fois dans
_data/site.js— titre, description,url, auteur et image OG par défaut. - Mise en page de base propriétaire du
<head>, avec<title>, méta-description, Open Graph et cartes Twitter alimentés par la cascade. - Canonique définie sur chaque page — Eleventy n’en possède aucune — idéalement dérivée dans
eleventyComputedà partir desite.url+page.url. - Pages de brouillon, d’aperçu ou de section ne devant pas se classer marquées
noindex, si possible dans le fichier de données du répertoire. - Sitemap généré par un gabarit sur
collections.allou par@quasibit/eleventy-plugin-sitemap, avec pages utilitaires exclues grâce àeleventyExcludeFromCollections: true. -
robots.txtprésent — copie directe ou gabarit —, référençant le sitemap et ne bloquant ni JS/CSS ni les pages à indexer. - Images traitées par
@11ty/eleventy-img— Image Transform en v3 — afin de produirewidth,height,srcsetet formats modernes ; images principales enloading="eager"fetchpriority="high". - Permaliens propres et barres obliques finales cohérentes sur tout le site.
- Chaque page paginée possède une URL unique et une canonique autoréférente, sauf page profonde
réellement pauvre, alors marquée
noindex. - Données structurées —
Organization/WebSiteglobales,BlogPosting/Articlepar article — produites dans la mise en page ou par une extension. - Toute modification de contenu déclenche recompilation et redéploiement ; un site statique ne reflète que sa dernière compilation.
- Site déployé contrôlé directement : HTML brut, hôte canonique,
/sitemap.xml, pages supprimées ou utilitaires, chemins d’actifs et codes d’état, pas seulement_sitelocal.
Le cadre données → gabarit → artefact
Les problèmes SEO d’Eleventy apparaissent généralement à l’une de ces trois étapes :
- Données : le front matter et la cascade définissent titres, descriptions, canoniques, langue, état de publication et valeurs structurées.
- Gabarit : les mises en page transforment ces données en balisage head et liens cohérents.
- Artefact : le HTML
_site, le sitemap et le fichier robots générés sont reçus par les robots.
Diagnostiquez une mauvaise valeur dans cet ordre, mais validez l’artefact compilé avant publication. Un champ de front matter correct ne sert à rien si la mise en page ne le rend pas ou si une collection publie encore une route de brouillon.
SEO Eleventy — aide-mémoire
Qui génère quoi ?
| Élément SEO | Natif dans Eleventy ? | Comment l’obtenir |
|---|---|---|
| HTML propre, zéro JS | Oui (par défaut) | Rien à faire |
<title> / méta-description | Non | Mise en page de base + cascade |
| Canonique | Non | eleventyComputed : ${site.url}${page.url} |
Méta robots / noindex | Non | Front matter / données du répertoire |
| Open Graph / carte Twitter | Non | Mise en page de base ou eleventy-plugin-seo |
robots.txt | Non | addPassthroughCopy ou gabarit |
| Sitemap | Non | Gabarit sur collections.all ou @quasibit/...sitemap |
| Images adaptatives | Extension | @11ty/eleventy-img — Image Transform v3 |
| JSON-LD | Non | Mise en page / @quasibit/...schema |
Cascade de données — priorité faible → élevée
- Données globales d’Eleventy
- Fichiers globaux
_data/(site.js) - Fichiers de données de répertoire (
blog.11tydata.js) - Front matter du gabarit
eleventyComputed— dérivez ici la canonique
Sélection d’extensions
eleventy-plugin-seo(artstorm) — principale extension de balises méta ; shortcode{% seo %}.eleventy-plugin-metagen— balises méta granulaires.@quasibit/eleventy-plugin-sitemap— sitemap et variantes multilingues.@quasibit/eleventy-plugin-schema— JSON-LD.@11ty/eleventy-img— images.
À retenir
- Langage de gabarit — Nunjucks, Liquid, Markdown, WebC, HTML ou JS — : aucune différence SEO ; choisissez selon vos habitudes.
- La v3 privilégie ESM : avec
require(), renommez la configuration en.cjsou définissez"type": "module". - Excluez les pages utilitaires avec
eleventyExcludeFromCollections: true. - Pagination : canoniques autoréférentes par défaut ;
rel=prev/nextn’est plus un signal. - Extensions = confort, pas capacité.
Préparer un site Eleventy adapté au SEO
Point de départ : créez le fichier de données global et le <head> de la mise en page de base afin
que chaque page hérite des bonnes balises méta par la cascade.
macOS / Linux
# In your Eleventy project root
mkdir -p src/_data src/_includes/layouts
cat > src/_data/site.js <<'EOF'
module.exports = {
title: "Your Site",
description: "Your default site description.",
url: "https://example.com",
author: "Your Name",
};
EOF
# Derive a self-referencing canonical for every page via the data cascade
cat > src/_data/eleventyComputed.js <<'EOF'
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};
EOFWindows (PowerShell)
# In your Eleventy project root
New-Item -ItemType Directory -Force -Path src\_data, src\_includes\layouts | Out-Null
@'
module.exports = {
title: "Your Site",
description: "Your default site description.",
url: "https://example.com",
author: "Your Name",
};
'@ | Set-Content src\_data\site.js
@'
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};
'@ | Set-Content src\_data\eleventyComputed.jsConfirmer que le HTML compilé contient le balisage SEO
Après compilation, le contenu et les balises méta doivent figurer dans le HTML brut, sans exiger JavaScript. Contrôlez directement le répertoire de sortie.
macOS / Linux
# Build, then grep the output for the tags Eleventy does NOT add for you
npx @11ty/eleventy
grep -o '<link rel="canonical"[^>]*>' _site/index.html
grep -o '<title>[^<]*</title>' _site/index.html
# Confirm robots.txt and sitemap.xml actually shipped
ls -l _site/robots.txt _site/sitemap.xmlWindows (PowerShell)
npx @11ty/eleventy
Select-String -Path _site\index.html -Pattern '<link rel="canonical"'
Select-String -Path _site\index.html -Pattern '<title>'
Get-Item _site\robots.txt, _site\sitemap.xmlSi grep ou Select-String ne trouve rien, le balisage est absent : Eleventy ne l’ajoutera pas seul.
Outils pour le SEO d’Eleventy
eleventy-plugin-seo(artstorm) — principale extension de balises méta : titre, description, canonique, robots, Open Graph et carte Twitter depuis un shortcode{% seo %}.eleventy-plugin-metagen(tannerdolby) — génération paramétrée et granulaire pour un contrôle fin.@11ty/eleventy-img— optimisation des images ; Image Transform v3 ajoutewidth/height, construitsrcsetet produit AVIF/WebP.@quasibit/eleventy-plugin-sitemap— sitemap avec liens alternatifs multilingues.@quasibit/eleventy-plugin-schema— JSON-LD (BlogPosting,WebPage).@11ty/eleventy-plugin-rss— flux RSS/Atom, mis à jour pour la v3.- Lighthouse / PageSpeed Insights — vérification des Core Web Vitals que la sortie statique devrait favoriser.
- Inspection de l’URL dans Google Search Console — confirmation que le HTML rendu correspond au HTML compilé et que les canoniques se résolvent.
- Screaming Frog / Ahrefs Site Audit — crawl du site compilé pour repérer titres ou canoniques absents, doublons de barres obliques et fichiers de sortie orphelins.
Anti-modèles SEO avec Eleventy
Voici des erreurs concrètes observées sur des sites Eleventy. Toutes viennent de l’idée que la sortie HTML propre constitue un travail SEO terminé, alors qu’elle n’en est que le point de départ.
Supposer qu’Eleventy « gère le SEO »
L’erreur : publier un site en se fiant à la sortie sans JavaScript et aux scores Lighthouse de 99–100, sans ajouter titre, méta-description ni canonique.
Pourquoi c’est faux : Eleventy ne gère que le rendu. Un HTML rapide et explorable sans balise
<title> ne se classera pas pour une requête précise ; Google a besoin des signaux sur la page,
qu’Eleventy ne génère pas.
À faire : intégrez les balises méta SEO à la mise en page de base dès le premier jour, avant de rédiger une page. Chaque page doit hériter automatiquement du titre, de la description et de la canonique par la cascade.
Oublier entièrement la canonique
L’erreur : omettre <link rel="canonical"> de la mise en page en la croyant automatique.
Pourquoi c’est faux : Eleventy ne fournit aucune canonique. Sans elle, Google doit deviner l’URL
préférée, surtout avec variantes de barre oblique, paramètres ?utm_ et pages paginées.
À faire : dérivez-la une fois dans eleventyComputed —
canonical: (data) => `${data.site.url}${data.page.url}` — afin que chaque page reçoive sans
effort individuel une canonique autoréférente correcte.
Publier sans sitemap
L’erreur : supposer qu’un sitemap est généré avec les fichiers HTML.
Pourquoi c’est faux : ce n’est pas le cas. L’absence de sitemap ne casse pas le crawl d’un petit site, mais ralentit la découverte du contenu nouveau ou mis à jour dès que les pages se multiplient.
À faire : ajoutez un gabarit sitemap.xml.njk parcourant collections.all, ou installez
@quasibit/eleventy-plugin-sitemap. Marquez les pages utilitaires avec
eleventyExcludeFromCollections: true pour les exclure.
Laisser des images non optimisées annuler l’avantage de vitesse
L’erreur : placer directement des JPEG/PNG bruts dans les gabarits parce que l’absence de JS rend déjà le site rapide.
Pourquoi c’est faux : une page sans JS contenant une image principale de 4 Mo échoue toujours
sur LCP et CLS. L’absence de JS ne corrige ni le poids ni les attributs width/height manquants.
À faire : traitez les images avec @11ty/eleventy-img — Image Transform en v3 — qui ajoute
width/height, construit srcset et produit AVIF/WebP. Forcez les images principales en
loading="eager" fetchpriority="high" pour éviter qu’un chargement différé ne les sorte de la fenêtre LCP.
Barres obliques finales incohérentes
L’erreur : créer des liens vers /about dans certains gabarits et /about/ dans d’autres, ou
masquer la coexistence avec une redirection.
Pourquoi c’est faux : Eleventy produit par défaut /about/, répertoire contenant index.html.
Des liens internes mixtes répartissent l’autorité et le budget de crawl entre deux URL au contenu
identique : ce doublon vient de votre implémentation, pas d’Eleventy.
À faire : choisissez une forme — la barre finale par défaut est la plus simple — et imposez-la
dans tous les liens internes et remplacements permalink. Contrôlez par crawl ; mon
vérificateur de redirections révélera les chaînes de 301s qui masquent
une incohérence au lieu de la corriger à la source.
Employer Disallow pour tenter de désindexer une page
L’erreur : ajouter une règle Disallow dans robots.txt pour supprimer une page déjà indexée.
Pourquoi c’est faux : Disallow bloque le crawl, pas l’indexation. Si la page est déjà
indexée, Google ne pourra plus voir une balise noindex ajoutée ensuite ; l’URL peut rester dans
l’index sans extrait.
À faire : ajoutez <meta name="robots" content="noindex"> à la page, via le front matter ou les
données du répertoire, puis laissez Google l’explorer assez longtemps pour lire la balise. Réservez
Disallow au contenu qui ne doit jamais être exploré.
Testez vos connaissances : SEO Eleventy
Cinq questions rapides sur l’optimisation d’un site Eleventy (11ty) pour la recherche. Choisissez une réponse à chaque question, puis vérifiez-la.
Ressources qui méritent votre temps
Mes articles connexes
- SEO JavaScript : guide complet — rendu, parité du DOM et raisons pour lesquelles la sortie statique ou prérendue d’Eleventy se situe à l’extrémité la moins risquée.
- Guide du débutant en SEO technique — place de l’architecture de rendu et de la configuration sur la page dans l’ensemble du sujet.
Mes conférences
- Fonctionnement de la recherche (SlideShare) — mon explication du crawl, du rendu, de l’indexation et du classement. Mon avertissement permanent s’applique : “This is my understanding of systems… not going to be 100% complete or accurate.” (traduction) : « C’est ma compréhension des systèmes ; elle ne sera ni exhaustive ni exacte à 100 %. »
Dans le secteur
- Documentation Eleventy — source primaire de ce guide.
- Extension Image d’Eleventy — voie Image Transform v3 vers des images adaptatives sans risque pour le CLS.
- eleventy-plugin-seo (artstorm) — README et référence de configuration de la principale extension de balises méta.
- @quasibit/eleventy-plugin-sitemap — génération de sitemap avec variantes multilingues.
- Créer un sitemap pour un site Eleventy (DEV.to) — procédure claire pour le gabarit manuel
collections.all. - Ajouter robots.txt à un site Eleventy (Mike Fallows) — copie directe ou génération selon l’environnement.
- Ajouter des données structurées à un blog Eleventy (Maxi Vanov) — modèles JSON-LD manuels au-delà de BlogPosting.
Journal des modifications
Mis à jour le 21 août 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.
Mis à jour le 17 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.