Concevoir un maillage interne stratégique

Navigation optimisée, liens stratégiques et liens automatisés.

Voies ferrées convergeant vers un grand nœud

Le maillage interne, c’est la partie d’un site programmatique que l’on génère en dernier alors qu’il faudrait la concevoir en premier. Votre template décide, pour toutes les pages à la fois, des URL que Google peut atteindre, de celles qui paraissent importantes et de l’endroit où part le visiteur ensuite. Une mauvaise règle se recopie sur chaque page, une bonne aussi.

Tout au long de ce chapitre, prenons un site d’emploi avec 40 catégories de métiers et 500 villes françaises. Cela donne 20 000 pages possibles du type « Emploi infirmier à Lyon », et personne ne placera jamais ces liens à la main.

Ce que font vraiment les liens sur un site généré

Leur première mission est la découverte. Un sitemap signale à Google qu’une URL existe, mais une page sans lien entrant est orpheline : aucun contexte, aucun chemin pour un robot et très peu de raisons de la traiter en priorité. Sur un gros site, ce sont souvent ces pages-là qui restent des mois au statut « Détectée, actuellement non indexée ».

La deuxième est de répartir le PageRank. Votre page d’accueil, vos guides et vos meilleures pages hub concentrent l’essentiel des backlinks. Les liens internes font descendre cette autorité vers la longue traîne. Si un guide sur les meilleurs employeurs du secteur infirmier obtient des liens de la presse, il doit pointer vers les pages villes qu’il mentionne.

La troisième est de faire avancer les gens. Un visiteur sur « Emploi infirmier à Lyon » qui trouve trop peu d’offres veut voir Villeurbanne juste à côté, ou les postes d’aide-soignant à Lyon. Un SaaS qui publie des pages de cas d’usage suit la même logique vers d’autres cibles : l’essai gratuit, les preuves clients, le tutoriel détaillé. Chaque lien doit mener quelque part où un visiteur choisirait réellement d’aller.

Construisez la hiérarchie avant les liens

Je dessine toujours trois niveaux avant d’écrire la moindre règle de lien. Chacun a un rôle distinct.

Niveau Exemple site d’emploi Volume Rôle
Pilier Emploi infirmier en France 40 Vise la requête large, reçoit des liens de tout ce qui est en dessous
Secondaire Emploi infirmier en Bretagne 40 × 13 régions Regroupe les villes et les liste toutes
Détail Emploi infirmier à Rennes jusqu’à 20 000 Vise la requête précise, porte les vraies offres

Avec cette forme, chaque page ville se trouve à trois clics de l’accueil : accueil, pilier, région, ville. Cela ne tient que si chaque page région liste toutes ses villes, en liens simples. Un widget « top 10 des villes » laisse les 490 autres sur le bord de la route.

Les liens circulent alors dans trois directions. Vers le haut, par le fil d’Ariane. Vers le bas, par les listes des piliers et des régions. Latéralement, entre pages qui partagent un métier ou un lieu : c’est là que les sites programmatiques ont un avantage, puisque la donnée sait déjà ce qui est proche.

Vue aérienne de voies traversant une ville

Les blocs de liens dont chaque template a besoin

Bloc Emplacement Règle tirée des données Exemple d’ancre
Fil d’Ariane Haut de page Catégorie parente, région parente Emploi infirmier en Bretagne
Villes proches Après les offres Même métier, 5 villes les plus proches avec des postes ouverts Emploi infirmier à Vannes
Métiers proches Après les offres Même ville, 5 catégories les plus proches Emploi aide-soignant à Rennes
Lien contextuel Dans l’introduction Un lien vers le guide le plus pertinent le salaire d’un infirmier en Bretagne
Conversion Barre latérale ou fin de page Même lien partout, formulation adaptée au métier publier une offre d’infirmier

Le lien contextuel compte plus qu’on ne le pense. Un lien pris dans une phrase porte davantage de sens qu’un lien dans une liste : écrivez-en au moins un dans le texte éditorial du template, avec une cible choisie à partir des données.

Générez les liens depuis les données, puis stockez-les

Traitez les liens comme de la donnée. Je les calcule dans une table au lieu de les improviser dans le template, parce qu’une table se vérifie, se compare et se restaure. Voici le bloc latéral en PostgreSQL, avec une table pages et une table city_neighbors qui contient les distances :

