Qu'est-ce que le SEO programmatique ?

Une approche automatisée pour générer des milliers de pages optimisées à grande échelle.

Casses de caractères en plomb dans un atelier d’imprimerie

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é&nbsp;: {page.medianSalary}.</p>
    <p>Compétences les plus demandées&nbsp;: {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.

Lettres en métal dans une casse en bois

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.

Gros plan sur des lettres d’imprimerie encrées

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.