Maestro Base
← Blog

11/06/2026

Rédiger un lien : la convention unique de cette base

Interne en /chemin/ avec slash final, externe en https, ancre descriptive : la convention des liens, validée à la saisie, à la sauvegarde et au push.

Un lien n’est jamais une chaîne libre dans cette base : il suit une convention unique, la même partout — navigation, boutons d’action des blocs typés, liens markdown des articles. Et comme toutes les règles d’ici, elle est vérifiée par du code, pas par de la relecture.

Lien interne : /chemin/ minuscules, slash final

Un lien interne est un chemin racine-relatif, en minuscules, terminé par un slash, qui pointe vers une route réellement publiée : /faq/, /blog/convention-gouvernance/. Un lien vers une page en brouillon ou inexistante est un lien mort, donc un échec d’audit — le site refuse de se construire avec.

Formes refusées (à ne jamais saisir) :

/Blog/Mon-Article      → majuscules interdites
/blog/mon-article      → slash final manquant
blog/mon-article/      → pas racine-relatif (slash initial manquant)
/page-supprimee/       → route non publiée : lien mort

Lien externe : https:// obligatoire

Toute URL externe commence par https://. Les formes http://exemple.com ou www.exemple.com sont refusées à la validation — pas de protocole dégradé, pas d’URL ambiguë.

Les attributs : par règle, ou depuis une liste fermée

On n’écrit jamais rel="noopener" dans le contenu. Les attributs de sécurité sont appliqués par règle au moment du rendu, par trois pipelines qui partagent la même politique : le composant de lien pour les liens structurés, un plugin pour le markdown des articles, et le convertisseur des blocs de texte riche.

Deux attributs peuvent en revanche être demandés explicitement, entre accolades après le lien :

[tribunal qualité](/blog/convention-tribunal-qualite/ "Le détail des audits"){target=_blank data-gtm=gouvernance-vers-tribunal}
  • target=_blank — ouvre dans un nouvel onglet ; rel="noopener" est ajouté automatiquement.
  • data-gtm=mon-slug — pose un marqueur de clic lisible par Google Tag Manager (déclencheur sur l’attribut data-gtm).

La liste est fermée : tout autre attribut — onclick, style, n’importe quoi — est refusé par l’audit. C’est une frontière de sécurité, pas une préférence de style.

Les champs d’un lien structuré

Dans la navigation et les boutons d’action, un lien porte :

  • label — l’ancre, toujours descriptive. « Cliquez ici », « en savoir plus » ou « lire la suite » déclenchent un avertissement SEO : l’ancre doit dire où l’on va, pas qu’il faut cliquer.
  • url — l’adresse, conforme aux règles ci-dessus.
  • title (optionnel) — l’info-bulle. Jamais identique au label : un title qui répète l’ancre est du bruit, il doit préciser ou disparaître.
  • params (optionnel) — une query string sans le ? initial, par exemple utm_source=newsletter, ajoutée automatiquement au rendu.
  • tracking_id (optionnel) — un identifiant de mesure, réservé pour le câblage analytics à venir.

En markdown : libellé, chemin, title

Dans un article, la syntaxe est le lien markdown classique. Un exemple complet et conforme :

Consultez [les mentions légales](/mentions-legales/ "Informations légales du site").

Le libellé décrit la destination, le chemin est publié et se termine par un slash, le title (optionnel) complète sans répéter. Même chose vers l’extérieur : la documentation Astrohttps://, ancre descriptive.

Validé trois fois, corrigé tôt

La convention est vérifiée à trois moments, du plus immédiat au plus solennel :

  1. À la saisie — l’admin Sveltia refuse le format invalide (pattern), et Zod le rejette au build ;
  2. À la sauvegarde — un hook lance l’audit des liens dès qu’un fichier de contenu est enregistré : un lien mort est signalé à la seconde, avec le fichier et l’URL fautive ;
  3. Au push — la CI rejoue tout ; rien d’invalide n’atteint la production.

C’est l’application directe de la philosophie du tribunal qualité, encadrée par les décisions actées dans la gouvernance du projet : la règle est écrite une fois, puis le code la fait respecter — pour les humains comme pour les agents.