Structure d'URL et slugs pour un site programmatique
Sur un site généré, l'URL n'est pas un détail cosmétique : c'est la clé primaire publique de chaque page. Une nomenclature mal choisie se paie en redirections, en duplication et en perte de signal des années plus tard.
Les six règles de nommage
- Minuscules uniquement. Les serveurs distinguent parfois la casse, ce qui crée deux URL pour une page.
- Tirets, jamais d'underscores. Le tiret est traité comme un séparateur de mots, l'underscore non.
- Pas d'accents ni de caractères non-ASCII. Techniquement possibles via l'encodage pourcent, mais illisibles dans les logs, les exports et les partages.
- Pas de mots vides.
/blog/comment-faire-un-sitemapplutôt que/blog/comment-est-ce-que-l-on-fait-un-sitemap. - Longueur maîtrisée. Trois à six mots significatifs. Au-delà, la lisibilité et le taux de clic depuis les partages se dégradent.
- Stable. Une URL qui change casse tous les liens entrants — externes comme internes.
Profondeur de répertoire : plate ou hiérarchique ?
| Modèle | Exemple | Avantage | Inconvénient |
|---|---|---|---|
| Plat | /blog/{slug} | Aucune migration si la taxonomie change | Aucun signal de hiérarchie dans l'URL |
| Hiérarchique | /blog/{categorie}/{slug} | Fil d'Ariane naturel, silos lisibles | Toute recatégorisation impose des redirections |
Sur un projet programmatique, le modèle plat est presque toujours le bon choix. La taxonomie d'un lot généré évolue — des sous-thèmes sont fusionnés, d'autres éclatés — et chaque évolution coûterait une vague de redirections. La hiérarchie est alors portée par le maillage interne et par le fil d'Ariane balisé, pas par le chemin d'URL.
Le fil d'Ariane en BreadcrumbList transmet la hiérarchie à Google indépendamment du chemin d'URL. C'est ce qui rend le modèle plat viable sans perte de signal.
Un identifiant unique et stable
Le slug doit être généré une fois, à la création, puis figé — même si le titre de la page évolue ensuite. Un titre est un élément éditorial ; un slug est un identifiant technique. Les confondre revient à changer de clé primaire à chaque relecture.
slug = translitterer(titre_initial)
|> minuscules
|> remplacer(non_alphanumerique, "-")
|> supprimer(mots_vides)
|> tronquer(60)
|> deduplicater() # -2, -3 en cas de collision
La déduplication mérite attention : deux titres différents peuvent produire le même slug après translittération. Sans contrôle d'unicité en base, la seconde page écrase la première ou renvoie une erreur silencieuse.
Quatre pièges spécifiques au programmatique
Les paramètres d'URL
Un filtre en ?tri=prix&page=2 multiplie les URL pour un contenu quasi identique. Soit les combinaisons utiles deviennent des URL propres, soit elles sont neutralisées par un canonical.
Le slash final
/blog/article et /blog/article/ sont deux URL distinctes. Il faut en choisir une et rediriger l'autre en 301, au niveau du serveur, une fois pour toutes.
Les entités homonymes
Deux entités portant le même nom exigent une désambiguïsation dans le slug : /blog/nice-ville et /blog/nice-outil. Le suffixe doit venir de la donnée, pas d'un compteur.
Les dates dans l'URL
Une URL contenant une année vieillit publiquement et impose une migration annuelle. Sur du contenu à durée de vie longue, l'année se met dans le title, jamais dans le slug.
Si la structure doit changer malgré tout
Redirections 301 systématiques, mise à jour des liens internes dans la base (pas seulement en surface), régénération complète des sitemaps, et conservation des anciennes URL dans un sitemap dédié pendant quelques semaines pour accélérer la prise en compte.
Questions fréquentes
Faut-il mettre la catégorie dans l'URL ?
Rarement sur un site programmatique. La taxonomie d'un lot généré évolue, et chaque changement de catégorie imposerait des redirections. Le fil d'Ariane balisé transmet la hiérarchie sans figer le chemin d'URL.
Peut-on changer un slug après publication ?
C'est possible avec une redirection 301, mais chaque changement fait perdre un peu de signal et casse les liens non mis à jour. Mieux vaut figer le slug à la création et laisser le titre évoluer librement.
Les URL courtes se positionnent-elles mieux ?
Il n'existe pas de bonus direct pour la longueur d'URL. En revanche, une URL courte et lisible est mieux partagée et mieux cliquée, ce qui produit un effet indirect.