INSERT INTO page_links (source_id, target_id, block)
SELECT p.id, t.id, 'nearby_cities'
FROM pages p
JOIN LATERAL (
  SELECT target.id
  FROM city_neighbors cn
  JOIN pages target
    ON target.city_id = cn.neighbor_id
   AND target.job_id = p.job_id
  WHERE cn.city_id = p.city_id
    AND target.published
    AND target.open_roles > 0
  ORDER BY cn.distance_km
  LIMIT 5
) t ON true
WHERE p.published;

Les deux filtres de la sous-requête font le travail important. Ne liez jamais une page non publiée, ni une page vide. Une page sans aucune offre ne devrait même pas exister : la politique de Google sur l’abus de contenu à grande échelle vise les pages produites en masse et sans valeur, et votre graphe de liens indique très directement quelles pages vous jugez dignes d’une visite.

Pour voir cette logique en production, le maillage interne faisait partie des 90+ variables du projet Deux.io, aux côtés des titres, des schémas et des articles mis en avant. La structure de la table dépend de votre modèle, que le chapitre sur la base de données détaille.

Variez les ancres, mais gardez-les stables

Des milliers d’ancres identiques vers la même page paraissent mécaniques et décrivent moins bien la cible. Écrivez quelques modèles et attribuez-en un par page source.

Modèle Résultat
Emploi {job} à {city} Emploi infirmier à Vannes
Emploi {job} autour de {city} Emploi infirmier autour de Vannes
Travailler comme {job} à {city} Travailler comme infirmier à Vannes

Choisissez le modèle avec une règle déterministe, par exemple source_id % 3. Avec un tirage aléatoire, chaque build réécrit des milliers d’ancres pour rien, et vous ne saurez plus ce qui a changé quand les positions bougeront.

Ligne ferroviaire traversant une forêt, vue du dessus

Sortez un HTML que les robots peuvent suivre

Google suit les éléments <a> dotés d’un href. Sa documentation sur les liens est courte et mérite une lecture. Rendez ces blocs côté serveur, dans le HTML initial.

<nav aria-label="Villes proches">
  <h2>Emploi infirmier près de Rennes</h2>
  <ul>
    <li><a href="/jobs/nursing/vannes">Emploi infirmier à Vannes</a></li>
    <li><a href="/jobs/nursing/saint-malo">Emploi infirmier autour de Saint-Malo</a></li>
  </ul>
</nav>

Un <span onclick>, un bouton qui charge plus de résultats ou un bloc injecté après une action de l’utilisateur ne remplissent pas ce rôle. Laissez aussi nofollow hors de vos liens internes : il ne sert pas à orienter le PageRank et dit seulement à Google de ne pas se fier à votre propre lien. Les robots qui alimentent les réponses d’IA ont besoin des mêmes chemins en HTML simple, et beaucoup exécutent moins de JavaScript que Googlebot.

Le fil d’Ariane mérite ses liens visibles et son balisage BreadcrumbList, que le chapitre sur les microdonnées détaille.

Auditez le graphe à intervalles réguliers

Comme les liens vivent dans une table, trouver les orphelines tient en une requête :

SELECT p.slug
FROM pages p
LEFT JOIN page_links l ON l.target_id = p.id
WHERE p.published
  AND l.target_id IS NULL;

Comparez ensuite avec la réalité. Crawlez le site depuis l’accueil avec Screaming Frog et confrontez les URL trouvées à votre liste de pages publiées : tout écart signifie que le HTML ne correspond pas à la table. Dans la Search Console, le rapport Liens montre les pages qui reçoivent le plus de liens internes, et cette liste doit ressembler à votre hiérarchie. Le rapport d’indexation des pages indique si les pages détail restent bloquées au stade de la découverte. J’explique comment lancer ces contrôles automatiquement dans le chapitre sur les audits SEO.

Votre prochaine étape : dessinez les trois niveaux de votre site sur une page, écrivez en une phrase la règle derrière chaque bloc de liens, et vérifiez que chaque règle peut s’appuyer sur une colonne que vous avez déjà. Tout bloc qui réclame une colonne manquante passe sur la liste du modèle de données avant la construction du template.