Qu'est-ce que le SEO programmatique ?
Une approche automatisée pour générer des milliers de pages optimisées à grande échelle.

Le SEO programmatique consiste à construire un template de page, à le relier à un jeu de données structuré et à publier une page pour chaque ligne ou combinaison qui correspond à une recherche réelle. Vous concevez le système une fois, et c’est lui qui produit les pages. Les fondamentaux du SEO restent les mêmes, appliqués à un volume inatteignable à la main.
Un site d’emploi, du tableur à la page en ligne
Prenons un site d’emploi qui veut se positionner sur des recherches comme « emploi data analyst à Lyon ». Le couple métier et ville donne un schéma reproductible, et trois éléments transforment ce schéma en pages.
Le jeu de données
Chaque ligne est une future page, et les colonnes sont ce qui la distinguera de ses voisines. Les chiffres ci-dessous sont inventés pour l’exemple.
| role | city | open_jobs | median_salary | top_skills |
|---|---|---|---|---|
| Data analyst | Lyon | 42 | 44 000 € | SQL, Power BI |
| Data analyst | Nantes | 17 | 41 000 € | SQL, Looker |
| Soudeur | Saint-Nazaire | 63 | 31 000 € | TIG, MIG |
| Soudeur | Cahors | 2 |
Tout cela peut vivre dans une base SQL, un export CSV ou un simple Google Sheet. Le format compte moins que la justesse des données.
Le template
Le template est le plan de la page : une structure fixe avec des emplacements que les données viennent remplir. Voici une version dépouillée en Astro, qui génère un fichier HTML statique par entrée au moment du build.
---
// src/pages/jobs/[role]/[city].astro
import { getJobPages } from "../../../lib/job-pages";
export async function getStaticPaths() {
const pages = await getJobPages();
return pages
.filter((page) => page.openJobs >= 5)
.map((page) => ({
params: { role: page.roleSlug, city: page.citySlug },
props: { page },
}));
}
const { page } = Astro.props;
const heading = `Emploi ${page.role} à ${page.city}`;
const pageTitle = `${heading}, ${page.openJobs} postes ouverts`;
---
<html lang="fr">
<head>
<meta charset="utf-8" />
<title>{pageTitle}</title>
</head>
<body>
<h1>{heading}</h1>
<p>Salaire médian annoncé : {page.medianSalary}.</p>
<p>Compétences les plus demandées : {page.topSkills.join(", ")}.</p>
<ul>
{page.jobs.map((job) => (
<li><a href={job.url}>{job.title}</a></li>
))}
</ul>
<nav aria-label="Villes proches">
{page.nearbyCities.map((near) => (
<a href={`/jobs/${page.roleSlug}/${near.slug}`}>{page.role} à {near.name}</a>
))}
</nav>
</body>
</html>
La ligne .filter() est la plus importante du fichier. Les soudeurs à Cahors n’ont que deux postes ouverts et aucune donnée de salaire : pas de page pour eux. Un projet programmatique se définit autant par les pages qu’il refuse de créer que par celles qu’il publie.
La chaîne de publication
Le dernier élément maintient l’ensemble à jour : quand les données changent, les pages sont régénérées, les offres et les salaires se mettent à jour, le sitemap aussi. Personne ne retouche la page 3 000 à la main. Il en va de même pour un catalogue e-commerce qui suit ses stocks et ses prix.
Ce qui s’automatise et ce qui reste entre vos mains
Les balises title, les meta descriptions, les liens internes et les sitemaps XML peuvent tous être produits à partir des données, ce qui supprime une catégorie entière d’erreurs humaines. Une règle cohérente appliquée à 10 000 pages vaut mieux que 10 000 décisions individuelles.
Le choix des schémas de requêtes vous revient, tout comme le seuil de publication et la relecture d’un échantillon. Aucun script ne vous dira que la page 4 212 frise l’absurde. Après le lancement, la même logique s’étend au contrôle qualité, et vous pouvez automatiser vos audits SEO pour repérer les pages cassées avant vos visiteurs.
Les variables font qu’une page mérite d’être indexée
Un template qui se contente de changer le nom de la ville produit des quasi-doublons, exactement ce que vise la règle de Google sur l’abus de contenu à grande échelle. Générer des pages est permis. Le problème vient des pages sans valeur pour le lecteur, quel que soit l’outil qui les a écrites.
La réponse pratique tient à des variables plus nombreuses et meilleures. Pour Deux.io, j’en ai développé plus de 90 : images, titres, métadonnées, schémas, profils mis en avant, propositions de valeur, articles à la une, liens et maillage interne. Selon la variable, nous avons généré entre 100 et plus de 2 500 variations, et l’outillage comprenait un détecteur de contenu IA et un détecteur de contenu dupliqué.
L’IA reste facultative dans tout cela. Elle aide à rédiger des variations, mais elle n’invente pas les faits qui rendent une page utile : ceux-là viennent de vos données. Mon test est simple. Prenez deux pages voisines, retirez mentalement tout ce qu’apporte le template et regardez ce qui reste. Si c’est précis et différent, vous avez une page. Ces mêmes faits précis sont aussi ce que cherchent les réponses générées par IA lorsqu’elles lisent votre site.
Faire découvrir des milliers de pages
Une page générée que personne ne peut atteindre n’existe pas pour un moteur de recherche. Trois réflexes techniques comptent dès le premier jour.
Chaque page a besoin d’un chemin explorable depuis une autre page, avec de vrais liens <a href> dans le HTML. Les filtres qui ne fonctionnent qu’en JavaScript ne comptent pas.
Les sitemaps XML indiquent aux robots ce qui existe. Un fichier est limité à 50 000 URL ou 50 Mo non compressés, et les gros sites les découpent donc et les référencent dans un index de sitemaps.
Le balisage schema.org, comme JobPosting, Product ou LocalBusiness, décrit le contenu sous une forme lisible par les machines. Il peut rendre une page éligible à certaines fonctionnalités de recherche et n’en garantit aucune. Google a supprimé les résultats enrichis HowTo et réservé les résultats enrichis FAQ aux sites officiels gouvernementaux et de santé en 2023 : ne bâtissez pas votre plan sur ces extraits.
Après le lancement, le rapport d’indexation des pages de la Search Console devient votre instrument principal. Un gros bloc de pages « Explorée, actuellement non indexée » en dit généralement long sur la valeur qui leur est attribuée. Je détaille ce déploiement dans le chapitre sur la mise en production et l’indexation.
Les sites où le modèle fonctionne
| Type de site | Schéma répétitif | Données derrière |
|---|---|---|
| E-commerce | Catégorie et attribut | Catalogue, prix, stocks |
| Annuaire local | Service et ville | Fiches de prestataires, avis |
| Marketplace ou comparateur | Trajet et compagnie, produit et enseigne | Inventaire et prix en direct |
| Médias sportifs ou d’actualité | Joueur, équipe ou match | Flux de statistiques |
| Immobilier | Type de bien et localisation | Annonces |
Une précaution pour l’e-commerce : gardez les variantes de taille et de couleur sur une seule page, sauf si les gens les recherchent séparément. Multiplier les URL n’apporte rien quand la demande n’existe pas.
SEO programmatique et SEO automatisé sont deux métiers différents
Les deux termes se confondent souvent. Le SEO programmatique crée des pages à partir de données structurées. Le SEO automatisé fait tourner des outils sur des pages existantes : mise à jour des métadonnées, suivi des performances, détection d’erreurs. Les sites matures font les deux, le premier pour construire la couverture et le second pour la garder en bonne santé.
Maquettez 20 lignes avant de construire quoi que ce soit
Choisissez un schéma et remplissez 20 lignes d’un tableur à la main. Rédigez ensuite trois des pages obtenues dans un document, dont une issue de votre ligne la plus faible. Si cette page n’aiderait personne, relevez votre seuil de publication ou allez chercher davantage de données, et seulement alors concevez la base de données qui alimentera le vrai projet.