Pour un client disposant de plus de deux mille articles publiés sur douze ans, la question du maillage interne ne pouvait raisonnablement pas se traiter à la main. Personne n’allait relire deux mille contenus pour vérifier si chacun recevait au moins un lien entrant depuis un autre article du site. Un script WP-CLI, croisé avec une requête SQL directe sur la table wp_posts, a permis d’obtenir la réponse en moins d’une minute d’exécution.
Ce cas illustre une règle générale : au-delà d’une certaine taille, l’audit du maillage interne cesse d’être un exercice de lecture manuelle et devient un problème de script. WP-CLI, l’interface en ligne de commande de WordPress, est l’outil naturel pour ce genre de tâche, car il donne un accès direct et rapide à la base de données sans passer par l’interface d’administration.
Définir précisément ce qu’est une page orpheline
Une page orpheline, au sens du maillage interne, est un contenu publié qui ne reçoit aucun lien entrant depuis un autre contenu du même site. Elle peut être parfaitement accessible via le sitemap et l’archive de sa catégorie, mais un visiteur qui navigue de lien en lien depuis la page d’accueil n’a statistiquement aucune chance de tomber dessus. C’est un problème réel de découvrabilité, indépendant de la question de l’indexation par les moteurs de recherche.
Extraire les liens internes existants

La première étape consiste à extraire, pour chaque article publié, la liste des URL internes présentes dans son contenu. WP-CLI permet d’itérer sur les contenus via wp post list, en combinant sortie CSV et traitement dans un script shell ou PHP :
wp post list --post_type=post --post_status=publish \
--field=ID --format=csv > ids-articles.csv
Le script d’analyse proprement dit, exécuté via wp eval-file, parcourt ensuite chaque contenu pour en extraire les liens internes avec une expression régulière simple, et construit une table de correspondance entre article source et articles cibles :
<?php
$ids = array_map( 'intval', file( 'ids-articles.csv', FILE_IGNORE_NEW_LINES ) );
$cibles = array();
foreach ( $ids as $id ) {
$contenu = get_post_field( 'post_content', $id );
preg_match_all(
'/href="https:\/\/exemple\.fr\/([^"#]+)\/"/',
$contenu,
$matches
);
foreach ( $matches[1] as $slug ) {
$cibles[ $slug ] = true;
}
}
$orphelins = array();
foreach ( $ids as $id ) {
$slug = get_post_field( 'post_name', $id );
if ( ! isset( $cibles[ $slug ] ) ) {
$orphelins[] = $id;
}
}
WP_CLI::log( sprintf( '%d pages orphelines détectées.', count( $orphelins ) ) );
foreach ( $orphelins as $id ) {
WP_CLI::log( '- ' . get_permalink( $id ) );
}
Cette approche reste volontairement simple : elle se limite aux liens explicites dans le contenu de l’article, sans tenir compte des liens générés dynamiquement par un bloc Requête ou un widget de contenus liés, qui apportent une forme de maillage complémentaire mais ne remplacent pas un lien éditorial explicite dans le texte.
Croiser avec l’ancienneté et le trafic
Toutes les pages orphelines ne méritent pas la même urgence de correction. Croiser la liste obtenue avec la date de publication et, si disponible, les données d’un outil d’analyse d’audience permet de prioriser : un contenu ancien, jamais lié, mais qui continue de recevoir un trafic de recherche organique régulier est une priorité bien plus forte qu’un contenu ancien sans aucun trafic ni valeur éditoriale résiduelle.
wp post list --post_type=post --post_status=publish \
--orderby=date --order=ASC \
--fields=ID,post_date,post_title --format=table \
--include=$(cat ids-orphelins.csv | tr '\n' ',')
Corriger : où insérer le lien manquant
Une fois la liste établie, la correction reste un travail éditorial : identifier, pour chaque page orpheline, un ou deux articles existants dont le sujet est suffisamment proche pour justifier un ajout de lien naturel dans le texte. Un script peut signaler le problème, il ne peut pas décider seul de la pertinence contextuelle d’un lien, sous peine de produire des insertions artificielles et peu utiles au lecteur.
Planifier un audit récurrent
- Exécuter le script une première fois pour établir une base de référence.
- Corriger les cas prioritaires identifiés par le croisement trafic/ancienneté.
- Reprogrammer le même script tous les trimestres, via une tâche planifiée du serveur, pour repérer les nouvelles pages orphelines créées entre-temps.
Un audit de maillage interne qui ne se refait jamais devient obsolète en quelques mois. Le vrai bénéfice vient de la récurrence, pas de l’audit ponctuel isolé.
En résumé
Un script WP-CLI, appuyé sur une extraction simple des liens internes présents dans le contenu publié, permet d’auditer le maillage interne d’un site de plusieurs milliers d’articles en quelques secondes d’exécution, là où une revue manuelle serait tout simplement impossible à réaliser sérieusement. La détection reste automatisable, mais la correction, elle, demeure un travail éditorial qui nécessite un jugement humain sur la pertinence contextuelle de chaque lien à ajouter.